Name: series-workflowrwrb8 Phase: Succeeded StartedAt: 2026-09-09 06:05:48 +0000 UTC FinishedAt: 2026-09-09 10:54:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[0] Phase: Succeeded StartedAt: 2026-09-09 06:05:48 +0000 UTC FinishedAt: 2026-09-09 07:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 06:05:48 +0000 UTC FinishedAt: 2026-09-09 07:11:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_MESH", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_MESH", "MAC80211_HWSIM" ], "series_id": "9d9fd6a3-337b-4246-8bb7-4ce19e2d9963" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mesh_fast_tx_cache", "mesh_path_del", "mesh_path_flush_by_nexthop", "mesh_nexthop_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX2Zhc3RfdHhfY2FjaGUmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX2RlbCYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDttZXNoX25leHRob3BfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbWVzaCBwYXRoIGRlbGV0aW9uIChfX21lc2hfcGF0aF9kZWwpIGFuZCBmYXN0IFRYIGNhY2hlIGVudHJ5IGluc2VydGlvbiAobWVzaF9mYXN0X3R4X2NhY2hlKSBpbiBtYWM4MDIxMS4gU3BlY2lmaWNhbGx5LCBpdCBmbGFncyBtZXNoIHBhdGhzIGFzIE1FU0hfUEFUSF9ERUxFVEVEIHByaW9yIHRvIGZsdXNoaW5nIGZhc3QgVFggY2FjaGUgYW5kIGNoZWNrcyB0aGlzIGZsYWcgYmVmb3JlIGluc2VydGluZyBuZXcgY2FjaGUgZW50cmllcyB0byBwcmV2ZW50IGRhbmdsaW5nIG1lc2hfcGF0aCByZWZlcmVuY2VzIGFuZCBzdWJzZXF1ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1Z3MuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gYnkgc2V0dGluZyBNRVNIX1BBVEhfREVMRVRFRCB1bmRlciBzdGF0ZV9sb2NrIHdoZW4gZGVsZXRpbmcgYSBtZXNoIHBhdGggYW5kIGNoZWNraW5nIHRoaXMgZmxhZyBpbiBtZXNoX2Zhc3RfdHhfY2FjaGUgYmVmb3JlIGNhY2hpbmcgZmFzdCBUWCBlbnRyaWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHNpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG1lc2ggbmV0d29ya2luZyBubDgwMjExL2RhdGEtcGF0aCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjJlNDY1YTdiMzMzYjk0OGY3OTcwMjQwM2Q0NzU5NTViNjQ1ZWI2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDc6MTA6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5kZmNjNGYzYTcwODhlIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcbkBAIC01NzcsNiAmIzQzOzU3NywxMiBAQCB2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byB1bmxvY2tfc3RhO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNmNhY2hlLVx1MDAzZXdhbGtfbG9jayk7XG4mIzQzO1x0aWYgKChSRUFEX09OQ0UobXBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkgfHxcbiYjNDM7XHQgICAgKG1wcGF0aCBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XG4mIzQzO1x0XHRrZnJlZShlbnRyeSk7XG4mIzQzO1x0XHRnb3RvIHVubG9ja19jYWNoZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cHJldiA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZjYWNoZS1cdTAwM2VyaHQsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNmVudHJ5LVx1MDAzZXJoYXNoLFxuIFx0XHRcdFx0XHRcdCBmYXN0X3R4X3JodF9wYXJhbXMpO1xuQEAgLTgxMiw2ICYjNDM7ODE4LDkgQEAgc3RhdGljIHZvaWQgX19tZXNoX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuIHtcbiBcdGhsaXN0X2RlbF9yY3UoXHUwMDI2bXBhdGgtXHUwMDNld2Fsa19saXN0KTtcbiBcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2dGJsLVx1MDAzZXJoZWFkLCBcdTAwMjZtcGF0aC1cdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4gXHRpZiAodGJsID09IFx1MDAyNm1wYXRoLVx1MDAzZXNkYXRhLVx1MDAzZXUubWVzaC5tcHBfcGF0aHMpXG4gXHRcdG1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLVx1MDAzZXNkYXRhLCBtcGF0aC1cdTAwM2Vkc3QpO1xuIFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX2Zhc3RfdHhfY2FjaGUmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX2RlbCYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDttZXNoX25leHRob3BfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gYnkgc2V0dGluZyBNRVNIX1BBVEhfREVMRVRFRCB1bmRlciBzdGF0ZV9sb2NrIHdoZW4gZGVsZXRpbmcgYSBtZXNoIHBhdGggYW5kIGNoZWNraW5nIHRoaXMgZmxhZyBpbiBtZXNoX2Zhc3RfdHhfY2FjaGUgYmVmb3JlIGNhY2hpbmcgZmFzdCBUWCBlbnRyaWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHNpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG1lc2ggbmV0d29ya2luZyBubDgwMjExL2RhdGEtcGF0aCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJlNDY1YTdiMzMzYjk0OGY3OTcwMjQwM2Q0NzU5NTViNjQ1ZWI2ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDc6MTA6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMDMxNzFjZjAwODU1Ny4uZGZjYzRmM2E3MDg4ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtNTc3LDYgJiM0Mzs1NzcsMTIgQEAgdm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCWdvdG8gdW5sb2NrX3N0YTsKIAogCXNwaW5fbG9jaygmYW1wO2NhY2hlLSZndDt3YWxrX2xvY2spOwomIzQzOwlpZiAoKFJFQURfT05DRShtcGF0aC0mZ3Q7ZmxhZ3MpICZhbXA7IE1FU0hfUEFUSF9ERUxFVEVEKSB8fAomIzQzOwkgICAgKG1wcGF0aCAmYW1wOyZhbXA7IChSRUFEX09OQ0UobXBwYXRoLSZndDtmbGFncykgJmFtcDsgTUVTSF9QQVRIX0RFTEVURUQpKSkgewomIzQzOwkJa2ZyZWUoZW50cnkpOwomIzQzOwkJZ290byB1bmxvY2tfY2FjaGU7CiYjNDM7CX0KJiM0MzsKIAlwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KCZhbXA7Y2FjaGUtJmd0O3JodCwKIAkJCQkJCSAmYW1wO2VudHJ5LSZndDtyaGFzaCwKIAkJCQkJCSBmYXN0X3R4X3JodF9wYXJhbXMpOwpAQCAtODEyLDYgJiM0Mzs4MTgsOSBAQCBzdGF0aWMgdm9pZCBfX21lc2hfcGF0aF9kZWwoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpCiB7CiAJaGxpc3RfZGVsX3JjdSgmYW1wO21wYXRoLSZndDt3YWxrX2xpc3QpOwogCXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDt0YmwtJmd0O3JoZWFkLCAmYW1wO21wYXRoLSZndDtyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bXBhdGgtJmd0O3N0YXRlX2xvY2spOwomIzQzOwltcGF0aC0mZ3Q7ZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bXBhdGgtJmd0O3N0YXRlX2xvY2spOwogCWlmICh0YmwgPT0gJmFtcDttcGF0aC0mZ3Q7c2RhdGEtJmd0O3UubWVzaC5tcHBfcGF0aHMpCiAJCW1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLSZndDtzZGF0YSwgbXBhdGgtJmd0O2RzdCk7CiAJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUyCgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBEaXZpbmcgaW50byBgbWVzaF9wYXRodGJsLmNgKioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgc3BlY2lmaWNhbGx5IHRvdWNoZXMgYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIE15IGZpcnN0IG1vdmUgaXMgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGdpdCBkaWZmIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gQmV5b25kIGp1c3QgdGhlIGRpZmYsIHRob3VnaCwgSSBuZWVkIHRvIHpvb20gb3V0IGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgZ2VuZXJhbCBmbG93IHRvIHRydWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBLY29uZmlnIHByZXJlcXVpc2l0ZXMuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgY29kZSByZWxpZXMgb24/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuCgpJJiMzOTtsbCBiZSB1c2luZyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgY29tYiB0aHJvdWdoIGJvdGggYG1lc2hfcGF0aHRibC5jYCBhbmQgYEtjb25maWdgLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGZpbmQgcmVsZXZhbnQgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgcGF0Y2gmIzM5O3MgYmVoYXZpb3IuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBtZSAtIEkgYWx3YXlzIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBhc3Nlc3NpbmcgdGhlIGNvZGUgaW4gaXNvbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdFx0aGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTtcbiA1NzE6XHRcbiA1NzI6XHRcdHFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7XG4gNTczOlx0XHRxY1sxXSB8PSBJRUVFODAyMTFfUU9TX0NUTF9NRVNIX0NPTlRST0xfUFJFU0VOVCBcdTAwM2VcdTAwM2UgODtcbiA1NzQ6XHRcbiA1NzU6XHRcdGVudHJ5ID0ga21lbWR1cChcdTAwMjZidWlsZCwgc2l6ZW9mKGJ1aWxkKSwgR0ZQX0FUT01JQyk7XG4gNTc2Olx0XHRpZiAoIWVudHJ5KVxuIDU3NzpcdFx0XHRnb3RvIHVubG9ja19zdGE7XG4gNTc4Olx0XG4gNTc5Olx0XHRzcGluX2xvY2soXHUwMDI2Y2FjaGUtXHUwMDNld2Fsa19sb2NrKTtcbiA1ODA6XHRcdGlmICgoUkVBRF9PTkNFKG1wYXRoLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpIHx8XG4gNTgxOlx0XHQgICAgKG1wcGF0aCBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XG4gNTgyOlx0XHRcdGtmcmVlKGVudHJ5KTtcbiA1ODM6XHRcdFx0Z290byB1bmxvY2tfY2FjaGU7XG4gNTg0Olx0XHR9XG4gNTg1Olx0XG4gNTg2Olx0XHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFx1MDAyNmNhY2hlLVx1MDAzZXJodCxcbiA1ODc6XHRcdFx0XHRcdFx0XHQgXHUwMDI2ZW50cnktXHUwMDNlcmhhc2gsXG4gNTg4Olx0XHRcdFx0XHRcdFx0IGZhc3RfdHhfcmh0X3BhcmFtcyk7XG4gNTg5Olx0XHRpZiAoSVNfRVJSKHByZXYpKSB7XG4gNTkwOlx0XHRcdGtmcmVlKGVudHJ5KTtcbiA1OTE6XHRcdFx0Z290byB1bmxvY2tfY2FjaGU7XG4gNTkyOlx0XHR9XG4gNTkzOlx0XG4gNTk0Olx0XHQvKlxuIDU5NTpcdFx0ICogcmVwbGFjZSBhbnkgcHJldmlvdXMgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUsIGluIGNhc2Ugd2UmIzM5O3JlXG4gNTk2Olx0XHQgKiByZXBsYWNpbmcgaXQgd2l0aCBhIGRpZmZlcmVudCB0eXBlIChlLmcuIG1wYXRoIC1cdTAwM2UgbXBwKVxuIDU5NzpcdFx0ICovXG4gNTk4Olx0XHRpZiAodW5saWtlbHkocHJldikpIHtcbiA1OTk6XHRcdFx0cmhhc2h0YWJsZV9yZXBsYWNlX2Zhc3QoXHUwMDI2Y2FjaGUtXHUwMDNlcmh0LCBcdTAwMjZwcmV2LVx1MDAzZXJoYXNoLFxuIDYwMDpcdFx0XHRcdFx0XHRcdTAwMjZlbnRyeS1cdTAwM2VyaGFzaCwgZmFzdF90eF9yaHRfcGFyYW1zKTtcbiA2MDE6XHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZwcmV2LVx1MDAzZXdhbGtfbGlzdCk7XG4gNjAyOlx0XHRcdGtmcmVlX3JjdShwcmV2LCBmYXN0X3R4LnJjdV9oZWFkKTtcbiA2MDM6XHRcdH1cbiA2MDQ6XHRcbiA2MDU6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNmVudHJ5LVx1MDAzZXdhbGtfbGlzdCwgXHUwMDI2Y2FjaGUtXHUwMDNld2Fsa19oZWFkKTtcbiA2MDY6XHRcbiA2MDc6XHR1bmxvY2tfY2FjaGU6XG4gNjA4Olx0XHRzcGluX3VubG9jayhcdTAwMjZjYWNoZS1cdTAwM2V3YWxrX2xvY2spO1xuIDYwOTpcdHVubG9ja19zdGE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwNTpcdFxuIDgwNjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgwNzpcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX1JFU09MVklORyB8IE1FU0hfUEFUSF9ERUxFVEVEO1xuIDgwODpcdFx0bWVzaF9nYXRlX2RlbCh0YmwsIG1wYXRoKTtcbiA4MDk6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgxMDpcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZtcGF0aC1cdTAwM2V0aW1lcik7XG4gODExOlx0XHRhdG9taWNfZGVjKFx1MDAyNnNkYXRhLVx1MDAzZXUubWVzaC5tcGF0aHMpO1xuIDgxMjpcdFx0YXRvbWljX2RlYyhcdTAwMjZ0YmwtXHUwMDNlZW50cmllcyk7XG4gODEzOlx0XHRtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhtcGF0aCk7XG4gODE0Olx0XHRrZnJlZV9yY3UobXBhdGgsIHJjdSk7XG4gODE1Olx0fVxuIDgxNjpcdFxuIDgxNzpcdHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbiA4MTg6XHR7XG4gODE5Olx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNm1wYXRoLVx1MDAzZXdhbGtfbGlzdCk7XG4gODIwOlx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnRibC1cdTAwM2VyaGVhZCwgXHUwMDI2bXBhdGgtXHUwMDNlcmhhc2gsIG1lc2hfcmh0X3BhcmFtcyk7XG4gODIxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4gODIyOlx0XHRtcGF0aC1cdTAwM2VmbGFncyB8PSBNRVNIX1BBVEhfREVMRVRFRDtcbiA4MjM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgyNDpcdFx0aWYgKHRibCA9PSBcdTAwMjZtcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V1Lm1lc2gubXBwX3BhdGhzKVxuIDgyNTpcdFx0XHRtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC1cdTAwM2VzZGF0YSwgbXBhdGgtXHUwMDNlZHN0KTtcbiA4MjY6XHRcdGVsc2VcbiA4Mjc6XHRcdFx0bWVzaF9mYXN0X3R4X2ZsdXNoX21wYXRoKG1wYXRoKTtcbiA4Mjg6XHRcdG1lc2hfcGF0aF9mcmVlX3JjdSh0YmwsIG1wYXRoKTtcbiA4Mjk6XHR9XG4gODMwOlx0XG4gODMxOlx0LyoqXG4gODMyOlx0ICogbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3AgLSBEZWxldGVzIG1lc2ggcGF0aHMgaWYgdGhlaXIgbmV4dCBob3AgbWF0Y2hlc1xuIDgzMzpcdCAqXG4gODM0Olx0ICogQHN0YTogbWVzaCBwZWVyIHRvIG1hdGNoXG4gODM1Olx0ICpcbiA4MzY6XHQgKiBSQ1Ugbm90ZXM6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBtZXNoIHBsaW5rIHRyYW5zaXRpb25zIGZyb21cbiA4Mzc6XHQgKiBQTElOS19FU1RBQiB0byBhbnkgb3RoZXIgc3RhdGUsIHNpbmNlIFBMSU5LX0VTVEFCIHN0YXRlIGlzIHRoZSBvbmx5IG9uZSB0aGF0XG4gODM4Olx0ICogYWxsb3dzIHBhdGggY3JlYXRpb24uIFRoaXMgd2lsbCBoYXBwZW4gYmVmb3JlIHRoZSBzdGEgY2FuIGJlIGZyZWVkIChiZWNhdXNlXG4gODM5Olx0ICogc3RhX2luZm9fZGVzdHJveSgpIGNhbGxzIHRoaXMpIHNvIGFueSByZWFkZXIgaW4gYSByY3UgcmVhZCBibG9jayB3aWxsIGJlXG4gODQwOlx0ICogcHJvdGVjdGVkIGFnYWluc3QgdGhlIHBsaW5rIGRpc2FwcGVhcmluZy5cbiA4NDE6XHQgKi9cbiA4NDI6XHR2b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIDg0MzpcdHtcbiA4NDQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfZmFzdF90eF9jYWNoZXxfX21lc2hfcGF0aF9kZWx8bWVzaF9wYXRodGJsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZT00Nz1tYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9NRVNIKSAmIzQzOz0gXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00OC1cdG1lc2gubyBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ5Olx0bWVzaF9wYXRodGJsLm8gXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS01MC1cdG1lc2hfcGxpbmsubyBcXFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc1Nz12b2lkIGllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy0xNzc1LVxubmV0L21hYzgwMjExL21lc2guYzoxNzc2Olx0bWVzaF9wYXRodGJsX2luaXQoc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guYy0xNzc3LVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc5MD12b2lkIGllZWU4MDIxMV9tZXNoX3RlYXJkb3duX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc5Mi1cdG1lc2hfcm1jX2ZyZWUoc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guYzoxNzkzOlx0bWVzaF9wYXRodGJsX3VucmVnaXN0ZXIoc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guYy0xNzk0LX1cbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM1ND12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzU1OnZvaWQgbWVzaF9wYXRodGJsX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guaDozNTY6dm9pZCBtZXNoX3BhdGh0YmxfdW5yZWdpc3RlcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1Ny1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpO1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmg9MzY4PWJvb2wgaWVlZTgwMjExX21lc2hfeG1pdF9mYXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21lc2guaC0zNjktXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGN0cmxfZmxhZ3MpO1xubmV0L21hYzgwMjExL21lc2guaDozNzA6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM3MS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODItXHRcdGlmIChpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIFNVUFBPUlRfRkFTVF9YTUlUKSlcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMjgzOlx0XHRcdG1lc2hfZmFzdF90eF9jYWNoZShzZGF0YSwgc2tiLCBtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4NC1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTQzND1tZXNoX2Zhc3RfdHhfZ2V0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy00NjItXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6NDYzOnZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQ2NC1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9ODAxPXN0YXRpYyB2b2lkIG1lc2hfcGF0aF9mcmVlX3JjdShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04MTYtXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODE3OnN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04MTgte1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz04NDI9dm9pZCBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODUxLVx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1wYXRoLVx1MDAzZW5leHRfaG9wKSA9PSBzdGEpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODUyOlx0XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NTMtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg1Nz1zdGF0aWMgdm9pZCBtcHBfZmx1c2hfYnlfcHJveHkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTg2Ni1cdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwobXBhdGgtXHUwMDNlbXBwLCBwcm94eSkpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODY3Olx0XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NjgtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg3Mj1zdGF0aWMgdm9pZCB0YWJsZV9mbHVzaF9ieV9pZmFjZShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NzgtXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wYXRoLCBuLCBcdTAwMjZ0YmwtXHUwMDNld2Fsa19oZWFkLCB3YWxrX2xpc3QpIHtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo4Nzk6XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04ODAtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTkwNj1zdGF0aWMgaW50IHRhYmxlX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTkxOC1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5MTk6XHRfX21lc2hfcGF0aF9kZWwodGJsLCBtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTIwLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXdhbGtfbG9jayk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwNTY9dm9pZCBtZXNoX3BhdGhfZml4X25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqbmV4dF9ob3ApXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzMtXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTA3NDp2b2lkIG1lc2hfcGF0aHRibF9pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzUte1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMDgyPXZvaWQgbWVzaF9wYXRoX3RibF9leHBpcmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwOTItXHRcdCAgICAgdGltZV9hZnRlcihqaWZmaWVzLCBtcGF0aC1cdTAwM2VleHBfdGltZSAmIzQzOyBNRVNIX1BBVEhfRVhQSVJFKSlcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMDkzOlx0XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDk0LVx0fVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMDk4PXZvaWQgbWVzaF9wYXRoX2V4cGlyZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTEwMy1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMTA0OnZvaWQgbWVzaF9wYXRodGJsX3VucmVnaXN0ZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTEwNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIEtjb25maWcgb3B0aW9ucyBpbnZvbHZlZCBoZXJlLiBUaW1lIHRvIGp1bXAgaW50byBgbmV0L21hYzgwMjExL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyB1c3VhbGx5IGhhcHBlbnMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhleSBtaWdodCBoYXZlIHdpdGggb3RoZXIsIHNlZW1pbmdseSB1bnJlbGF0ZWQsIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0IGJlZm9yZSBJIHN0YXJ0IGRvd24gYW55IG90aGVyIHBhdGgsIG9yIEkmIzM5O20gbGlrZWx5IGdvaW5nIHRvIHdhc3RlIG15IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZz02MD1jb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0yMDk9Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMS1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjIyPWNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyNC1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjI1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjM1PWNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNy1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjM4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1MC1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTItXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjEtXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MjpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWctMjcyLVx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU9NDE9bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgJiM0Mzs9IFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ2LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ3Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX01FU0gpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ4LVx0bWVzaC5vIFxcXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTYxMz1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTcxMC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbm5ldC9tYWM4MDIxMS9jZmcuYzo3MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEyLVx0XHRpZiAoc2RhdGEtXHUwMDNldS5tZXNoLnNlY3VyaXR5ICE9IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0yMTkwPXN0YXRpYyB2b2lkIHN0YV9hcHBseV9tZXNoX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5My17XG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk1LVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI3ODc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5My1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTUtc3RhdGljIGludCBpZWVlODAyMTFfYWRkX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ0Mjg9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2FmdGVyX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1MS1cdFx0YnJlYWs7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUzLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTQtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL2NmZy5jOjQ2NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1Ni1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5Ni1cdC5kdW1wX3N1cnZleSA9IGllZWU4MDIxMV9kdW1wX3N1cnZleSxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTk3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTgtXHQuYWRkX21wYXRoID0gaWVlZTgwMjExX2FkZF9tcGF0aCxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC01Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NDojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC01NS0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6NTY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC01OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjU5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYwOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNjEtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYyOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjMtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC02NC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6NjY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY3LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2ODojZGVmaW5lIE1BQzgwMjExX01FU0hfUFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjktI2VuZGlmXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIxOC0jZGVmaW5lIG1zeW5jX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjAtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjIzOlx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI2LSNkZWZpbmUgbXBzX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfUFNfREVCVUcsXHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTczNj1JRUVFODAyMTFfSUZfTElOS19GSUxFKGFkZHIsIGNvbmYtXHUwMDNlYWRkciwgTUFDKTtcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczNy1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjczODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczOS1JRUVFODAyMTFfSUZfRklMRShlc3RhYl9wbGlua3MsIHUubWVzaC5lc3RhYl9wbGlua3MsIEFUT01JQyk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9ODY4PXN0YXRpYyB2b2lkIGFkZF9pYnNzX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjg3MzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3NC1cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz05Mzc9c3RhdGljIHZvaWQgYWRkX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk0OS1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjk1MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk1MS1cdFx0YWRkX21lc2hfZmlsZXMoc2RhdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTc3OT1zdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2gge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1OS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjg2MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg2MS0jZGVmaW5lIElFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMobXNoLCBuYW1lKVx0XFxcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTExMzc9aW50IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTItXG5uZXQvbWFjODAyMTEvbWFpbi5jOjEzOTM6I2lmbmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21haW4uYy0xMzk0LVx0LyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovXG4tLVxubmV0L21hYzgwMjExL21lc2guaD0zNzg9dm9pZCBtZXNoX3BhdGhfcmVmcmVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM4MC1cbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzgxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21lc2guaC0zODItc3RhdGljIGlubGluZVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODEwPWludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODM5LVx0XHRcdG5lZWRfb2ZmY2hhbiA9IHRydWU7XG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjg0MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQxLVx0XHRmYWxsdGhyb3VnaDtcbi0tXG5uZXQvbWFjODAyMTEvcnguYz0yNzkyPWllZWU4MDIxMV9kZWxpdmVyX3NrYihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTEtXG5uZXQvbWFjODAyMTEvcnguYzoyODkyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3J4LmMtMjg5My1zdGF0aWMgYm9vbFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTI5NTk9aWVlZTgwMjExX3J4X21lc2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtMjk2MS17XG5uZXQvbWFjODAyMTEvcnguYzoyOTYyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3J4LmMtMjk2My1cdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lm1lc2g7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDY4PXZvaWQgc3RhX2luZm9fZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA2LVx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhzdGEtXHUwMDNlc3RhLnJhdGVzKSk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDgtXHRrZnJlZShzdGEtXHUwMDNlbWVzaCk7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NjMzPV9fc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY3LVx0d2lwaHlfd29ya19pbml0KFx1MDAyNnN0YS1cdTAwM2VhbXBkdV9tbG1lLndvcmssIGllZWU4MDIxMV9iYV9zZXNzaW9uX3dvcmspO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjY4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY5LVx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNzk1LVx0c3RhX2luZm9fZnJlZV9saW5rKFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjc5NjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5Ny1cdGtmcmVlKHN0YS1cdTAwM2VtZXNoKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xMTA3PXN0YXRpYyB2b2lkIF9fc3RhX2luZm9fcmVjYWxjX3RpbShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCBpZ25vcmVfcGVuZGluZylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIxLVx0XHRwcyA9IFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2Vic3MtXHUwMDNlcHM7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMy1cdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9Mjc0Mz1zdGF0aWMgaW5saW5lIHU2NCBzdGFfZ2V0X3N0YXRzX2J5dGVzKHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpyeHN0YXRzKVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI3NTUtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyNzU2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc1Ny1zdGF0aWMgdm9pZCBzdGFfc2V0X21lc2hfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzA3OT12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMyNjQtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzI2Ni1cdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXHUwMDI2c2RhdGEtXHUwMDNldmlmKSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03MTU9c3RydWN0IHN0YV9pbmZvIHtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03MzItXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo3MzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03MzQtXHRzdHJ1Y3QgbWVzaF9zdGEgKm1lc2g7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9ODAwPXN0YXRpYyBpbmxpbmUgZW51bSBubDgwMjExX3BsaW5rX3N0YXRlIHN0YV9wbGlua19zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMS17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4MDI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC04MDMtXHRyZXR1cm4gc3RhLVx1MDAzZW1lc2gtXHUwMDNlcGxpbmtfc3RhdGU7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjU2Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI1ODYtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL3R4LmM6MjU4NzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS90eC5jLTI1ODgtXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjY4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMjc4Ny1cdFx0YnJlYWs7XG5uZXQvbWFjODAyMTEvdHguYzoyNzg4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3R4LmMtMjc4OS1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0zMDMyLVxubmV0L21hYzgwMjExL3R4LmM6MzAzMzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS90eC5jLTMwMzQtXHRpZiAobWVzaGhkcmxlbiBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hYzgwMjExIE1lc2ggUGF0aCBUYWJsZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZvY3VzZWQgb24gdGhlIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIGFuZCBgX19tZXNoX3BhdGhfZGVsYCBmdW5jdGlvbnMuIEluIGBtZXNoX2Zhc3RfdHhfY2FjaGVgLCB0aGUgY2hlY2sgZm9yIGBNRVNIX1BBVEhfREVMRVRFRGAgd2l0aGluIHRoZSBgc3Bpbl9sb2NrYCBjb250ZXh0IGlzIGNyaXRpY2FsLiBUaGUgY29uY2VybiBoZXJlIGlzIGVuc3VyaW5nIGEgcmFjZSBjb25kaXRpb24gZG9lc24mIzM5O3QgbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBjb25jZXJuLiBUaGUgc2Vjb25kIGNvZGUgYmxvY2sgaGlnaGxpZ2h0cyBob3cgYSBwYXRoIGlzIG1hcmtlZCBhcyBkZWxldGVkIGluIGBfX21lc2hfcGF0aF9kZWxgLCBpbnZvbHZpbmcgbGlzdCBtYW5pcHVsYXRpb24gYW5kIHJoYXNodGFibGUgcmVtb3ZhbCwgYWxsIHdpdGggY2FyZWZ1bCBzcGlubG9jayB1c2FnZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzIGlzc3Vlcy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLCBiZWNhdXNlIGlmIG5vdCBpdCBjb3VsZCBiZSBleHRyZW1lbHkgZGlmZmljdWx0IHRvIGZpbmQgYnVncy4gU28sIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBob3cgd2UgbWlnaHQgdHJpZ2dlciB0aGlzIGNvZGUuIFRoYW5rZnVsbHksIGBtYWM4MDIxMV9od3NpbWAsIHRoZSB2aXJ0dWFsIHNvZnR3YXJlIHJhZGlvIHNpbXVsYXRvciwgaXMgdGhlIG9idmlvdXMgdGFyZ2V0IGhlcmUuIEkmIzM5O20gYXdhcmUgdGhhdCB0aGlzIG1vZHVsZSwgYWxvbmcgd2l0aCBtYWM4MDIxMSwgbmw4MDIxMSwgYW5kIGNmZzgwMjExIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzIGluIExpbnV4IGtlcm5lbHMgYW5kIGFyZSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIuIFVzZXIgc3BhY2UgaW50ZXJhY3RzIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHdlIGhhdmUgd2VsbC1kZWZpbmVkIGF0dGFjayBzdXJmYWNlIHZpYSB3aGljaCB0byBleGVyY2lzZSB0aGlzIGNvZGUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKVG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgYmFzaWMsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfTUFDODAyMTFfTUVTSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBkaXZlIGludG8gYG5ldC9tYWM4MDIxMS9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCBtYWM4MDIxMSBpbnRlcm5hbHMgd2l0aCBrdW5pdC5cbiAgNjc6XHRcbiAgNjg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgTUFDODAyMTFfTUVTSFxuICA3MTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSA4MDIuMTEgbWVzaCBvcGVyYXRpb24gaW4gbWFjODAyMTFcbiAgNzU6XHRcdCAgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQuICA4MDIuMTEgbWVzaCBjb25uZWN0cyBtdWx0aXBsZSBzdGF0aW9uc1xuICA3NjpcdFx0ICBvdmVyIChwb3NzaWJseSBtdWx0aS1ob3ApIHdpcmVsZXNzIGxpbmtzIHRvIGZvcm0gYSBzaW5nbGUgbG9naWNhbFxuICA3NzpcdFx0ICBMQU4uXG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnIE1BQzgwMjExX0xFRFNcbiAgODA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuICA4MTpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICA4MjpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuICA4MzpcdFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiAgODQ6XHRcdGhlbHBcbiAgODU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIGZldyBMRUQgdHJpZ2dlcnMgZm9yIGRpZmZlcmVudFxuICA4NjpcdFx0ICBwYWNrZXQgcmVjZWl2ZS90cmFuc21pdCBldmVudHMuXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcbiAgODk6XHRcdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTc2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIE1BQzgwMjExIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgc3BlY2lmaWNhbGx5IGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMgdGhhdCBkaWN0YXRlIGhvdyBgTUFDODAyMTFgIGlzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgYXJlIGRpcmVjdGx5IGNvbnRpbmdlbnQgdXBvbiB0aGUgYE1BQzgwMjExYCBvcHRpb24uIElzIGl0IGxpbmtlZCB0byBzcGVjaWZpYyByZWd1bGF0b3J5IGRvbWFpbnMsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHBlcmhhcHMgY2VydGFpbiBzZWN1cml0eSBmZWF0dXJlcz8gVW5jb3ZlcmluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMga2V5IGZvciBkZWJ1Z2dpbmcsIG1vZGlmaWNhdGlvbiwgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0aWVzLiBJdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGJlZm9yZSBtYWtpbmcgY2hhbmdlcyB0byBhIHN1YnN5c3RlbSBsaWtlIE1BQzgwMjExLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1BQzgwMjExXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAgNTpcdFx0c2VsZWN0IENSWVBUT1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcbiAgMTQ6XHRcdCAgbmV0d29ya2luZyBzdGFjay5cbiAgMTU6XHRcbiAgMTY6XHRjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExPW5cbiAgMTg6XHRcbiAgMTk6XHRpZiBNQUM4MDIxMSAhPSBuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xuICAyMjpcdFx0Ym9vbFxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxuICAyNTpcdFx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbiAgMjY6XHRcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcbiAgMjc6XHRcdGRlZmF1bHQgeVxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAmIzM5O21pbnN0cmVsJiMzOTsgVFggcmF0ZSBjb250cm9sIGFsZ29yaXRobVxuICAzMDpcdFxuICAzMTpcdGNob2ljZVxuICAzMjpcdFx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9IQVNfUkNcbiAgMzQ6XHRcdGRlZmF1bHQgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBkZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG1cbiAgMzc6XHRcdCAgbWFjODAyMTEgd2lsbCB1c2UuIE5vdGUgdGhhdCB0aGlzIGRlZmF1bHQgY2FuIHN0aWxsIGJlXG4gIDM4Olx0XHQgIG92ZXJyaWRkZW4gdGhyb3VnaCB0aGUgaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyBtb2R1bGVcbiAgMzk6XHRcdCAgcGFyYW1ldGVyIGlmIGRpZmZlcmVudCBhbGdvcml0aG1zIGFyZSBhdmFpbGFibGUuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OgoKKipEaWdnaW5nIERlZXBlciBpbnRvIHRoZSBXaXJlbGVzcyBTaW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJvdWJsZXNob290aW5nIHRoaXMgd2lyZWxlc3Mgc2ltdWxhdGlvbiBpc3N1ZS4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgY29yZSBwcm9ibGVtLCBidXQgaXQganVzdCBoaXQgbWUg4oCTIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYE1BQzgwMjExX0hXU0lNYCBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseS4gVGhhdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGhvdyB0aGUgd2lyZWxlc3MgaGFyZHdhcmUgc2ltdWxhdGlvbiB3b3JrcywgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBgL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvYCBkaXJlY3Rvcnkgc3RydWN0dXJlLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzLiBUaGVyZSBjb3VsZCBiZSBzb21lIHN1YnRsZSBmbGFnIG9yIHNldHRpbmcgdGhlcmUgdGhhdOKAmXMgdGhyb3dpbmcgYSB3cmVuY2ggaW50byBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gb3BlbiB1cCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyBhbmQgcmVhbGx5IGRpZyBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbi4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGNvbmZpZ3MsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGdldCB0byB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZXNoIE5ldHdvcmtpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX01BQzgwMjExYCwgYENPTkZJR19NQUM4MDIxMV9NRVNIYCwgYW5kIGBDT05GSUdfQ0ZHODAyMTFgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIFdpLUZpIGFuZCBtZXNoIG5ldHdvcmtpbmcgaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhZmZlY3Qgc3BlY2lmaWMgZnVuY3Rpb25zLiBJJiMzOTttIHplcm9pbmcgaW4gb24gYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLCBhcyB0aGV5IHNlZW0gdG8gYmUga2V5IHBsYXllcnMuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbWVzaF9mYXN0X3R4X2NhY2hlYCBhbmQgYF9fbWVzaF9wYXRoX2RlbGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHBhcnRpY3VsYXJseSBhbnkgZW50cnkgcG9pbnRzIG9yIGhpZ2gtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZhc3QgVFggYW5kIG1lc2ggcGF0aCBoYW5kbGluZyBsb2dpYy4gU28sIGxldCYjMzk7cyBzdGFydCBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciB0aGUgY2FsbHMgdG8gYG1lc2hfZmFzdF90eF9jYWNoZWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGFueSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXNoX2Zhc3RfdHhfY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2guaD0zNjg9Ym9vbCBpZWVlODAyMTFfbWVzaF94bWl0X2Zhc3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM2OS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY3RybF9mbGFncyk7XG5uZXQvbWFjODAyMTEvbWVzaC5oOjM3MDp2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzcxLVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MTI1OD1pbnQgbWVzaF9uZXh0aG9wX2xvb2t1cChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4Mi1cdFx0aWYgKGllZWU4MDIxMV9od19jaGVjayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VodywgU1VQUE9SVF9GQVNUX1hNSVQpKVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyODM6XHRcdFx0bWVzaF9mYXN0X3R4X2NhY2hlKHNkYXRhLCBza2IsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMjg0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9NDM0PW1lc2hfZmFzdF90eF9nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQ2Mi1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo0NjM6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDY0LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0MAoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiA2NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lc2ggUGF0aCBNYW5hZ2VtZW50IGluIG1hYzgwMjExIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYCBmaWxlIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgbWVzaCBwYXRoIGRlbGV0aW9uIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBgX19tZXNoX3BhdGhfZGVsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIEZyb20gd2hhdCBJIHNlZSwgYF9fbWVzaF9wYXRoX2RlbGAgaXMgY2FsbGVkIGJ5IHNldmVyYWwgZnVuY3Rpb25zOiBgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BgLCBgbXBwX2ZsdXNoX2J5X3Byb3h5YCwgYHRhYmxlX2ZsdXNoX2J5X2lmYWNlYCwgYHRhYmxlX3BhdGhfZGVsYCwgYW5kIGBtZXNoX3BhdGhfdGJsX2V4cGlyZWAuIFRoZSBwdWJsaWMgaW50ZXJmYWNlIGZvciBkZWxldGluZyBwYXRocywgYG1lc2hfcGF0aF9kZWxgLCBqdXN0IHdyYXBzIGB0YWJsZV9wYXRoX2RlbGAuIEkgYWxzbyBub3RpY2UgdGhhdCBgaWVlZTgwMjExX21lc2hfeG1pdF9mYXN0YCB1c2VzIGBtZXNoX2Zhc3RfdHhfZ2V0YCwgd2hpY2ggaXMgd29ydGggcmVtZW1iZXJpbmcuCgpOb3csIEkmIzM5O20gY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLiBBaGEsIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIGlzIG5vbi1zdGF0aWMsIHdoaWxlIGBfX21lc2hfcGF0aF9kZWxgIGlzIHN0YXRpYy4gVGhpcyBzdWdnZXN0cyBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgYWxvbmcgd2l0aCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAsIGFuZCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAgbWlnaHQgYmUgaW1wb3J0YW50IGVudHJ5IHBvaW50cy4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIG1vZGlmaWVzIHRoZSBmYXN0IHBhdGggVFggY2FjaGUgYW5kIHBhdGggZGVsZXRpb24gdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgdGhlIGBNRVNIX1BBVEhfREVMRVRFRGAgZmxhZyB0byBwcmV2ZW50IGFkZGluZyBkZWxldGVkIHBhdGhzIHRvIHRoZSBjYWNoZS4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgdGhyb3VnaCBubDgwMjExIG1lc2ggb3BlcmF0aW9ucywgd2hpY2ggbWVhbnMgSSBjYW4gdHJpZ2dlciBjb25jdXJyZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBhbmQgcGF0aCB0YWJsZSB1cGRhdGVzLiBUaGF0JiMzOTtzIGEga2V5IGZhY3RvciBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB3aWxsIGJlIGBtZXNoX2Zhc3RfdHhfY2FjaGVgLCBgX19tZXNoX3BhdGhfZGVsYCwgYG1lc2hfcGF0aF9kZWxgLCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAsIGFsb25nIHdpdGggYG1lc2hfZmFzdF90eF9mbHVzaF9tcGF0aGAsIGFuZCBgbWVzaF9mYXN0X3R4X2ZsdXNoX2FkZHJgLiBIb3dldmVyLCBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgYG1lc2hfcGF0aF9kZWxgLCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAsIGFuZCBgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BgIGFyZSBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgTUFDODAyMTFfTUVTSGAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBUaGV5JiMzOTtyZSBhbGwgc2V0LiBUaGUgZm9ybWF0IGxvb2tzIGNvcnJlY3QsIGFuZCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9NRVNIJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVzaF9mYXN0X3R4X2NhY2hlJiMzNDssCiAgICAmIzM0O21lc2hfcGF0aF9kZWwmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3AmIzM0OywKICAgICYjMzQ7bWVzaF9uZXh0aG9wX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHRoZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGJ5IHNldHRpbmcgTUVTSF9QQVRIX0RFTEVURUQgdW5kZXIgc3RhdGVfbG9jayB3aGVuIGRlbGV0aW5nIGEgbWVzaCBwYXRoIGFuZCBjaGVja2luZyB0aGlzIGZsYWcgaW4gbWVzaF9mYXN0X3R4X2NhY2hlIGJlZm9yZSBjYWNoaW5nIGZhc3QgVFggZW50cmllcy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBzaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBtZXNoIG5ldHdvcmtpbmcgbmw4MDIxMS9kYXRhLXBhdGggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lc2hfZmFzdF90eF9jYWNoZSYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfZGVsJiMzNDssCiAgICAmIzM0O21lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wJiMzNDssCiAgICAmIzM0O21lc2hfbmV4dGhvcF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1YnN5c3RlbSBieSBzZXR0aW5nIE1FU0hfUEFUSF9ERUxFVEVEIHVuZGVyIHN0YXRlX2xvY2sgd2hlbiBkZWxldGluZyBhIG1lc2ggcGF0aCBhbmQgY2hlY2tpbmcgdGhpcyBmbGFnIGluIG1lc2hfZmFzdF90eF9jYWNoZSBiZWZvcmUgY2FjaGluZyBmYXN0IFRYIGVudHJpZXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbWVzaCBuZXR3b3JraW5nIG5sODAyMTEvZGF0YS1wYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuIFRoZSBwb3RlbnRpYWwgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgKExPQ0tERVApLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyZTQ2NWE3YjMzM2I5NDhmNzk3MDI0MDNkNDc1OTU1YjY0NWViNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA3OjEwOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDAzMTcxY2YwMDg1NTcuLmRmY2M0ZjNhNzA4OGUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTU3Nyw2ICYjNDM7NTc3LDEyIEBAIHZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlnb3RvIHVubG9ja19zdGE7CiAKIAlzcGluX2xvY2soJmFtcDtjYWNoZS0mZ3Q7d2Fsa19sb2NrKTsKJiM0MzsJaWYgKChSRUFEX09OQ0UobXBhdGgtJmd0O2ZsYWdzKSAmYW1wOyBNRVNIX1BBVEhfREVMRVRFRCkgfHwKJiM0MzsJICAgIChtcHBhdGggJmFtcDsmYW1wOyAoUkVBRF9PTkNFKG1wcGF0aC0mZ3Q7ZmxhZ3MpICZhbXA7IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHsKJiM0MzsJCWtmcmVlKGVudHJ5KTsKJiM0MzsJCWdvdG8gdW5sb2NrX2NhY2hlOwomIzQzOwl9CiYjNDM7CiAJcHJldiA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdCgmYW1wO2NhY2hlLSZndDtyaHQsCiAJCQkJCQkgJmFtcDtlbnRyeS0mZ3Q7cmhhc2gsCiAJCQkJCQkgZmFzdF90eF9yaHRfcGFyYW1zKTsKQEAgLTgxMiw2ICYjNDM7ODE4LDkgQEAgc3RhdGljIHZvaWQgX19tZXNoX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKQogewogCWhsaXN0X2RlbF9yY3UoJmFtcDttcGF0aC0mZ3Q7d2Fsa19saXN0KTsKIAlyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KCZhbXA7dGJsLSZndDtyaGVhZCwgJmFtcDttcGF0aC0mZ3Q7cmhhc2gsIG1lc2hfcmh0X3BhcmFtcyk7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO21wYXRoLSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJbXBhdGgtJmd0O2ZsYWdzIHw9IE1FU0hfUEFUSF9ERUxFVEVEOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO21wYXRoLSZndDtzdGF0ZV9sb2NrKTsKIAlpZiAodGJsID09ICZhbXA7bXBhdGgtJmd0O3NkYXRhLSZndDt1Lm1lc2gubXBwX3BhdGhzKQogCQltZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC0mZ3Q7c2RhdGEsIG1wYXRoLSZndDtkc3QpOwogCWVsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjQKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2Agd2FycmFudHMgaXRzIG93biBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtb2RpZmljYXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlICpjb250ZXh0KiBvZiB0aG9zZSBjaGFuZ2VzIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgKmRvaW5nKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgdXNlIG15IHByZWZlcnJlZCBtZXRob2QgdG8gcmVhZCB0aGUgZmlsZSwgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1NzcgYW5kIDgxMiBvZiBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYC4gVGhlc2UgbGluZXMgYXJlIG15IGluaXRpYWwgcG9pbnRzIG9mIGludGVyZXN0LiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHRvIGdyYXNwIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHNwZWNpZmljIGFyZWEgb2YgY29kZS4gT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb2RlIGluIHRoYXQgc2VjdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byBtYWtlIGEgd2VsbC1pbmZvcm1lZCBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFx0XHRcdFx0YnVpbGQuZmFzdF90eC5oZHJfbGVuICYjNDM7PSBJRUVFODAyMTFfR0NNUF9IRFJfTEVOO1xuIDU1MTpcdFx0XHRcdGJyZWFrO1xuIDU1MjpcdFx0XHRkZWZhdWx0OlxuIDU1MzpcdFx0XHRcdGdvdG8gdW5sb2NrX3N0YTtcbiA1NTQ6XHRcdFx0fVxuIDU1NTpcdFx0fVxuIDU1NjpcdFxuIDU1NzpcdFx0bWVtY3B5KGJ1aWxkLmtleS5hZGRyLCBtcHBhdGgtXHUwMDNlZHN0LCBFVEhfQUxFTik7XG4gNTU4Olx0XHRidWlsZC50aW1lc3RhbXAgPSBqaWZmaWVzO1xuIDU1OTpcdFx0YnVpbGQuZmFzdF90eC5iYW5kID0gaW5mby1cdTAwM2ViYW5kO1xuIDU2MDpcdFx0YnVpbGQuZmFzdF90eC5kYV9vZmZzID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9oZHIsIGFkZHIzKTtcbiA1NjE6XHRcdGJ1aWxkLmZhc3RfdHguc2Ffb2ZmcyA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfaGRyLCBhZGRyNCk7XG4gNTYyOlx0XHRidWlsZC5tcGF0aCA9IG1wYXRoO1xuIDU2MzpcdFx0bWVtY3B5KGJ1aWxkLmhkciwgbWVzaGhkciwgYnVpbGQuaGRybGVuKTtcbiA1NjQ6XHRcdG1lbWNweShidWlsZC5oZHIgJiM0MzsgYnVpbGQuaGRybGVuLCByZmMxMDQyX2hlYWRlciwgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKSk7XG4gNTY1Olx0XHRidWlsZC5oZHJsZW4gJiM0Mzs9IHNpemVvZihyZmMxMDQyX2hlYWRlcik7XG4gNTY2Olx0XHRtZW1jcHkoYnVpbGQuZmFzdF90eC5oZHIsIGhkciwgYnVpbGQuZmFzdF90eC5oZHJfbGVuKTtcbiA1Njc6XHRcbiA1Njg6XHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1aWxkLmZhc3RfdHguaGRyO1xuIDU2OTpcdFx0aWYgKGJ1aWxkLmZhc3RfdHgua2V5KVxuIDU3MDpcdFx0XHRoZHItXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpO1xuIDU3MTpcdFxuIDU3MjpcdFx0cWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTtcbiA1NzM6XHRcdHFjWzFdIHw9IElFRUU4MDIxMV9RT1NfQ1RMX01FU0hfQ09OVFJPTF9QUkVTRU5UIFx1MDAzZVx1MDAzZSA4O1xuIDU3NDpcdFxuIDU3NTpcdFx0ZW50cnkgPSBrbWVtZHVwKFx1MDAyNmJ1aWxkLCBzaXplb2YoYnVpbGQpLCBHRlBfQVRPTUlDKTtcbiA1NzY6XHRcdGlmICghZW50cnkpXG4gNTc3Olx0XHRcdGdvdG8gdW5sb2NrX3N0YTtcbiA1Nzg6XHRcbiA1Nzk6XHRcdHNwaW5fbG9jayhcdTAwMjZjYWNoZS1cdTAwM2V3YWxrX2xvY2spO1xuIDU4MDpcdFx0aWYgKChSRUFEX09OQ0UobXBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkgfHxcbiA1ODE6XHRcdCAgICAobXBwYXRoIFx1MDAyNlx1MDAyNiAoUkVBRF9PTkNFKG1wcGF0aC1cdTAwM2VmbGFncykgXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHtcbiA1ODI6XHRcdFx0a2ZyZWUoZW50cnkpO1xuIDU4MzpcdFx0XHRnb3RvIHVubG9ja19jYWNoZTtcbiA1ODQ6XHRcdH1cbiA1ODU6XHRcbiA1ODY6XHRcdHByZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXHUwMDI2Y2FjaGUtXHUwMDNlcmh0LFxuIDU4NzpcdFx0XHRcdFx0XHRcdCBcdTAwMjZlbnRyeS1cdTAwM2VyaGFzaCxcbiA1ODg6XHRcdFx0XHRcdFx0XHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcbiA1ODk6XHRcdGlmIChJU19FUlIocHJldikpIHtcbiA1OTA6XHRcdFx0a2ZyZWUoZW50cnkpO1xuIDU5MTpcdFx0XHRnb3RvIHVubG9ja19jYWNoZTtcbiA1OTI6XHRcdH1cbiA1OTM6XHRcbiA1OTQ6XHRcdC8qXG4gNTk1Olx0XHQgKiByZXBsYWNlIGFueSBwcmV2aW91cyBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSwgaW4gY2FzZSB3ZSYjMzk7cmVcbiA1OTY6XHRcdCAqIHJlcGxhY2luZyBpdCB3aXRoIGEgZGlmZmVyZW50IHR5cGUgKGUuZy4gbXBhdGggLVx1MDAzZSBtcHApXG4gNTk3Olx0XHQgKi9cbiA1OTg6XHRcdGlmICh1bmxpa2VseShwcmV2KSkge1xuIDU5OTpcdFx0XHRyaGFzaHRhYmxlX3JlcGxhY2VfZmFzdChcdTAwMjZjYWNoZS1cdTAwM2VyaHQsIFx1MDAyNnByZXYtXHUwMDNlcmhhc2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRzdGF0aWMgdm9pZCBtZXNoX3BhdGhfZnJlZV9yY3Uoc3RydWN0IG1lc2hfdGFibGUgKnRibCxcbiA4MDI6XHRcdFx0XHQgICAgICAgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4gODAzOlx0e1xuIDgwNDpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBtcGF0aC1cdTAwM2VzZGF0YTtcbiA4MDU6XHRcbiA4MDY6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiA4MDc6XHRcdG1wYXRoLVx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfREVMRVRFRDtcbiA4MDg6XHRcdG1lc2hfZ2F0ZV9kZWwodGJsLCBtcGF0aCk7XG4gODA5Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiA4MTA6XHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2bXBhdGgtXHUwMDNldGltZXIpO1xuIDgxMTpcdFx0YXRvbWljX2RlYyhcdTAwMjZzZGF0YS1cdTAwM2V1Lm1lc2gubXBhdGhzKTtcbiA4MTI6XHRcdGF0b21pY19kZWMoXHUwMDI2dGJsLVx1MDAzZWVudHJpZXMpO1xuIDgxMzpcdFx0bWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcobXBhdGgpO1xuIDgxNDpcdFx0a2ZyZWVfcmN1KG1wYXRoLCByY3UpO1xuIDgxNTpcdH1cbiA4MTY6XHRcbiA4MTc6XHRzdGF0aWMgdm9pZCBfX21lc2hfcGF0aF9kZWwoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4gODE4Olx0e1xuIDgxOTpcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZtcGF0aC1cdTAwM2V3YWxrX2xpc3QpO1xuIDgyMDpcdFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ0YmwtXHUwMDNlcmhlYWQsIFx1MDAyNm1wYXRoLVx1MDAzZXJoYXNoLCBtZXNoX3JodF9wYXJhbXMpO1xuIDgyMTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgyMjpcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7XG4gODIzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiA4MjQ6XHRcdGlmICh0YmwgPT0gXHUwMDI2bXBhdGgtXHUwMDNlc2RhdGEtXHUwMDNldS5tZXNoLm1wcF9wYXRocylcbiA4MjU6XHRcdFx0bWVzaF9mYXN0X3R4X2ZsdXNoX2FkZHIobXBhdGgtXHUwMDNlc2RhdGEsIG1wYXRoLVx1MDAzZWRzdCk7XG4gODI2Olx0XHRlbHNlXG4gODI3Olx0XHRcdG1lc2hfZmFzdF90eF9mbHVzaF9tcGF0aChtcGF0aCk7XG4gODI4Olx0XHRtZXNoX3BhdGhfZnJlZV9yY3UodGJsLCBtcGF0aCk7XG4gODI5Olx0fVxuIDgzMDpcdFxuIDgzMTpcdC8qKlxuIDgzMjpcdCAqIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wIC0gRGVsZXRlcyBtZXNoIHBhdGhzIGlmIHRoZWlyIG5leHQgaG9wIG1hdGNoZXNcbiA4MzM6XHQgKlxuIDgzNDpcdCAqIEBzdGE6IG1lc2ggcGVlciB0byBtYXRjaFxuIDgzNTpcdCAqXG4gODM2Olx0ICogUkNVIG5vdGVzOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgbWVzaCBwbGluayB0cmFuc2l0aW9ucyBmcm9tXG4gODM3Olx0ICogUExJTktfRVNUQUIgdG8gYW55IG90aGVyIHN0YXRlLCBzaW5jZSBQTElOS19FU1RBQiBzdGF0ZSBpcyB0aGUgb25seSBvbmUgdGhhdFxuIDgzODpcdCAqIGFsbG93cyBwYXRoIGNyZWF0aW9uLiBUaGlzIHdpbGwgaGFwcGVuIGJlZm9yZSB0aGUgc3RhIGNhbiBiZSBmcmVlZCAoYmVjYXVzZVxuIDgzOTpcdCAqIHN0YV9pbmZvX2Rlc3Ryb3koKSBjYWxscyB0aGlzKSBzbyBhbnkgcmVhZGVyIGluIGEgcmN1IHJlYWQgYmxvY2sgd2lsbCBiZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgzCgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDkzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogTWVzaCBQYXRoIERlbGV0aW9uIGFuZCBGYXN0IFRYIENhY2hpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZXhhbWluaW5nIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgODAyLjExIG1lc2ggcGF0aCB0YWJsZSAoYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2ApLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGRlbGV0aW5nIG1lc2ggcGF0aHMgKGBfX21lc2hfcGF0aF9kZWxgKSBhbmQgdGhlIGZhc3QgVFggY2FjaGluZyBtZWNoYW5pc20gKGBtZXNoX2Zhc3RfdHhfY2FjaGVgKS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1Zy4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYF9fbWVzaF9wYXRoX2RlbGAgZnVuY3Rpb24gc2V0cyB0aGUgYE1FU0hfUEFUSF9ERUxFVEVEYCBmbGFnIG9uIGEgYG1wYXRoYCAob3IgYG1wcGF0aGApIHN0cnVjdHVyZSBiZWZvcmUgZmx1c2hpbmcgdGhlIGZhc3QgVFggY2FjaGUgYW5kIHVsdGltYXRlbHkgZnJlZWluZyB0aGUgYG1wYXRoYCBtZW1vcnkuIFRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIHBvc3NpYmlsaXR5IG9mIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIHJhY2luZyB3aXRoIHRoaXMgZGVsZXRpb24gcHJvY2Vzcy4gSWYgdGhlIGNhY2hlIGF0dGVtcHRzIHRvIGFkZCBhbiBlbnRyeSAqYWZ0ZXIqIHRoZSBmYXN0IFRYIGZsdXNoIGJ1dCAqYmVmb3JlKiB0aGUgYG1wYXRoYCBpcyBhY3R1YWxseSBmcmVlZCwgaXQgd291bGQgZW5kIHVwIHJlZmVyZW5jaW5nIGZyZWVkIG1lbW9yeSwgYSBjbGFzc2ljIFVBRiBzY2VuYXJpby4KClRoZSBwYXRjaCYjMzk7cyBmaXggaW52b2x2ZXMgY2hlY2tpbmcgdGhlIGBNRVNIX1BBVEhfREVMRVRFRGAgZmxhZyB3aXRoaW4gYG1lc2hfZmFzdF90eF9jYWNoZWAsIHByb3RlY3RlZCBieSBgY2FjaGUtJmd0O3dhbGtfbG9ja2AgKG9yIGJlZm9yZSBpbnNlcnRpb24gaW50byB0aGUgcmhhc2h0YWJsZSkuICBJZiB0aGUgZmxhZyBpcyBzZXQsIHRoZSBlbnRyeSBpcyBub3QgYWRkZWQgdG8gdGhlIGNhY2hlLCBwcmV2ZW50aW5nIHRoZSBkYW5nbGluZyBwb2ludGVyLiBUaGlzIGxvb2sgbGlrZSBhIGdvb2QsIHNvbGlkIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBjcnVjaWFsIEtNU0FOIHF1ZXN0aW9uLiAgRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zPyAgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoZSBgbXBhdGgtJmd0O2ZsYWdzYCBmaWVsZCBpcyBhbHJlYWR5IGFuIGVzdGFibGlzaGVkIGZpZWxkLCBhbmQgdGhlIGNvZGUgcmVhZHMgaXQgdXNpbmcgYFJFQURfT05DRWAsIHdoaWNoIGFwcGVhcnMgc2FmZS4gQWxzbywgYW55IG5ld2x5IGNyZWF0ZWQgZW50cmllcyB2aWEgYGttZW1kdXBgIGFyZSBpbW1lZGlhdGVseSBmcmVlZCBpZiB0aGUgZGVsZXRlZCBmbGFnIGlzIGZvdW5kLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBtaXRpZ2F0aW5nIGFuIGV4aXN0aW5nIGNvbmN1cnJlbmN5IGlzc3VlLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBlcnJvcnMuIFRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRhcmdldHMgYSBVQUYgdnVsbmVyYWJpbGl0eSwgYW5kIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGRldGVjdCB0aGlzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIG5ldyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBLQVNBTiBzaG91bGQgY2F0Y2ggdGhlIHR5cGUgb2YgYnVnIHRoaXMgcGF0Y2ggaXMgcHJldmVudGluZy4KCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBnZXQgdGhlIHRvb2wgY2FsbCByZWFkeSB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbWVzaCBwYXRoIGRlbGV0aW9uIChfX21lc2hfcGF0aF9kZWwpIGFuZCBmYXN0IFRYIGNhY2hlIGVudHJ5IGluc2VydGlvbiAobWVzaF9mYXN0X3R4X2NhY2hlKSBpbiBtYWM4MDIxMS4gU3BlY2lmaWNhbGx5LCBpdCBmbGFncyBtZXNoIHBhdGhzIGFzIE1FU0hfUEFUSF9ERUxFVEVEIHByaW9yIHRvIGZsdXNoaW5nIGZhc3QgVFggY2FjaGUgYW5kIGNoZWNrcyB0aGlzIGZsYWcgYmVmb3JlIGluc2VydGluZyBuZXcgY2FjaGUgZW50cmllcyB0byBwcmV2ZW50IGRhbmdsaW5nIG1lc2hfcGF0aCByZWZlcmVuY2VzIGFuZCBzdWJzZXF1ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1Z3MuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuIFRoZSBwb3RlbnRpYWwgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgKExPQ0tERVApLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6MTEuNDg4MTU0OTUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzOTk1NzMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfZmFzdF90eF9jYWNoZVwiLFxuICAgIFwibWVzaF9wYXRoX2RlbFwiLFxuICAgIFwibWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BcIixcbiAgICBcIm1lc2hfbmV4dGhvcF9sb29rdXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIG1lc2ggcGF0aCBkZWxldGlvbiAoX19tZXNoX3BhdGhfZGVsKSBhbmQgZmFzdCBUWCBjYWNoZSBlbnRyeSBpbnNlcnRpb24gKG1lc2hfZmFzdF90eF9jYWNoZSkgaW4gbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgZmxhZ3MgbWVzaCBwYXRocyBhcyBNRVNIX1BBVEhfREVMRVRFRCBwcmlvciB0byBmbHVzaGluZyBmYXN0IFRYIGNhY2hlIGFuZCBjaGVja3MgdGhpcyBmbGFnIGJlZm9yZSBpbnNlcnRpbmcgbmV3IGNhY2hlIGVudHJpZXMgdG8gcHJldmVudCBkYW5nbGluZyBtZXNoX3BhdGggcmVmZXJlbmNlcyBhbmQgc3Vic2VxdWVudCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWdzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1YnN5c3RlbSBieSBzZXR0aW5nIE1FU0hfUEFUSF9ERUxFVEVEIHVuZGVyIHN0YXRlX2xvY2sgd2hlbiBkZWxldGluZyBhIG1lc2ggcGF0aCBhbmQgY2hlY2tpbmcgdGhpcyBmbGFnIGluIG1lc2hfZmFzdF90eF9jYWNoZSBiZWZvcmUgY2FjaGluZyBmYXN0IFRYIGVudHJpZXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbWVzaCBuZXR3b3JraW5nIG5sODAyMTEvZGF0YS1wYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjExLjQ4ODE1OTc5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzE5NzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyZTQ2NWE3YjMzM2I5NDhmNzk3MDI0MDNkNDc1OTU1YjY0NWViNmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAwNzoxMDowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5kZmNjNGYzYTcwODhlIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbkBAIC01NzcsNiArNTc3LDEyIEBAIHZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRnb3RvIHVubG9ja19zdGE7XFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbitcXHRpZiAoKFJFQURfT05DRShtcGF0aC1cXHUwMDNlZmxhZ3MpIFxcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpIHx8XFxuK1xcdCAgICAobXBwYXRoIFxcdTAwMjZcXHUwMDI2IChSRUFEX09OQ0UobXBwYXRoLVxcdTAwM2VmbGFncykgXFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XFxuK1xcdFxcdGtmcmVlKGVudHJ5KTtcXG4rXFx0XFx0Z290byB1bmxvY2tfY2FjaGU7XFxuK1xcdH1cXG4rXFxuIFxcdHByZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXFx1MDAyNmNhY2hlLVxcdTAwM2VyaHQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZW50cnktXFx1MDAzZXJoYXNoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcXG5AQCAtODEyLDYgKzgxOCw5IEBAIHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4ge1xcbiBcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZtcGF0aC1cXHUwMDNld2Fsa19saXN0KTtcXG4gXFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dGJsLVxcdTAwM2VyaGVhZCwgXFx1MDAyNm1wYXRoLVxcdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZtcGF0aC1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdG1wYXRoLVxcdTAwM2VmbGFncyB8PSBNRVNIX1BBVEhfREVMRVRFRDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFx0aWYgKHRibCA9PSBcXHUwMDI2bXBhdGgtXFx1MDAzZXNkYXRhLVxcdTAwM2V1Lm1lc2gubXBwX3BhdGhzKVxcbiBcXHRcXHRtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC1cXHUwMDNlc2RhdGEsIG1wYXRoLVxcdTAwM2Vkc3QpO1xcbiBcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjEyLjk5NTk3OTQzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA2MDEzOTM3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfZmFzdF90eF9jYWNoZVwiLFxuICAgIFwibWVzaF9wYXRoX2RlbFwiLFxuICAgIFwibWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BcIixcbiAgICBcIm1lc2hfbmV4dGhvcF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHRoZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGJ5IHNldHRpbmcgTUVTSF9QQVRIX0RFTEVURUQgdW5kZXIgc3RhdGVfbG9jayB3aGVuIGRlbGV0aW5nIGEgbWVzaCBwYXRoIGFuZCBjaGVja2luZyB0aGlzIGZsYWcgaW4gbWVzaF9mYXN0X3R4X2NhY2hlIGJlZm9yZSBjYWNoaW5nIGZhc3QgVFggZW50cmllcy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBzaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBtZXNoIG5ldHdvcmtpbmcgbmw4MDIxMS9kYXRhLXBhdGggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmU0NjVhN2IzMzNiOTQ4Zjc5NzAyNDAzZDQ3NTk1NWI2NDVlYjZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNzoxMDowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uZGZjYzRmM2E3MDg4ZSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtNTc3LDYgKzU3NywxMiBAQCB2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byB1bmxvY2tfc3RhO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNmNhY2hlLVx1MDAzZXdhbGtfbG9jayk7XG4rXHRpZiAoKFJFQURfT05DRShtcGF0aC1cdTAwM2VmbGFncykgXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSB8fFxuK1x0ICAgIChtcHBhdGggXHUwMDI2XHUwMDI2IChSRUFEX09OQ0UobXBwYXRoLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpKSkge1xuK1x0XHRrZnJlZShlbnRyeSk7XG4rXHRcdGdvdG8gdW5sb2NrX2NhY2hlO1xuK1x0fVxuK1xuIFx0cHJldiA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZjYWNoZS1cdTAwM2VyaHQsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNmVudHJ5LVx1MDAzZXJoYXNoLFxuIFx0XHRcdFx0XHRcdCBmYXN0X3R4X3JodF9wYXJhbXMpO1xuQEAgLTgxMiw2ICs4MTgsOSBAQCBzdGF0aWMgdm9pZCBfX21lc2hfcGF0aF9kZWwoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4ge1xuIFx0aGxpc3RfZGVsX3JjdShcdTAwMjZtcGF0aC1cdTAwM2V3YWxrX2xpc3QpO1xuIFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ0YmwtXHUwMDNlcmhlYWQsIFx1MDAyNm1wYXRoLVx1MDAzZXJoYXNoLCBtZXNoX3JodF9wYXJhbXMpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiBcdGlmICh0YmwgPT0gXHUwMDI2bXBhdGgtXHUwMDNlc2RhdGEtXHUwMDNldS5tZXNoLm1wcF9wYXRocylcbiBcdFx0bWVzaF9mYXN0X3R4X2ZsdXNoX2FkZHIobXBhdGgtXHUwMDNlc2RhdGEsIG1wYXRoLVx1MDAzZWRzdCk7XG4gXHRlbHNlXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDoxMi45OTU5ODA4OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQxMTk0NjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBEaXZpbmcgaW50byBgbWVzaF9wYXRodGJsLmNgKipcblxuT2theSwgc28gdGhlIHBhdGNoIEknbSBsb29raW5nIGF0IHNwZWNpZmljYWxseSB0b3VjaGVzIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIG1ldGljdWxvdXNseSBhbmFseXplIHRoZSBnaXQgZGlmZiB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0J3MgYmVpbmcgY2hhbmdlZC4gQmV5b25kIGp1c3QgdGhlIGRpZmYsIHRob3VnaCwgSSBuZWVkIHRvIHpvb20gb3V0IGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgZ2VuZXJhbCBmbG93IHRvIHRydWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIEtjb25maWcgcHJlcmVxdWlzaXRlcy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBjb2RlIHJlbGllcyBvbj8gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ2xsIGJlIHVzaW5nIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSBjb21iIHRocm91Z2ggYm90aCBgbWVzaF9wYXRodGJsLmNgIGFuZCBgS2NvbmZpZ2AuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgZmluZCByZWxldmFudCBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBwYXRjaCdzIGJlaGF2aW9yLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWUgLSBJIGFsd2F5cyBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgYXNzZXNzaW5nIHRoZSBjb2RlIGluIGlzb2xhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDoyOC40MDc5MzA0ODhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdFxcdGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpO1xcbiA1NzM6XFx0XFx0cWNbMV0gfD0gSUVFRTgwMjExX1FPU19DVExfTUVTSF9DT05UUk9MX1BSRVNFTlQgXFx1MDAzZVxcdTAwM2UgODtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0ZW50cnkgPSBrbWVtZHVwKFxcdTAwMjZidWlsZCwgc2l6ZW9mKGJ1aWxkKSwgR0ZQX0FUT01JQyk7XFxuIDU3NjpcXHRcXHRpZiAoIWVudHJ5KVxcbiA1Nzc6XFx0XFx0XFx0Z290byB1bmxvY2tfc3RhO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbiA1ODA6XFx0XFx0aWYgKChSRUFEX09OQ0UobXBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSB8fFxcbiA1ODE6XFx0XFx0ICAgIChtcHBhdGggXFx1MDAyNlxcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHtcXG4gNTgyOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1ODQ6XFx0XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LFxcbiA1ODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlbnRyeS1cXHUwMDNlcmhhc2gsXFxuIDU4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcXG4gNTg5OlxcdFxcdGlmIChJU19FUlIocHJldikpIHtcXG4gNTkwOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTkxOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1OTI6XFx0XFx0fVxcbiA1OTM6XFx0XFxuIDU5NDpcXHRcXHQvKlxcbiA1OTU6XFx0XFx0ICogcmVwbGFjZSBhbnkgcHJldmlvdXMgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUsIGluIGNhc2Ugd2UncmVcXG4gNTk2OlxcdFxcdCAqIHJlcGxhY2luZyBpdCB3aXRoIGEgZGlmZmVyZW50IHR5cGUgKGUuZy4gbXBhdGggLVxcdTAwM2UgbXBwKVxcbiA1OTc6XFx0XFx0ICovXFxuIDU5ODpcXHRcXHRpZiAodW5saWtlbHkocHJldikpIHtcXG4gNTk5OlxcdFxcdFxcdHJoYXNodGFibGVfcmVwbGFjZV9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LCBcXHUwMDI2cHJldi1cXHUwMDNlcmhhc2gsXFxuIDYwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZW50cnktXFx1MDAzZXJoYXNoLCBmYXN0X3R4X3JodF9wYXJhbXMpO1xcbiA2MDE6XFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2cHJldi1cXHUwMDNld2Fsa19saXN0KTtcXG4gNjAyOlxcdFxcdFxcdGtmcmVlX3JjdShwcmV2LCBmYXN0X3R4LnJjdV9oZWFkKTtcXG4gNjAzOlxcdFxcdH1cXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNmVudHJ5LVxcdTAwM2V3YWxrX2xpc3QsIFxcdTAwMjZjYWNoZS1cXHUwMDNld2Fsa19oZWFkKTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0dW5sb2NrX2NhY2hlOlxcbiA2MDg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbiA2MDk6XFx0dW5sb2NrX3N0YTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6MjguNDA4MDIyMDk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwNTpcXHRcXG4gODA2OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MDc6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfREVMRVRFRDtcXG4gODA4OlxcdFxcdG1lc2hfZ2F0ZV9kZWwodGJsLCBtcGF0aCk7XFxuIDgwOTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MTA6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bXBhdGgtXFx1MDAzZXRpbWVyKTtcXG4gODExOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm1lc2gubXBhdGhzKTtcXG4gODEyOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnRibC1cXHUwMDNlZW50cmllcyk7XFxuIDgxMzpcXHRcXHRtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhtcGF0aCk7XFxuIDgxNDpcXHRcXHRrZnJlZV9yY3UobXBhdGgsIHJjdSk7XFxuIDgxNTpcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4gODE4OlxcdHtcXG4gODE5OlxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNm1wYXRoLVxcdTAwM2V3YWxrX2xpc3QpO1xcbiA4MjA6XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dGJsLVxcdTAwM2VyaGVhZCwgXFx1MDAyNm1wYXRoLVxcdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcXG4gODIxOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MjI6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9ERUxFVEVEO1xcbiA4MjM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gODI0OlxcdFxcdGlmICh0YmwgPT0gXFx1MDAyNm1wYXRoLVxcdTAwM2VzZGF0YS1cXHUwMDNldS5tZXNoLm1wcF9wYXRocylcXG4gODI1OlxcdFxcdFxcdG1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLVxcdTAwM2VzZGF0YSwgbXBhdGgtXFx1MDAzZWRzdCk7XFxuIDgyNjpcXHRcXHRlbHNlXFxuIDgyNzpcXHRcXHRcXHRtZXNoX2Zhc3RfdHhfZmx1c2hfbXBhdGgobXBhdGgpO1xcbiA4Mjg6XFx0XFx0bWVzaF9wYXRoX2ZyZWVfcmN1KHRibCwgbXBhdGgpO1xcbiA4Mjk6XFx0fVxcbiA4MzA6XFx0XFxuIDgzMTpcXHQvKipcXG4gODMyOlxcdCAqIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wIC0gRGVsZXRlcyBtZXNoIHBhdGhzIGlmIHRoZWlyIG5leHQgaG9wIG1hdGNoZXNcXG4gODMzOlxcdCAqXFxuIDgzNDpcXHQgKiBAc3RhOiBtZXNoIHBlZXIgdG8gbWF0Y2hcXG4gODM1OlxcdCAqXFxuIDgzNjpcXHQgKiBSQ1Ugbm90ZXM6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBtZXNoIHBsaW5rIHRyYW5zaXRpb25zIGZyb21cXG4gODM3OlxcdCAqIFBMSU5LX0VTVEFCIHRvIGFueSBvdGhlciBzdGF0ZSwgc2luY2UgUExJTktfRVNUQUIgc3RhdGUgaXMgdGhlIG9ubHkgb25lIHRoYXRcXG4gODM4OlxcdCAqIGFsbG93cyBwYXRoIGNyZWF0aW9uLiBUaGlzIHdpbGwgaGFwcGVuIGJlZm9yZSB0aGUgc3RhIGNhbiBiZSBmcmVlZCAoYmVjYXVzZVxcbiA4Mzk6XFx0ICogc3RhX2luZm9fZGVzdHJveSgpIGNhbGxzIHRoaXMpIHNvIGFueSByZWFkZXIgaW4gYSByY3UgcmVhZCBibG9jayB3aWxsIGJlXFxuIDg0MDpcXHQgKiBwcm90ZWN0ZWQgYWdhaW5zdCB0aGUgcGxpbmsgZGlzYXBwZWFyaW5nLlxcbiA4NDE6XFx0ICovXFxuIDg0MjpcXHR2b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbiA4NDM6XFx0e1xcbiA4NDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXFx1MDAzZXNkYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDoyOC40MDgwODA5MThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxOTYzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9mYXN0X3R4X2NhY2hlfF9fbWVzaF9wYXRoX2RlbHxtZXNoX3BhdGh0YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9NYWtlZmlsZT00Nz1tYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9NRVNIKSArPSBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ4LVxcdG1lc2gubyBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ5OlxcdG1lc2hfcGF0aHRibC5vIFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNTAtXFx0bWVzaF9wbGluay5vIFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc1Nz12b2lkIGllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jLTE3NzUtXFxubmV0L21hYzgwMjExL21lc2guYzoxNzc2OlxcdG1lc2hfcGF0aHRibF9pbml0KHNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jLTE3NzctXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jPTE3OTA9dm9pZCBpZWVlODAyMTFfbWVzaF90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc5Mi1cXHRtZXNoX3JtY19mcmVlKHNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jOjE3OTM6XFx0bWVzaF9wYXRodGJsX3VucmVnaXN0ZXIoc2RhdGEpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc5NC19XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM1ND12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oOjM1NTp2b2lkIG1lc2hfcGF0aHRibF9pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oOjM1Njp2b2lkIG1lc2hfcGF0aHRibF91bnJlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1Ny1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guaD0zNjg9Ym9vbCBpZWVlODAyMTFfbWVzaF94bWl0X2Zhc3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21lc2guaC0zNjktXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGN0cmxfZmxhZ3MpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzcwOnZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzcxLVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjU4PWludCBtZXNoX25leHRob3BfbG9va3VwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODItXFx0XFx0aWYgKGllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgU1VQUE9SVF9GQVNUX1hNSVQpKVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMjgzOlxcdFxcdFxcdG1lc2hfZmFzdF90eF9jYWNoZShzZGF0YSwgc2tiLCBtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9NDM0PW1lc2hfZmFzdF90eF9nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDYyLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo0NjM6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQ2NC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz04MDE9c3RhdGljIHZvaWQgbWVzaF9wYXRoX2ZyZWVfcmN1KHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODE2LVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo4MTc6c3RhdGljIHZvaWQgX19tZXNoX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04MTgte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg0Mj12b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTg1MS1cXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1wYXRoLVxcdTAwM2VuZXh0X2hvcCkgPT0gc3RhKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo4NTI6XFx0XFx0XFx0X19tZXNoX3BhdGhfZGVsKHRibCwgbXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NTMtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg1Nz1zdGF0aWMgdm9pZCBtcHBfZmx1c2hfYnlfcHJveHkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODY2LVxcdFxcdGlmIChldGhlcl9hZGRyX2VxdWFsKG1wYXRoLVxcdTAwM2VtcHAsIHByb3h5KSlcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODY3OlxcdFxcdFxcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODY4LVxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz04NzI9c3RhdGljIHZvaWQgdGFibGVfZmx1c2hfYnlfaWZhY2Uoc3RydWN0IG1lc2hfdGFibGUgKnRibClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NzgtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcGF0aCwgbiwgXFx1MDAyNnRibC1cXHUwMDNld2Fsa19oZWFkLCB3YWxrX2xpc3QpIHtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODc5OlxcdFxcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODgwLVxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05MDY9c3RhdGljIGludCB0YWJsZV9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTkxOC1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTE5OlxcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTIwLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YmwtXFx1MDAzZXdhbGtfbG9jayk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTA1Nj12b2lkIG1lc2hfcGF0aF9maXhfbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDczLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMDc0OnZvaWQgbWVzaF9wYXRodGJsX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzUte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwODI9dm9pZCBtZXNoX3BhdGhfdGJsX2V4cGlyZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDkyLVxcdFxcdCAgICAgdGltZV9hZnRlcihqaWZmaWVzLCBtcGF0aC1cXHUwMDNlZXhwX3RpbWUgKyBNRVNIX1BBVEhfRVhQSVJFKSlcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTA5MzpcXHRcXHRcXHRfX21lc2hfcGF0aF9kZWwodGJsLCBtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwOTQtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwOTg9dm9pZCBtZXNoX3BhdGhfZXhwaXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTExMDMtXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjExMDQ6dm9pZCBtZXNoX3BhdGh0YmxfdW5yZWdpc3RlcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTEwNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjI4LjQ5NDI4MjI2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxODkyMjA2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgS2NvbmZpZyBvcHRpb25zIGludm9sdmVkIGhlcmUuIFRpbWUgdG8ganVtcCBpbnRvIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgdXN1YWxseSBoYXBwZW5zLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoZXkgbWlnaHQgaGF2ZSB3aXRoIG90aGVyLCBzZWVtaW5nbHkgdW5yZWxhdGVkLCBjb25maWd1cmF0aW9ucy4gSXQncyBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0IGJlZm9yZSBJIHN0YXJ0IGRvd24gYW55IG90aGVyIHBhdGgsIG9yIEknbSBsaWtlbHkgZ29pbmcgdG8gd2FzdGUgbXkgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjMxLjY4MzUwNTA5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ4MjE2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFDODAyMTFfTUVTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjA5PWNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMS1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjEzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIyMj1jb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyNC1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNy1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzg6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjM5LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTAtXFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MS1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWctMjcyLVxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzQtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlPTQxPW1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00Ni1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDc6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTUVTSCkgKz0gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00OC1cXHRtZXNoLm8gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTYxMz1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEwLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NzExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy03MTItXFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V1Lm1lc2guc2VjdXJpdHkgIT0gSUVFRTgwMjExX01FU0hfU0VDX05PTkUpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9MjE5MD1zdGF0aWMgdm9pZCBzdGFfYXBwbHlfbWVzaF9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5My17XFxubmV0L21hYzgwMjExL2NmZy5jOjIxOTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTIxOTUtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXFx1MDAzZXNkYXRhO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTI3ODc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yODkzLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yODk1LXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9tcGF0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ0Mjg9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2FmdGVyX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUxLVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NDUyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUzLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1NC1cXHRcXHRicmVhaztcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY1NTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1Ni1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk2LVxcdC5kdW1wX3N1cnZleSA9IGllZWU4MDIxMV9kdW1wX3N1cnZleSxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5NzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5OC1cXHQuYWRkX21wYXRoID0gaWVlZTgwMjExX2FkZF9tcGF0aCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTUyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTQ6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU1LSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU3LSNlbmRpZlxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU4LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjU5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2MDojZGVmaW5lIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC02MS0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYyOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTYzLSNlbmRpZlxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY0LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY2OiNkZWZpbmUgTUFDODAyMTFfTUVTSF9QU19ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjctI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2ODojZGVmaW5lIE1BQzgwMjExX01FU0hfUFNfREVCVUcgMFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY5LSNlbmRpZlxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTgtI2RlZmluZSBtc3luY19kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcsXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIyMC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjM6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI0LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjYtI2RlZmluZSBtcHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjI3OlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUVTSF9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz03MzY9SUVFRTgwMjExX0lGX0xJTktfRklMRShhZGRyLCBjb25mLVxcdTAwM2VhZGRyLCBNQUMpO1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczNy1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo3Mzg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtNzM5LUlFRUU4MDIxMV9JRl9GSUxFKGVzdGFiX3BsaW5rcywgdS5tZXNoLmVzdGFiX3BsaW5rcywgQVRPTUlDKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTg2OD1zdGF0aWMgdm9pZCBhZGRfaWJzc19maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3Mi1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo4NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtODc0LVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9OTM3PXN0YXRpYyB2b2lkIGFkZF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk0OS1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM6OTUwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk1MS1cXHRcXHRhZGRfbWVzaF9maWxlcyhzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD03Nzk9c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1OS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo4NjA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtODYxLSNkZWZpbmUgSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQyhtc2gsIG5hbWUpXFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYz0xMTM3PWludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTItXFxubmV0L21hYzgwMjExL21haW4uYzoxMzkzOiNpZm5kZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTQtXFx0LyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM3OD12b2lkIG1lc2hfcGF0aF9yZWZyZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2guaC0zODAtXFxubmV0L21hYzgwMjExL21lc2guaDozODE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL21lc2guaC0zODItc3RhdGljIGlubGluZVxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz04MTA9aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTgzOS1cXHRcXHRcXHRuZWVkX29mZmNoYW4gPSB0cnVlO1xcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6ODQwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQxLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9Mjc5Mj1pZWVlODAyMTFfZGVsaXZlcl9za2Ioc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTEtXFxubmV0L21hYzgwMjExL3J4LmM6Mjg5MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvcnguYy0yODkzLXN0YXRpYyBib29sXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0yOTU5PWllZWU4MDIxMV9yeF9tZXNoX2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMjk2MS17XFxubmV0L21hYzgwMjExL3J4LmM6Mjk2MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvcnguYy0yOTYzLVxcdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUubWVzaDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTQ2OD12b2lkIHN0YV9pbmZvX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA2LVxcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoc3RhLVxcdTAwM2VzdGEucmF0ZXMpKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA4LVxcdGtmcmVlKHN0YS1cXHUwMDNlbWVzaCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz02MzM9X19zdGFfaW5mb19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY2Ny1cXHR3aXBoeV93b3JrX2luaXQoXFx1MDAyNnN0YS1cXHUwMDNlYW1wZHVfbWxtZS53b3JrLCBpZWVlODAyMTFfYmFfc2Vzc2lvbl93b3JrKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo2Njg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY5LVxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy03OTUtXFx0c3RhX2luZm9fZnJlZV9saW5rKFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmspO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjc5NjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy03OTctXFx0a2ZyZWUoc3RhLVxcdTAwM2VtZXNoKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTExMDc9c3RhdGljIHZvaWQgX19zdGFfaW5mb19yZWNhbGNfdGltKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIGlnbm9yZV9wZW5kaW5nKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMS1cXHRcXHRwcyA9IFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vic3MtXFx1MDAzZXBzO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjExMjI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMy1cXHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcXHUwMDI2c3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSkge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9Mjc0Mz1zdGF0aWMgaW5saW5lIHU2NCBzdGFfZ2V0X3N0YXRzX2J5dGVzKHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpyeHN0YXRzKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc1NS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyNzU2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI3NTctc3RhdGljIHZvaWQgc3RhX3NldF9tZXNoX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzA3OT12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzI2NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMyNjYtXFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03MTU9c3RydWN0IHN0YV9pbmZvIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTczMi1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo3MzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtNzM0LVxcdHN0cnVjdCBtZXNoX3N0YSAqbWVzaDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTgwMD1zdGF0aWMgaW5saW5lIGVudW0gbmw4MDIxMV9wbGlua19zdGF0ZSBzdGFfcGxpbmtfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEpXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODAxLXtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4MDI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODAzLVxcdHJldHVybiBzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZXBsaW5rX3N0YXRlO1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjU2Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjU4Ni1cXHRcXHRicmVhaztcXG5uZXQvbWFjODAyMTEvdHguYzoyNTg3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS90eC5jLTI1ODgtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjY4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yNzg3LVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS90eC5jOjI3ODg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3R4LmMtMjc4OS1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0zMDMyLVxcbm5ldC9tYWM4MDIxMS90eC5jOjMwMzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3R4LmMtMzAzNC1cXHRpZiAobWVzaGhkcmxlbiBcXHUwMDNlIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjMxLjc5ODMzMzEyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzQ2NTQ5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYWM4MDIxMSBNZXNoIFBhdGggVGFibGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBmb2N1c2VkIG9uIHRoZSBgbWVzaF9mYXN0X3R4X2NhY2hlYCBhbmQgYF9fbWVzaF9wYXRoX2RlbGAgZnVuY3Rpb25zLiBJbiBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgdGhlIGNoZWNrIGZvciBgTUVTSF9QQVRIX0RFTEVURURgIHdpdGhpbiB0aGUgYHNwaW5fbG9ja2AgY29udGV4dCBpcyBjcml0aWNhbC4gVGhlIGNvbmNlcm4gaGVyZSBpcyBlbnN1cmluZyBhIHJhY2UgY29uZGl0aW9uIGRvZXNuJ3QgbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBjb25jZXJuLiBUaGUgc2Vjb25kIGNvZGUgYmxvY2sgaGlnaGxpZ2h0cyBob3cgYSBwYXRoIGlzIG1hcmtlZCBhcyBkZWxldGVkIGluIGBfX21lc2hfcGF0aF9kZWxgLCBpbnZvbHZpbmcgbGlzdCBtYW5pcHVsYXRpb24gYW5kIHJoYXNodGFibGUgcmVtb3ZhbCwgYWxsIHdpdGggY2FyZWZ1bCBzcGlubG9jayB1c2FnZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzIGlzc3Vlcy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXAsIGJlY2F1c2UgaWYgbm90IGl0IGNvdWxkIGJlIGV4dHJlbWVseSBkaWZmaWN1bHQgdG8gZmluZCBidWdzLiBTbywgbGV0J3MgY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgaG93IHdlIG1pZ2h0IHRyaWdnZXIgdGhpcyBjb2RlLiBUaGFua2Z1bGx5LCBgbWFjODAyMTFfaHdzaW1gLCB0aGUgdmlydHVhbCBzb2Z0d2FyZSByYWRpbyBzaW11bGF0b3IsIGlzIHRoZSBvYnZpb3VzIHRhcmdldCBoZXJlLiBJJ20gYXdhcmUgdGhhdCB0aGlzIG1vZHVsZSwgYWxvbmcgd2l0aCBtYWM4MDIxMSwgbmw4MDIxMSwgYW5kIGNmZzgwMjExIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzIGluIExpbnV4IGtlcm5lbHMgYW5kIGFyZSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIuIFVzZXIgc3BhY2UgaW50ZXJhY3RzIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHdlIGhhdmUgd2VsbC1kZWZpbmVkIGF0dGFjayBzdXJmYWNlIHZpYSB3aGljaCB0byBleGVyY2lzZSB0aGlzIGNvZGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgYmFzaWMsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX01BQzgwMjExYCBhbmQgYENPTkZJR19NQUM4MDIxMV9NRVNIYCBhcmUgZW5hYmxlZCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIEknbGwgZGl2ZSBpbnRvIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6MzYuNjMyOTkyODc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXHRoZWxwXFxuICA2NjpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IG1hYzgwMjExIGludGVybmFscyB3aXRoIGt1bml0LlxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2OTpcXHRcXG4gIDcwOlxcdGNvbmZpZyBNQUM4MDIxMV9NRVNIXFxuICA3MTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgODAyLjExIG1lc2ggb3BlcmF0aW9uIGluIG1hYzgwMjExXFxuICA3NTpcXHRcXHQgIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0LiAgODAyLjExIG1lc2ggY29ubmVjdHMgbXVsdGlwbGUgc3RhdGlvbnNcXG4gIDc2OlxcdFxcdCAgb3ZlciAocG9zc2libHkgbXVsdGktaG9wKSB3aXJlbGVzcyBsaW5rcyB0byBmb3JtIGEgc2luZ2xlIGxvZ2ljYWxcXG4gIDc3OlxcdFxcdCAgTEFOLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRjb25maWcgTUFDODAyMTFfTEVEU1xcbiAgODA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4gIDgxOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gIDgzOlxcdFxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuICA4NDpcXHRcXHRoZWxwXFxuICA4NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBmZXcgTEVEIHRyaWdnZXJzIGZvciBkaWZmZXJlbnRcXG4gIDg2OlxcdFxcdCAgcGFja2V0IHJlY2VpdmUvdHJhbnNtaXQgZXZlbnRzLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbiAgODk6XFx0XFx0Ym9vbCBcXFwiRXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDozNi42MzMxNDQ3OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ1MzAwNDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIE1BQzgwMjExIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgTUFDODAyMTFgIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMgdGhhdCBkaWN0YXRlIGhvdyBgTUFDODAyMTFgIGlzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgYXJlIGRpcmVjdGx5IGNvbnRpbmdlbnQgdXBvbiB0aGUgYE1BQzgwMjExYCBvcHRpb24uIElzIGl0IGxpbmtlZCB0byBzcGVjaWZpYyByZWd1bGF0b3J5IGRvbWFpbnMsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHBlcmhhcHMgY2VydGFpbiBzZWN1cml0eSBmZWF0dXJlcz8gVW5jb3ZlcmluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMga2V5IGZvciBkZWJ1Z2dpbmcsIG1vZGlmaWNhdGlvbiwgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0aWVzLiBJdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGJlZm9yZSBtYWtpbmcgY2hhbmdlcyB0byBhIHN1YnN5c3RlbSBsaWtlIE1BQzgwMjExLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6NDAuMDg2MTUyNDI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbiAgMjI6XFx0XFx0Ym9vbFxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4gIDI2OlxcdFxcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcXG4gIDI3OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAnbWluc3RyZWwnIFRYIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y2hvaWNlXFxuICAzMjpcXHRcXHRwcm9tcHQgXFxcIkRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFfSEFTX1JDXFxuICAzNDpcXHRcXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgZGVmYXVsdCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxuICAzNzpcXHRcXHQgIG1hYzgwMjExIHdpbGwgdXNlLiBOb3RlIHRoYXQgdGhpcyBkZWZhdWx0IGNhbiBzdGlsbCBiZVxcbiAgMzg6XFx0XFx0ICBvdmVycmlkZGVuIHRocm91Z2ggdGhlIGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28gbW9kdWxlXFxuICAzOTpcXHRcXHQgIHBhcmFtZXRlciBpZiBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjQwLjA4NjIzNTIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzIxMjU2NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gdGhlIFdpcmVsZXNzIFNpbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHRoaXMgd2lyZWxlc3Mgc2ltdWxhdGlvbiBpc3N1ZS4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHByb2JsZW0sIGJ1dCBpdCBqdXN0IGhpdCBtZSDigJMgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgTUFDODAyMTFfSFdTSU1gIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5LiBUaGF0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHdpcmVsZXNzIGhhcmR3YXJlIHNpbXVsYXRpb24gd29ya3MsIGFuZCBpdCdzIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBgL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvYCBkaXJlY3Rvcnkgc3RydWN0dXJlLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzLiBUaGVyZSBjb3VsZCBiZSBzb21lIHN1YnRsZSBmbGFnIG9yIHNldHRpbmcgdGhlcmUgdGhhdOKAmXMgdGhyb3dpbmcgYSB3cmVuY2ggaW50byBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gb3BlbiB1cCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyBhbmQgcmVhbGx5IGRpZyBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbi4gSXQncyB0aW1lIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgY29uZmlncywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6NDQuODA3NDk0MThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzUzMTA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDo0NC45ODUwMjkzMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTAyMDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVzaCBOZXR3b3JraW5nIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19NQUM4MDIxMWAsIGBDT05GSUdfTUFDODAyMTFfTUVTSGAsIGFuZCBgQ09ORklHX0NGRzgwMjExYCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBXaS1GaSBhbmQgbWVzaCBuZXR3b3JraW5nIGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYWZmZWN0IHNwZWNpZmljIGZ1bmN0aW9ucy4gSSdtIHplcm9pbmcgaW4gb24gYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLCBhcyB0aGV5IHNlZW0gdG8gYmUga2V5IHBsYXllcnMuIFRoZXkncmUgZGVmaW5pdGVseSBvbiBteSByYWRhciBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbWVzaF9mYXN0X3R4X2NhY2hlYCBhbmQgYF9fbWVzaF9wYXRoX2RlbGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHBhcnRpY3VsYXJseSBhbnkgZW50cnkgcG9pbnRzIG9yIGhpZ2gtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZhc3QgVFggYW5kIG1lc2ggcGF0aCBoYW5kbGluZyBsb2dpYy4gU28sIGxldCdzIHN0YXJ0IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIHRoZSBjYWxscyB0byBgbWVzaF9mYXN0X3R4X2NhY2hlYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdpbGwgcmV2ZWFsIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgYW55IG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjQ3Ljc1NDA1NDA5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxNzY4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9mYXN0X3R4X2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWVzaC5oPTM2OD1ib29sIGllZWU4MDIxMV9tZXNoX3htaXRfZmFzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM2OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY3RybF9mbGFncyk7XFxubmV0L21hYzgwMjExL21lc2guaDozNzA6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21lc2guaC0zNzEtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4Mi1cXHRcXHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBTVVBQT1JUX0ZBU1RfWE1JVCkpXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyODM6XFx0XFx0XFx0bWVzaF9mYXN0X3R4X2NhY2hlKHNkYXRhLCBza2IsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz00MzQ9bWVzaF9mYXN0X3R4X2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy00NjItXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjQ2Mzp2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDY0LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDo0Ny44NDEyMzY2NzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU5MTU4ODU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVzaCBQYXRoIE1hbmFnZW1lbnQgaW4gbWFjODAyMTEgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgIGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBtZXNoIHBhdGggZGVsZXRpb24gbWVjaGFuaXNtcywgcGFydGljdWxhcmx5IGBfX21lc2hfcGF0aF9kZWxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gRnJvbSB3aGF0IEkgc2VlLCBgX19tZXNoX3BhdGhfZGVsYCBpcyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAsIGBtcHBfZmx1c2hfYnlfcHJveHlgLCBgdGFibGVfZmx1c2hfYnlfaWZhY2VgLCBgdGFibGVfcGF0aF9kZWxgLCBhbmQgYG1lc2hfcGF0aF90YmxfZXhwaXJlYC4gVGhlIHB1YmxpYyBpbnRlcmZhY2UgZm9yIGRlbGV0aW5nIHBhdGhzLCBgbWVzaF9wYXRoX2RlbGAsIGp1c3Qgd3JhcHMgYHRhYmxlX3BhdGhfZGVsYC4gSSBhbHNvIG5vdGljZSB0aGF0IGBpZWVlODAyMTFfbWVzaF94bWl0X2Zhc3RgIHVzZXMgYG1lc2hfZmFzdF90eF9nZXRgLCB3aGljaCBpcyB3b3J0aCByZW1lbWJlcmluZy5cblxuTm93LCBJJ20gY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLiBBaGEsIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIGlzIG5vbi1zdGF0aWMsIHdoaWxlIGBfX21lc2hfcGF0aF9kZWxgIGlzIHN0YXRpYy4gVGhpcyBzdWdnZXN0cyBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgYWxvbmcgd2l0aCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAsIGFuZCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAgbWlnaHQgYmUgaW1wb3J0YW50IGVudHJ5IHBvaW50cy5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkLiBUaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyB0aGUgZmFzdCBwYXRoIFRYIGNhY2hlIGFuZCBwYXRoIGRlbGV0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIHRoZSBgTUVTSF9QQVRIX0RFTEVURURgIGZsYWcgdG8gcHJldmVudCBhZGRpbmcgZGVsZXRlZCBwYXRocyB0byB0aGUgY2FjaGUuIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIHRocm91Z2ggbmw4MDIxMSBtZXNoIG9wZXJhdGlvbnMsIHdoaWNoIG1lYW5zIEkgY2FuIHRyaWdnZXIgY29uY3VycmVudCBmcmFtZSB0cmFuc21pc3Npb24gYW5kIHBhdGggdGFibGUgdXBkYXRlcy4gVGhhdCdzIGEga2V5IGZhY3RvciBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmUgYG1lc2hfZmFzdF90eF9jYWNoZWAsIGBfX21lc2hfcGF0aF9kZWxgLCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX25leHRob3BfbG9va3VwYCwgYWxvbmcgd2l0aCBgbWVzaF9mYXN0X3R4X2ZsdXNoX21wYXRoYCwgYW5kIGBtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcmAuIEhvd2V2ZXIsIGBtZXNoX2Zhc3RfdHhfY2FjaGVgLCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX25leHRob3BfbG9va3VwYCwgYW5kIGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAgYXJlIHBhcnRpY3VsYXJseSBwcm9taXNpbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYE1BQzgwMjExX01FU0hgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhleSdyZSBhbGwgc2V0LiBUaGUgZm9ybWF0IGxvb2tzIGNvcnJlY3QsIGFuZCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQwLCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDo1My40MzI4MzAwMjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1Mzk0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZXNoX2Zhc3RfdHhfY2FjaGVcIixcbiAgICBcIm1lc2hfcGF0aF9kZWxcIixcbiAgICBcIm1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wXCIsXG4gICAgXCJtZXNoX25leHRob3BfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1YnN5c3RlbSBieSBzZXR0aW5nIE1FU0hfUEFUSF9ERUxFVEVEIHVuZGVyIHN0YXRlX2xvY2sgd2hlbiBkZWxldGluZyBhIG1lc2ggcGF0aCBhbmQgY2hlY2tpbmcgdGhpcyBmbGFnIGluIG1lc2hfZmFzdF90eF9jYWNoZSBiZWZvcmUgY2FjaGluZyBmYXN0IFRYIGVudHJpZXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbWVzaCBuZXR3b3JraW5nIG5sODAyMTEvZGF0YS1wYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfZmFzdF90eF9jYWNoZVwiLFxuICAgIFwibWVzaF9wYXRoX2RlbFwiLFxuICAgIFwibWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BcIixcbiAgICBcIm1lc2hfbmV4dGhvcF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHRoZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGJ5IHNldHRpbmcgTUVTSF9QQVRIX0RFTEVURUQgdW5kZXIgc3RhdGVfbG9jayB3aGVuIGRlbGV0aW5nIGEgbWVzaCBwYXRoIGFuZCBjaGVja2luZyB0aGlzIGZsYWcgaW4gbWVzaF9mYXN0X3R4X2NhY2hlIGJlZm9yZSBjYWNoaW5nIGZhc3QgVFggZW50cmllcy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBzaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBtZXNoIG5ldHdvcmtpbmcgbmw4MDIxMS9kYXRhLXBhdGggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6NTMuNTk3Mzc3NDA1WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI5MDM0MjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjUzLjU5NzkzMTg4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0Mjg5NzgzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcy4gVGhlIHBvdGVudGlhbCBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoTE9DS0RFUCkuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYyZTQ2NWE3YjMzM2I5NDhmNzk3MDI0MDNkNDc1OTU1YjY0NWViNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA3OjEwOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5kZmNjNGYzYTcwODhlIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG4rKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcbkBAIC01NzcsNiArNTc3LDEyIEBAIHZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRnb3RvIHVubG9ja19zdGE7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2Y2FjaGUtXHUwMDNld2Fsa19sb2NrKTtcbitcdGlmICgoUkVBRF9PTkNFKG1wYXRoLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpIHx8XG4rXHQgICAgKG1wcGF0aCBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XG4rXHRcdGtmcmVlKGVudHJ5KTtcbitcdFx0Z290byB1bmxvY2tfY2FjaGU7XG4rXHR9XG4rXG4gXHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFx1MDAyNmNhY2hlLVx1MDAzZXJodCxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2ZW50cnktXHUwMDNlcmhhc2gsXG4gXHRcdFx0XHRcdFx0IGZhc3RfdHhfcmh0X3BhcmFtcyk7XG5AQCAtODEyLDYgKzgxOCw5IEBAIHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbiB7XG4gXHRobGlzdF9kZWxfcmN1KFx1MDAyNm1wYXRoLVx1MDAzZXdhbGtfbGlzdCk7XG4gXHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnRibC1cdTAwM2VyaGVhZCwgXHUwMDI2bXBhdGgtXHUwMDNlcmhhc2gsIG1lc2hfcmh0X3BhcmFtcyk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRtcGF0aC1cdTAwM2VmbGFncyB8PSBNRVNIX1BBVEhfREVMRVRFRDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIFx0aWYgKHRibCA9PSBcdTAwMjZtcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V1Lm1lc2gubXBwX3BhdGhzKVxuIFx0XHRtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC1cdTAwM2VzZGF0YSwgbXBhdGgtXHUwMDNlZHN0KTtcbiBcdGVsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjUzLjU5NzkzMjcyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTE0NjQ1MDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2Agd2FycmFudHMgaXRzIG93biBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZSBwYXRjaCBpdHNlbGYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtb2RpZmljYXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlICpjb250ZXh0KiBvZiB0aG9zZSBjaGFuZ2VzIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgKmRvaW5nKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgdXNlIG15IHByZWZlcnJlZCBtZXRob2QgdG8gcmVhZCB0aGUgZmlsZSwgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1NzcgYW5kIDgxMiBvZiBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYC4gVGhlc2UgbGluZXMgYXJlIG15IGluaXRpYWwgcG9pbnRzIG9mIGludGVyZXN0LiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZ3Jhc3AgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiBjb2RlLiBPbmNlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvZGUgaW4gdGhhdCBzZWN0aW9uLCBJIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgYSB3ZWxsLWluZm9ybWVkIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY0LCJPdXRwdXRUb2tlbnMiOjg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTE6MDQuNzQ0Mzg4NzQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUwOlxcdFxcdFxcdFxcdFxcdGJ1aWxkLmZhc3RfdHguaGRyX2xlbiArPSBJRUVFODAyMTFfR0NNUF9IRFJfTEVOO1xcbiA1NTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU1MjpcXHRcXHRcXHRkZWZhdWx0OlxcbiA1NTM6XFx0XFx0XFx0XFx0Z290byB1bmxvY2tfc3RhO1xcbiA1NTQ6XFx0XFx0XFx0fVxcbiA1NTU6XFx0XFx0fVxcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHRtZW1jcHkoYnVpbGQua2V5LmFkZHIsIG1wcGF0aC1cXHUwMDNlZHN0LCBFVEhfQUxFTik7XFxuIDU1ODpcXHRcXHRidWlsZC50aW1lc3RhbXAgPSBqaWZmaWVzO1xcbiA1NTk6XFx0XFx0YnVpbGQuZmFzdF90eC5iYW5kID0gaW5mby1cXHUwMDNlYmFuZDtcXG4gNTYwOlxcdFxcdGJ1aWxkLmZhc3RfdHguZGFfb2ZmcyA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfaGRyLCBhZGRyMyk7XFxuIDU2MTpcXHRcXHRidWlsZC5mYXN0X3R4LnNhX29mZnMgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX2hkciwgYWRkcjQpO1xcbiA1NjI6XFx0XFx0YnVpbGQubXBhdGggPSBtcGF0aDtcXG4gNTYzOlxcdFxcdG1lbWNweShidWlsZC5oZHIsIG1lc2hoZHIsIGJ1aWxkLmhkcmxlbik7XFxuIDU2NDpcXHRcXHRtZW1jcHkoYnVpbGQuaGRyICsgYnVpbGQuaGRybGVuLCByZmMxMDQyX2hlYWRlciwgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKSk7XFxuIDU2NTpcXHRcXHRidWlsZC5oZHJsZW4gKz0gc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKTtcXG4gNTY2OlxcdFxcdG1lbWNweShidWlsZC5mYXN0X3R4LmhkciwgaGRyLCBidWlsZC5mYXN0X3R4Lmhkcl9sZW4pO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWlsZC5mYXN0X3R4LmhkcjtcXG4gNTY5OlxcdFxcdGlmIChidWlsZC5mYXN0X3R4LmtleSlcXG4gNTcwOlxcdFxcdFxcdGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpO1xcbiA1NzM6XFx0XFx0cWNbMV0gfD0gSUVFRTgwMjExX1FPU19DVExfTUVTSF9DT05UUk9MX1BSRVNFTlQgXFx1MDAzZVxcdTAwM2UgODtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0ZW50cnkgPSBrbWVtZHVwKFxcdTAwMjZidWlsZCwgc2l6ZW9mKGJ1aWxkKSwgR0ZQX0FUT01JQyk7XFxuIDU3NjpcXHRcXHRpZiAoIWVudHJ5KVxcbiA1Nzc6XFx0XFx0XFx0Z290byB1bmxvY2tfc3RhO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbiA1ODA6XFx0XFx0aWYgKChSRUFEX09OQ0UobXBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSB8fFxcbiA1ODE6XFx0XFx0ICAgIChtcHBhdGggXFx1MDAyNlxcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHtcXG4gNTgyOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1ODQ6XFx0XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LFxcbiA1ODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlbnRyeS1cXHUwMDNlcmhhc2gsXFxuIDU4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcXG4gNTg5OlxcdFxcdGlmIChJU19FUlIocHJldikpIHtcXG4gNTkwOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTkxOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1OTI6XFx0XFx0fVxcbiA1OTM6XFx0XFxuIDU5NDpcXHRcXHQvKlxcbiA1OTU6XFx0XFx0ICogcmVwbGFjZSBhbnkgcHJldmlvdXMgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUsIGluIGNhc2Ugd2UncmVcXG4gNTk2OlxcdFxcdCAqIHJlcGxhY2luZyBpdCB3aXRoIGEgZGlmZmVyZW50IHR5cGUgKGUuZy4gbXBhdGggLVxcdTAwM2UgbXBwKVxcbiA1OTc6XFx0XFx0ICovXFxuIDU5ODpcXHRcXHRpZiAodW5saWtlbHkocHJldikpIHtcXG4gNTk5OlxcdFxcdFxcdHJoYXNodGFibGVfcmVwbGFjZV9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LCBcXHUwMDI2cHJldi1cXHUwMDNlcmhhc2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjExOjA0Ljc0NDYwMTY5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9mcmVlX3JjdShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLFxcbiA4MDI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbiA4MDM6XFx0e1xcbiA4MDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBtcGF0aC1cXHUwMDNlc2RhdGE7XFxuIDgwNTpcXHRcXG4gODA2OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MDc6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfREVMRVRFRDtcXG4gODA4OlxcdFxcdG1lc2hfZ2F0ZV9kZWwodGJsLCBtcGF0aCk7XFxuIDgwOTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MTA6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bXBhdGgtXFx1MDAzZXRpbWVyKTtcXG4gODExOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm1lc2gubXBhdGhzKTtcXG4gODEyOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnRibC1cXHUwMDNlZW50cmllcyk7XFxuIDgxMzpcXHRcXHRtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhtcGF0aCk7XFxuIDgxNDpcXHRcXHRrZnJlZV9yY3UobXBhdGgsIHJjdSk7XFxuIDgxNTpcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4gODE4OlxcdHtcXG4gODE5OlxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNm1wYXRoLVxcdTAwM2V3YWxrX2xpc3QpO1xcbiA4MjA6XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dGJsLVxcdTAwM2VyaGVhZCwgXFx1MDAyNm1wYXRoLVxcdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcXG4gODIxOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MjI6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9ERUxFVEVEO1xcbiA4MjM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gODI0OlxcdFxcdGlmICh0YmwgPT0gXFx1MDAyNm1wYXRoLVxcdTAwM2VzZGF0YS1cXHUwMDNldS5tZXNoLm1wcF9wYXRocylcXG4gODI1OlxcdFxcdFxcdG1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLVxcdTAwM2VzZGF0YSwgbXBhdGgtXFx1MDAzZWRzdCk7XFxuIDgyNjpcXHRcXHRlbHNlXFxuIDgyNzpcXHRcXHRcXHRtZXNoX2Zhc3RfdHhfZmx1c2hfbXBhdGgobXBhdGgpO1xcbiA4Mjg6XFx0XFx0bWVzaF9wYXRoX2ZyZWVfcmN1KHRibCwgbXBhdGgpO1xcbiA4Mjk6XFx0fVxcbiA4MzA6XFx0XFxuIDgzMTpcXHQvKipcXG4gODMyOlxcdCAqIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wIC0gRGVsZXRlcyBtZXNoIHBhdGhzIGlmIHRoZWlyIG5leHQgaG9wIG1hdGNoZXNcXG4gODMzOlxcdCAqXFxuIDgzNDpcXHQgKiBAc3RhOiBtZXNoIHBlZXIgdG8gbWF0Y2hcXG4gODM1OlxcdCAqXFxuIDgzNjpcXHQgKiBSQ1Ugbm90ZXM6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBtZXNoIHBsaW5rIHRyYW5zaXRpb25zIGZyb21cXG4gODM3OlxcdCAqIFBMSU5LX0VTVEFCIHRvIGFueSBvdGhlciBzdGF0ZSwgc2luY2UgUExJTktfRVNUQUIgc3RhdGUgaXMgdGhlIG9ubHkgb25lIHRoYXRcXG4gODM4OlxcdCAqIGFsbG93cyBwYXRoIGNyZWF0aW9uLiBUaGlzIHdpbGwgaGFwcGVuIGJlZm9yZSB0aGUgc3RhIGNhbiBiZSBmcmVlZCAoYmVjYXVzZVxcbiA4Mzk6XFx0ICogc3RhX2luZm9fZGVzdHJveSgpIGNhbGxzIHRoaXMpIHNvIGFueSByZWFkZXIgaW4gYSByY3UgcmVhZCBibG9jayB3aWxsIGJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjExOjA0Ljc0NDc4OTcyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE0MjkwNzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogTWVzaCBQYXRoIERlbGV0aW9uIGFuZCBGYXN0IFRYIENhY2hpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZXhhbWluaW5nIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgODAyLjExIG1lc2ggcGF0aCB0YWJsZSAoYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2ApLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGRlbGV0aW5nIG1lc2ggcGF0aHMgKGBfX21lc2hfcGF0aF9kZWxgKSBhbmQgdGhlIGZhc3QgVFggY2FjaGluZyBtZWNoYW5pc20gKGBtZXNoX2Zhc3RfdHhfY2FjaGVgKS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1Zy5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgX19tZXNoX3BhdGhfZGVsYCBmdW5jdGlvbiBzZXRzIHRoZSBgTUVTSF9QQVRIX0RFTEVURURgIGZsYWcgb24gYSBgbXBhdGhgIChvciBgbXBwYXRoYCkgc3RydWN0dXJlIGJlZm9yZSBmbHVzaGluZyB0aGUgZmFzdCBUWCBjYWNoZSBhbmQgdWx0aW1hdGVseSBmcmVlaW5nIHRoZSBgbXBhdGhgIG1lbW9yeS4gVGhlIHByb2JsZW0gc3RlbXMgZnJvbSB0aGUgcG9zc2liaWxpdHkgb2YgYG1lc2hfZmFzdF90eF9jYWNoZWAgcmFjaW5nIHdpdGggdGhpcyBkZWxldGlvbiBwcm9jZXNzLiBJZiB0aGUgY2FjaGUgYXR0ZW1wdHMgdG8gYWRkIGFuIGVudHJ5ICphZnRlciogdGhlIGZhc3QgVFggZmx1c2ggYnV0ICpiZWZvcmUqIHRoZSBgbXBhdGhgIGlzIGFjdHVhbGx5IGZyZWVkLCBpdCB3b3VsZCBlbmQgdXAgcmVmZXJlbmNpbmcgZnJlZWQgbWVtb3J5LCBhIGNsYXNzaWMgVUFGIHNjZW5hcmlvLlxuXG5UaGUgcGF0Y2gncyBmaXggaW52b2x2ZXMgY2hlY2tpbmcgdGhlIGBNRVNIX1BBVEhfREVMRVRFRGAgZmxhZyB3aXRoaW4gYG1lc2hfZmFzdF90eF9jYWNoZWAsIHByb3RlY3RlZCBieSBgY2FjaGUtXHUwMDNld2Fsa19sb2NrYCAob3IgYmVmb3JlIGluc2VydGlvbiBpbnRvIHRoZSByaGFzaHRhYmxlKS4gIElmIHRoZSBmbGFnIGlzIHNldCwgdGhlIGVudHJ5IGlzIG5vdCBhZGRlZCB0byB0aGUgY2FjaGUsIHByZXZlbnRpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXIuIFRoaXMgbG9vayBsaWtlIGEgZ29vZCwgc29saWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS5cblxuTm93LCBsZXQncyBhZGRyZXNzIHRoZSBjcnVjaWFsIEtNU0FOIHF1ZXN0aW9uLiAgRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zPyAgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVGhlIGBtcGF0aC1cdTAwM2VmbGFnc2AgZmllbGQgaXMgYWxyZWFkeSBhbiBlc3RhYmxpc2hlZCBmaWVsZCwgYW5kIHRoZSBjb2RlIHJlYWRzIGl0IHVzaW5nIGBSRUFEX09OQ0VgLCB3aGljaCBhcHBlYXJzIHNhZmUuIEFsc28sIGFueSBuZXdseSBjcmVhdGVkIGVudHJpZXMgdmlhIGBrbWVtZHVwYCBhcmUgaW1tZWRpYXRlbHkgZnJlZWQgaWYgdGhlIGRlbGV0ZWQgZmxhZyBpcyBmb3VuZC4gSXQncyBlc3NlbnRpYWxseSBtaXRpZ2F0aW5nIGFuIGV4aXN0aW5nIGNvbmN1cnJlbmN5IGlzc3VlLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBlcnJvcnMuIFRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRhcmdldHMgYSBVQUYgdnVsbmVyYWJpbGl0eSwgYW5kIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGRldGVjdCB0aGlzLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBuZXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgZG9lc24ndCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHJlYWRzLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gS0FTQU4gc2hvdWxkIGNhdGNoIHRoZSB0eXBlIG9mIGJ1ZyB0aGlzIHBhdGNoIGlzIHByZXZlbnRpbmcuXG5cbk9rYXksIEkndmUgZ290IGEgY2xlYXIgdW5kZXJzdGFuZGluZy4gTGV0J3MgZ2V0IHRoZSB0b29sIGNhbGwgcmVhZHkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODMsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTE6MjcuODg3Njk4NTM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcy4gVGhlIHBvdGVudGlhbCBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoTE9DS0RFUCkuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIG1lc2ggcGF0aCBkZWxldGlvbiAoX19tZXNoX3BhdGhfZGVsKSBhbmQgZmFzdCBUWCBjYWNoZSBlbnRyeSBpbnNlcnRpb24gKG1lc2hfZmFzdF90eF9jYWNoZSkgaW4gbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgZmxhZ3MgbWVzaCBwYXRocyBhcyBNRVNIX1BBVEhfREVMRVRFRCBwcmlvciB0byBmbHVzaGluZyBmYXN0IFRYIGNhY2hlIGFuZCBjaGVja3MgdGhpcyBmbGFnIGJlZm9yZSBpbnNlcnRpbmcgbmV3IGNhY2hlIGVudHJpZXMgdG8gcHJldmVudCBkYW5nbGluZyBtZXNoX3BhdGggcmVmZXJlbmNlcyBhbmQgc3Vic2VxdWVudCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWdzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 06:05:48 +0000 UTC FinishedAt: 2026-09-09 07:11:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_MESH", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "13e51269b6656768dc595ed6025e4974f2026543", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CFG80211", "MAC80211", "MAC80211_MESH", "MAC80211_HWSIM" ], "series_id": "9d9fd6a3-337b-4246-8bb7-4ce19e2d9963" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mesh_fast_tx_cache", "mesh_path_del", "mesh_path_flush_by_nexthop", "mesh_nexthop_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX2Zhc3RfdHhfY2FjaGUmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX2RlbCYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDttZXNoX25leHRob3BfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbWVzaCBwYXRoIGRlbGV0aW9uIChfX21lc2hfcGF0aF9kZWwpIGFuZCBmYXN0IFRYIGNhY2hlIGVudHJ5IGluc2VydGlvbiAobWVzaF9mYXN0X3R4X2NhY2hlKSBpbiBtYWM4MDIxMS4gU3BlY2lmaWNhbGx5LCBpdCBmbGFncyBtZXNoIHBhdGhzIGFzIE1FU0hfUEFUSF9ERUxFVEVEIHByaW9yIHRvIGZsdXNoaW5nIGZhc3QgVFggY2FjaGUgYW5kIGNoZWNrcyB0aGlzIGZsYWcgYmVmb3JlIGluc2VydGluZyBuZXcgY2FjaGUgZW50cmllcyB0byBwcmV2ZW50IGRhbmdsaW5nIG1lc2hfcGF0aCByZWZlcmVuY2VzIGFuZCBzdWJzZXF1ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1Z3MuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gYnkgc2V0dGluZyBNRVNIX1BBVEhfREVMRVRFRCB1bmRlciBzdGF0ZV9sb2NrIHdoZW4gZGVsZXRpbmcgYSBtZXNoIHBhdGggYW5kIGNoZWNraW5nIHRoaXMgZmxhZyBpbiBtZXNoX2Zhc3RfdHhfY2FjaGUgYmVmb3JlIGNhY2hpbmcgZmFzdCBUWCBlbnRyaWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHNpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG1lc2ggbmV0d29ya2luZyBubDgwMjExL2RhdGEtcGF0aCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjJlNDY1YTdiMzMzYjk0OGY3OTcwMjQwM2Q0NzU5NTViNjQ1ZWI2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMDc6MTA6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5kZmNjNGYzYTcwODhlIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcbkBAIC01NzcsNiAmIzQzOzU3NywxMiBAQCB2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byB1bmxvY2tfc3RhO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNmNhY2hlLVx1MDAzZXdhbGtfbG9jayk7XG4mIzQzO1x0aWYgKChSRUFEX09OQ0UobXBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkgfHxcbiYjNDM7XHQgICAgKG1wcGF0aCBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XG4mIzQzO1x0XHRrZnJlZShlbnRyeSk7XG4mIzQzO1x0XHRnb3RvIHVubG9ja19jYWNoZTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cHJldiA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZjYWNoZS1cdTAwM2VyaHQsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNmVudHJ5LVx1MDAzZXJoYXNoLFxuIFx0XHRcdFx0XHRcdCBmYXN0X3R4X3JodF9wYXJhbXMpO1xuQEAgLTgxMiw2ICYjNDM7ODE4LDkgQEAgc3RhdGljIHZvaWQgX19tZXNoX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuIHtcbiBcdGhsaXN0X2RlbF9yY3UoXHUwMDI2bXBhdGgtXHUwMDNld2Fsa19saXN0KTtcbiBcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2dGJsLVx1MDAzZXJoZWFkLCBcdTAwMjZtcGF0aC1cdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4mIzQzO1x0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7XG4mIzQzO1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4gXHRpZiAodGJsID09IFx1MDAyNm1wYXRoLVx1MDAzZXNkYXRhLVx1MDAzZXUubWVzaC5tcHBfcGF0aHMpXG4gXHRcdG1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLVx1MDAzZXNkYXRhLCBtcGF0aC1cdTAwM2Vkc3QpO1xuIFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX01FU0gmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZXNoX2Zhc3RfdHhfY2FjaGUmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX2RlbCYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDttZXNoX25leHRob3BfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdWJzeXN0ZW0gYnkgc2V0dGluZyBNRVNIX1BBVEhfREVMRVRFRCB1bmRlciBzdGF0ZV9sb2NrIHdoZW4gZGVsZXRpbmcgYSBtZXNoIHBhdGggYW5kIGNoZWNraW5nIHRoaXMgZmxhZyBpbiBtZXNoX2Zhc3RfdHhfY2FjaGUgYmVmb3JlIGNhY2hpbmcgZmFzdCBUWCBlbnRyaWVzLiBUaGlzIGNvZGUgcGF0aCBpcyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHNpbXVsYXRlZCB3aXJlbGVzcyBkZXZpY2VzIChtYWM4MDIxMV9od3NpbSkgYW5kIG1lc2ggbmV0d29ya2luZyBubDgwMjExL2RhdGEtcGF0aCBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjJlNDY1YTdiMzMzYjk0OGY3OTcwMjQwM2Q0NzU5NTViNjQ1ZWI2ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMDc6MTA6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMDMxNzFjZjAwODU1Ny4uZGZjYzRmM2E3MDg4ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtNTc3LDYgJiM0Mzs1NzcsMTIgQEAgdm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCWdvdG8gdW5sb2NrX3N0YTsKIAogCXNwaW5fbG9jaygmYW1wO2NhY2hlLSZndDt3YWxrX2xvY2spOwomIzQzOwlpZiAoKFJFQURfT05DRShtcGF0aC0mZ3Q7ZmxhZ3MpICZhbXA7IE1FU0hfUEFUSF9ERUxFVEVEKSB8fAomIzQzOwkgICAgKG1wcGF0aCAmYW1wOyZhbXA7IChSRUFEX09OQ0UobXBwYXRoLSZndDtmbGFncykgJmFtcDsgTUVTSF9QQVRIX0RFTEVURUQpKSkgewomIzQzOwkJa2ZyZWUoZW50cnkpOwomIzQzOwkJZ290byB1bmxvY2tfY2FjaGU7CiYjNDM7CX0KJiM0MzsKIAlwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KCZhbXA7Y2FjaGUtJmd0O3JodCwKIAkJCQkJCSAmYW1wO2VudHJ5LSZndDtyaGFzaCwKIAkJCQkJCSBmYXN0X3R4X3JodF9wYXJhbXMpOwpAQCAtODEyLDYgJiM0Mzs4MTgsOSBAQCBzdGF0aWMgdm9pZCBfX21lc2hfcGF0aF9kZWwoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpCiB7CiAJaGxpc3RfZGVsX3JjdSgmYW1wO21wYXRoLSZndDt3YWxrX2xpc3QpOwogCXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDt0YmwtJmd0O3JoZWFkLCAmYW1wO21wYXRoLSZndDtyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7bXBhdGgtJmd0O3N0YXRlX2xvY2spOwomIzQzOwltcGF0aC0mZ3Q7ZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7bXBhdGgtJmd0O3N0YXRlX2xvY2spOwogCWlmICh0YmwgPT0gJmFtcDttcGF0aC0mZ3Q7c2RhdGEtJmd0O3UubWVzaC5tcHBfcGF0aHMpCiAJCW1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLSZndDtzZGF0YSwgbXBhdGgtJmd0O2RzdCk7CiAJZWxzZQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTUyCgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBEaXZpbmcgaW50byBgbWVzaF9wYXRodGJsLmNgKioKCk9rYXksIHNvIHRoZSBwYXRjaCBJJiMzOTttIGxvb2tpbmcgYXQgc3BlY2lmaWNhbGx5IHRvdWNoZXMgYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIE15IGZpcnN0IG1vdmUgaXMgdG8gbWV0aWN1bG91c2x5IGFuYWx5emUgdGhlIGdpdCBkaWZmIHRvIHVuZGVyc3RhbmQgKmV4YWN0bHkqIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gQmV5b25kIGp1c3QgdGhlIGRpZmYsIHRob3VnaCwgSSBuZWVkIHRvIHpvb20gb3V0IGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgZ2VuZXJhbCBmbG93IHRvIHRydWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCk5leHQsIEkgbmVlZCB0byBjb25maXJtIHRoZSBLY29uZmlnIHByZXJlcXVpc2l0ZXMuIEFyZSB0aGVyZSBhbnkgZGVwZW5kZW5jaWVzIHRoaXMgY29kZSByZWxpZXMgb24/IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG5ldC9tYWM4MDIxMS9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUgYXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGluIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuCgpJJiMzOTtsbCBiZSB1c2luZyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gZWZmaWNpZW50bHkgY29tYiB0aHJvdWdoIGJvdGggYG1lc2hfcGF0aHRibC5jYCBhbmQgYEtjb25maWdgLiBUaGlzIHdpbGwgaGVscCBtZSBxdWlja2x5IGZpbmQgcmVsZXZhbnQgZGVmaW5pdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IG1pZ2h0IGFmZmVjdCB0aGUgcGF0Y2gmIzM5O3MgYmVoYXZpb3IuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIGZvciBtZSAtIEkgYWx3YXlzIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGJpZ2dlciBwaWN0dXJlIGJlZm9yZSBhc3Nlc3NpbmcgdGhlIGNvZGUgaW4gaXNvbGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHRcdFx0aGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTtcbiA1NzE6XHRcbiA1NzI6XHRcdHFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7XG4gNTczOlx0XHRxY1sxXSB8PSBJRUVFODAyMTFfUU9TX0NUTF9NRVNIX0NPTlRST0xfUFJFU0VOVCBcdTAwM2VcdTAwM2UgODtcbiA1NzQ6XHRcbiA1NzU6XHRcdGVudHJ5ID0ga21lbWR1cChcdTAwMjZidWlsZCwgc2l6ZW9mKGJ1aWxkKSwgR0ZQX0FUT01JQyk7XG4gNTc2Olx0XHRpZiAoIWVudHJ5KVxuIDU3NzpcdFx0XHRnb3RvIHVubG9ja19zdGE7XG4gNTc4Olx0XG4gNTc5Olx0XHRzcGluX2xvY2soXHUwMDI2Y2FjaGUtXHUwMDNld2Fsa19sb2NrKTtcbiA1ODA6XHRcdGlmICgoUkVBRF9PTkNFKG1wYXRoLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpIHx8XG4gNTgxOlx0XHQgICAgKG1wcGF0aCBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XG4gNTgyOlx0XHRcdGtmcmVlKGVudHJ5KTtcbiA1ODM6XHRcdFx0Z290byB1bmxvY2tfY2FjaGU7XG4gNTg0Olx0XHR9XG4gNTg1Olx0XG4gNTg2Olx0XHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFx1MDAyNmNhY2hlLVx1MDAzZXJodCxcbiA1ODc6XHRcdFx0XHRcdFx0XHQgXHUwMDI2ZW50cnktXHUwMDNlcmhhc2gsXG4gNTg4Olx0XHRcdFx0XHRcdFx0IGZhc3RfdHhfcmh0X3BhcmFtcyk7XG4gNTg5Olx0XHRpZiAoSVNfRVJSKHByZXYpKSB7XG4gNTkwOlx0XHRcdGtmcmVlKGVudHJ5KTtcbiA1OTE6XHRcdFx0Z290byB1bmxvY2tfY2FjaGU7XG4gNTkyOlx0XHR9XG4gNTkzOlx0XG4gNTk0Olx0XHQvKlxuIDU5NTpcdFx0ICogcmVwbGFjZSBhbnkgcHJldmlvdXMgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUsIGluIGNhc2Ugd2UmIzM5O3JlXG4gNTk2Olx0XHQgKiByZXBsYWNpbmcgaXQgd2l0aCBhIGRpZmZlcmVudCB0eXBlIChlLmcuIG1wYXRoIC1cdTAwM2UgbXBwKVxuIDU5NzpcdFx0ICovXG4gNTk4Olx0XHRpZiAodW5saWtlbHkocHJldikpIHtcbiA1OTk6XHRcdFx0cmhhc2h0YWJsZV9yZXBsYWNlX2Zhc3QoXHUwMDI2Y2FjaGUtXHUwMDNlcmh0LCBcdTAwMjZwcmV2LVx1MDAzZXJoYXNoLFxuIDYwMDpcdFx0XHRcdFx0XHRcdTAwMjZlbnRyeS1cdTAwM2VyaGFzaCwgZmFzdF90eF9yaHRfcGFyYW1zKTtcbiA2MDE6XHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZwcmV2LVx1MDAzZXdhbGtfbGlzdCk7XG4gNjAyOlx0XHRcdGtmcmVlX3JjdShwcmV2LCBmYXN0X3R4LnJjdV9oZWFkKTtcbiA2MDM6XHRcdH1cbiA2MDQ6XHRcbiA2MDU6XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNmVudHJ5LVx1MDAzZXdhbGtfbGlzdCwgXHUwMDI2Y2FjaGUtXHUwMDNld2Fsa19oZWFkKTtcbiA2MDY6XHRcbiA2MDc6XHR1bmxvY2tfY2FjaGU6XG4gNjA4Olx0XHRzcGluX3VubG9jayhcdTAwMjZjYWNoZS1cdTAwM2V3YWxrX2xvY2spO1xuIDYwOTpcdHVubG9ja19zdGE6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgwNTpcdFxuIDgwNjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgwNzpcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX1JFU09MVklORyB8IE1FU0hfUEFUSF9ERUxFVEVEO1xuIDgwODpcdFx0bWVzaF9nYXRlX2RlbCh0YmwsIG1wYXRoKTtcbiA4MDk6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgxMDpcdFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZtcGF0aC1cdTAwM2V0aW1lcik7XG4gODExOlx0XHRhdG9taWNfZGVjKFx1MDAyNnNkYXRhLVx1MDAzZXUubWVzaC5tcGF0aHMpO1xuIDgxMjpcdFx0YXRvbWljX2RlYyhcdTAwMjZ0YmwtXHUwMDNlZW50cmllcyk7XG4gODEzOlx0XHRtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhtcGF0aCk7XG4gODE0Olx0XHRrZnJlZV9yY3UobXBhdGgsIHJjdSk7XG4gODE1Olx0fVxuIDgxNjpcdFxuIDgxNzpcdHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbiA4MTg6XHR7XG4gODE5Olx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNm1wYXRoLVx1MDAzZXdhbGtfbGlzdCk7XG4gODIwOlx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnRibC1cdTAwM2VyaGVhZCwgXHUwMDI2bXBhdGgtXHUwMDNlcmhhc2gsIG1lc2hfcmh0X3BhcmFtcyk7XG4gODIxOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4gODIyOlx0XHRtcGF0aC1cdTAwM2VmbGFncyB8PSBNRVNIX1BBVEhfREVMRVRFRDtcbiA4MjM6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgyNDpcdFx0aWYgKHRibCA9PSBcdTAwMjZtcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V1Lm1lc2gubXBwX3BhdGhzKVxuIDgyNTpcdFx0XHRtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC1cdTAwM2VzZGF0YSwgbXBhdGgtXHUwMDNlZHN0KTtcbiA4MjY6XHRcdGVsc2VcbiA4Mjc6XHRcdFx0bWVzaF9mYXN0X3R4X2ZsdXNoX21wYXRoKG1wYXRoKTtcbiA4Mjg6XHRcdG1lc2hfcGF0aF9mcmVlX3JjdSh0YmwsIG1wYXRoKTtcbiA4Mjk6XHR9XG4gODMwOlx0XG4gODMxOlx0LyoqXG4gODMyOlx0ICogbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3AgLSBEZWxldGVzIG1lc2ggcGF0aHMgaWYgdGhlaXIgbmV4dCBob3AgbWF0Y2hlc1xuIDgzMzpcdCAqXG4gODM0Olx0ICogQHN0YTogbWVzaCBwZWVyIHRvIG1hdGNoXG4gODM1Olx0ICpcbiA4MzY6XHQgKiBSQ1Ugbm90ZXM6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBtZXNoIHBsaW5rIHRyYW5zaXRpb25zIGZyb21cbiA4Mzc6XHQgKiBQTElOS19FU1RBQiB0byBhbnkgb3RoZXIgc3RhdGUsIHNpbmNlIFBMSU5LX0VTVEFCIHN0YXRlIGlzIHRoZSBvbmx5IG9uZSB0aGF0XG4gODM4Olx0ICogYWxsb3dzIHBhdGggY3JlYXRpb24uIFRoaXMgd2lsbCBoYXBwZW4gYmVmb3JlIHRoZSBzdGEgY2FuIGJlIGZyZWVkIChiZWNhdXNlXG4gODM5Olx0ICogc3RhX2luZm9fZGVzdHJveSgpIGNhbGxzIHRoaXMpIHNvIGFueSByZWFkZXIgaW4gYSByY3UgcmVhZCBibG9jayB3aWxsIGJlXG4gODQwOlx0ICogcHJvdGVjdGVkIGFnYWluc3QgdGhlIHBsaW5rIGRpc2FwcGVhcmluZy5cbiA4NDE6XHQgKi9cbiA4NDI6XHR2b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxuIDg0MzpcdHtcbiA4NDQ6XHRcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLVx1MDAzZXNkYXRhO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc2hfZmFzdF90eF9jYWNoZXxfX21lc2hfcGF0aF9kZWx8bWVzaF9wYXRodGJsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9NYWtlZmlsZT00Nz1tYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9NRVNIKSAmIzQzOz0gXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00OC1cdG1lc2gubyBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ5Olx0bWVzaF9wYXRodGJsLm8gXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS01MC1cdG1lc2hfcGxpbmsubyBcXFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc1Nz12b2lkIGllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG4tLVxubmV0L21hYzgwMjExL21lc2guYy0xNzc1LVxubmV0L21hYzgwMjExL21lc2guYzoxNzc2Olx0bWVzaF9wYXRodGJsX2luaXQoc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guYy0xNzc3LVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc5MD12b2lkIGllZWU4MDIxMV9tZXNoX3RlYXJkb3duX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc5Mi1cdG1lc2hfcm1jX2ZyZWUoc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guYzoxNzkzOlx0bWVzaF9wYXRodGJsX3VucmVnaXN0ZXIoc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guYy0xNzk0LX1cbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM1ND12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzU1OnZvaWQgbWVzaF9wYXRodGJsX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpO1xubmV0L21hYzgwMjExL21lc2guaDozNTY6dm9pZCBtZXNoX3BhdGh0YmxfdW5yZWdpc3RlcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7XG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1Ny1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpO1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoLmg9MzY4PWJvb2wgaWVlZTgwMjExX21lc2hfeG1pdF9mYXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21lc2guaC0zNjktXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGN0cmxfZmxhZ3MpO1xubmV0L21hYzgwMjExL21lc2guaDozNzA6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM3MS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODItXHRcdGlmIChpZWVlODAyMTFfaHdfY2hlY2soXHUwMDI2c2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcsIFNVUFBPUlRfRkFTVF9YTUlUKSlcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMjgzOlx0XHRcdG1lc2hfZmFzdF90eF9jYWNoZShzZGF0YSwgc2tiLCBtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4NC1cdFx0cmV0dXJuIDA7XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTQzND1tZXNoX2Zhc3RfdHhfZ2V0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy00NjItXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6NDYzOnZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQ2NC1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9ODAxPXN0YXRpYyB2b2lkIG1lc2hfcGF0aF9mcmVlX3JjdShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLFxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04MTYtXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODE3OnN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04MTgte1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz04NDI9dm9pZCBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODUxLVx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1wYXRoLVx1MDAzZW5leHRfaG9wKSA9PSBzdGEpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODUyOlx0XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NTMtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg1Nz1zdGF0aWMgdm9pZCBtcHBfZmx1c2hfYnlfcHJveHkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTg2Ni1cdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWwobXBhdGgtXHUwMDNlbXBwLCBwcm94eSkpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODY3Olx0XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NjgtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg3Mj1zdGF0aWMgdm9pZCB0YWJsZV9mbHVzaF9ieV9pZmFjZShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsKVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NzgtXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1wYXRoLCBuLCBcdTAwMjZ0YmwtXHUwMDNld2Fsa19oZWFkLCB3YWxrX2xpc3QpIHtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo4Nzk6XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04ODAtXHR9XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTkwNj1zdGF0aWMgaW50IHRhYmxlX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTkxOC1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo5MTk6XHRfX21lc2hfcGF0aF9kZWwodGJsLCBtcGF0aCk7XG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTIwLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGJsLVx1MDAzZXdhbGtfbG9jayk7XG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwNTY9dm9pZCBtZXNoX3BhdGhfZml4X25leHRob3Aoc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgsIHN0cnVjdCBzdGFfaW5mbyAqbmV4dF9ob3ApXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzMtXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTA3NDp2b2lkIG1lc2hfcGF0aHRibF9pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzUte1xuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMDgyPXZvaWQgbWVzaF9wYXRoX3RibF9leHBpcmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwOTItXHRcdCAgICAgdGltZV9hZnRlcihqaWZmaWVzLCBtcGF0aC1cdTAwM2VleHBfdGltZSAmIzQzOyBNRVNIX1BBVEhfRVhQSVJFKSlcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMDkzOlx0XHRcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDk0LVx0fVxuLS1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz0xMDk4PXZvaWQgbWVzaF9wYXRoX2V4cGlyZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTEwMy1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMTA0OnZvaWQgbWVzaF9wYXRodGJsX3VucmVnaXN0ZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTEwNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIEtjb25maWcgb3B0aW9ucyBpbnZvbHZlZCBoZXJlLiBUaW1lIHRvIGp1bXAgaW50byBgbmV0L21hYzgwMjExL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyB1c3VhbGx5IGhhcHBlbnMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBleGFjdCBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdGhleSBtaWdodCBoYXZlIHdpdGggb3RoZXIsIHNlZW1pbmdseSB1bnJlbGF0ZWQsIGNvbmZpZ3VyYXRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0IGJlZm9yZSBJIHN0YXJ0IGRvd24gYW55IG90aGVyIHBhdGgsIG9yIEkmIzM5O20gbGlrZWx5IGdvaW5nIHRvIHdhc3RlIG15IHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvS2NvbmZpZz02MD1jb25maWcgTUFDODAyMTFfS1VOSVRfVEVTVFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxubmV0L21hYzgwMjExL0tjb25maWc6NzA6Y29uZmlnIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTcxLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbWFjODAyMTEvS2NvbmZpZz0yMDk9Y29uZmlnIE1BQzgwMjExX01QTF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMS1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjEyOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMTMtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjIyPWNvbmZpZyBNQUM4MDIxMV9NUEFUSF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyNC1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjI1Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMjYtXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWc9MjM1PWNvbmZpZyBNQUM4MDIxMV9NSFdNUF9ERUJVR1xuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNy1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjM4Olx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yMzktXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjQ3LVxubmV0L21hYzgwMjExL0tjb25maWc6MjQ4OmNvbmZpZyBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUdcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBtZXNoIHN5bmNocm9uaXphdGlvbiBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1MC1cdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTItXHRoZWxwXG4tLVxubmV0L21hYzgwMjExL0tjb25maWctMjU4LVxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXCYjMzQ7XG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNjEtXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI2MjpcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVx0aGVscFxuLS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MDpjb25maWcgTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL0tjb25maWctMjcxLVx0Ym9vbCBcJiMzNDtWZXJib3NlIG1lc2ggcG93ZXJzYXZlIGRlYnVnZ2luZ1wmIzM0O1xubmV0L21hYzgwMjExL0tjb25maWctMjcyLVx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzM6XHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI3NC1cdGhlbHBcbi0tXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU9NDE9bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgJiM0Mzs9IFxcXG4tLVxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ2LVxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ3Om1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX01FU0gpICYjNDM7PSBcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ4LVx0bWVzaC5vIFxcXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTYxMz1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTcxMC1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbm5ldC9tYWM4MDIxMS9jZmcuYzo3MTE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEyLVx0XHRpZiAoc2RhdGEtXHUwMDNldS5tZXNoLnNlY3VyaXR5ICE9IElFRUU4MDIxMV9NRVNIX1NFQ19OT05FKVxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz0yMTkwPXN0YXRpYyB2b2lkIHN0YV9hcHBseV9tZXNoX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5My17XG5uZXQvbWFjODAyMTEvY2ZnLmM6MjE5NDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy0yMTk1LVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTI3ODc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjg5My1cbm5ldC9tYWM4MDIxMS9jZmcuYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTI4OTUtc3RhdGljIGludCBpZWVlODAyMTFfYWRkX21wYXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jPTQ0Mjg9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2FmdGVyX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDQ1MS1cdFx0YnJlYWs7XG5uZXQvbWFjODAyMTEvY2ZnLmM6NDQ1MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUzLVx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTQ2NTQtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL2NmZy5jOjQ2NTU6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1Ni1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoge1xuLS1cbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcbi0tXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5Ni1cdC5kdW1wX3N1cnZleSA9IGllZWU4MDIxMV9kdW1wX3N1cnZleSxcbm5ldC9tYWM4MDIxMS9jZmcuYzo1OTk3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL2NmZy5jLTU5OTgtXHQuYWRkX21wYXRoID0gaWVlZTgwMjExX2FkZF9tcGF0aCxcbi0tXG5uZXQvbWFjODAyMTEvZGVidWcuaC01Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXG5uZXQvbWFjODAyMTEvZGVidWcuaDo1NDojZGVmaW5lIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyAxXG5uZXQvbWFjODAyMTEvZGVidWcuaC01NS0jZWxzZVxubmV0L21hYzgwMjExL2RlYnVnLmg6NTY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNTctI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC01OC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjU5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYwOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMVxubmV0L21hYzgwMjExL2RlYnVnLmgtNjEtI2Vsc2Vcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYyOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjMtI2VuZGlmXG5uZXQvbWFjODAyMTEvZGVidWcuaC02NC1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9QU19ERUJVR1xubmV0L21hYzgwMjExL2RlYnVnLmg6NjY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1BTX0RFQlVHIDFcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY3LSNlbHNlXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2ODojZGVmaW5lIE1BQzgwMjExX01FU0hfUFNfREVCVUcgMFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjktI2VuZGlmXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIxOC0jZGVmaW5lIG1zeW5jX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfU1lOQ19ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjAtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVx0XHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjIzOlx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjQtXHRcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXG4tLVxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI2LSNkZWZpbmUgbXBzX2RiZyhzZGF0YSwgZm10LCAuLi4pXHRcdFx0XHRcdFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjc6XHRfc2RhdGFfZGJnKE1BQzgwMjExX01FU0hfUFNfREVCVUcsXHRcdFx0XHRcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVx0XHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTczNj1JRUVFODAyMTFfSUZfTElOS19GSUxFKGFkZHIsIGNvbmYtXHUwMDNlYWRkciwgTUFDKTtcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczNy1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjczODojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczOS1JRUVFODAyMTFfSUZfRklMRShlc3RhYl9wbGlua3MsIHUubWVzaC5lc3RhYl9wbGlua3MsIEFUT01JQyk7XG4tLVxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9ODY4PXN0YXRpYyB2b2lkIGFkZF9pYnNzX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3Mi1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjg3MzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3NC1cbi0tXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz05Mzc9c3RhdGljIHZvaWQgYWRkX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxuLS1cbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk0OS1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jOjk1MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk1MS1cdFx0YWRkX21lc2hfZmlsZXMoc2RhdGEpO1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTc3OT1zdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2gge1xuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1OS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjg2MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg2MS0jZGVmaW5lIElFRUU4MDIxMV9JRlNUQV9NRVNIX0NUUl9JTkMobXNoLCBuYW1lKVx0XFxcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jPTExMzc9aW50IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodylcbi0tXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTItXG5uZXQvbWFjODAyMTEvbWFpbi5jOjEzOTM6I2lmbmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21haW4uYy0xMzk0LVx0LyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovXG4tLVxubmV0L21hYzgwMjExL21lc2guaD0zNzg9dm9pZCBtZXNoX3BhdGhfcmVmcmVzaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM4MC1cbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzgxOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL21lc2guaC0zODItc3RhdGljIGlubGluZVxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM9ODEwPWludCBpZWVlODAyMTFfbWdtdF90eChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODM5LVx0XHRcdG5lZWRfb2ZmY2hhbiA9IHRydWU7XG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjg0MDojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQxLVx0XHRmYWxsdGhyb3VnaDtcbi0tXG5uZXQvbWFjODAyMTEvcnguYz0yNzkyPWllZWU4MDIxMV9kZWxpdmVyX3NrYihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTEtXG5uZXQvbWFjODAyMTEvcnguYzoyODkyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3J4LmMtMjg5My1zdGF0aWMgYm9vbFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jPTI5NTk9aWVlZTgwMjExX3J4X21lc2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtMjk2MS17XG5uZXQvbWFjODAyMTEvcnguYzoyOTYyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3J4LmMtMjk2My1cdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcdTAwMjZzZGF0YS1cdTAwM2V1Lm1lc2g7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NDY4PXZvaWQgc3RhX2luZm9fZnJlZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IHN0YV9pbmZvICpzdGEpXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA2LVx0a2ZyZWUocmN1X2RlcmVmZXJlbmNlX3JhdyhzdGEtXHUwMDNlc3RhLnJhdGVzKSk7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy01MDgtXHRrZnJlZShzdGEtXHUwMDNlbWVzaCk7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9NjMzPV9fc3RhX2luZm9fYWxsb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY3LVx0d2lwaHlfd29ya19pbml0KFx1MDAyNnN0YS1cdTAwM2VhbXBkdV9tbG1lLndvcmssIGllZWU4MDIxMV9iYV9zZXNzaW9uX3dvcmspO1xubmV0L21hYzgwMjExL3N0YV9pbmZvLmM6NjY4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY5LVx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNzk1LVx0c3RhX2luZm9fZnJlZV9saW5rKFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKTtcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjc5NjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTc5Ny1cdGtmcmVlKHN0YS1cdTAwM2VtZXNoKTtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz0xMTA3PXN0YXRpYyB2b2lkIF9fc3RhX2luZm9fcmVjYWxjX3RpbShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCBpZ25vcmVfcGVuZGluZylcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy0xMTIxLVx0XHRwcyA9IFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2Vic3MtXHUwMDNlcHM7XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoxMTIyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMy1cdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKSB7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9Mjc0Mz1zdGF0aWMgaW5saW5lIHU2NCBzdGFfZ2V0X3N0YXRzX2J5dGVzKHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpyeHN0YXRzKVxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI3NTUtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyNzU2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc1Ny1zdGF0aWMgdm9pZCBzdGFfc2V0X21lc2hfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzA3OT12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxuLS1cbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMyNjQtXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzI2Ni1cdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXHUwMDI2c2RhdGEtXHUwMDNldmlmKSlcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03MTU9c3RydWN0IHN0YV9pbmZvIHtcbi0tXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03MzItXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo3MzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC03MzQtXHRzdHJ1Y3QgbWVzaF9zdGEgKm1lc2g7XG4tLVxubmV0L21hYzgwMjExL3N0YV9pbmZvLmg9ODAwPXN0YXRpYyBpbmxpbmUgZW51bSBubDgwMjExX3BsaW5rX3N0YXRlIHN0YV9wbGlua19zdGF0ZShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSlcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTgwMS17XG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4MDI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaC04MDMtXHRyZXR1cm4gc3RhLVx1MDAzZW1lc2gtXHUwMDNlcGxpbmtfc3RhdGU7XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjU2Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTI1ODYtXHRcdGJyZWFrO1xubmV0L21hYzgwMjExL3R4LmM6MjU4NzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS90eC5jLTI1ODgtXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XG4tLVxubmV0L21hYzgwMjExL3R4LmM9MjY4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtMjc4Ny1cdFx0YnJlYWs7XG5uZXQvbWFjODAyMTEvdHguYzoyNzg4OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxubmV0L21hYzgwMjExL3R4LmMtMjc4OS1cdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcbi0tXG5uZXQvbWFjODAyMTEvdHguYy0zMDMyLVxubmV0L21hYzgwMjExL3R4LmM6MzAzMzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcbm5ldC9tYWM4MDIxMS90eC5jLTMwMzQtXHRpZiAobWVzaGhkcmxlbiBcdTAwM2UgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjkwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hYzgwMjExIE1lc2ggUGF0aCBUYWJsZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB3aXRoaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGZvY3VzZWQgb24gdGhlIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIGFuZCBgX19tZXNoX3BhdGhfZGVsYCBmdW5jdGlvbnMuIEluIGBtZXNoX2Zhc3RfdHhfY2FjaGVgLCB0aGUgY2hlY2sgZm9yIGBNRVNIX1BBVEhfREVMRVRFRGAgd2l0aGluIHRoZSBgc3Bpbl9sb2NrYCBjb250ZXh0IGlzIGNyaXRpY2FsLiBUaGUgY29uY2VybiBoZXJlIGlzIGVuc3VyaW5nIGEgcmFjZSBjb25kaXRpb24gZG9lc24mIzM5O3QgbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBjb25jZXJuLiBUaGUgc2Vjb25kIGNvZGUgYmxvY2sgaGlnaGxpZ2h0cyBob3cgYSBwYXRoIGlzIG1hcmtlZCBhcyBkZWxldGVkIGluIGBfX21lc2hfcGF0aF9kZWxgLCBpbnZvbHZpbmcgbGlzdCBtYW5pcHVsYXRpb24gYW5kIHJoYXNodGFibGUgcmVtb3ZhbCwgYWxsIHdpdGggY2FyZWZ1bCBzcGlubG9jayB1c2FnZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzIGlzc3Vlcy4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgYWN0dWFsbHkgcmVhY2hhYmxlIGluIGEgdHlwaWNhbCBmdXp6aW5nIHNldHVwLCBiZWNhdXNlIGlmIG5vdCBpdCBjb3VsZCBiZSBleHRyZW1lbHkgZGlmZmljdWx0IHRvIGZpbmQgYnVncy4gU28sIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBob3cgd2UgbWlnaHQgdHJpZ2dlciB0aGlzIGNvZGUuIFRoYW5rZnVsbHksIGBtYWM4MDIxMV9od3NpbWAsIHRoZSB2aXJ0dWFsIHNvZnR3YXJlIHJhZGlvIHNpbXVsYXRvciwgaXMgdGhlIG9idmlvdXMgdGFyZ2V0IGhlcmUuIEkmIzM5O20gYXdhcmUgdGhhdCB0aGlzIG1vZHVsZSwgYWxvbmcgd2l0aCBtYWM4MDIxMSwgbmw4MDIxMSwgYW5kIGNmZzgwMjExIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzIGluIExpbnV4IGtlcm5lbHMgYW5kIGFyZSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIuIFVzZXIgc3BhY2UgaW50ZXJhY3RzIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHdlIGhhdmUgd2VsbC1kZWZpbmVkIGF0dGFjayBzdXJmYWNlIHZpYSB3aGljaCB0byBleGVyY2lzZSB0aGlzIGNvZGUuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKVG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgYmFzaWMsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19NQUM4MDIxMWAgYW5kIGBDT05GSUdfTUFDODAyMTFfTUVTSGAgYXJlIGVuYWJsZWQgaW4gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YXJnZXQgc3lzdGVtLiBJJiMzOTtsbCBkaXZlIGludG8gYG5ldC9tYWM4MDIxMS9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2NTpcdFx0aGVscFxuICA2NjpcdFx0ICBFbmFibGUgdGhpcyBvcHRpb24gdG8gdGVzdCBtYWM4MDIxMSBpbnRlcm5hbHMgd2l0aCBrdW5pdC5cbiAgNjc6XHRcbiAgNjg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjk6XHRcbiAgNzA6XHRjb25maWcgTUFDODAyMTFfTUVTSFxuICA3MTpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcJiMzNDtcbiAgNzI6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgNzM6XHRcdGhlbHBcbiAgNzQ6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGVuYWJsZSA4MDIuMTEgbWVzaCBvcGVyYXRpb24gaW4gbWFjODAyMTFcbiAgNzU6XHRcdCAgZHJpdmVycyB0aGF0IHN1cHBvcnQgaXQuICA4MDIuMTEgbWVzaCBjb25uZWN0cyBtdWx0aXBsZSBzdGF0aW9uc1xuICA3NjpcdFx0ICBvdmVyIChwb3NzaWJseSBtdWx0aS1ob3ApIHdpcmVsZXNzIGxpbmtzIHRvIGZvcm0gYSBzaW5nbGUgbG9naWNhbFxuICA3NzpcdFx0ICBMQU4uXG4gIDc4Olx0XG4gIDc5Olx0Y29uZmlnIE1BQzgwMjExX0xFRFNcbiAgODA6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIExFRCB0cmlnZ2Vyc1wmIzM0O1xuICA4MTpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICA4MjpcdFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuICA4MzpcdFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcbiAgODQ6XHRcdGhlbHBcbiAgODU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIGZldyBMRUQgdHJpZ2dlcnMgZm9yIGRpZmZlcmVudFxuICA4NjpcdFx0ICBwYWNrZXQgcmVjZWl2ZS90cmFuc21pdCBldmVudHMuXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIE1BQzgwMjExX0RFQlVHRlNcbiAgODk6XHRcdGJvb2wgXCYjMzQ7RXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTc2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIE1BQzgwMjExIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgYE1BQzgwMjExYCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgc3BlY2lmaWNhbGx5IGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMgdGhhdCBkaWN0YXRlIGhvdyBgTUFDODAyMTFgIGlzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgYXJlIGRpcmVjdGx5IGNvbnRpbmdlbnQgdXBvbiB0aGUgYE1BQzgwMjExYCBvcHRpb24uIElzIGl0IGxpbmtlZCB0byBzcGVjaWZpYyByZWd1bGF0b3J5IGRvbWFpbnMsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHBlcmhhcHMgY2VydGFpbiBzZWN1cml0eSBmZWF0dXJlcz8gVW5jb3ZlcmluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMga2V5IGZvciBkZWJ1Z2dpbmcsIG1vZGlmaWNhdGlvbiwgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0aWVzLiBJdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGJlZm9yZSBtYWtpbmcgY2hhbmdlcyB0byBhIHN1YnN5c3RlbSBsaWtlIE1BQzgwMjExLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9tYWM4MDIxMS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE1BQzgwMjExXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDRkc4MDIxMVxuICAgNTpcdFx0c2VsZWN0IENSWVBUT1xuICAgNjpcdFx0c2VsZWN0IENSWVBUT19MSUJfQUVTX0NCQ19NQUNTXG4gICA3Olx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BUkM0XG4gICA4Olx0XHRzZWxlY3QgQ1JZUFRPX0FFU1xuICAgOTpcdFx0c2VsZWN0IENSWVBUT19DQ01cbiAgMTA6XHRcdHNlbGVjdCBDUllQVE9fR0NNXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgaGFyZHdhcmUgaW5kZXBlbmRlbnQgSUVFRSA4MDIuMTFcbiAgMTQ6XHRcdCAgbmV0d29ya2luZyBzdGFjay5cbiAgMTU6XHRcbiAgMTY6XHRjb21tZW50IFwmIzM0O0NGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXCYjMzQ7XG4gIDE3Olx0XHRkZXBlbmRzIG9uIENGRzgwMjExPW5cbiAgMTg6XHRcbiAgMTk6XHRpZiBNQUM4MDIxMSAhPSBuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xuICAyMjpcdFx0Ym9vbFxuICAyMzpcdFxuICAyNDpcdGNvbmZpZyBNQUM4MDIxMV9SQ19NSU5TVFJFTFxuICAyNTpcdFx0Ym9vbCBcJiMzNDtNaW5zdHJlbFwmIzM0OyBpZiBFWFBFUlRcbiAgMjY6XHRcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcbiAgMjc6XHRcdGRlZmF1bHQgeVxuICAyODpcdFx0aGVscFxuICAyOTpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAmIzM5O21pbnN0cmVsJiMzOTsgVFggcmF0ZSBjb250cm9sIGFsZ29yaXRobVxuICAzMDpcdFxuICAzMTpcdGNob2ljZVxuICAzMjpcdFx0cHJvbXB0IFwmIzM0O0RlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVwmIzM0O1xuICAzMzpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9IQVNfUkNcbiAgMzQ6XHRcdGRlZmF1bHQgTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTFxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBkZWZhdWx0IHJhdGUgY29udHJvbCBhbGdvcml0aG1cbiAgMzc6XHRcdCAgbWFjODAyMTEgd2lsbCB1c2UuIE5vdGUgdGhhdCB0aGlzIGRlZmF1bHQgY2FuIHN0aWxsIGJlXG4gIDM4Olx0XHQgIG92ZXJyaWRkZW4gdGhyb3VnaCB0aGUgaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyBtb2R1bGVcbiAgMzk6XHRcdCAgcGFyYW1ldGVyIGlmIGRpZmZlcmVudCBhbGdvcml0aG1zIGFyZSBhdmFpbGFibGUuXG4gIDQwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OgoKKipEaWdnaW5nIERlZXBlciBpbnRvIHRoZSBXaXJlbGVzcyBTaW11bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJvdWJsZXNob290aW5nIHRoaXMgd2lyZWxlc3Mgc2ltdWxhdGlvbiBpc3N1ZS4gSSYjMzk7dmUgYmVlbiBmb2N1c2luZyBvbiB0aGUgY29yZSBwcm9ibGVtLCBidXQgaXQganVzdCBoaXQgbWUg4oCTIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYE1BQzgwMjExX0hXU0lNYCBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseS4gVGhhdCYjMzk7cyBhIGtleSBwYXJ0IG9mIGhvdyB0aGUgd2lyZWxlc3MgaGFyZHdhcmUgc2ltdWxhdGlvbiB3b3JrcywgYW5kIGl0JiMzOTtzIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBgL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvYCBkaXJlY3Rvcnkgc3RydWN0dXJlLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzLiBUaGVyZSBjb3VsZCBiZSBzb21lIHN1YnRsZSBmbGFnIG9yIHNldHRpbmcgdGhlcmUgdGhhdOKAmXMgdGhyb3dpbmcgYSB3cmVuY2ggaW50byBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gb3BlbiB1cCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyBhbmQgcmVhbGx5IGRpZyBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbi4gSXQmIzM5O3MgdGltZSB0byBmb2xsb3cgdGhlIHRyYWlsIG9mIGNvbmZpZ3MsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGdldCB0byB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1BQzgwMjExX0hXU0lNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMi1cdHRyaXN0YXRlIFwmIzM0O1NpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZXNoIE5ldHdvcmtpbmcgaW4gdGhlIExpbnV4IEtlcm5lbCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX01BQzgwMjExYCwgYENPTkZJR19NQUM4MDIxMV9NRVNIYCwgYW5kIGBDT05GSUdfQ0ZHODAyMTFgIOKAkyB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIFdpLUZpIGFuZCBtZXNoIG5ldHdvcmtpbmcgaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBhZmZlY3Qgc3BlY2lmaWMgZnVuY3Rpb25zLiBJJiMzOTttIHplcm9pbmcgaW4gb24gYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLCBhcyB0aGV5IHNlZW0gdG8gYmUga2V5IHBsYXllcnMuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgb24gbXkgcmFkYXIgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGFueSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbWVzaF9mYXN0X3R4X2NhY2hlYCBhbmQgYF9fbWVzaF9wYXRoX2RlbGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHBhcnRpY3VsYXJseSBhbnkgZW50cnkgcG9pbnRzIG9yIGhpZ2gtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZhc3QgVFggYW5kIG1lc2ggcGF0aCBoYW5kbGluZyBsb2dpYy4gU28sIGxldCYjMzk7cyBzdGFydCBzZWFyY2hpbmcgdGhlIGNvZGViYXNlIGZvciB0aGUgY2FsbHMgdG8gYG1lc2hfZmFzdF90eF9jYWNoZWAuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGFueSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZXNoX2Zhc3RfdHhfY2FjaGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2guaD0zNjg9Ym9vbCBpZWVlODAyMTFfbWVzaF94bWl0X2Zhc3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM2OS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY3RybF9mbGFncyk7XG5uZXQvbWFjODAyMTEvbWVzaC5oOjM3MDp2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzcxLVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmM9MTI1OD1pbnQgbWVzaF9uZXh0aG9wX2xvb2t1cChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4Mi1cdFx0aWYgKGllZWU4MDIxMV9od19jaGVjayhcdTAwMjZzZGF0YS1cdTAwM2Vsb2NhbC1cdTAwM2VodywgU1VQUE9SVF9GQVNUX1hNSVQpKVxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyODM6XHRcdFx0bWVzaF9mYXN0X3R4X2NhY2hlKHNkYXRhLCBza2IsIG1wYXRoKTtcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYy0xMjg0LVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9NDM0PW1lc2hfZmFzdF90eF9nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQ2Mi1cbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo0NjM6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDY0LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0MAoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiA2NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lc2ggUGF0aCBNYW5hZ2VtZW50IGluIG1hYzgwMjExIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYCBmaWxlIGFuZCwgc3BlY2lmaWNhbGx5LCB0aGUgbWVzaCBwYXRoIGRlbGV0aW9uIG1lY2hhbmlzbXMsIHBhcnRpY3VsYXJseSBgX19tZXNoX3BhdGhfZGVsYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIEZyb20gd2hhdCBJIHNlZSwgYF9fbWVzaF9wYXRoX2RlbGAgaXMgY2FsbGVkIGJ5IHNldmVyYWwgZnVuY3Rpb25zOiBgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BgLCBgbXBwX2ZsdXNoX2J5X3Byb3h5YCwgYHRhYmxlX2ZsdXNoX2J5X2lmYWNlYCwgYHRhYmxlX3BhdGhfZGVsYCwgYW5kIGBtZXNoX3BhdGhfdGJsX2V4cGlyZWAuIFRoZSBwdWJsaWMgaW50ZXJmYWNlIGZvciBkZWxldGluZyBwYXRocywgYG1lc2hfcGF0aF9kZWxgLCBqdXN0IHdyYXBzIGB0YWJsZV9wYXRoX2RlbGAuIEkgYWxzbyBub3RpY2UgdGhhdCBgaWVlZTgwMjExX21lc2hfeG1pdF9mYXN0YCB1c2VzIGBtZXNoX2Zhc3RfdHhfZ2V0YCwgd2hpY2ggaXMgd29ydGggcmVtZW1iZXJpbmcuCgpOb3csIEkmIzM5O20gY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLiBBaGEsIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIGlzIG5vbi1zdGF0aWMsIHdoaWxlIGBfX21lc2hfcGF0aF9kZWxgIGlzIHN0YXRpYy4gVGhpcyBzdWdnZXN0cyBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgYWxvbmcgd2l0aCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAsIGFuZCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAgbWlnaHQgYmUgaW1wb3J0YW50IGVudHJ5IHBvaW50cy4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBzb2xpZC4gVGhlIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nIG1vZGlmaWVzIHRoZSBmYXN0IHBhdGggVFggY2FjaGUgYW5kIHBhdGggZGVsZXRpb24gdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgdGhlIGBNRVNIX1BBVEhfREVMRVRFRGAgZmxhZyB0byBwcmV2ZW50IGFkZGluZyBkZWxldGVkIHBhdGhzIHRvIHRoZSBjYWNoZS4gVGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgdGhyb3VnaCBubDgwMjExIG1lc2ggb3BlcmF0aW9ucywgd2hpY2ggbWVhbnMgSSBjYW4gdHJpZ2dlciBjb25jdXJyZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBhbmQgcGF0aCB0YWJsZSB1cGRhdGVzLiBUaGF0JiMzOTtzIGEga2V5IGZhY3RvciBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZyB3aWxsIGJlIGBtZXNoX2Zhc3RfdHhfY2FjaGVgLCBgX19tZXNoX3BhdGhfZGVsYCwgYG1lc2hfcGF0aF9kZWxgLCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAsIGFsb25nIHdpdGggYG1lc2hfZmFzdF90eF9mbHVzaF9tcGF0aGAsIGFuZCBgbWVzaF9mYXN0X3R4X2ZsdXNoX2FkZHJgLiBIb3dldmVyLCBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgYG1lc2hfcGF0aF9kZWxgLCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAsIGFuZCBgbWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BgIGFyZSBwYXJ0aWN1bGFybHkgcHJvbWlzaW5nLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBlbmFibGVkOiBgQ0ZHODAyMTFgLCBgTUFDODAyMTFgLCBgTUFDODAyMTFfTUVTSGAsIGFuZCBgTUFDODAyMTFfSFdTSU1gLiBUaGV5JiMzOTtyZSBhbGwgc2V0LiBUaGUgZm9ybWF0IGxvb2tzIGNvcnJlY3QsIGFuZCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDRkc4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9NRVNIJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVzaF9mYXN0X3R4X2NhY2hlJiMzNDssCiAgICAmIzM0O21lc2hfcGF0aF9kZWwmIzM0OywKICAgICYjMzQ7bWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3AmIzM0OywKICAgICYjMzQ7bWVzaF9uZXh0aG9wX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHRoZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGJ5IHNldHRpbmcgTUVTSF9QQVRIX0RFTEVURUQgdW5kZXIgc3RhdGVfbG9jayB3aGVuIGRlbGV0aW5nIGEgbWVzaCBwYXRoIGFuZCBjaGVja2luZyB0aGlzIGZsYWcgaW4gbWVzaF9mYXN0X3R4X2NhY2hlIGJlZm9yZSBjYWNoaW5nIGZhc3QgVFggZW50cmllcy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBzaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBtZXNoIG5ldHdvcmtpbmcgbmw4MDIxMS9kYXRhLXBhdGggb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfTUVTSCYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMV9IV1NJTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lc2hfZmFzdF90eF9jYWNoZSYjMzQ7LAogICAgJiMzNDttZXNoX3BhdGhfZGVsJiMzNDssCiAgICAmIzM0O21lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wJiMzNDssCiAgICAmIzM0O21lc2hfbmV4dGhvcF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1YnN5c3RlbSBieSBzZXR0aW5nIE1FU0hfUEFUSF9ERUxFVEVEIHVuZGVyIHN0YXRlX2xvY2sgd2hlbiBkZWxldGluZyBhIG1lc2ggcGF0aCBhbmQgY2hlY2tpbmcgdGhpcyBmbGFnIGluIG1lc2hfZmFzdF90eF9jYWNoZSBiZWZvcmUgY2FjaGluZyBmYXN0IFRYIGVudHJpZXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbWVzaCBuZXR3b3JraW5nIG5sODAyMTEvZGF0YS1wYXRoIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuIFRoZSBwb3RlbnRpYWwgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgKExPQ0tERVApLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGYyZTQ2NWE3YjMzM2I5NDhmNzk3MDI0MDNkNDc1OTU1YjY0NWViNmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDA3OjEwOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCmluZGV4IDAzMTcxY2YwMDg1NTcuLmRmY2M0ZjNhNzA4OGUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKQEAgLTU3Nyw2ICYjNDM7NTc3LDEyIEBAIHZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQlnb3RvIHVubG9ja19zdGE7CiAKIAlzcGluX2xvY2soJmFtcDtjYWNoZS0mZ3Q7d2Fsa19sb2NrKTsKJiM0MzsJaWYgKChSRUFEX09OQ0UobXBhdGgtJmd0O2ZsYWdzKSAmYW1wOyBNRVNIX1BBVEhfREVMRVRFRCkgfHwKJiM0MzsJICAgIChtcHBhdGggJmFtcDsmYW1wOyAoUkVBRF9PTkNFKG1wcGF0aC0mZ3Q7ZmxhZ3MpICZhbXA7IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHsKJiM0MzsJCWtmcmVlKGVudHJ5KTsKJiM0MzsJCWdvdG8gdW5sb2NrX2NhY2hlOwomIzQzOwl9CiYjNDM7CiAJcHJldiA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdCgmYW1wO2NhY2hlLSZndDtyaHQsCiAJCQkJCQkgJmFtcDtlbnRyeS0mZ3Q7cmhhc2gsCiAJCQkJCQkgZmFzdF90eF9yaHRfcGFyYW1zKTsKQEAgLTgxMiw2ICYjNDM7ODE4LDkgQEAgc3RhdGljIHZvaWQgX19tZXNoX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKQogewogCWhsaXN0X2RlbF9yY3UoJmFtcDttcGF0aC0mZ3Q7d2Fsa19saXN0KTsKIAlyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KCZhbXA7dGJsLSZndDtyaGVhZCwgJmFtcDttcGF0aC0mZ3Q7cmhhc2gsIG1lc2hfcmh0X3BhcmFtcyk7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO21wYXRoLSZndDtzdGF0ZV9sb2NrKTsKJiM0MzsJbXBhdGgtJmd0O2ZsYWdzIHw9IE1FU0hfUEFUSF9ERUxFVEVEOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO21wYXRoLSZndDtzdGF0ZV9sb2NrKTsKIAlpZiAodGJsID09ICZhbXA7bXBhdGgtJmd0O3NkYXRhLSZndDt1Lm1lc2gubXBwX3BhdGhzKQogCQltZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC0mZ3Q7c2RhdGEsIG1wYXRoLSZndDtkc3QpOwogCWVsc2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjQKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uIGZvciBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2Agd2FycmFudHMgaXRzIG93biBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuCgpGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHNjcnV0aW5pemUgdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtb2RpZmljYXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlICpjb250ZXh0KiBvZiB0aG9zZSBjaGFuZ2VzIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgKmRvaW5nKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29kZS4gSSYjMzk7bGwgdXNlIG15IHByZWZlcnJlZCBtZXRob2QgdG8gcmVhZCB0aGUgZmlsZSwgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1NzcgYW5kIDgxMiBvZiBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYC4gVGhlc2UgbGluZXMgYXJlIG15IGluaXRpYWwgcG9pbnRzIG9mIGludGVyZXN0LiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHRvIGdyYXNwIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIHNwZWNpZmljIGFyZWEgb2YgY29kZS4gT25jZSBJIGhhdmUgYSBnb29kIGdyYXNwIG9mIHRoZSBjb2RlIGluIHRoYXQgc2VjdGlvbiwgSSBzaG91bGQgYmUgYWJsZSB0byBtYWtlIGEgd2VsbC1pbmZvcm1lZCBkZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1MDpcdFx0XHRcdFx0YnVpbGQuZmFzdF90eC5oZHJfbGVuICYjNDM7PSBJRUVFODAyMTFfR0NNUF9IRFJfTEVOO1xuIDU1MTpcdFx0XHRcdGJyZWFrO1xuIDU1MjpcdFx0XHRkZWZhdWx0OlxuIDU1MzpcdFx0XHRcdGdvdG8gdW5sb2NrX3N0YTtcbiA1NTQ6XHRcdFx0fVxuIDU1NTpcdFx0fVxuIDU1NjpcdFxuIDU1NzpcdFx0bWVtY3B5KGJ1aWxkLmtleS5hZGRyLCBtcHBhdGgtXHUwMDNlZHN0LCBFVEhfQUxFTik7XG4gNTU4Olx0XHRidWlsZC50aW1lc3RhbXAgPSBqaWZmaWVzO1xuIDU1OTpcdFx0YnVpbGQuZmFzdF90eC5iYW5kID0gaW5mby1cdTAwM2ViYW5kO1xuIDU2MDpcdFx0YnVpbGQuZmFzdF90eC5kYV9vZmZzID0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9oZHIsIGFkZHIzKTtcbiA1NjE6XHRcdGJ1aWxkLmZhc3RfdHguc2Ffb2ZmcyA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfaGRyLCBhZGRyNCk7XG4gNTYyOlx0XHRidWlsZC5tcGF0aCA9IG1wYXRoO1xuIDU2MzpcdFx0bWVtY3B5KGJ1aWxkLmhkciwgbWVzaGhkciwgYnVpbGQuaGRybGVuKTtcbiA1NjQ6XHRcdG1lbWNweShidWlsZC5oZHIgJiM0MzsgYnVpbGQuaGRybGVuLCByZmMxMDQyX2hlYWRlciwgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKSk7XG4gNTY1Olx0XHRidWlsZC5oZHJsZW4gJiM0Mzs9IHNpemVvZihyZmMxMDQyX2hlYWRlcik7XG4gNTY2Olx0XHRtZW1jcHkoYnVpbGQuZmFzdF90eC5oZHIsIGhkciwgYnVpbGQuZmFzdF90eC5oZHJfbGVuKTtcbiA1Njc6XHRcbiA1Njg6XHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJ1aWxkLmZhc3RfdHguaGRyO1xuIDU2OTpcdFx0aWYgKGJ1aWxkLmZhc3RfdHgua2V5KVxuIDU3MDpcdFx0XHRoZHItXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpO1xuIDU3MTpcdFxuIDU3MjpcdFx0cWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTtcbiA1NzM6XHRcdHFjWzFdIHw9IElFRUU4MDIxMV9RT1NfQ1RMX01FU0hfQ09OVFJPTF9QUkVTRU5UIFx1MDAzZVx1MDAzZSA4O1xuIDU3NDpcdFxuIDU3NTpcdFx0ZW50cnkgPSBrbWVtZHVwKFx1MDAyNmJ1aWxkLCBzaXplb2YoYnVpbGQpLCBHRlBfQVRPTUlDKTtcbiA1NzY6XHRcdGlmICghZW50cnkpXG4gNTc3Olx0XHRcdGdvdG8gdW5sb2NrX3N0YTtcbiA1Nzg6XHRcbiA1Nzk6XHRcdHNwaW5fbG9jayhcdTAwMjZjYWNoZS1cdTAwM2V3YWxrX2xvY2spO1xuIDU4MDpcdFx0aWYgKChSRUFEX09OQ0UobXBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkgfHxcbiA1ODE6XHRcdCAgICAobXBwYXRoIFx1MDAyNlx1MDAyNiAoUkVBRF9PTkNFKG1wcGF0aC1cdTAwM2VmbGFncykgXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHtcbiA1ODI6XHRcdFx0a2ZyZWUoZW50cnkpO1xuIDU4MzpcdFx0XHRnb3RvIHVubG9ja19jYWNoZTtcbiA1ODQ6XHRcdH1cbiA1ODU6XHRcbiA1ODY6XHRcdHByZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXHUwMDI2Y2FjaGUtXHUwMDNlcmh0LFxuIDU4NzpcdFx0XHRcdFx0XHRcdCBcdTAwMjZlbnRyeS1cdTAwM2VyaGFzaCxcbiA1ODg6XHRcdFx0XHRcdFx0XHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcbiA1ODk6XHRcdGlmIChJU19FUlIocHJldikpIHtcbiA1OTA6XHRcdFx0a2ZyZWUoZW50cnkpO1xuIDU5MTpcdFx0XHRnb3RvIHVubG9ja19jYWNoZTtcbiA1OTI6XHRcdH1cbiA1OTM6XHRcbiA1OTQ6XHRcdC8qXG4gNTk1Olx0XHQgKiByZXBsYWNlIGFueSBwcmV2aW91cyBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSwgaW4gY2FzZSB3ZSYjMzk7cmVcbiA1OTY6XHRcdCAqIHJlcGxhY2luZyBpdCB3aXRoIGEgZGlmZmVyZW50IHR5cGUgKGUuZy4gbXBhdGggLVx1MDAzZSBtcHApXG4gNTk3Olx0XHQgKi9cbiA1OTg6XHRcdGlmICh1bmxpa2VseShwcmV2KSkge1xuIDU5OTpcdFx0XHRyaGFzaHRhYmxlX3JlcGxhY2VfZmFzdChcdTAwMjZjYWNoZS1cdTAwM2VyaHQsIFx1MDAyNnByZXYtXHUwMDNlcmhhc2gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDA3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDA6XHRcbiA4MDE6XHRzdGF0aWMgdm9pZCBtZXNoX3BhdGhfZnJlZV9yY3Uoc3RydWN0IG1lc2hfdGFibGUgKnRibCxcbiA4MDI6XHRcdFx0XHQgICAgICAgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4gODAzOlx0e1xuIDgwNDpcdFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBtcGF0aC1cdTAwM2VzZGF0YTtcbiA4MDU6XHRcbiA4MDY6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiA4MDc6XHRcdG1wYXRoLVx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfREVMRVRFRDtcbiA4MDg6XHRcdG1lc2hfZ2F0ZV9kZWwodGJsLCBtcGF0aCk7XG4gODA5Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiA4MTA6XHRcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2bXBhdGgtXHUwMDNldGltZXIpO1xuIDgxMTpcdFx0YXRvbWljX2RlYyhcdTAwMjZzZGF0YS1cdTAwM2V1Lm1lc2gubXBhdGhzKTtcbiA4MTI6XHRcdGF0b21pY19kZWMoXHUwMDI2dGJsLVx1MDAzZWVudHJpZXMpO1xuIDgxMzpcdFx0bWVzaF9wYXRoX2ZsdXNoX3BlbmRpbmcobXBhdGgpO1xuIDgxNDpcdFx0a2ZyZWVfcmN1KG1wYXRoLCByY3UpO1xuIDgxNTpcdH1cbiA4MTY6XHRcbiA4MTc6XHRzdGF0aWMgdm9pZCBfX21lc2hfcGF0aF9kZWwoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4gODE4Olx0e1xuIDgxOTpcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZtcGF0aC1cdTAwM2V3YWxrX2xpc3QpO1xuIDgyMDpcdFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ0YmwtXHUwMDNlcmhlYWQsIFx1MDAyNm1wYXRoLVx1MDAzZXJoYXNoLCBtZXNoX3JodF9wYXJhbXMpO1xuIDgyMTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIDgyMjpcdFx0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7XG4gODIzOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiA4MjQ6XHRcdGlmICh0YmwgPT0gXHUwMDI2bXBhdGgtXHUwMDNlc2RhdGEtXHUwMDNldS5tZXNoLm1wcF9wYXRocylcbiA4MjU6XHRcdFx0bWVzaF9mYXN0X3R4X2ZsdXNoX2FkZHIobXBhdGgtXHUwMDNlc2RhdGEsIG1wYXRoLVx1MDAzZWRzdCk7XG4gODI2Olx0XHRlbHNlXG4gODI3Olx0XHRcdG1lc2hfZmFzdF90eF9mbHVzaF9tcGF0aChtcGF0aCk7XG4gODI4Olx0XHRtZXNoX3BhdGhfZnJlZV9yY3UodGJsLCBtcGF0aCk7XG4gODI5Olx0fVxuIDgzMDpcdFxuIDgzMTpcdC8qKlxuIDgzMjpcdCAqIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wIC0gRGVsZXRlcyBtZXNoIHBhdGhzIGlmIHRoZWlyIG5leHQgaG9wIG1hdGNoZXNcbiA4MzM6XHQgKlxuIDgzNDpcdCAqIEBzdGE6IG1lc2ggcGVlciB0byBtYXRjaFxuIDgzNTpcdCAqXG4gODM2Olx0ICogUkNVIG5vdGVzOiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgbWVzaCBwbGluayB0cmFuc2l0aW9ucyBmcm9tXG4gODM3Olx0ICogUExJTktfRVNUQUIgdG8gYW55IG90aGVyIHN0YXRlLCBzaW5jZSBQTElOS19FU1RBQiBzdGF0ZSBpcyB0aGUgb25seSBvbmUgdGhhdFxuIDgzODpcdCAqIGFsbG93cyBwYXRoIGNyZWF0aW9uLiBUaGlzIHdpbGwgaGFwcGVuIGJlZm9yZSB0aGUgc3RhIGNhbiBiZSBmcmVlZCAoYmVjYXVzZVxuIDgzOTpcdCAqIHN0YV9pbmZvX2Rlc3Ryb3koKSBjYWxscyB0aGlzKSBzbyBhbnkgcmVhZGVyIGluIGEgcmN1IHJlYWQgYmxvY2sgd2lsbCBiZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAwNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgzCgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDkzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogTWVzaCBQYXRoIERlbGV0aW9uIGFuZCBGYXN0IFRYIENhY2hpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZXhhbWluaW5nIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgODAyLjExIG1lc2ggcGF0aCB0YWJsZSAoYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2ApLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGRlbGV0aW5nIG1lc2ggcGF0aHMgKGBfX21lc2hfcGF0aF9kZWxgKSBhbmQgdGhlIGZhc3QgVFggY2FjaGluZyBtZWNoYW5pc20gKGBtZXNoX2Zhc3RfdHhfY2FjaGVgKS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1Zy4KCk15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgYF9fbWVzaF9wYXRoX2RlbGAgZnVuY3Rpb24gc2V0cyB0aGUgYE1FU0hfUEFUSF9ERUxFVEVEYCBmbGFnIG9uIGEgYG1wYXRoYCAob3IgYG1wcGF0aGApIHN0cnVjdHVyZSBiZWZvcmUgZmx1c2hpbmcgdGhlIGZhc3QgVFggY2FjaGUgYW5kIHVsdGltYXRlbHkgZnJlZWluZyB0aGUgYG1wYXRoYCBtZW1vcnkuIFRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIHBvc3NpYmlsaXR5IG9mIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIHJhY2luZyB3aXRoIHRoaXMgZGVsZXRpb24gcHJvY2Vzcy4gSWYgdGhlIGNhY2hlIGF0dGVtcHRzIHRvIGFkZCBhbiBlbnRyeSAqYWZ0ZXIqIHRoZSBmYXN0IFRYIGZsdXNoIGJ1dCAqYmVmb3JlKiB0aGUgYG1wYXRoYCBpcyBhY3R1YWxseSBmcmVlZCwgaXQgd291bGQgZW5kIHVwIHJlZmVyZW5jaW5nIGZyZWVkIG1lbW9yeSwgYSBjbGFzc2ljIFVBRiBzY2VuYXJpby4KClRoZSBwYXRjaCYjMzk7cyBmaXggaW52b2x2ZXMgY2hlY2tpbmcgdGhlIGBNRVNIX1BBVEhfREVMRVRFRGAgZmxhZyB3aXRoaW4gYG1lc2hfZmFzdF90eF9jYWNoZWAsIHByb3RlY3RlZCBieSBgY2FjaGUtJmd0O3dhbGtfbG9ja2AgKG9yIGJlZm9yZSBpbnNlcnRpb24gaW50byB0aGUgcmhhc2h0YWJsZSkuICBJZiB0aGUgZmxhZyBpcyBzZXQsIHRoZSBlbnRyeSBpcyBub3QgYWRkZWQgdG8gdGhlIGNhY2hlLCBwcmV2ZW50aW5nIHRoZSBkYW5nbGluZyBwb2ludGVyLiBUaGlzIGxvb2sgbGlrZSBhIGdvb2QsIHNvbGlkIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBjcnVjaWFsIEtNU0FOIHF1ZXN0aW9uLiAgRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zPyAgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRoZSBgbXBhdGgtJmd0O2ZsYWdzYCBmaWVsZCBpcyBhbHJlYWR5IGFuIGVzdGFibGlzaGVkIGZpZWxkLCBhbmQgdGhlIGNvZGUgcmVhZHMgaXQgdXNpbmcgYFJFQURfT05DRWAsIHdoaWNoIGFwcGVhcnMgc2FmZS4gQWxzbywgYW55IG5ld2x5IGNyZWF0ZWQgZW50cmllcyB2aWEgYGttZW1kdXBgIGFyZSBpbW1lZGlhdGVseSBmcmVlZCBpZiB0aGUgZGVsZXRlZCBmbGFnIGlzIGZvdW5kLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBtaXRpZ2F0aW5nIGFuIGV4aXN0aW5nIGNvbmN1cnJlbmN5IGlzc3VlLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBlcnJvcnMuIFRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRhcmdldHMgYSBVQUYgdnVsbmVyYWJpbGl0eSwgYW5kIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGRldGVjdCB0aGlzLgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIG5ldyBrZXJuZWwgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLCBkb2VzbiYjMzk7dCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucyBvciByZWFkcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBLQVNBTiBzaG91bGQgY2F0Y2ggdGhlIHR5cGUgb2YgYnVnIHRoaXMgcGF0Y2ggaXMgcHJldmVudGluZy4KCk9rYXksIEkmIzM5O3ZlIGdvdCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBnZXQgdGhlIHRvb2wgY2FsbCByZWFkeSB0byBnby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMDc6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGEgY29uY3VycmVuY3kvc3luY2hyb25pemF0aW9uIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gbWVzaCBwYXRoIGRlbGV0aW9uIChfX21lc2hfcGF0aF9kZWwpIGFuZCBmYXN0IFRYIGNhY2hlIGVudHJ5IGluc2VydGlvbiAobWVzaF9mYXN0X3R4X2NhY2hlKSBpbiBtYWM4MDIxMS4gU3BlY2lmaWNhbGx5LCBpdCBmbGFncyBtZXNoIHBhdGhzIGFzIE1FU0hfUEFUSF9ERUxFVEVEIHByaW9yIHRvIGZsdXNoaW5nIGZhc3QgVFggY2FjaGUgYW5kIGNoZWNrcyB0aGlzIGZsYWcgYmVmb3JlIGluc2VydGluZyBuZXcgY2FjaGUgZW50cmllcyB0byBwcmV2ZW50IGRhbmdsaW5nIG1lc2hfcGF0aCByZWZlcmVuY2VzIGFuZCBzdWJzZXF1ZW50IHVzZS1hZnRlci1mcmVlIChVQUYpIGJ1Z3MuXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MuIFRoZSBwb3RlbnRpYWwgYnVncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2RlIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlIG9yIGxvY2tpbmcgaXNzdWVzKSBhcmUgZnVsbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWcgdG9vbHMgKExPQ0tERVApLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6MTEuNDg4MTU0OTUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzOTk1NzMyMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfZmFzdF90eF9jYWNoZVwiLFxuICAgIFwibWVzaF9wYXRoX2RlbFwiLFxuICAgIFwibWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BcIixcbiAgICBcIm1lc2hfbmV4dGhvcF9sb29rdXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIG1lc2ggcGF0aCBkZWxldGlvbiAoX19tZXNoX3BhdGhfZGVsKSBhbmQgZmFzdCBUWCBjYWNoZSBlbnRyeSBpbnNlcnRpb24gKG1lc2hfZmFzdF90eF9jYWNoZSkgaW4gbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgZmxhZ3MgbWVzaCBwYXRocyBhcyBNRVNIX1BBVEhfREVMRVRFRCBwcmlvciB0byBmbHVzaGluZyBmYXN0IFRYIGNhY2hlIGFuZCBjaGVja3MgdGhpcyBmbGFnIGJlZm9yZSBpbnNlcnRpbmcgbmV3IGNhY2hlIGVudHJpZXMgdG8gcHJldmVudCBkYW5nbGluZyBtZXNoX3BhdGggcmVmZXJlbmNlcyBhbmQgc3Vic2VxdWVudCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWdzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1YnN5c3RlbSBieSBzZXR0aW5nIE1FU0hfUEFUSF9ERUxFVEVEIHVuZGVyIHN0YXRlX2xvY2sgd2hlbiBkZWxldGluZyBhIG1lc2ggcGF0aCBhbmQgY2hlY2tpbmcgdGhpcyBmbGFnIGluIG1lc2hfZmFzdF90eF9jYWNoZSBiZWZvcmUgY2FjaGluZyBmYXN0IFRYIGVudHJpZXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbWVzaCBuZXR3b3JraW5nIG5sODAyMTEvZGF0YS1wYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjExLjQ4ODE1OTc5MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNzE5NzAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYyZTQ2NWE3YjMzM2I5NDhmNzk3MDI0MDNkNDc1OTU1YjY0NWViNmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAwNzoxMDowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5kZmNjNGYzYTcwODhlIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xcbkBAIC01NzcsNiArNTc3LDEyIEBAIHZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRcXHRnb3RvIHVubG9ja19zdGE7XFxuIFxcbiBcXHRzcGluX2xvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbitcXHRpZiAoKFJFQURfT05DRShtcGF0aC1cXHUwMDNlZmxhZ3MpIFxcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpIHx8XFxuK1xcdCAgICAobXBwYXRoIFxcdTAwMjZcXHUwMDI2IChSRUFEX09OQ0UobXBwYXRoLVxcdTAwM2VmbGFncykgXFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XFxuK1xcdFxcdGtmcmVlKGVudHJ5KTtcXG4rXFx0XFx0Z290byB1bmxvY2tfY2FjaGU7XFxuK1xcdH1cXG4rXFxuIFxcdHByZXYgPSByaGFzaHRhYmxlX2xvb2t1cF9nZXRfaW5zZXJ0X2Zhc3QoXFx1MDAyNmNhY2hlLVxcdTAwM2VyaHQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZW50cnktXFx1MDAzZXJoYXNoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcXG5AQCAtODEyLDYgKzgxOCw5IEBAIHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4ge1xcbiBcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZtcGF0aC1cXHUwMDNld2Fsa19saXN0KTtcXG4gXFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dGJsLVxcdTAwM2VyaGVhZCwgXFx1MDAyNm1wYXRoLVxcdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZtcGF0aC1cXHUwMDNlc3RhdGVfbG9jayk7XFxuK1xcdG1wYXRoLVxcdTAwM2VmbGFncyB8PSBNRVNIX1BBVEhfREVMRVRFRDtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gXFx0aWYgKHRibCA9PSBcXHUwMDI2bXBhdGgtXFx1MDAzZXNkYXRhLVxcdTAwM2V1Lm1lc2gubXBwX3BhdGhzKVxcbiBcXHRcXHRtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC1cXHUwMDNlc2RhdGEsIG1wYXRoLVxcdTAwM2Vkc3QpO1xcbiBcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjEyLjk5NTk3OTQzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDA2MDEzOTM3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfZmFzdF90eF9jYWNoZVwiLFxuICAgIFwibWVzaF9wYXRoX2RlbFwiLFxuICAgIFwibWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BcIixcbiAgICBcIm1lc2hfbmV4dGhvcF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHRoZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGJ5IHNldHRpbmcgTUVTSF9QQVRIX0RFTEVURUQgdW5kZXIgc3RhdGVfbG9jayB3aGVuIGRlbGV0aW5nIGEgbWVzaCBwYXRoIGFuZCBjaGVja2luZyB0aGlzIGZsYWcgaW4gbWVzaF9mYXN0X3R4X2NhY2hlIGJlZm9yZSBjYWNoaW5nIGZhc3QgVFggZW50cmllcy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBzaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBtZXNoIG5ldHdvcmtpbmcgbmw4MDIxMS9kYXRhLXBhdGggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMmU0NjVhN2IzMzNiOTQ4Zjc5NzAyNDAzZDQ3NTk1NWI2NDVlYjZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAwNzoxMDowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuaW5kZXggMDMxNzFjZjAwODU1Ny4uZGZjYzRmM2E3MDg4ZSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY1xuKysrIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5AQCAtNTc3LDYgKzU3NywxMiBAQCB2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0Z290byB1bmxvY2tfc3RhO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNmNhY2hlLVx1MDAzZXdhbGtfbG9jayk7XG4rXHRpZiAoKFJFQURfT05DRShtcGF0aC1cdTAwM2VmbGFncykgXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSB8fFxuK1x0ICAgIChtcHBhdGggXHUwMDI2XHUwMDI2IChSRUFEX09OQ0UobXBwYXRoLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpKSkge1xuK1x0XHRrZnJlZShlbnRyeSk7XG4rXHRcdGdvdG8gdW5sb2NrX2NhY2hlO1xuK1x0fVxuK1xuIFx0cHJldiA9IHJoYXNodGFibGVfbG9va3VwX2dldF9pbnNlcnRfZmFzdChcdTAwMjZjYWNoZS1cdTAwM2VyaHQsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNmVudHJ5LVx1MDAzZXJoYXNoLFxuIFx0XHRcdFx0XHRcdCBmYXN0X3R4X3JodF9wYXJhbXMpO1xuQEAgLTgxMiw2ICs4MTgsOSBAQCBzdGF0aWMgdm9pZCBfX21lc2hfcGF0aF9kZWwoc3RydWN0IG1lc2hfdGFibGUgKnRibCwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpXG4ge1xuIFx0aGxpc3RfZGVsX3JjdShcdTAwMjZtcGF0aC1cdTAwM2V3YWxrX2xpc3QpO1xuIFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZ0YmwtXHUwMDNlcmhlYWQsIFx1MDAyNm1wYXRoLVx1MDAzZXJoYXNoLCBtZXNoX3JodF9wYXJhbXMpO1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuK1x0bXBhdGgtXHUwMDNlZmxhZ3MgfD0gTUVTSF9QQVRIX0RFTEVURUQ7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZtcGF0aC1cdTAwM2VzdGF0ZV9sb2NrKTtcbiBcdGlmICh0YmwgPT0gXHUwMDI2bXBhdGgtXHUwMDNlc2RhdGEtXHUwMDNldS5tZXNoLm1wcF9wYXRocylcbiBcdFx0bWVzaF9mYXN0X3R4X2ZsdXNoX2FkZHIobXBhdGgtXHUwMDNlc2RhdGEsIG1wYXRoLVx1MDAzZWRzdCk7XG4gXHRlbHNlXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDoxMi45OTU5ODA4OTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTQxMTk0NjcwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBEaXZpbmcgaW50byBgbWVzaF9wYXRodGJsLmNgKipcblxuT2theSwgc28gdGhlIHBhdGNoIEknbSBsb29raW5nIGF0IHNwZWNpZmljYWxseSB0b3VjaGVzIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIG1ldGljdWxvdXNseSBhbmFseXplIHRoZSBnaXQgZGlmZiB0byB1bmRlcnN0YW5kICpleGFjdGx5KiB3aGF0J3MgYmVpbmcgY2hhbmdlZC4gQmV5b25kIGp1c3QgdGhlIGRpZmYsIHRob3VnaCwgSSBuZWVkIHRvIHpvb20gb3V0IGFuZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpdGhpbiB0aGF0IGZpbGUuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgZ2VuZXJhbCBmbG93IHRvIHRydWx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuTmV4dCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIEtjb25maWcgcHJlcmVxdWlzaXRlcy4gQXJlIHRoZXJlIGFueSBkZXBlbmRlbmNpZXMgdGhpcyBjb2RlIHJlbGllcyBvbj8gSSdsbCBuZWVkIHRvIGNoZWNrIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBpbiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLlxuXG5JJ2xsIGJlIHVzaW5nIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSBjb21iIHRocm91Z2ggYm90aCBgbWVzaF9wYXRodGJsLmNgIGFuZCBgS2NvbmZpZ2AuIFRoaXMgd2lsbCBoZWxwIG1lIHF1aWNrbHkgZmluZCByZWxldmFudCBkZWZpbml0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHRoYXQgbWlnaHQgYWZmZWN0IHRoZSBwYXRjaCdzIGJlaGF2aW9yLiBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgbWUgLSBJIGFsd2F5cyBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBiaWdnZXIgcGljdHVyZSBiZWZvcmUgYXNzZXNzaW5nIHRoZSBjb2RlIGluIGlzb2xhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDoyOC40MDc5MzA0ODhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTcwOlxcdFxcdFxcdGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpO1xcbiA1NzM6XFx0XFx0cWNbMV0gfD0gSUVFRTgwMjExX1FPU19DVExfTUVTSF9DT05UUk9MX1BSRVNFTlQgXFx1MDAzZVxcdTAwM2UgODtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0ZW50cnkgPSBrbWVtZHVwKFxcdTAwMjZidWlsZCwgc2l6ZW9mKGJ1aWxkKSwgR0ZQX0FUT01JQyk7XFxuIDU3NjpcXHRcXHRpZiAoIWVudHJ5KVxcbiA1Nzc6XFx0XFx0XFx0Z290byB1bmxvY2tfc3RhO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbiA1ODA6XFx0XFx0aWYgKChSRUFEX09OQ0UobXBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSB8fFxcbiA1ODE6XFx0XFx0ICAgIChtcHBhdGggXFx1MDAyNlxcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHtcXG4gNTgyOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1ODQ6XFx0XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LFxcbiA1ODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlbnRyeS1cXHUwMDNlcmhhc2gsXFxuIDU4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcXG4gNTg5OlxcdFxcdGlmIChJU19FUlIocHJldikpIHtcXG4gNTkwOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTkxOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1OTI6XFx0XFx0fVxcbiA1OTM6XFx0XFxuIDU5NDpcXHRcXHQvKlxcbiA1OTU6XFx0XFx0ICogcmVwbGFjZSBhbnkgcHJldmlvdXMgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUsIGluIGNhc2Ugd2UncmVcXG4gNTk2OlxcdFxcdCAqIHJlcGxhY2luZyBpdCB3aXRoIGEgZGlmZmVyZW50IHR5cGUgKGUuZy4gbXBhdGggLVxcdTAwM2UgbXBwKVxcbiA1OTc6XFx0XFx0ICovXFxuIDU5ODpcXHRcXHRpZiAodW5saWtlbHkocHJldikpIHtcXG4gNTk5OlxcdFxcdFxcdHJoYXNodGFibGVfcmVwbGFjZV9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LCBcXHUwMDI2cHJldi1cXHUwMDNlcmhhc2gsXFxuIDYwMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZW50cnktXFx1MDAzZXJoYXNoLCBmYXN0X3R4X3JodF9wYXJhbXMpO1xcbiA2MDE6XFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2cHJldi1cXHUwMDNld2Fsa19saXN0KTtcXG4gNjAyOlxcdFxcdFxcdGtmcmVlX3JjdShwcmV2LCBmYXN0X3R4LnJjdV9oZWFkKTtcXG4gNjAzOlxcdFxcdH1cXG4gNjA0OlxcdFxcbiA2MDU6XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNmVudHJ5LVxcdTAwM2V3YWxrX2xpc3QsIFxcdTAwMjZjYWNoZS1cXHUwMDNld2Fsa19oZWFkKTtcXG4gNjA2OlxcdFxcbiA2MDc6XFx0dW5sb2NrX2NhY2hlOlxcbiA2MDg6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbiA2MDk6XFx0dW5sb2NrX3N0YTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6MjguNDA4MDIyMDk4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwNSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwNTpcXHRcXG4gODA2OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MDc6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfREVMRVRFRDtcXG4gODA4OlxcdFxcdG1lc2hfZ2F0ZV9kZWwodGJsLCBtcGF0aCk7XFxuIDgwOTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MTA6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bXBhdGgtXFx1MDAzZXRpbWVyKTtcXG4gODExOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm1lc2gubXBhdGhzKTtcXG4gODEyOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnRibC1cXHUwMDNlZW50cmllcyk7XFxuIDgxMzpcXHRcXHRtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhtcGF0aCk7XFxuIDgxNDpcXHRcXHRrZnJlZV9yY3UobXBhdGgsIHJjdSk7XFxuIDgxNTpcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4gODE4OlxcdHtcXG4gODE5OlxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNm1wYXRoLVxcdTAwM2V3YWxrX2xpc3QpO1xcbiA4MjA6XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dGJsLVxcdTAwM2VyaGVhZCwgXFx1MDAyNm1wYXRoLVxcdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcXG4gODIxOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MjI6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9ERUxFVEVEO1xcbiA4MjM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gODI0OlxcdFxcdGlmICh0YmwgPT0gXFx1MDAyNm1wYXRoLVxcdTAwM2VzZGF0YS1cXHUwMDNldS5tZXNoLm1wcF9wYXRocylcXG4gODI1OlxcdFxcdFxcdG1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLVxcdTAwM2VzZGF0YSwgbXBhdGgtXFx1MDAzZWRzdCk7XFxuIDgyNjpcXHRcXHRlbHNlXFxuIDgyNzpcXHRcXHRcXHRtZXNoX2Zhc3RfdHhfZmx1c2hfbXBhdGgobXBhdGgpO1xcbiA4Mjg6XFx0XFx0bWVzaF9wYXRoX2ZyZWVfcmN1KHRibCwgbXBhdGgpO1xcbiA4Mjk6XFx0fVxcbiA4MzA6XFx0XFxuIDgzMTpcXHQvKipcXG4gODMyOlxcdCAqIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wIC0gRGVsZXRlcyBtZXNoIHBhdGhzIGlmIHRoZWlyIG5leHQgaG9wIG1hdGNoZXNcXG4gODMzOlxcdCAqXFxuIDgzNDpcXHQgKiBAc3RhOiBtZXNoIHBlZXIgdG8gbWF0Y2hcXG4gODM1OlxcdCAqXFxuIDgzNjpcXHQgKiBSQ1Ugbm90ZXM6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBtZXNoIHBsaW5rIHRyYW5zaXRpb25zIGZyb21cXG4gODM3OlxcdCAqIFBMSU5LX0VTVEFCIHRvIGFueSBvdGhlciBzdGF0ZSwgc2luY2UgUExJTktfRVNUQUIgc3RhdGUgaXMgdGhlIG9ubHkgb25lIHRoYXRcXG4gODM4OlxcdCAqIGFsbG93cyBwYXRoIGNyZWF0aW9uLiBUaGlzIHdpbGwgaGFwcGVuIGJlZm9yZSB0aGUgc3RhIGNhbiBiZSBmcmVlZCAoYmVjYXVzZVxcbiA4Mzk6XFx0ICogc3RhX2luZm9fZGVzdHJveSgpIGNhbGxzIHRoaXMpIHNvIGFueSByZWFkZXIgaW4gYSByY3UgcmVhZCBibG9jayB3aWxsIGJlXFxuIDg0MDpcXHQgKiBwcm90ZWN0ZWQgYWdhaW5zdCB0aGUgcGxpbmsgZGlzYXBwZWFyaW5nLlxcbiA4NDE6XFx0ICovXFxuIDg0MjpcXHR2b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbiA4NDM6XFx0e1xcbiA4NDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXFx1MDAzZXNkYXRhO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDoyOC40MDgwODA5MThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxOTYzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9mYXN0X3R4X2NhY2hlfF9fbWVzaF9wYXRoX2RlbHxtZXNoX3BhdGh0YmxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L21hYzgwMjExXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9NYWtlZmlsZT00Nz1tYWM4MDIxMS0kKENPTkZJR19NQUM4MDIxMV9NRVNIKSArPSBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlLTQ4LVxcdG1lc2gubyBcXFxcXFxubmV0L21hYzgwMjExL01ha2VmaWxlOjQ5OlxcdG1lc2hfcGF0aHRibC5vIFxcXFxcXG5uZXQvbWFjODAyMTEvTWFrZWZpbGUtNTAtXFx0bWVzaF9wbGluay5vIFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmM9MTc1Nz12b2lkIGllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jLTE3NzUtXFxubmV0L21hYzgwMjExL21lc2guYzoxNzc2OlxcdG1lc2hfcGF0aHRibF9pbml0KHNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jLTE3NzctXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5jPTE3OTA9dm9pZCBpZWVlODAyMTFfbWVzaF90ZWFyZG93bl9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc5Mi1cXHRtZXNoX3JtY19mcmVlKHNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5jOjE3OTM6XFx0bWVzaF9wYXRodGJsX3VucmVnaXN0ZXIoc2RhdGEpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmMtMTc5NC19XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM1ND12b2lkIG1lc2hfcGF0aF90eF9wZW5kaW5nKHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oOjM1NTp2b2lkIG1lc2hfcGF0aHRibF9pbml0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oOjM1Njp2b2lkIG1lc2hfcGF0aHRibF91bnJlZ2lzdGVyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTtcXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM1Ny1pbnQgbWVzaF9wYXRoX2RlbChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY29uc3QgdTggKmFkZHIpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2guaD0zNjg9Ym9vbCBpZWVlODAyMTFfbWVzaF94bWl0X2Zhc3Qoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21lc2guaC0zNjktXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGN0cmxfZmxhZ3MpO1xcbm5ldC9tYWM4MDIxMS9tZXNoLmg6MzcwOnZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9tZXNoLmgtMzcxLVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYz0xMjU4PWludCBtZXNoX25leHRob3BfbG9va3VwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODItXFx0XFx0aWYgKGllZWU4MDIxMV9od19jaGVjayhcXHUwMDI2c2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2VodywgU1VQUE9SVF9GQVNUX1hNSVQpKVxcbm5ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYzoxMjgzOlxcdFxcdFxcdG1lc2hfZmFzdF90eF9jYWNoZShzZGF0YSwgc2tiLCBtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jLTEyODQtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9NDM0PW1lc2hfZmFzdF90eF9nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDYyLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo0NjM6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTQ2NC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz04MDE9c3RhdGljIHZvaWQgbWVzaF9wYXRoX2ZyZWVfcmN1KHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODE2LVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo4MTc6c3RhdGljIHZvaWQgX19tZXNoX3BhdGhfZGVsKHN0cnVjdCBtZXNoX3RhYmxlICp0YmwsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04MTgte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg0Mj12b2lkIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wKHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTg1MS1cXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKG1wYXRoLVxcdTAwM2VuZXh0X2hvcCkgPT0gc3RhKVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzo4NTI6XFx0XFx0XFx0X19tZXNoX3BhdGhfZGVsKHRibCwgbXBhdGgpO1xcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NTMtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTg1Nz1zdGF0aWMgdm9pZCBtcHBfZmx1c2hfYnlfcHJveHkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODY2LVxcdFxcdGlmIChldGhlcl9hZGRyX2VxdWFsKG1wYXRoLVxcdTAwM2VtcHAsIHByb3h5KSlcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODY3OlxcdFxcdFxcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODY4LVxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz04NzI9c3RhdGljIHZvaWQgdGFibGVfZmx1c2hfYnlfaWZhY2Uoc3RydWN0IG1lc2hfdGFibGUgKnRibClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy04NzgtXFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcGF0aCwgbiwgXFx1MDAyNnRibC1cXHUwMDNld2Fsa19oZWFkLCB3YWxrX2xpc3QpIHtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6ODc5OlxcdFxcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtODgwLVxcdH1cXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz05MDY9c3RhdGljIGludCB0YWJsZV9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTkxOC1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6OTE5OlxcdF9fbWVzaF9wYXRoX2RlbCh0YmwsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtOTIwLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YmwtXFx1MDAzZXdhbGtfbG9jayk7XFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM9MTA1Nj12b2lkIG1lc2hfcGF0aF9maXhfbmV4dGhvcChzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aCwgc3RydWN0IHN0YV9pbmZvICpuZXh0X2hvcClcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDczLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYzoxMDc0OnZvaWQgbWVzaF9wYXRodGJsX2luaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwNzUte1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwODI9dm9pZCBtZXNoX3BhdGhfdGJsX2V4cGlyZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy0xMDkyLVxcdFxcdCAgICAgdGltZV9hZnRlcihqaWZmaWVzLCBtcGF0aC1cXHUwMDNlZXhwX3RpbWUgKyBNRVNIX1BBVEhfRVhQSVJFKSlcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmM6MTA5MzpcXHRcXHRcXHRfX21lc2hfcGF0aF9kZWwodGJsLCBtcGF0aCk7XFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTEwOTQtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jPTEwOTg9dm9pZCBtZXNoX3BhdGhfZXhwaXJlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKVxcbi0tXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jLTExMDMtXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjExMDQ6dm9pZCBtZXNoX3BhdGh0YmxfdW5yZWdpc3RlcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtMTEwNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjI4LjQ5NDI4MjI2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxODkyMjA2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgS2NvbmZpZyBvcHRpb25zIGludm9sdmVkIGhlcmUuIFRpbWUgdG8ganVtcCBpbnRvIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgdXN1YWxseSBoYXBwZW5zLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgZmxhZ3MsIGRlcGVuZGVuY2llcywgYW5kIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIHRoZXkgbWlnaHQgaGF2ZSB3aXRoIG90aGVyLCBzZWVtaW5nbHkgdW5yZWxhdGVkLCBjb25maWd1cmF0aW9ucy4gSXQncyBjcnVjaWFsIHRvIGdldCB0aGlzIHJpZ2h0IGJlZm9yZSBJIHN0YXJ0IGRvd24gYW55IG90aGVyIHBhdGgsIG9yIEknbSBsaWtlbHkgZ29pbmcgdG8gd2FzdGUgbXkgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjMxLjY4MzUwNTA5N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ4MjE2OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUFDODAyMTFfTUVTSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbWFjODAyMTFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL0tjb25maWc9NjA9Y29uZmlnIE1BQzgwMjExX0tVTklUX1RFU1RcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTY5LVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjcwOmNvbmZpZyBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRW5hYmxlIG1hYzgwMjExIG1lc2ggbmV0d29ya2luZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L21hYzgwMjExL0tjb25maWc9MjA5PWNvbmZpZyBNQUM4MDIxMV9NUExfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIxMS1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMTI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjEzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIyMj1jb25maWcgTUFDODAyMTFfTVBBVEhfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIyNC1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMjU6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjI2LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnPTIzNT1jb25maWcgTUFDODAyMTFfTUhXTVBfREVCVUdcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTIzNy1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyMzg6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjM5LVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0Ny1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNDg6Y29uZmlnIE1BQzgwMjExX01FU0hfU1lOQ19ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI0OS1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggc3luY2hyb25pemF0aW9uIGRlYnVnZ2luZ1xcXCJcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTAtXFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VXFxubmV0L21hYzgwMjExL0tjb25maWc6MjUxOlxcdGRlcGVuZHMgb24gTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI1Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNTgtXFxubmV0L21hYzgwMjExL0tjb25maWc6MjU5OmNvbmZpZyBNQUM4MDIxMV9NRVNIX0NTQV9ERUJVR1xcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MC1cXHRib29sIFxcXCJWZXJib3NlIG1lc2ggY2hhbm5lbCBzd2l0Y2ggZGVidWdnaW5nXFxcIlxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2MS1cXHRkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlVcXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNjI6XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL0tjb25maWctMjYzLVxcdGhlbHBcXG4tLVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnLTI2OS1cXG5uZXQvbWFjODAyMTEvS2NvbmZpZzoyNzA6Y29uZmlnIE1BQzgwMjExX01FU0hfUFNfREVCVUdcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzEtXFx0Ym9vbCBcXFwiVmVyYm9zZSBtZXNoIHBvd2Vyc2F2ZSBkZWJ1Z2dpbmdcXFwiXFxubmV0L21hYzgwMjExL0tjb25maWctMjcyLVxcdGRlcGVuZHMgb24gTUFDODAyMTFfREVCVUdfTUVOVVxcbm5ldC9tYWM4MDIxMS9LY29uZmlnOjI3MzpcXHRkZXBlbmRzIG9uIE1BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvS2NvbmZpZy0yNzQtXFx0aGVscFxcbi0tXFxubmV0L21hYzgwMjExL01ha2VmaWxlPTQxPW1hYzgwMjExLSQoQ09ORklHX01BQzgwMjExX0RFQlVHRlMpICs9IFxcXFxcXG4tLVxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00Ni1cXG5uZXQvbWFjODAyMTEvTWFrZWZpbGU6NDc6bWFjODAyMTEtJChDT05GSUdfTUFDODAyMTFfTUVTSCkgKz0gXFxcXFxcbm5ldC9tYWM4MDIxMS9NYWtlZmlsZS00OC1cXHRtZXNoLm8gXFxcXFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTYxMz1zdGF0aWMgaW50IGllZWU4MDIxMV9hZGRfa2V5KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNzEwLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NzExOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy03MTItXFx0XFx0aWYgKHNkYXRhLVxcdTAwM2V1Lm1lc2guc2VjdXJpdHkgIT0gSUVFRTgwMjExX01FU0hfU0VDX05PTkUpXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmM9MjE5MD1zdGF0aWMgdm9pZCBzdGFfYXBwbHlfbWVzaF9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtMjE5My17XFxubmV0L21hYzgwMjExL2NmZy5jOjIxOTQ6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2NmZy5jLTIxOTUtXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtXFx1MDAzZXNkYXRhO1xcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTI3ODc9c3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yODkzLVxcbm5ldC9tYWM4MDIxMS9jZmcuYzoyODk0OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy0yODk1LXN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9tcGF0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL2NmZy5jPTQ0Mjg9c3RhdGljIGludCBpZWVlODAyMTFfc2V0X2FmdGVyX2NzYV9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmtfZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUxLVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS9jZmcuYzo0NDUyOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9jZmcuYy00NDUzLVxcdGNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDpcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz00NTYzPXN0YXRpYyBpbnQgaWVlZTgwMjExX3NldF9jc2FfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rX2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1NC1cXHRcXHRicmVhaztcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NDY1NTojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNDY1Ni1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy01OTk2LVxcdC5kdW1wX3N1cnZleSA9IGllZWU4MDIxMV9kdW1wX3N1cnZleSxcXG5uZXQvbWFjODAyMTEvY2ZnLmM6NTk5NzojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNTk5OC1cXHQuYWRkX21wYXRoID0gaWVlZTgwMjExX2FkZF9tcGF0aCxcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTUyLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjUzOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9TWU5DX0RFQlVHXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTQ6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU1LSNlbHNlXFxubmV0L21hYzgwMjExL2RlYnVnLmg6NTY6I2RlZmluZSBNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcgMFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU3LSNlbmRpZlxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTU4LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjU5OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9DU0FfREVCVUdcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2MDojZGVmaW5lIE1BQzgwMjExX01FU0hfQ1NBX0RFQlVHIDFcXG5uZXQvbWFjODAyMTEvZGVidWcuaC02MS0jZWxzZVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjYyOiNkZWZpbmUgTUFDODAyMTFfTUVTSF9DU0FfREVCVUcgMFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTYzLSNlbmRpZlxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY0LVxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSF9QU19ERUJVR1xcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oOjY2OiNkZWZpbmUgTUFDODAyMTFfTUVTSF9QU19ERUJVRyAxXFxubmV0L21hYzgwMjExL2RlYnVnLmgtNjctI2Vsc2VcXG5uZXQvbWFjODAyMTEvZGVidWcuaDo2ODojZGVmaW5lIE1BQzgwMjExX01FU0hfUFNfREVCVUcgMFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTY5LSNlbmRpZlxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmg9MTI1PWRvIHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMTgtI2RlZmluZSBtc3luY19kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMTk6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX1NZTkNfREVCVUcsXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9tYWM4MDIxMS9kZWJ1Zy5oLTIyMC1cXHRcXHQgICBzZGF0YSwgZm10LCAjI19fVkFfQVJHU19fKVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjIyLSNkZWZpbmUgbWNzYV9kYmcoc2RhdGEsIGZtdCwgLi4uKVxcdFxcdFxcdFxcdFxcdFxcXFxcXG5uZXQvbWFjODAyMTEvZGVidWcuaDoyMjM6XFx0X3NkYXRhX2RiZyhNQUM4MDIxMV9NRVNIX0NTQV9ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI0LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWcuaC0yMjYtI2RlZmluZSBtcHNfZGJnKHNkYXRhLCBmbXQsIC4uLilcXHRcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmg6MjI3OlxcdF9zZGF0YV9kYmcoTUFDODAyMTFfTUVTSF9QU19ERUJVRyxcXHRcXHRcXHRcXHRcXFxcXFxubmV0L21hYzgwMjExL2RlYnVnLmgtMjI4LVxcdFxcdCAgIHNkYXRhLCBmbXQsICMjX19WQV9BUkdTX18pXFxuLS1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYz03MzY9SUVFRTgwMjExX0lGX0xJTktfRklMRShhZGRyLCBjb25mLVxcdTAwM2VhZGRyLCBNQUMpO1xcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTczNy1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo3Mzg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtNzM5LUlFRUU4MDIxMV9JRl9GSUxFKGVzdGFiX3BsaW5rcywgdS5tZXNoLmVzdGFiX3BsaW5rcywgQVRPTUlDKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jPTg2OD1zdGF0aWMgdm9pZCBhZGRfaWJzc19maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTg3Mi1cXG5uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYzo4NzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMtODc0LVxcbi0tXFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM9OTM3PXN0YXRpYyB2b2lkIGFkZF9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSlcXG4tLVxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk0OS1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxubmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmM6OTUwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jLTk1MS1cXHRcXHRhZGRfbWVzaF9maWxlcyhzZGF0YSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD03Nzk9c3RydWN0IGllZWU4MDIxMV9pZl9tZXNoIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTg1OS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDo4NjA6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtODYxLSNkZWZpbmUgSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQyhtc2gsIG5hbWUpXFx0XFxcXFxcbi0tXFxubmV0L21hYzgwMjExL21haW4uYz0xMTM3PWludCBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpXFxuLS1cXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTItXFxubmV0L21hYzgwMjExL21haW4uYzoxMzkzOiNpZm5kZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvbWFpbi5jLTEzOTQtXFx0LyogbWVzaCBkZXBlbmRzIG9uIEtjb25maWcsIGJ1dCBkcml2ZXJzIHNob3VsZCBzZXQgaXQgaWYgdGhleSB3YW50ICovXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaC5oPTM3OD12b2lkIG1lc2hfcGF0aF9yZWZyZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL21lc2guaC0zODAtXFxubmV0L21hYzgwMjExL21lc2guaDozODE6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL21lc2guaC0zODItc3RhdGljIGlubGluZVxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz04MTA9aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTgzOS1cXHRcXHRcXHRuZWVkX29mZmNoYW4gPSB0cnVlO1xcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6ODQwOiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODQxLVxcdFxcdGZhbGx0aHJvdWdoO1xcbi0tXFxubmV0L21hYzgwMjExL3J4LmM9Mjc5Mj1pZWVlODAyMTFfZGVsaXZlcl9za2Ioc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTI4OTEtXFxubmV0L21hYzgwMjExL3J4LmM6Mjg5MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvcnguYy0yODkzLXN0YXRpYyBib29sXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0yOTU5PWllZWU4MDIxMV9yeF9tZXNoX2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtMjk2MS17XFxubmV0L21hYzgwMjExL3J4LmM6Mjk2MjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvcnguYy0yOTYzLVxcdHN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSBcXHUwMDI2c2RhdGEtXFx1MDAzZXUubWVzaDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTQ2OD12b2lkIHN0YV9pbmZvX2ZyZWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBzdGFfaW5mbyAqc3RhKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA2LVxcdGtmcmVlKHJjdV9kZXJlZmVyZW5jZV9yYXcoc3RhLVxcdTAwM2VzdGEucmF0ZXMpKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo1MDc6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNTA4LVxcdGtmcmVlKHN0YS1cXHUwMDNlbWVzaCk7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYz02MzM9X19zdGFfaW5mb19hbGxvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTY2Ny1cXHR3aXBoeV93b3JrX2luaXQoXFx1MDAyNnN0YS1cXHUwMDNlYW1wZHVfbWxtZS53b3JrLCBpZWVlODAyMTFfYmFfc2Vzc2lvbl93b3JrKTtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzo2Njg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtNjY5LVxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goXFx1MDAyNnNkYXRhLVxcdTAwM2V2aWYpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy03OTUtXFx0c3RhX2luZm9fZnJlZV9saW5rKFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmspO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjc5NjojaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0hcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYy03OTctXFx0a2ZyZWUoc3RhLVxcdTAwM2VtZXNoKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jPTExMDc9c3RhdGljIHZvaWQgX19zdGFfaW5mb19yZWNhbGNfdGltKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIGlnbm9yZV9wZW5kaW5nKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMS1cXHRcXHRwcyA9IFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2Vic3MtXFx1MDAzZXBzO1xcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jOjExMjI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMTEyMy1cXHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcXHUwMDI2c3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSkge1xcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9Mjc0Mz1zdGF0aWMgaW5saW5lIHU2NCBzdGFfZ2V0X3N0YXRzX2J5dGVzKHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpyeHN0YXRzKVxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMjc1NS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzoyNzU2OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTI3NTctc3RhdGljIHZvaWQgc3RhX3NldF9tZXNoX3NpbmZvKHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmM9MzA3OT12b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLFxcbi0tXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmMtMzI2NC1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uYzozMjY1OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5jLTMyNjYtXFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpXFxuLS1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaD03MTU9c3RydWN0IHN0YV9pbmZvIHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oLTczMi1cXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo3MzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtNzM0LVxcdHN0cnVjdCBtZXNoX3N0YSAqbWVzaDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9zdGFfaW5mby5oPTgwMD1zdGF0aWMgaW5saW5lIGVudW0gbmw4MDIxMV9wbGlua19zdGF0ZSBzdGFfcGxpbmtfc3RhdGUoc3RydWN0IHN0YV9pbmZvICpzdGEpXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODAxLXtcXG5uZXQvbWFjODAyMTEvc3RhX2luZm8uaDo4MDI6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3N0YV9pbmZvLmgtODAzLVxcdHJldHVybiBzdGEtXFx1MDAzZW1lc2gtXFx1MDAzZXBsaW5rX3N0YXRlO1xcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjU2Mj1zdGF0aWMgaW50IGllZWU4MDIxMV9sb29rdXBfcmFfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL3R4LmMtMjU4Ni1cXHRcXHRicmVhaztcXG5uZXQvbWFjODAyMTEvdHguYzoyNTg3OiNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSFxcbm5ldC9tYWM4MDIxMS90eC5jLTI1ODgtXFx0Y2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOlxcbi0tXFxubmV0L21hYzgwMjExL3R4LmM9MjY4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9idWlsZF9oZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0yNzg3LVxcdFxcdGJyZWFrO1xcbm5ldC9tYWM4MDIxMS90eC5jOjI3ODg6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3R4LmMtMjc4OS1cXHRjYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYy0zMDMyLVxcbm5ldC9tYWM4MDIxMS90eC5jOjMwMzM6I2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNIXFxubmV0L21hYzgwMjExL3R4LmMtMzAzNC1cXHRpZiAobWVzaGhkcmxlbiBcXHUwMDNlIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjMxLjc5ODMzMzEyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzQ2NTQ5NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYWM4MDIxMSBNZXNoIFBhdGggVGFibGUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIHdpdGhpbiBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBmb2N1c2VkIG9uIHRoZSBgbWVzaF9mYXN0X3R4X2NhY2hlYCBhbmQgYF9fbWVzaF9wYXRoX2RlbGAgZnVuY3Rpb25zLiBJbiBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgdGhlIGNoZWNrIGZvciBgTUVTSF9QQVRIX0RFTEVURURgIHdpdGhpbiB0aGUgYHNwaW5fbG9ja2AgY29udGV4dCBpcyBjcml0aWNhbC4gVGhlIGNvbmNlcm4gaGVyZSBpcyBlbnN1cmluZyBhIHJhY2UgY29uZGl0aW9uIGRvZXNuJ3QgbGVhZCB0byBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCB3aGljaCBpcyBhIGNsYXNzaWMgbWVtb3J5IHNhZmV0eSBjb25jZXJuLiBUaGUgc2Vjb25kIGNvZGUgYmxvY2sgaGlnaGxpZ2h0cyBob3cgYSBwYXRoIGlzIG1hcmtlZCBhcyBkZWxldGVkIGluIGBfX21lc2hfcGF0aF9kZWxgLCBpbnZvbHZpbmcgbGlzdCBtYW5pcHVsYXRpb24gYW5kIHJoYXNodGFibGUgcmVtb3ZhbCwgYWxsIHdpdGggY2FyZWZ1bCBzcGlubG9jayB1c2FnZSB0byBwcmV2ZW50IGNvbmN1cnJlbnQgYWNjZXNzIGlzc3Vlcy5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgcGF0aCBpcyBhY3R1YWxseSByZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgc2V0dXAsIGJlY2F1c2UgaWYgbm90IGl0IGNvdWxkIGJlIGV4dHJlbWVseSBkaWZmaWN1bHQgdG8gZmluZCBidWdzLiBTbywgbGV0J3MgY29uc2lkZXIgdGhlIGJyb2FkZXIgcGljdHVyZSBhbmQgaG93IHdlIG1pZ2h0IHRyaWdnZXIgdGhpcyBjb2RlLiBUaGFua2Z1bGx5LCBgbWFjODAyMTFfaHdzaW1gLCB0aGUgdmlydHVhbCBzb2Z0d2FyZSByYWRpbyBzaW11bGF0b3IsIGlzIHRoZSBvYnZpb3VzIHRhcmdldCBoZXJlLiBJJ20gYXdhcmUgdGhhdCB0aGlzIG1vZHVsZSwgYWxvbmcgd2l0aCBtYWM4MDIxMSwgbmw4MDIxMSwgYW5kIGNmZzgwMjExIGFyZSBzdGFuZGFyZCBjb21wb25lbnRzIGluIExpbnV4IGtlcm5lbHMgYW5kIGFyZSB0aG9yb3VnaGx5IGZ1enplZCBieSBzeXprYWxsZXIuIFVzZXIgc3BhY2UgaW50ZXJhY3RzIHZpYSBuZXRsaW5rLiBUaGlzIG1lYW5zIHdlIGhhdmUgd2VsbC1kZWZpbmVkIGF0dGFjayBzdXJmYWNlIHZpYSB3aGljaCB0byBleGVyY2lzZSB0aGlzIGNvZGUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cblRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgYmFzaWMsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBzZXR0aW5ncy4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX01BQzgwMjExYCBhbmQgYENPTkZJR19NQUM4MDIxMV9NRVNIYCBhcmUgZW5hYmxlZCBpbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIEknbGwgZGl2ZSBpbnRvIGBuZXQvbWFjODAyMTEvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6MzYuNjMyOTkyODc1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2NTpcXHRcXHRoZWxwXFxuICA2NjpcXHRcXHQgIEVuYWJsZSB0aGlzIG9wdGlvbiB0byB0ZXN0IG1hYzgwMjExIGludGVybmFscyB3aXRoIGt1bml0LlxcbiAgNjc6XFx0XFxuICA2ODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2OTpcXHRcXG4gIDcwOlxcdGNvbmZpZyBNQUM4MDIxMV9NRVNIXFxuICA3MTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1cHBvcnRcXFwiXFxuICA3MjpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICA3MzpcXHRcXHRoZWxwXFxuICA3NDpcXHRcXHQgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgODAyLjExIG1lc2ggb3BlcmF0aW9uIGluIG1hYzgwMjExXFxuICA3NTpcXHRcXHQgIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGl0LiAgODAyLjExIG1lc2ggY29ubmVjdHMgbXVsdGlwbGUgc3RhdGlvbnNcXG4gIDc2OlxcdFxcdCAgb3ZlciAocG9zc2libHkgbXVsdGktaG9wKSB3aXJlbGVzcyBsaW5rcyB0byBmb3JtIGEgc2luZ2xlIGxvZ2ljYWxcXG4gIDc3OlxcdFxcdCAgTEFOLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRjb25maWcgTUFDODAyMTFfTEVEU1xcbiAgODA6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIExFRCB0cmlnZ2Vyc1xcXCJcXG4gIDgxOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFcXG4gIDgyOlxcdFxcdGRlcGVuZHMgb24gTEVEU19DTEFTUz15IHx8IExFRFNfQ0xBU1M9TUFDODAyMTFcXG4gIDgzOlxcdFxcdHNlbGVjdCBMRURTX1RSSUdHRVJTXFxuICA4NDpcXHRcXHRoZWxwXFxuICA4NTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBmZXcgTEVEIHRyaWdnZXJzIGZvciBkaWZmZXJlbnRcXG4gIDg2OlxcdFxcdCAgcGFja2V0IHJlY2VpdmUvdHJhbnNtaXQgZXZlbnRzLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgTUFDODAyMTFfREVCVUdGU1xcbiAgODk6XFx0XFx0Ym9vbCBcXFwiRXhwb3J0IG1hYzgwMjExIGludGVybmFscyBpbiBEZWJ1Z0ZTXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDozNi42MzMxNDQ3OTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQ1MzAwNDkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIE1BQzgwMjExIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgTUFDODAyMTFgIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IG1vdmUgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlLCBzcGVjaWZpY2FsbHkgYG5ldC9tYWM4MDIxMS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgZGVmaW5pdGlvbnMgYW5kIHJlbGF0aW9uc2hpcHMgdGhhdCBkaWN0YXRlIGhvdyBgTUFDODAyMTFgIGlzIGJ1aWx0IGFuZCBpbnRlZ3JhdGVkLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hhdCBvdGhlciBrZXJuZWwgZmVhdHVyZXMsIGRyaXZlcnMsIG9yIG1vZHVsZXMgYXJlIGRpcmVjdGx5IGNvbnRpbmdlbnQgdXBvbiB0aGUgYE1BQzgwMjExYCBvcHRpb24uIElzIGl0IGxpbmtlZCB0byBzcGVjaWZpYyByZWd1bGF0b3J5IGRvbWFpbnMsIGhhcmR3YXJlIGludGVyZmFjZXMsIG9yIHBlcmhhcHMgY2VydGFpbiBzZWN1cml0eSBmZWF0dXJlcz8gVW5jb3ZlcmluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMga2V5IGZvciBkZWJ1Z2dpbmcsIG1vZGlmaWNhdGlvbiwgb3IgZXZlbiB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0aWVzLiBJdCBpcyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBmaWxlIGJlZm9yZSBtYWtpbmcgY2hhbmdlcyB0byBhIHN1YnN5c3RlbSBsaWtlIE1BQzgwMjExLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE3NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6NDAuMDg2MTUyNDI1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9tYWM4MDIxMS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgTUFDODAyMTFcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIElFRUUgODAyLjExIE5ldHdvcmtpbmcgU3RhY2sgKG1hYzgwMjExKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gICA2OlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX0FFU19DQkNfTUFDU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSWVBUT19MSUJfQVJDNFxcbiAgIDg6XFx0XFx0c2VsZWN0IENSWVBUT19BRVNcXG4gICA5OlxcdFxcdHNlbGVjdCBDUllQVE9fQ0NNXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0dDTVxcbiAgMTE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IElFRUUgODAyLjExXFxuICAxNDpcXHRcXHQgIG5ldHdvcmtpbmcgc3RhY2suXFxuICAxNTpcXHRcXG4gIDE2OlxcdGNvbW1lbnQgXFxcIkNGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBDRkc4MDIxMT1uXFxuICAxODpcXHRcXG4gIDE5OlxcdGlmIE1BQzgwMjExICE9IG5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0Y29uZmlnIE1BQzgwMjExX0hBU19SQ1xcbiAgMjI6XFx0XFx0Ym9vbFxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgTUFDODAyMTFfUkNfTUlOU1RSRUxcXG4gIDI1OlxcdFxcdGJvb2wgXFxcIk1pbnN0cmVsXFxcIiBpZiBFWFBFUlRcXG4gIDI2OlxcdFxcdHNlbGVjdCBNQUM4MDIxMV9IQVNfUkNcXG4gIDI3OlxcdFxcdGRlZmF1bHQgeVxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSAnbWluc3RyZWwnIFRYIHJhdGUgY29udHJvbCBhbGdvcml0aG1cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y2hvaWNlXFxuICAzMjpcXHRcXHRwcm9tcHQgXFxcIkRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobVxcXCJcXG4gIDMzOlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTFfSEFTX1JDXFxuICAzNDpcXHRcXHRkZWZhdWx0IE1BQzgwMjExX1JDX0RFRkFVTFRfTUlOU1RSRUxcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gc2VsZWN0cyB0aGUgZGVmYXVsdCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtXFxuICAzNzpcXHRcXHQgIG1hYzgwMjExIHdpbGwgdXNlLiBOb3RlIHRoYXQgdGhpcyBkZWZhdWx0IGNhbiBzdGlsbCBiZVxcbiAgMzg6XFx0XFx0ICBvdmVycmlkZGVuIHRocm91Z2ggdGhlIGllZWU4MDIxMV9kZWZhdWx0X3JjX2FsZ28gbW9kdWxlXFxuICAzOTpcXHRcXHQgIHBhcmFtZXRlciBpZiBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLlxcbiAgNDA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjQwLjA4NjIzNTIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzIxMjU2NTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgaGF2aW5nIGl0OlxuXG4qKkRpZ2dpbmcgRGVlcGVyIGludG8gdGhlIFdpcmVsZXNzIFNpbXVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJvdWJsZXNob290aW5nIHRoaXMgd2lyZWxlc3Mgc2ltdWxhdGlvbiBpc3N1ZS4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIHRoZSBjb3JlIHByb2JsZW0sIGJ1dCBpdCBqdXN0IGhpdCBtZSDigJMgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgTUFDODAyMTFfSFdTSU1gIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5LiBUaGF0J3MgYSBrZXkgcGFydCBvZiBob3cgdGhlIHdpcmVsZXNzIGhhcmR3YXJlIHNpbXVsYXRpb24gd29ya3MsIGFuZCBpdCdzIHByb2JhYmx5IGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBgL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvYCBkaXJlY3Rvcnkgc3RydWN0dXJlLCBvciBzb21ldGhpbmcgYW5hbG9nb3VzLiBUaGVyZSBjb3VsZCBiZSBzb21lIHN1YnRsZSBmbGFnIG9yIHNldHRpbmcgdGhlcmUgdGhhdOKAmXMgdGhyb3dpbmcgYSB3cmVuY2ggaW50byBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gb3BlbiB1cCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcyBhbmQgcmVhbGx5IGRpZyBpbnRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIG9wdGlvbi4gSXQncyB0aW1lIHRvIGZvbGxvdyB0aGUgdHJhaWwgb2YgY29uZmlncywgZGVwZW5kZW5jaWVzLCBhbmQgdWx0aW1hdGVseSwgZ2V0IHRvIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDk5OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6NDQuODA3NDk0MThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzUzMTA0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUFDODAyMTFfSFdTSU1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnOjE6Y29uZmlnIE1BQzgwMjExX0hXU0lNXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDo0NC45ODUwMjkzMDFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc2OTAyMDQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVzaCBOZXR3b3JraW5nIGluIHRoZSBMaW51eCBLZXJuZWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19NQUM4MDIxMWAsIGBDT05GSUdfTUFDODAyMTFfTUVTSGAsIGFuZCBgQ09ORklHX0NGRzgwMjExYCDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBXaS1GaSBhbmQgbWVzaCBuZXR3b3JraW5nIGluIHRoZSBrZXJuZWwuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlc2UgY29uZmlndXJhdGlvbnMgYWZmZWN0IHNwZWNpZmljIGZ1bmN0aW9ucy4gSSdtIHplcm9pbmcgaW4gb24gYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLCBhcyB0aGV5IHNlZW0gdG8gYmUga2V5IHBsYXllcnMuIFRoZXkncmUgZGVmaW5pdGVseSBvbiBteSByYWRhciBmb3IgZGVlcGVyIGludmVzdGlnYXRpb24uXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgbWVzaF9mYXN0X3R4X2NhY2hlYCBhbmQgYF9fbWVzaF9wYXRoX2RlbGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQsIHBhcnRpY3VsYXJseSBhbnkgZW50cnkgcG9pbnRzIG9yIGhpZ2gtbGV2ZWwgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGZhc3QgVFggYW5kIG1lc2ggcGF0aCBoYW5kbGluZyBsb2dpYy4gU28sIGxldCdzIHN0YXJ0IHNlYXJjaGluZyB0aGUgY29kZWJhc2UgZm9yIHRoZSBjYWxscyB0byBgbWVzaF9mYXN0X3R4X2NhY2hlYC4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdpbGwgcmV2ZWFsIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgYW55IG1vZGlmaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjQ3Ljc1NDA1NDA5MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcxNzY4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzaF9mYXN0X3R4X2NhY2hlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9tYWM4MDIxMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbWFjODAyMTEvbWVzaC5oPTM2OD1ib29sIGllZWU4MDIxMV9tZXNoX3htaXRfZmFzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWVzaC5oLTM2OS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY3RybF9mbGFncyk7XFxubmV0L21hYzgwMjExL21lc2guaDozNzA6dm9pZCBtZXNoX2Zhc3RfdHhfY2FjaGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxubmV0L21hYzgwMjExL21lc2guaC0zNzEtXFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1lc2hfcGF0aCAqbXBhdGgpO1xcbi0tXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jPTEyNTg9aW50IG1lc2hfbmV4dGhvcF9sb29rdXAoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4Mi1cXHRcXHRpZiAoaWVlZTgwMjExX2h3X2NoZWNrKFxcdTAwMjZzZGF0YS1cXHUwMDNlbG9jYWwtXFx1MDAzZWh3LCBTVVBQT1JUX0ZBU1RfWE1JVCkpXFxubmV0L21hYzgwMjExL21lc2hfaHdtcC5jOjEyODM6XFx0XFx0XFx0bWVzaF9mYXN0X3R4X2NhY2hlKHNkYXRhLCBza2IsIG1wYXRoKTtcXG5uZXQvbWFjODAyMTEvbWVzaF9od21wLmMtMTI4NC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYz00MzQ9bWVzaF9mYXN0X3R4X2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYy00NjItXFxubmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jOjQ2Mzp2b2lkIG1lc2hfZmFzdF90eF9jYWNoZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMtNDY0LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDo0Ny44NDEyMzY2NzhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU5MTU4ODU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVzaCBQYXRoIE1hbmFnZW1lbnQgaW4gbWFjODAyMTEgZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gZm9jdXNpbmcgb24gdGhlIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgIGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIHRoZSBtZXNoIHBhdGggZGVsZXRpb24gbWVjaGFuaXNtcywgcGFydGljdWxhcmx5IGBfX21lc2hfcGF0aF9kZWxgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBncmFwaC4gRnJvbSB3aGF0IEkgc2VlLCBgX19tZXNoX3BhdGhfZGVsYCBpcyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAsIGBtcHBfZmx1c2hfYnlfcHJveHlgLCBgdGFibGVfZmx1c2hfYnlfaWZhY2VgLCBgdGFibGVfcGF0aF9kZWxgLCBhbmQgYG1lc2hfcGF0aF90YmxfZXhwaXJlYC4gVGhlIHB1YmxpYyBpbnRlcmZhY2UgZm9yIGRlbGV0aW5nIHBhdGhzLCBgbWVzaF9wYXRoX2RlbGAsIGp1c3Qgd3JhcHMgYHRhYmxlX3BhdGhfZGVsYC4gSSBhbHNvIG5vdGljZSB0aGF0IGBpZWVlODAyMTFfbWVzaF94bWl0X2Zhc3RgIHVzZXMgYG1lc2hfZmFzdF90eF9nZXRgLCB3aGljaCBpcyB3b3J0aCByZW1lbWJlcmluZy5cblxuTm93LCBJJ20gY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYG1lc2hfZmFzdF90eF9jYWNoZWAgYW5kIGBfX21lc2hfcGF0aF9kZWxgLiBBaGEsIGBtZXNoX2Zhc3RfdHhfY2FjaGVgIGlzIG5vbi1zdGF0aWMsIHdoaWxlIGBfX21lc2hfcGF0aF9kZWxgIGlzIHN0YXRpYy4gVGhpcyBzdWdnZXN0cyBgbWVzaF9mYXN0X3R4X2NhY2hlYCwgYWxvbmcgd2l0aCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAsIGFuZCBgbWVzaF9uZXh0aG9wX2xvb2t1cGAgbWlnaHQgYmUgaW1wb3J0YW50IGVudHJ5IHBvaW50cy5cblxuVGhlIHJlYXNvbmluZyBoZXJlIGlzIHNvbGlkLiBUaGUgcGF0Y2ggSSdtIGV4YW1pbmluZyBtb2RpZmllcyB0aGUgZmFzdCBwYXRoIFRYIGNhY2hlIGFuZCBwYXRoIGRlbGV0aW9uIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCBpdCB1c2VzIHRoZSBgTUVTSF9QQVRIX0RFTEVURURgIGZsYWcgdG8gcHJldmVudCBhZGRpbmcgZGVsZXRlZCBwYXRocyB0byB0aGUgY2FjaGUuIFRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBgbWFjODAyMTFfaHdzaW1gIG9yIHRocm91Z2ggbmw4MDIxMSBtZXNoIG9wZXJhdGlvbnMsIHdoaWNoIG1lYW5zIEkgY2FuIHRyaWdnZXIgY29uY3VycmVudCBmcmFtZSB0cmFuc21pc3Npb24gYW5kIHBhdGggdGFibGUgdXBkYXRlcy4gVGhhdCdzIGEga2V5IGZhY3RvciBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHdpbGwgYmUgYG1lc2hfZmFzdF90eF9jYWNoZWAsIGBfX21lc2hfcGF0aF9kZWxgLCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX25leHRob3BfbG9va3VwYCwgYWxvbmcgd2l0aCBgbWVzaF9mYXN0X3R4X2ZsdXNoX21wYXRoYCwgYW5kIGBtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcmAuIEhvd2V2ZXIsIGBtZXNoX2Zhc3RfdHhfY2FjaGVgLCBgbWVzaF9wYXRoX2RlbGAsIGBtZXNoX25leHRob3BfbG9va3VwYCwgYW5kIGBtZXNoX3BhdGhfZmx1c2hfYnlfbmV4dGhvcGAgYXJlIHBhcnRpY3VsYXJseSBwcm9taXNpbmcuXG5cbkZpbmFsbHksIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZW5hYmxlZDogYENGRzgwMjExYCwgYE1BQzgwMjExYCwgYE1BQzgwMjExX01FU0hgLCBhbmQgYE1BQzgwMjExX0hXU0lNYC4gVGhleSdyZSBhbGwgc2V0LiBUaGUgZm9ybWF0IGxvb2tzIGNvcnJlY3QsIGFuZCB0aGUgcmVxdWlyZW1lbnRzIGFyZSBtZXQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQwLCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQwNzoxMDo1My40MzI4MzAwMjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ1Mzk0MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfTUVTSFwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZXNoX2Zhc3RfdHhfY2FjaGVcIixcbiAgICBcIm1lc2hfcGF0aF9kZWxcIixcbiAgICBcIm1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wXCIsXG4gICAgXCJtZXNoX25leHRob3BfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgbWFjODAyMTEgbWVzaCBuZXR3b3JraW5nIHN1YnN5c3RlbSBieSBzZXR0aW5nIE1FU0hfUEFUSF9ERUxFVEVEIHVuZGVyIHN0YXRlX2xvY2sgd2hlbiBkZWxldGluZyBhIG1lc2ggcGF0aCBhbmQgY2hlY2tpbmcgdGhpcyBmbGFnIGluIG1lc2hfZmFzdF90eF9jYWNoZSBiZWZvcmUgY2FjaGluZyBmYXN0IFRYIGVudHJpZXMuIFRoaXMgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgc2ltdWxhdGVkIHdpcmVsZXNzIGRldmljZXMgKG1hYzgwMjExX2h3c2ltKSBhbmQgbWVzaCBuZXR3b3JraW5nIG5sODAyMTEvZGF0YS1wYXRoIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0ZHODAyMTFcIixcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9NRVNIXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1lc2hfZmFzdF90eF9jYWNoZVwiLFxuICAgIFwibWVzaF9wYXRoX2RlbFwiLFxuICAgIFwibWVzaF9wYXRoX2ZsdXNoX2J5X25leHRob3BcIixcbiAgICBcIm1lc2hfbmV4dGhvcF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIGluIHRoZSBtYWM4MDIxMSBtZXNoIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGJ5IHNldHRpbmcgTUVTSF9QQVRIX0RFTEVURUQgdW5kZXIgc3RhdGVfbG9jayB3aGVuIGRlbGV0aW5nIGEgbWVzaCBwYXRoIGFuZCBjaGVja2luZyB0aGlzIGZsYWcgaW4gbWVzaF9mYXN0X3R4X2NhY2hlIGJlZm9yZSBjYWNoaW5nIGZhc3QgVFggZW50cmllcy4gVGhpcyBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyBzaW11bGF0ZWQgd2lyZWxlc3MgZGV2aWNlcyAobWFjODAyMTFfaHdzaW0pIGFuZCBtZXNoIG5ldHdvcmtpbmcgbmw4MDIxMS9kYXRhLXBhdGggb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTA6NTMuNTk3Mzc3NDA1WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDI5MDM0MjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjUzLjU5NzkzMTg4NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0Mjg5NzgzNjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcy4gVGhlIHBvdGVudGlhbCBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoTE9DS0RFUCkuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYyZTQ2NWE3YjMzM2I5NDhmNzk3MDI0MDNkNDc1OTU1YjY0NWViNmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDA3OjEwOjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jIGIvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG5pbmRleCAwMzE3MWNmMDA4NTU3Li5kZmNjNGYzYTcwODhlIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXG4rKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcbkBAIC01NzcsNiArNTc3LDEyIEBAIHZvaWQgbWVzaF9mYXN0X3R4X2NhY2hlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHRnb3RvIHVubG9ja19zdGE7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2Y2FjaGUtXHUwMDNld2Fsa19sb2NrKTtcbitcdGlmICgoUkVBRF9PTkNFKG1wYXRoLVx1MDAzZWZsYWdzKSBcdTAwMjYgTUVTSF9QQVRIX0RFTEVURUQpIHx8XG4rXHQgICAgKG1wcGF0aCBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXHUwMDNlZmxhZ3MpIFx1MDAyNiBNRVNIX1BBVEhfREVMRVRFRCkpKSB7XG4rXHRcdGtmcmVlKGVudHJ5KTtcbitcdFx0Z290byB1bmxvY2tfY2FjaGU7XG4rXHR9XG4rXG4gXHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFx1MDAyNmNhY2hlLVx1MDAzZXJodCxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2ZW50cnktXHUwMDNlcmhhc2gsXG4gXHRcdFx0XHRcdFx0IGZhc3RfdHhfcmh0X3BhcmFtcyk7XG5AQCAtODEyLDYgKzgxOCw5IEBAIHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcbiB7XG4gXHRobGlzdF9kZWxfcmN1KFx1MDAyNm1wYXRoLVx1MDAzZXdhbGtfbGlzdCk7XG4gXHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnRibC1cdTAwM2VyaGVhZCwgXHUwMDI2bXBhdGgtXHUwMDNlcmhhc2gsIG1lc2hfcmh0X3BhcmFtcyk7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2bXBhdGgtXHUwMDNlc3RhdGVfbG9jayk7XG4rXHRtcGF0aC1cdTAwM2VmbGFncyB8PSBNRVNIX1BBVEhfREVMRVRFRDtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm1wYXRoLVx1MDAzZXN0YXRlX2xvY2spO1xuIFx0aWYgKHRibCA9PSBcdTAwMjZtcGF0aC1cdTAwM2VzZGF0YS1cdTAwM2V1Lm1lc2gubXBwX3BhdGhzKVxuIFx0XHRtZXNoX2Zhc3RfdHhfZmx1c2hfYWRkcihtcGF0aC1cdTAwM2VzZGF0YSwgbXBhdGgtXHUwMDNlZHN0KTtcbiBcdGVsc2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjEwOjUzLjU5NzkzMjcyNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTE0NjQ1MDQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIGBuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggaW4gYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2Agd2FycmFudHMgaXRzIG93biBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBjb3VsZCBiZSBhIGdvb2QgY2FuZGlkYXRlLCBidXQgSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBzY3J1dGluaXplIHRoZSBwYXRjaCBpdHNlbGYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCBtb2RpZmljYXRpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlICpjb250ZXh0KiBvZiB0aG9zZSBjaGFuZ2VzIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgKmRvaW5nKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgdXNlIG15IHByZWZlcnJlZCBtZXRob2QgdG8gcmVhZCB0aGUgZmlsZSwgZWl0aGVyIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCwgZm9jdXNpbmcgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyA1NzcgYW5kIDgxMiBvZiBgbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jYC4gVGhlc2UgbGluZXMgYXJlIG15IGluaXRpYWwgcG9pbnRzIG9mIGludGVyZXN0LiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgbG9naWMgdG8gZ3Jhc3AgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgc3BlY2lmaWMgYXJlYSBvZiBjb2RlLiBPbmNlIEkgaGF2ZSBhIGdvb2QgZ3Jhc3Agb2YgdGhlIGNvZGUgaW4gdGhhdCBzZWN0aW9uLCBJIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgYSB3ZWxsLWluZm9ybWVkIGRlY2lzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY0LCJPdXRwdXRUb2tlbnMiOjg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTE6MDQuNzQ0Mzg4NzQ4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTUwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTUwOlxcdFxcdFxcdFxcdFxcdGJ1aWxkLmZhc3RfdHguaGRyX2xlbiArPSBJRUVFODAyMTFfR0NNUF9IRFJfTEVOO1xcbiA1NTE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU1MjpcXHRcXHRcXHRkZWZhdWx0OlxcbiA1NTM6XFx0XFx0XFx0XFx0Z290byB1bmxvY2tfc3RhO1xcbiA1NTQ6XFx0XFx0XFx0fVxcbiA1NTU6XFx0XFx0fVxcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHRtZW1jcHkoYnVpbGQua2V5LmFkZHIsIG1wcGF0aC1cXHUwMDNlZHN0LCBFVEhfQUxFTik7XFxuIDU1ODpcXHRcXHRidWlsZC50aW1lc3RhbXAgPSBqaWZmaWVzO1xcbiA1NTk6XFx0XFx0YnVpbGQuZmFzdF90eC5iYW5kID0gaW5mby1cXHUwMDNlYmFuZDtcXG4gNTYwOlxcdFxcdGJ1aWxkLmZhc3RfdHguZGFfb2ZmcyA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfaGRyLCBhZGRyMyk7XFxuIDU2MTpcXHRcXHRidWlsZC5mYXN0X3R4LnNhX29mZnMgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX2hkciwgYWRkcjQpO1xcbiA1NjI6XFx0XFx0YnVpbGQubXBhdGggPSBtcGF0aDtcXG4gNTYzOlxcdFxcdG1lbWNweShidWlsZC5oZHIsIG1lc2hoZHIsIGJ1aWxkLmhkcmxlbik7XFxuIDU2NDpcXHRcXHRtZW1jcHkoYnVpbGQuaGRyICsgYnVpbGQuaGRybGVuLCByZmMxMDQyX2hlYWRlciwgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKSk7XFxuIDU2NTpcXHRcXHRidWlsZC5oZHJsZW4gKz0gc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKTtcXG4gNTY2OlxcdFxcdG1lbWNweShidWlsZC5mYXN0X3R4LmhkciwgaGRyLCBidWlsZC5mYXN0X3R4Lmhkcl9sZW4pO1xcbiA1Njc6XFx0XFxuIDU2ODpcXHRcXHRoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilidWlsZC5mYXN0X3R4LmhkcjtcXG4gNTY5OlxcdFxcdGlmIChidWlsZC5mYXN0X3R4LmtleSlcXG4gNTcwOlxcdFxcdFxcdGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpO1xcbiA1NzM6XFx0XFx0cWNbMV0gfD0gSUVFRTgwMjExX1FPU19DVExfTUVTSF9DT05UUk9MX1BSRVNFTlQgXFx1MDAzZVxcdTAwM2UgODtcXG4gNTc0OlxcdFxcbiA1NzU6XFx0XFx0ZW50cnkgPSBrbWVtZHVwKFxcdTAwMjZidWlsZCwgc2l6ZW9mKGJ1aWxkKSwgR0ZQX0FUT01JQyk7XFxuIDU3NjpcXHRcXHRpZiAoIWVudHJ5KVxcbiA1Nzc6XFx0XFx0XFx0Z290byB1bmxvY2tfc3RhO1xcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmNhY2hlLVxcdTAwM2V3YWxrX2xvY2spO1xcbiA1ODA6XFx0XFx0aWYgKChSRUFEX09OQ0UobXBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSB8fFxcbiA1ODE6XFx0XFx0ICAgIChtcHBhdGggXFx1MDAyNlxcdTAwMjYgKFJFQURfT05DRShtcHBhdGgtXFx1MDAzZWZsYWdzKSBcXHUwMDI2IE1FU0hfUEFUSF9ERUxFVEVEKSkpIHtcXG4gNTgyOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1ODQ6XFx0XFx0fVxcbiA1ODU6XFx0XFxuIDU4NjpcXHRcXHRwcmV2ID0gcmhhc2h0YWJsZV9sb29rdXBfZ2V0X2luc2VydF9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LFxcbiA1ODc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlbnRyeS1cXHUwMDNlcmhhc2gsXFxuIDU4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgZmFzdF90eF9yaHRfcGFyYW1zKTtcXG4gNTg5OlxcdFxcdGlmIChJU19FUlIocHJldikpIHtcXG4gNTkwOlxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gNTkxOlxcdFxcdFxcdGdvdG8gdW5sb2NrX2NhY2hlO1xcbiA1OTI6XFx0XFx0fVxcbiA1OTM6XFx0XFxuIDU5NDpcXHRcXHQvKlxcbiA1OTU6XFx0XFx0ICogcmVwbGFjZSBhbnkgcHJldmlvdXMgZW50cnkgaW4gdGhlIGhhc2ggdGFibGUsIGluIGNhc2Ugd2UncmVcXG4gNTk2OlxcdFxcdCAqIHJlcGxhY2luZyBpdCB3aXRoIGEgZGlmZmVyZW50IHR5cGUgKGUuZy4gbXBhdGggLVxcdTAwM2UgbXBwKVxcbiA1OTc6XFx0XFx0ICovXFxuIDU5ODpcXHRcXHRpZiAodW5saWtlbHkocHJldikpIHtcXG4gNTk5OlxcdFxcdFxcdHJoYXNodGFibGVfcmVwbGFjZV9mYXN0KFxcdTAwMjZjYWNoZS1cXHUwMDNlcmh0LCBcXHUwMDI2cHJldi1cXHUwMDNlcmhhc2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjExOjA0Ljc0NDYwMTY5OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDgwMDpcXHRcXG4gODAxOlxcdHN0YXRpYyB2b2lkIG1lc2hfcGF0aF9mcmVlX3JjdShzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLFxcbiA4MDI6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZXNoX3BhdGggKm1wYXRoKVxcbiA4MDM6XFx0e1xcbiA4MDQ6XFx0XFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBtcGF0aC1cXHUwMDNlc2RhdGE7XFxuIDgwNTpcXHRcXG4gODA2OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MDc6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9SRVNPTFZJTkcgfCBNRVNIX1BBVEhfREVMRVRFRDtcXG4gODA4OlxcdFxcdG1lc2hfZ2F0ZV9kZWwodGJsLCBtcGF0aCk7XFxuIDgwOTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MTA6XFx0XFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bXBhdGgtXFx1MDAzZXRpbWVyKTtcXG4gODExOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnNkYXRhLVxcdTAwM2V1Lm1lc2gubXBhdGhzKTtcXG4gODEyOlxcdFxcdGF0b21pY19kZWMoXFx1MDAyNnRibC1cXHUwMDNlZW50cmllcyk7XFxuIDgxMzpcXHRcXHRtZXNoX3BhdGhfZmx1c2hfcGVuZGluZyhtcGF0aCk7XFxuIDgxNDpcXHRcXHRrZnJlZV9yY3UobXBhdGgsIHJjdSk7XFxuIDgxNTpcXHR9XFxuIDgxNjpcXHRcXG4gODE3OlxcdHN0YXRpYyB2b2lkIF9fbWVzaF9wYXRoX2RlbChzdHJ1Y3QgbWVzaF90YWJsZSAqdGJsLCBzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aClcXG4gODE4OlxcdHtcXG4gODE5OlxcdFxcdGhsaXN0X2RlbF9yY3UoXFx1MDAyNm1wYXRoLVxcdTAwM2V3YWxrX2xpc3QpO1xcbiA4MjA6XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2dGJsLVxcdTAwM2VyaGVhZCwgXFx1MDAyNm1wYXRoLVxcdTAwM2VyaGFzaCwgbWVzaF9yaHRfcGFyYW1zKTtcXG4gODIxOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bXBhdGgtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiA4MjI6XFx0XFx0bXBhdGgtXFx1MDAzZWZsYWdzIHw9IE1FU0hfUEFUSF9ERUxFVEVEO1xcbiA4MjM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm1wYXRoLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gODI0OlxcdFxcdGlmICh0YmwgPT0gXFx1MDAyNm1wYXRoLVxcdTAwM2VzZGF0YS1cXHUwMDNldS5tZXNoLm1wcF9wYXRocylcXG4gODI1OlxcdFxcdFxcdG1lc2hfZmFzdF90eF9mbHVzaF9hZGRyKG1wYXRoLVxcdTAwM2VzZGF0YSwgbXBhdGgtXFx1MDAzZWRzdCk7XFxuIDgyNjpcXHRcXHRlbHNlXFxuIDgyNzpcXHRcXHRcXHRtZXNoX2Zhc3RfdHhfZmx1c2hfbXBhdGgobXBhdGgpO1xcbiA4Mjg6XFx0XFx0bWVzaF9wYXRoX2ZyZWVfcmN1KHRibCwgbXBhdGgpO1xcbiA4Mjk6XFx0fVxcbiA4MzA6XFx0XFxuIDgzMTpcXHQvKipcXG4gODMyOlxcdCAqIG1lc2hfcGF0aF9mbHVzaF9ieV9uZXh0aG9wIC0gRGVsZXRlcyBtZXNoIHBhdGhzIGlmIHRoZWlyIG5leHQgaG9wIG1hdGNoZXNcXG4gODMzOlxcdCAqXFxuIDgzNDpcXHQgKiBAc3RhOiBtZXNoIHBlZXIgdG8gbWF0Y2hcXG4gODM1OlxcdCAqXFxuIDgzNjpcXHQgKiBSQ1Ugbm90ZXM6IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBtZXNoIHBsaW5rIHRyYW5zaXRpb25zIGZyb21cXG4gODM3OlxcdCAqIFBMSU5LX0VTVEFCIHRvIGFueSBvdGhlciBzdGF0ZSwgc2luY2UgUExJTktfRVNUQUIgc3RhdGUgaXMgdGhlIG9ubHkgb25lIHRoYXRcXG4gODM4OlxcdCAqIGFsbG93cyBwYXRoIGNyZWF0aW9uLiBUaGlzIHdpbGwgaGFwcGVuIGJlZm9yZSB0aGUgc3RhIGNhbiBiZSBmcmVlZCAoYmVjYXVzZVxcbiA4Mzk6XFx0ICogc3RhX2luZm9fZGVzdHJveSgpIGNhbGxzIHRoaXMpIHNvIGFueSByZWFkZXIgaW4gYSByY3UgcmVhZCBibG9jayB3aWxsIGJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDA3OjExOjA0Ljc0NDc4OTcyOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzE0MjkwNzAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogTWVzaCBQYXRoIERlbGV0aW9uIGFuZCBGYXN0IFRYIENhY2hpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UncmUgZXhhbWluaW5nIGEgcGF0Y2ggcmVsYXRlZCB0byB0aGUgODAyLjExIG1lc2ggcGF0aCB0YWJsZSAoYG5ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuY2ApLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgc2VlbXMgdG8gYmUgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIGRlbGV0aW5nIG1lc2ggcGF0aHMgKGBfX21lc2hfcGF0aF9kZWxgKSBhbmQgdGhlIGZhc3QgVFggY2FjaGluZyBtZWNoYW5pc20gKGBtZXNoX2Zhc3RfdHhfY2FjaGVgKS4gU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgcG90ZW50aWFsIFVzZS1BZnRlci1GcmVlIChVQUYpIGJ1Zy5cblxuTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IHRoZSBgX19tZXNoX3BhdGhfZGVsYCBmdW5jdGlvbiBzZXRzIHRoZSBgTUVTSF9QQVRIX0RFTEVURURgIGZsYWcgb24gYSBgbXBhdGhgIChvciBgbXBwYXRoYCkgc3RydWN0dXJlIGJlZm9yZSBmbHVzaGluZyB0aGUgZmFzdCBUWCBjYWNoZSBhbmQgdWx0aW1hdGVseSBmcmVlaW5nIHRoZSBgbXBhdGhgIG1lbW9yeS4gVGhlIHByb2JsZW0gc3RlbXMgZnJvbSB0aGUgcG9zc2liaWxpdHkgb2YgYG1lc2hfZmFzdF90eF9jYWNoZWAgcmFjaW5nIHdpdGggdGhpcyBkZWxldGlvbiBwcm9jZXNzLiBJZiB0aGUgY2FjaGUgYXR0ZW1wdHMgdG8gYWRkIGFuIGVudHJ5ICphZnRlciogdGhlIGZhc3QgVFggZmx1c2ggYnV0ICpiZWZvcmUqIHRoZSBgbXBhdGhgIGlzIGFjdHVhbGx5IGZyZWVkLCBpdCB3b3VsZCBlbmQgdXAgcmVmZXJlbmNpbmcgZnJlZWQgbWVtb3J5LCBhIGNsYXNzaWMgVUFGIHNjZW5hcmlvLlxuXG5UaGUgcGF0Y2gncyBmaXggaW52b2x2ZXMgY2hlY2tpbmcgdGhlIGBNRVNIX1BBVEhfREVMRVRFRGAgZmxhZyB3aXRoaW4gYG1lc2hfZmFzdF90eF9jYWNoZWAsIHByb3RlY3RlZCBieSBgY2FjaGUtXHUwMDNld2Fsa19sb2NrYCAob3IgYmVmb3JlIGluc2VydGlvbiBpbnRvIHRoZSByaGFzaHRhYmxlKS4gIElmIHRoZSBmbGFnIGlzIHNldCwgdGhlIGVudHJ5IGlzIG5vdCBhZGRlZCB0byB0aGUgY2FjaGUsIHByZXZlbnRpbmcgdGhlIGRhbmdsaW5nIHBvaW50ZXIuIFRoaXMgbG9vayBsaWtlIGEgZ29vZCwgc29saWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZS5cblxuTm93LCBsZXQncyBhZGRyZXNzIHRoZSBjcnVjaWFsIEtNU0FOIHF1ZXN0aW9uLiAgRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zPyAgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVGhlIGBtcGF0aC1cdTAwM2VmbGFnc2AgZmllbGQgaXMgYWxyZWFkeSBhbiBlc3RhYmxpc2hlZCBmaWVsZCwgYW5kIHRoZSBjb2RlIHJlYWRzIGl0IHVzaW5nIGBSRUFEX09OQ0VgLCB3aGljaCBhcHBlYXJzIHNhZmUuIEFsc28sIGFueSBuZXdseSBjcmVhdGVkIGVudHJpZXMgdmlhIGBrbWVtZHVwYCBhcmUgaW1tZWRpYXRlbHkgZnJlZWQgaWYgdGhlIGRlbGV0ZWQgZmxhZyBpcyBmb3VuZC4gSXQncyBlc3NlbnRpYWxseSBtaXRpZ2F0aW5nIGFuIGV4aXN0aW5nIGNvbmN1cnJlbmN5IGlzc3VlLCBub3QgaW50cm9kdWNpbmcgbmV3IG1lbW9yeSBlcnJvcnMuIFRoaXMgcGF0Y2ggcHJpbWFyaWx5IHRhcmdldHMgYSBVQUYgdnVsbmVyYWJpbGl0eSwgYW5kIEtBU0FOIHNob3VsZCBiZSBhYmxlIHRvIGRldGVjdCB0aGlzLlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBuZXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSwgZG9lc24ndCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHJlYWRzLCBJJ20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gS0FTQU4gc2hvdWxkIGNhdGNoIHRoZSB0eXBlIG9mIGJ1ZyB0aGlzIHBhdGNoIGlzIHByZXZlbnRpbmcuXG5cbk9rYXksIEkndmUgZ290IGEgY2xlYXIgdW5kZXJzdGFuZGluZy4gTGV0J3MgZ2V0IHRoZSB0b29sIGNhbGwgcmVhZHkgdG8gZ28uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODMsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMDc6MTE6MjcuODg3Njk4NTM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjb25jdXJyZW5jeS9zeW5jaHJvbml6YXRpb24gcmFjZSBjb25kaXRpb24gYmV0d2VlbiBtZXNoIHBhdGggZGVsZXRpb24gKF9fbWVzaF9wYXRoX2RlbCkgYW5kIGZhc3QgVFggY2FjaGUgZW50cnkgaW5zZXJ0aW9uIChtZXNoX2Zhc3RfdHhfY2FjaGUpIGluIG1hYzgwMjExLiBTcGVjaWZpY2FsbHksIGl0IGZsYWdzIG1lc2ggcGF0aHMgYXMgTUVTSF9QQVRIX0RFTEVURUQgcHJpb3IgdG8gZmx1c2hpbmcgZmFzdCBUWCBjYWNoZSBhbmQgY2hlY2tzIHRoaXMgZmxhZyBiZWZvcmUgaW5zZXJ0aW5nIG5ldyBjYWNoZSBlbnRyaWVzIHRvIHByZXZlbnQgZGFuZ2xpbmcgbWVzaF9wYXRoIHJlZmVyZW5jZXMgYW5kIHN1YnNlcXVlbnQgdXNlLWFmdGVyLWZyZWUgKFVBRikgYnVncy5cXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCByZWFkcyBvZiB1bmluaXRpYWxpemVkIGRhdGEsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcy4gVGhlIHBvdGVudGlhbCBidWdzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUgb3IgbG9ja2luZyBpc3N1ZXMpIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoTE9DS0RFUCkuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5L3N5bmNocm9uaXphdGlvbiByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIG1lc2ggcGF0aCBkZWxldGlvbiAoX19tZXNoX3BhdGhfZGVsKSBhbmQgZmFzdCBUWCBjYWNoZSBlbnRyeSBpbnNlcnRpb24gKG1lc2hfZmFzdF90eF9jYWNoZSkgaW4gbWFjODAyMTEuIFNwZWNpZmljYWxseSwgaXQgZmxhZ3MgbWVzaCBwYXRocyBhcyBNRVNIX1BBVEhfREVMRVRFRCBwcmlvciB0byBmbHVzaGluZyBmYXN0IFRYIGNhY2hlIGFuZCBjaGVja3MgdGhpcyBmbGFnIGJlZm9yZSBpbnNlcnRpbmcgbmV3IGNhY2hlIGVudHJpZXMgdG8gcHJldmVudCBkYW5nbGluZyBtZXNoX3BhdGggcmVmZXJlbmNlcyBhbmQgc3Vic2VxdWVudCB1c2UtYWZ0ZXItZnJlZSAoVUFGKSBidWdzLlxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSwgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzLiBUaGUgcG90ZW50aWFsIGJ1Z3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSBvciBsb2NraW5nIGlzc3VlcykgYXJlIGZ1bGx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnIHRvb2xzIChMT0NLREVQKS4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[1] Phase: Succeeded StartedAt: 2026-09-09 07:11:39 +0000 UTC FinishedAt: 2026-09-09 07:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 07:11:39 +0000 UTC FinishedAt: 2026-09-09 07:11:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2] Phase: Succeeded StartedAt: 2026-09-09 07:11:39 +0000 UTC FinishedAt: 2026-09-09 10:54:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 07:11:39 +0000 UTC FinishedAt: 2026-09-09 10:54:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 07:11:39 +0000 UTC FinishedAt: 2026-09-09 07:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 07:11:39 +0000 UTC FinishedAt: 2026-09-09 07:11:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwrb8/series-workflowrwrb8-convert-artifact-833997593/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 07:12:03 +0000 UTC FinishedAt: 2026-09-09 07:28:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 07:12:03 +0000 UTC FinishedAt: 2026-09-09 07:28:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0df30323-024e-4e52-88c8-a5946739ab8b,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-workflowrwrb8/series-workflowrwrb8-convert-artifact-833997593/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": "cd5efe44-f9c6-46ce-83aa-b89fd62ee9e4", "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-workflowrwrb8/series-workflowrwrb8-build-action-716107447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 07:12:03 +0000 UTC FinishedAt: 2026-09-09 07:28:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0df30323-024e-4e52-88c8-a5946739ab8b,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-workflowrwrb8/series-workflowrwrb8-convert-artifact-833997593/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": "cd5efe44-f9c6-46ce-83aa-b89fd62ee9e4", "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-workflowrwrb8/series-workflowrwrb8-build-action-716107447/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 07:28:44 +0000 UTC FinishedAt: 2026-09-09 07:28:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 07:28:44 +0000 UTC FinishedAt: 2026-09-09 07:28:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 07:28:44 +0000 UTC FinishedAt: 2026-09-09 07:28:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 07:28:44 +0000 UTC FinishedAt: 2026-09-09 07:28:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrwrb8/series-workflowrwrb8-convert-artifact-1727885036/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 07:28:54 +0000 UTC FinishedAt: 2026-09-09 07:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 07:28:54 +0000 UTC FinishedAt: 2026-09-09 07:30:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd5efe44-f9c6-46ce-83aa-b89fd62ee9e4,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-workflowrwrb8/series-workflowrwrb8-build-action-716107447/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-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 07:30:47 +0000 UTC FinishedAt: 2026-09-09 07:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 07:30:47 +0000 UTC FinishedAt: 2026-09-09 07:30:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 07:30:47 +0000 UTC FinishedAt: 2026-09-09 07:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 07:30:47 +0000 UTC FinishedAt: 2026-09-09 07:51:13 +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:*0df30323-024e-4e52-88c8-a5946739ab8b,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-workflowrwrb8/series-workflowrwrb8-convert-artifact-1727885036/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": "1d470f85-405c-40bc-87fb-4b6c560dc39e", "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-workflowrwrb8/series-workflowrwrb8-build-action-1971602824/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 07:30:47 +0000 UTC FinishedAt: 2026-09-09 07:51:02 +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:*0df30323-024e-4e52-88c8-a5946739ab8b,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-workflowrwrb8/series-workflowrwrb8-convert-artifact-1727885036/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": "1d470f85-405c-40bc-87fb-4b6c560dc39e", "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-workflowrwrb8/series-workflowrwrb8-build-action-1971602824/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 07:51:13 +0000 UTC FinishedAt: 2026-09-09 07:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 07:51:13 +0000 UTC FinishedAt: 2026-09-09 07:51:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 07:51:13 +0000 UTC FinishedAt: 2026-09-09 07:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 07:51:13 +0000 UTC FinishedAt: 2026-09-09 07:53:14 +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:*1d470f85-405c-40bc-87fb-4b6c560dc39e,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-workflowrwrb8/series-workflowrwrb8-build-action-1971602824/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-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 07:53:24 +0000 UTC FinishedAt: 2026-09-09 10:54:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 07:53:24 +0000 UTC FinishedAt: 2026-09-09 10:54:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"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:*cd5efe44-f9c6-46ce-83aa-b89fd62ee9e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d470f85-405c-40bc-87fb-4b6c560dc39e,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-workflowrwrb8/series-workflowrwrb8-build-action-716107447/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-workflowrwrb8/series-workflowrwrb8-build-action-1971602824/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 07:53:24 +0000 UTC FinishedAt: 2026-09-09 07:53:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 07:53:24 +0000 UTC FinishedAt: 2026-09-09 07:53:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"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-workflowrwrb8/series-workflowrwrb8-convert-artifact-4045630165/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 07:53:24 +0000 UTC FinishedAt: 2026-09-09 07:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 07:53:24 +0000 UTC FinishedAt: 2026-09-09 07:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 07:53:24 +0000 UTC FinishedAt: 2026-09-09 07:53:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 07:53:34 +0000 UTC FinishedAt: 2026-09-09 10:54:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrwrb8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mesh_fast_tx_cache","mesh_path_del","mesh_path_flush_by_nexthop","mesh_nexthop_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"13e51269b6656768dc595ed6025e4974f2026543","config_name":"upstream-apparmor-kasan.config","enable_configs":["CFG80211","MAC80211","MAC80211_MESH","MAC80211_HWSIM"],"series_id":"9d9fd6a3-337b-4246-8bb7-4ce19e2d9963","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 07:53:34 +0000 UTC FinishedAt: 2026-09-09 10:54:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd5efe44-f9c6-46ce-83aa-b89fd62ee9e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1d470f85-405c-40bc-87fb-4b6c560dc39e,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-workflowrwrb8/series-workflowrwrb8-build-action-716107447/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-workflowrwrb8/series-workflowrwrb8-build-action-1971602824/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-workflowrwrb8/series-workflowrwrb8-convert-artifact-4045630165/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,}