Name: series-workflowxhkz4 Phase: Succeeded StartedAt: 2026-07-09 22:41:29 +0000 UTC FinishedAt: 2026-07-09 23:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[0] Phase: Succeeded StartedAt: 2026-07-09 22:41:29 +0000 UTC FinishedAt: 2026-07-09 23:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 22:41:29 +0000 UTC FinishedAt: 2026-07-09 23:01:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f278138808608775ad1ff2f3727829c6f840f16c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f278138808608775ad1ff2f3727829c6f840f16c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "64441c0e-5980-4c92-bd97-edbcfbc8217d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "should_abort_scan", "try_to_shrink_lruvec", "shrink_many", "user_proactive_reclaim", "try_to_free_mem_cgroup_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7c2hyaW5rX21hbnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2IyMjhiOTVjZDQ1MGViOTk1ZmNkYTdiZTUyNGEwNDE4YWViMWQwZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMjI6NTk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICYjNDM7NDkyOSw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRpbnQgaTtcbiBcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nIGZvciB0aGUgY3VycmVudCB0YXNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGgsIGFsbG93aW5nIHVzZXJzcGFjZSB0byBpbnRlcnJ1cHQgYSBwb3RlbnRpYWxseSBsb25nLXJ1bm5pbmcgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9uICh0cmlnZ2VyZWQgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzKSBieSBzZW5kaW5nIGEgc2lnbmFsLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGFib3J0cyB0aGUgc2NhbiB3aXRob3V0IGNhdXNpbmcgcmVzb3VyY2UgbGVha3Mgb3IgaW5jb25zaXN0ZW50IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IyMjhiOTVjZDQ1MGViOTk1ZmNkYTdiZTUyNGEwNDE4YWViMWQwZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMjI6NTk6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi5mYjQ3MmU5MjRmYzc3MSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ5MjksNiAmIzQzOzQ5MjksOSBAQCBzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCWludCBpOwogCWVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7CiAKJiM0MzsJaWYgKHVubGlrZWx5KHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKIAlpZiAoc2MtJmd0O25yX3JlY2xhaW1lZCAmZ3Q7PSBtYXgoc2MtJmd0O25yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLSZndDtvcmRlcikpKQogCQlyZXR1cm4gdHJ1ZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVk1TY2FuIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBhIHRhcmdldGVkIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24uIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhpcyBgaWYgKHVubGlrZWx5KHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpIHJldHVybiB0cnVlO2AgYmxvY2suCgpNeSBpbW1lZGlhdGUgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIGludHJvZHVjZXMgYSBzaWduYWwgaGFuZGxpbmcgYXNwZWN0IGludG8gcHJvYWN0aXZlIHJlY2xhaW0uIEVzc2VudGlhbGx5LCBpdCBtZWFucyB0aGF0IGlmIHByb2FjdGl2ZSBzY2FubmluZyBpcyBlbmFibGVkIChgc2MtJmd0O3Byb2FjdGl2ZWAgaXMgdHJ1ZSkgYW5kIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIChgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHJldHVybnMgdHJ1ZSksIHRoZW4gdGhlIHNjYW4gaXMgYWJvcnRlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgaW5mbHVlbmNpbmcgaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgdG8gc2lnbmFscyBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IG1ha2VzIHNlbnNlIHRvIG1lLCB0byBwcm92aWRlIHRoZSBzeXN0ZW0gd2l0aCB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8gZXh0ZXJuYWwgZXZlbnRzLCBsaWtlIHNpZ25hbHMgdGhhdCBtaWdodCBpbmRpY2F0ZSB1c2VyIHJlcXVlc3RzIGZvciBzdG9wcGluZyBhIHBvdGVudGlhbGx5IGxvbmcgYmFja2dyb3VuZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS92bXNjYW4uY2AgbW9yZSB0aG9yb3VnaGx5IHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MjYtXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTI4LXtcbi0tXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDk4OS1cbm1tL3Ztc2Nhbi5jOjQ5OTA6XHRcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQ5OTEtXHRcdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDkzLVxubW0vdm1zY2FuLmM6NTA5NDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTA5NS1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBBYm9ydCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IGBzaG91bGRfYWJvcnRfc2NhbmAgZ2V0cyBjYWxsZWQgYnkgYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLiBJbW1lZGlhdGVseSwgSSByZWNvZ25pemUgdGhpcyBhcyBwcmV0dHkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5LiBHaXZlbiBpdHMgcm9sZSwgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBJIGhhdmUgdG8gY29uc2lkZXIgZnV6emluZyB0aGlzLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlzIGhpZ2guCgpMZXQmIzM5O3Mgem9vbSBpbiBhIGJpdCBoZXJlLiBOb3csIHdhaXQgYSBzZWNvbmQuLi4gYHNob3VsZF9hYm9ydF9zY2FuYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfbWFueWAgYXJlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gU2luY2UgdGhleSYjMzk7cmUgYHN0YXRpY2AgaXQgc2VlbXMgdGhhdCB0aGUgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEhvd2V2ZXIsIEkgd2FudCB0byBjb25maXJtIHdoZXJlIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAgYXJlIGFjdHVhbGx5IGNhbGxlZCBmcm9tLCBnaXZlbiB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIGBzaG91bGRfYWJvcnRfc2NhbmAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgYWJvcnQgbG9naWMgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSwgc28gdGhhdCBJIGNhbiBjb25zdHJ1Y3QgdGVzdCBjYXNlcyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTYxLSAqL1xubW0vdm1zY2FuLmM6NDk2MjpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDk2My17XG4tLVxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDI2LVxubW0vdm1zY2FuLmM6NTAyNzpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MDI4LVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEzMC1cbm1tL3Ztc2Nhbi5jOjUxMzE6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MTMyLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBMUlUgVmVjdG9yIFNocmlua2luZyBTdHJhdGVnaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBMUlUgdmVjdG9yIHNocmlua3MuIGBzaHJpbmtfb25lYCBhbmQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgYXJlIGJvdGggdXNpbmcgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2QgZXhwZWN0IHRoZXkmIzM5O2QgYmUgdGhlIGNvbW1vbiBwYXRoIGZvciBzaW5nbGUtZWxlbWVudCBzaHJpbmtzIG9yIHRob3NlIHRyaWdnZXJlZCBieSB0aGUgZ2VuZXJhbCBMUlUgZ2VuZXJhdGlvbiBjeWNsZS4gTm93LCBgc2hyaW5rX21hbnlgIGlzIGFsc28gYmVpbmcgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIHRoYXQgdHJpZ2dlciBfbXVsdGlwbGVfIHNocmluayBvcGVyYXRpb25zIGluIG9uZSBnby4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBzaHJpbmtfbWFueWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZGl0aW9ucyB3b3VsZCBjYXVzZSBhIHN0cmF0ZWd5IHNoaWZ0IHRvIGJ1bGsgc2hyaW5raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVxubW0vdm1zY2FuLmM6NTA0ODpzdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUwNDkte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY3LVx0ZWxzZVxubW0vdm1zY2FuLmM6NTE2ODpcdFx0c2hyaW5rX21hbnkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1HTFJVIFNocmlua2FnZSBTdHJhdGVneSBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgTUdMUlUgY29kZSBoYW5kbGVzIG1lbW9yeSBzaHJpbmthZ2UuIFNwZWNpZmljYWxseSwgYGxydV9nZW5fc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHNocmlua19tYW55YCwgYW5kIHRoYXQmIzM5O3MgYSBrZXkgaW50ZXJhY3Rpb24gdG8gdW5kZXJzdGFuZC4gSXQmIzM5O3MgY2xlYXIgdGhhdCBib3RoIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgYXJlIGRlZXBseSBlbWJlZGRlZCB3aXRoaW4gdGhlIE1HTFJVIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIGJ1aWxkIG9wdGlvbnMgcmVsYXRlZCB0byBNR0xSVS4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdHVuaW5nIHRoaXMgYmVoYXZpb3IgYW5kIHBvc3NpYmx5IG9wdGltaXppbmcgaXQgZm9yIHNwZWNpZmljIHdvcmtsb2Fkcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3Nocmlua19ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTM4LVxubW0vdm1zY2FuLmM6NTEzOTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTE0MC17XG4tLVxubW0vdm1zY2FuLmM9NTg2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODcxLVxubW0vdm1zY2FuLmM6NTg3MjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTg3My17XG4tLVxubW0vdm1zY2FuLmM9NjE0OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTU2LVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xubW0vdm1zY2FuLmM6NjE1NzpcdFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjE1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBscnVfZ2VuX3Nocmlua19ub2RlYCDigJMgQ29udGV4dCBpcyBLZXkqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGxydV9nZW5fc2hyaW5rX25vZGVgIGZ1bmN0aW9uLCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHNlZSAqdHdvKiBkZWZpbml0aW9ucywgd2hpY2ggaXMgb2Z0ZW4gYSByZWQgZmxhZyBpbiBrZXJuZWwgY29kZS4gSXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgb25lIG9mIHRoZW0gaXMgYSBwbGFjZWhvbGRlciwgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiwgb3IgYSBmYWxsYmFjayBtZWNoYW5pc20uIFdlIGFsbCBrbm93IGhvdyB0aGVzZSB0aGluZ3MgZ28g4oCTIHlvdSBvZnRlbiBlbmQgdXAgd2l0aCBhIGZldyBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgYmFzZWQgb24gY29tcGlsZS10aW1lIGNvbmZpZ3MuCgpUbyBmaWd1cmUgb3V0IHRoZSBhY3R1YWwgaW50ZW5kZWQgYmVoYXZpb3IsIEkgbmVlZCBtb3JlIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlIE11bHRpcGxlIEdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmZWF0dXJlIGlzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gTUdMUlUsIGdpdmVuIHRoZSBuYW1pbmcsIGJ1dCBJIG5lZWQgc29saWQgZXZpZGVuY2UgYmVmb3JlIG1ha2luZyBhc3N1bXB0aW9ucy4gU28sIGxldCYjMzk7cyBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGFuZCB2ZXJpZnkgd2hldGhlciBNR0xSVSBpcyBhY3RpdmUuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cCByZWFsbHkgcXVpY2tseS4gVGhlIEtjb25maWcgd2lsbCBkaWN0YXRlIHdoaWNoIGRlZmluaXRpb24gaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDU1Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTczLVxubW0vbWVtY29udHJvbC5jOjQ1NzQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDU3NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDU5Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbm1tL21lbWNvbnRyb2wuYzo0NTk0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtY29udHJvbC5jLTQ1OTUtXG4tLVxubW0vbWVtb3J5LmM9NjUzNT1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxubW0vbWVtb3J5LmMtNjU4Ny1cbm1tL21lbW9yeS5jOjY1ODg6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1vcnkuYy02NTg5LXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmM9NjYwND1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcbi0tXG5tbS9tZW1vcnkuYy02NjA2LX1cbm1tL21lbW9yeS5jOjY2MDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1vcnkuYy02NjA4LVxuLS1cbm1tL3N3YXAuYz0zOTY9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmMtNDI1LVxubW0vc3dhcC5jOjQyNjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3N3YXAuYy00MjctXG4tLVxubW0vc3dhcC5jPTQ1Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmMtNDY5LVxubW0vc3dhcC5jOjQ3MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3N3YXAuYy00NzEtXG4tLVxubW0vc3dhcC5jPTQ3Nj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmMtNDgwLVxubW0vc3dhcC5jOjQ4MTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3N3YXAuYy00ODItXG4tLVxubW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI0LVxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjYtXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjgtXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MzAtXG4tLVxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTY2LVxubW0vdm1zY2FuLmM6Mjk2NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0yOTY4LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NTg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg1OS1cbm1tL3Ztc2Nhbi5jOjU4NjA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODYxLVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NzI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODc2LVxubW0vdm1zY2FuLmM6NTg3NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU4NzgtXG4tLVxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTIzMi1cbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS93b3JraW5nc2V0LmMtMjM0LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzM2LVxubW0vd29ya2luZ3NldC5jOjMzNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zMzgtXG4tLVxubW0vd29ya2luZ3NldC5jPTM1MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zNTMtXG5tbS93b3JraW5nc2V0LmM6MzU0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTM1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaGVyZSBpcyByZWdhcmRpbmcgYENPTkZJR19MUlVfR0VOYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgTUdMUlUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBJIHNlZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGJlaW5nIHJlZmVyZW5jZWQsIGJ1dCBpdCYjMzk7cyAqb3V0c2lkZSogdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGNvbmRpdGlvbmFsLiBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBjbGFyaWZ5IGV4YWN0bHkgd2hlcmUgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBkZWZpbmVkIGJlY2F1c2UgdGhpcyBzZXR1cCBzZWVtcyB1bnVzdWFsLCBhbmQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYHNob3VsZF9hYm9ydF9zY2FuYCBjb21lcyBmcm9tLCBhbmQgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBNR0xSVSBjb2RlIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDkyNi1cbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTg5LVxubW0vdm1zY2FuLmM6NDk5MDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNDk5MS1cdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwOTMtXG5tbS92bXNjYW4uYzo1MDk0Olx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MDk1LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgbGluZSA0OTI3LCBnaXZlIG9yIHRha2UsIGluIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBraWNrcyBpbnRvIGdlYXIuIGB2bXNjYW4uY2AgaXMgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciwgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgcmVjbGFpbWluZyBwYWdlcyBhbmQgZ2VuZXJhbGx5IGtlZXBpbmcgbWVtb3J5IHV0aWxpemF0aW9uIGhlYWx0aHkuIExpbmUgNDkyNy4uLiB0aGF0JiMzOTtzIGEgKnNwZWNpZmljKiBzcG90LiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGF0IHNwZWNpZmljIGFyZWEgaGFzIGJlZW4gZmxhZ2dlZC4gSXQmIzM5O3MgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHBhZ2UgZXZpY3Rpb24sIG1heWJlIGhhbmRsaW5nIGRpcnR5IHBhZ2VzLCBvciBwb3NzaWJseSBldmVuIHRoZSBiYWNrZ3JvdW5kIHJlY2xhaW0gcHJvY2VzcyBpdHNlbGYuIFRpbWUgdG8gbG9hZCB1cCB0aGUgc291cmNlIGFuZCBkaWcgaW4uIEkgd2lsbCBzdGFydCBieSBzZWVpbmcgd2hhdCB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgaXMsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCBhbmQgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGRvaW5nIGluIHRoYXQgYXJlYS4gQ2hhbmNlcyBhcmUgdGhlIGlzc3VlIGlzIHJlbGF0ZWQgdG8gYSBzdWJ0bGUgZWRnZSBjYXNlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcmVjbGFpbWluZyBwYWdlcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBQZXJoYXBzIGEgcmFjZSBjb25kaXRpb24sIGEgc3VidGxlIG1lbW9yeSBsZWFrLCBvciBldmVuIGp1c3QgYW4gaW5lZmZpY2llbnQgYWxsb2NhdGlvbiBwYXR0ZXJuLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDkxMDpcdHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG40OTExOlx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcbjQ5MTI6XHR7XG40OTEzOlx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcbjQ5MTQ6XHRcbjQ5MTU6XHRcdGV2aWN0YWJsZSA9IGxydXZlY19ldmljdGFibGVfc2l6ZShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuNDkxNjpcdFxuNDkxNzpcdFx0LyogdHJ5IHRvIHNjcmFwZSBhbGwgaXRzIG1lbW9yeSBpZiB0aGlzIG1lbWNnIHdhcyBkZWxldGVkICovXG40OTE4Olx0XHRpZiAoIW1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSlcbjQ5MTk6XHRcdFx0cmV0dXJuIGV2aWN0YWJsZTtcbjQ5MjA6XHRcbjQ5MjE6XHRcdG5yX3RvX3NjYW4gPSBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihtZW1jZywgc2MsIGV2aWN0YWJsZSk7XG40OTIyOlx0XHRucl90b19zY2FuIFx1MDAzZVx1MDAzZT0gc2MtXHUwMDNlcHJpb3JpdHk7XG40OTIzOlx0XG40OTI0Olx0XHRyZXR1cm4gbnJfdG9fc2NhbjtcbjQ5MjU6XHR9XG40OTI2Olx0XG40OTI3Olx0c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5Mjg6XHR7XG40OTI5Olx0XHRpbnQgaTtcbjQ5MzA6XHRcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG40OTMxOlx0XG40OTMyOlx0XHRpZiAodW5saWtlbHkoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXG40OTMzOlx0XHRcdHJldHVybiB0cnVlO1xuNDkzNDpcdFxuNDkzNTpcdFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuNDkzNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQ5Mzc6XHRcbjQ5Mzg6XHRcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXG40OTM5Olx0XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG40OTQwOlx0XHRcdHJldHVybiBmYWxzZTtcbjQ5NDE6XHRcbjQ5NDI6XHRcdG1hcmsgPSBzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcdTAwMjYgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcgP1xuNDk0MzpcdFx0ICAgICAgIFdNQVJLX1BST01PIDogV01BUktfSElHSDtcbjQ5NDQ6XHRcbjQ5NDU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBzYy1cdTAwM2VyZWNsYWltX2lkeDsgaSYjNDM7JiM0MzspIHtcbjQ5NDY6XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKS1cdTAwM2Vub2RlX3pvbmVzICYjNDM7IGk7XG40OTQ3Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHdtYXJrX3BhZ2VzKHpvbmUsIG1hcmspICYjNDM7IE1JTl9MUlVfQkFUQ0g7XG40OTQ4Olx0XG40OTQ5Olx0XHRcdGlmIChtYW5hZ2VkX3pvbmUoem9uZSkgXHUwMDI2XHUwMDI2ICF6b25lX3dhdGVybWFya19vayh6b25lLCAwLCBzaXplLCBzYy1cdTAwM2VyZWNsYWltX2lkeCwgMCkpXG40OTUwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuNDk1MTpcdFx0fVxuNDk1MjpcdFxuNDk1MzpcdFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cbjQ5NTQ6XHRcdHJldHVybiB0cnVlO1xuNDk1NTpcdH1cbjQ5NTY6XHRcbjQ5NTc6XHQvKlxuNDk1ODpcdCAqIEZvciBmdXR1cmUgb3B0aW1pemF0aW9uczpcbjQ5NTk6XHQgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xuNDk2MDpcdCAqICAgIHJlY2xhaW0uXG40OTYxOlx0ICovXG40OTYyOlx0c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5NjM6XHR7XG40OTY0Olx0XHRib29sIG5lZWRfcm90YXRlID0gZmFsc2UsIHNob3VsZF9hZ2UgPSBmYWxzZTtcbjQ5NjU6XHRcdGxvbmcgbnJfYmF0Y2gsIG5yX3RvX3NjYW47XG40OTY2Olx0XHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuNDk2NzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG40OTY4Olx0XG40OTY5Olx0XHRucl90b19zY2FuID0gZ2V0X25yX3RvX3NjYW4obHJ1dmVjLCBzYywgbWVtY2csIHN3YXBwaW5lc3MpO1xuNDk3MDpcdFx0d2hpbGUgKG5yX3RvX3NjYW4gXHUwMDNlIDApIHtcbjQ5NzE6XHRcdFx0aW50IGRlbHRhO1xuNDk3MjpcdFx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNDk3MzpcdFxuNDk3NDpcdFx0XHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIG1lbWNnKSkge1xuNDk3NTpcdFx0XHRcdG5lZWRfcm90YXRlID0gdHJ1ZTtcbjQ5NzY6XHRcdFx0XHRicmVhaztcbjQ5Nzc6XHRcdFx0fVxuNDk3ODpcdFxuNDk3OTpcdFx0XHRpZiAoc2hvdWxkX3J1bl9hZ2luZyhscnV2ZWMsIG1heF9zZXEsIHNjLCBzd2FwcGluZXNzKSkge1xuNDk4MDpcdFx0XHRcdGlmICh0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmYWxzZSkpXG40OTgxOlx0XHRcdFx0XHRuZWVkX3JvdGF0ZSA9IHRydWU7XG40OTgyOlx0XHRcdFx0c2hvdWxkX2FnZSA9IHRydWU7XG40OTgzOlx0XHRcdH1cbjQ5ODQ6XHRcbjQ5ODU6XHRcdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG40OTg2Olx0XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbjQ5ODc6XHRcdFx0aWYgKCFkZWx0YSlcbjQ5ODg6XHRcdFx0XHRicmVhaztcbjQ5ODk6XHRcbjQ5OTA6XHRcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxuNDk5MTpcdFx0XHRcdGJyZWFrO1xuNDk5MjpcdFxuNDk5MzpcdFx0XHQvKlxuNDk5NDpcdFx0XHQgKiBSb290IHJlY2xhaW0gbmVlZHMgcm90YXRpb24gd2hlbiBsb3cgb24gY29sZCBmb2xpbyBmb3IgYmV0dGVyXG40OTk1Olx0XHRcdCAqIGZhaXJuZXNzLiBDZ3JvdXAgcmVjbGFpbSBnZXRzIGZhaXJuZXNzIGZyb20gdGhlIGl0ZXJhdG9yLlxuNDk5NjpcdFx0XHQgKi9cbjQ5OTc6XHRcdFx0aWYgKHJvb3RfcmVjbGFpbShzYykgXHUwMDI2XHUwMDI2IHNob3VsZF9hZ2UpXG40OTk4Olx0XHRcdFx0YnJlYWs7XG40OTk5Olx0XG41MDAwOlx0XHRcdG5yX3RvX3NjYW4gLT0gZGVsdGE7XG41MDAxOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTAwMjpcdFx0fVxuNTAwMzpcdFxuNTAwNDpcdFx0cmV0dXJuIG5lZWRfcm90YXRlO1xuNTAwNTpcdH1cbjUwMDY6XHRcbjUwMDc6XHRzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjUwMDg6XHR7XG41MDA5Olx0XHRib29sIG5lZWRfcm90YXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBzaG91bGRfYWJvcnRfc2NhbmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzaG91bGRfYWJvcnRfc2NhbmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaXMgdGhpcyBhIGZ1bmN0aW9uIHNwZWNpZmljIHRvIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSwgb3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbCB0aGF0IG1pZ2h0IGJlIHVzZWQgYWNyb3NzIG90aGVyIHJlY2xhaW0gbWVjaGFuaXNtcz8gVG8gZmlndXJlIHRoaXMgb3V0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIE15IHByaW1hcnkgc3VzcGVjdCBpcyBNR0xSVSwgYnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IHVzZWQgbW9yZSBicm9hZGx5LiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYSBwcmVwcm9jZXNzb3IgY2hlY2suIExldCYjMzk7cyBzZWUgaWYgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhhdCB3aWxsIGRlZmluaXRpdmVseSB0ZWxsIG1lIGlmIGl0JiMzOTtzIHRpZWQgdG8gdGhlIGdlbmVyYXRpb25hbCBMUlUgaW1wbGVtZW50YXRpb24sIGFzIGV4cGVjdGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIGFuc3dlciBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcmVjbGFpbSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgyND1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMC1cbm1tL3Ztc2Nhbi5jOjgzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzMi0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg1ND1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtODU3LX1cbm1tL3Ztc2Nhbi5jOjg1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg1OS1cbi0tXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYyNC1cbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjI2LVxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MjktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODI4LVxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yODMwLVxuLS1cbm1tL3Ztc2Nhbi5jPTI5Mzg9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk2Ni1cbm1tL3Ztc2Nhbi5jOjI5Njc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMjk2OC1cbi0tXG5tbS92bXNjYW4uYz01ODU4PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTU4NTktXG5tbS92bXNjYW4uYzo1ODYwOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTg2MS1cbi0tXG5tbS92bXNjYW4uYz01ODcyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTg3Ni1cbm1tL3Ztc2Nhbi5jOjU4Nzc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gYW5kIEFib3J0IExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbmFsaXR5LiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgdXNlZCBzb21ld2hlcmUgZGVlcCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gTGV0JiMzOTtzIHNlZS4uLiB5ZXAsIGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBhbmQgcG90ZW50aWFsbHkgdHJpZ2dlcmVkIG9uIGxpbmUgNDkyNy4KCk5vdywgSSYjMzk7bSBwcmV0dHkgc3VyZSBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUgYWZmZWN0aW5nIHRoaXMgd2hvbGUgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGd1YXJkZWQgYnkgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHByZXByb2Nlc3NvciBtYWNyby4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgY2xlYXJseS4gT2theSwgdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrICphcHBlYXJzKiB0byBzdGFydCBhdCBsaW5lIDI2MjUgYW5kIHJ1bnMgYWxsIHRoZSB3YXkgdG8gbGluZSA1ODYwLiBUaGF0JiMzOTtzIGEgaHVnZSBibG9jayBvZiBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBjb2RlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoYXQmIzM5O3MgdGhlIGZ1bGwgZXh0ZW50LiBJIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlIGxvZ2ljIEkmIzM5O20gbG9va2luZyBhdCBpcyBhY3R1YWxseSBpbmNsdWRlZCwgZXhjbHVkZWQsIG9yIHBhcnRpYWxseSBpbmNsdWRlZCBieSB0aGUgbWFjcm8uIFNvLCBJIHdpbGwgY29uZmlybSB0aGUgbGluZSBudW1iZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjIwOlx0XHQvKiBBbHNvIHZhbHVhYmxlIGlmIGFub24gcGFnZXMgY2FuIGJlIGRlbW90ZWQ6ICovXG4yNjIxOlx0XHRyZXR1cm4gY2FuX2RlbW90ZShscnV2ZWNfcGdkYXQobHJ1dmVjKS1cdTAwM2Vub2RlX2lkLCBzYyxcbjI2MjI6XHRcdFx0XHQgIGxydXZlY19tZW1jZyhscnV2ZWMpKTtcbjI2MjM6XHR9XG4yNjI0Olx0XG4yNjI1Olx0I2lmZGVmIENPTkZJR19MUlVfR0VOXG4yNjI2Olx0XG4yNjI3Olx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG4yNjI4Olx0I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbjI2Mjk6XHRERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IExpbmUgNTg1NSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIHBvaW50LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgbGluZSA1ODU1LiBJJiMzOTttIGhpdHRpbmcgYSBtZW50YWwgY2hlY2twb2ludCB0aGVyZSwgd2FudGluZyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoYXQgcGFydGljdWxhciBwb2ludCBpbiB0aGUgZXhlY3V0aW9uIGZsb3cuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgd2h5IEkgc3VzcGVjdCB0aGF0IGxpbmUgNTg1NSBpcyBpbnRlcmVzdGluZy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byB0aGUgY29yZSBhbGdvcml0aG0sIGEgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9uLCBhIGNhbGwgdG8gYSBjcml0aWNhbCBmdW5jdGlvbiwgb3IgcGVyaGFwcyBldmVuIGFuIGFub21hbHkgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93bi4gVGhpcyBsaW5lIG51bWJlciBhY3RzIGFzIG15IGFuY2hvciB0byBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0OiB3aGF0IHByZWNlZGVzIGl0LCBhbmQgd2hhdCBmb2xsb3dzPyBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBsaW5lIGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTg1NTpcdFxuNTg1NjpcdFx0cmV0dXJuIDA7XG41ODU3Olx0fTtcbjU4NTg6XHRsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG41ODU5Olx0XG41ODYwOlx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG41ODYxOlx0XG41ODYyOlx0c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjU4NjM6XHR7XG41ODY0Olx0XHRCVUlMRF9CVUcoKTtcbjU4NjU6XHR9XG41ODY2Olx0XG41ODY3Olx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG41ODY4Olx0e1xuNTg2OTpcdFx0QlVJTERfQlVHKCk7XG41ODcwOlx0fVxuNTg3MTpcdFxuNTg3MjpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG41ODczOlx0e1xuNTg3NDpcdFx0QlVJTERfQlVHKCk7XG41ODc1Olx0fVxuNTg3NjpcdFxuNTg3NzpcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuNTg3ODpcdFxuNTg3OTpcdHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjU4ODA6XHR7XG41ODgxOlx0XHR1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107XG41ODgyOlx0XHR1bnNpZ25lZCBsb25nIHRhcmdldHNbTlJfTFJVX0xJU1RTXTtcbjU4ODM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbjtcbjU4ODQ6XHRcdGVudW0gbHJ1X2xpc3QgbHJ1O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgY29tcGlsZXIgZmxhZ3MgYXJlIHN0YXJ0aW5nIHRvIGxpZ2h0IHVwLiAqc2hvdWxkXF9hYm9ydFxfc2NhbiouLi4gYWgsIHRoYXQmIzM5O3MgdHVja2VkIGF3YXkgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBBbmQgdGhhdCYjMzk7cyBjb25maXJtZWQgYnkgdGhlIGxpbmUgbnVtYmVyLCBsaW5lIDQ5MjcsIHdoaWNoIEkgcmVtZW1iZXIgYmVpbmcgc29tZXdoZXJlIGJldHdlZW4gdGhvc2UgZWFybGllciBjaGVja3MgdGhhdCB1c2VkIENPTkZJR1xfTFJVXF9HRU4sIHNwZWNpZmljYWxseSBiZXR3ZWVuIDI2MjUgYW5kIDU4NjAuIFNvLCBkZWZpbml0ZWx5LCAqQ09ORklHXF9MUlVcX0dFTiogaXMgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEJ1dCBpcyB0aGF0ICphbGwqPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBmdW5jdGlvbj8gSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgKnNjLSZndDtwcm9hY3RpdmUqIG5leHQ7IGlzIHRoYXQgdGllZCB0byBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zPyBMZXQgbWUgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9hY3RpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy05NS1cbm1tL3Ztc2Nhbi5jOjk2Olx0LyogU3dhcHBpbmVzcyB2YWx1ZSBmb3IgcHJvYWN0aXZlIHJlY2xhaW0uIEFsd2F5cyB1c2Ugc2Nfc3dhcHBpbmVzcygpISAqL1xubW0vdm1zY2FuLmM6OTc6XHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xubW0vdm1zY2FuLmMtOTgtXG4tLVxubW0vdm1zY2FuLmMtMTIxLVx0LyogUHJvYWN0aXZlIHJlY2xhaW0gaW52b2tlZCBieSB1c2Vyc3BhY2UgKi9cbm1tL3Ztc2Nhbi5jOjEyMjpcdHVuc2lnbmVkIGludCBwcm9hY3RpdmU6MTtcbm1tL3Ztc2Nhbi5jLTEyMy1cbi0tXG5tbS92bXNjYW4uYz0yNDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yNDMte1xubW0vdm1zY2FuLmM6MjQ0Olx0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG5tbS92bXNjYW4uYzoyNDU6XHRcdHJldHVybiAqc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3M7XG5tbS92bXNjYW4uYy0yNDYtXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYz0yODY9c3RhdGljIHZvaWQgZmx1c2hfcmVjbGFpbV9zdGF0ZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0zMDItXHQgKiBmcm9tIHRoZSB0YXJnZXQgbWVtY2c7IHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgcmV0cmllcyBkdXJpbmcgbWVtY2dcbm1tL3Ztc2Nhbi5jOjMwMzpcdCAqIGNoYXJnaW5nIGFuZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBwcm9hY3RpdmUgcmVjbGFpbS5cbm1tL3Ztc2Nhbi5jLTMwNC1cdCAqXG4tLVxubW0vdm1zY2FuLmM9NDQ0PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NTMtXHRcdHJldHVybiBQR1NURUFMX0tIVUdFUEFHRUQgLSBQR1NURUFMX0tTV0FQRDtcbm1tL3Ztc2Nhbi5jOjQ1NDpcdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy00NTUtXHRcdHJldHVybiBQR1NURUFMX1BST0FDVElWRSAtIFBHU1RFQUxfS1NXQVBEO1xuLS1cbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTE1NjgtXHRcdCAqIG1sb2NrZWQgb3IgdG9vIGhvdCB0byByZWNsYWltLiBXZSBjYW4gZGlzYWJsZSByZWNsYWltXG5tbS92bXNjYW4uYzoxNTY5Olx0XHQgKiBmcm9tIHRvcCB0aWVyIG5vZGVzIGluIHByb2FjdGl2ZSByZWNsYWltIHRob3VnaCBhcyB0aGF0IGlzXG5tbS92bXNjYW4uYy0xNTcwLVx0XHQgKiBub3QgcmVhbCBtZW1vcnkgcHJlc3N1cmUuXG5tbS92bXNjYW4uYy0xNTcxLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjE1NzI6XHRcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKSB7XG5tbS92bXNjYW4uYy0xNTczLVx0XHRcdGRvX2RlbW90ZV9wYXNzID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9MjQ5Mz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI1MjMtXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xubW0vdm1zY2FuLmM6MjUyNDpcdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmMtMjUyNS1cdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTMxLVxubW0vdm1zY2FuLmM6NDkzMjpcdGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcbm1tL3Ztc2Nhbi5jLTQ5MzMtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTAzMC1cbm1tL3Ztc2Nhbi5jOjUwMzE6XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbm1tL3Ztc2Nhbi5jLTUwMzItXHRcdHZtcHJlc3N1cmUoc2MtXHUwMDNlZ2ZwX21hc2ssIHNjLVx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXG4tLVxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTI4LVxubW0vdm1zY2FuLmM6NTEyOTpcdHNldF9tbV93YWxrKE5VTEwsIHNjLVx1MDAzZXByb2FjdGl2ZSk7XG5tbS92bXNjYW4uYy01MTMwLVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTU3LVxubW0vdm1zY2FuLmM6NTE1ODpcdHNldF9tbV93YWxrKHBnZGF0LCBzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmMtNTE1OS1cbi0tXG5tbS92bXNjYW4uYz01NjYxPXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU2NzQtXHRcdC5nZnBfbWFzayA9IEdGUF9LRVJORUwsXG5tbS92bXNjYW4uYzo1Njc1Olx0XHQucHJvYWN0aXZlID0gdHJ1ZSxcbm1tL3Ztc2Nhbi5jLTU2NzYtXHR9O1xuLS1cbm1tL3Ztc2Nhbi5jPTYwNzA9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMzUtXHRcdC8qIFJlY29yZCB0aGUgZ3JvdXAmIzM5O3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXG5tbS92bXNjYW4uYzo2MTM2Olx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbm1tL3Ztc2Nhbi5jLTYxMzctXHRcdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIG1lbWNnLCBmYWxzZSxcbi0tXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxODAtXHQvKiBSZWNvcmQgdGhlIHN1YnRyZWUmIzM5O3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXG5tbS92bXNjYW4uYzo2MTgxOlx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy02MTgyLVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXG4tLVxubW0vdm1zY2FuLmM9NjQ1Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY0NzAtXHRkbyB7XG5tbS92bXNjYW4uYzo2NDcxOlx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbm1tL3Ztc2Nhbi5jLTY0NzItXHRcdFx0dm1wcmVzc3VyZV9wcmlvKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi0tXG5tbS92bXNjYW4uYz02NzY1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjc3NC1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxubW0vdm1zY2FuLmM6Njc3NTpcdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jLTY3NzYtXHRcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxuLS1cbm1tL3Ztc2Nhbi5jLTY3ODMtXHRcdC5tYXlfc3dhcCA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcdTAwMjYgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCksXG5tbS92bXNjYW4uYzo2Nzg0Olx0XHQucHJvYWN0aXZlID0gISEocmVjbGFpbV9vcHRpb25zIFx1MDAyNiBNRU1DR19SRUNMQUlNX1BST0FDVElWRSksXG5tbS92bXNjYW4uYy02Nzg1LVx0fTtcbi0tXG5tbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY4LVxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODcwLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03OTM3LVx0XHRcdFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxubW0vdm1zY2FuLmM6NzkzODpcdFx0XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXHUwMDI2c3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jLTc5MzktXHRcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG4tLVxubW0vdm1zY2FuLmMtNzk0My1cdFx0XHRcdC5tYXlfc3dhcCA9IDEsXG5tbS92bXNjYW4uYzo3OTQ0Olx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG5tbS92bXNjYW4uYy03OTQ1LVx0XHRcdH07XG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQcm9hY3RpdmUgUmVjbGFpbSBUcmlnZ2VycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgcG9pbnRzIHdoZXJlIGBzYy0mZ3Q7cHJvYWN0aXZlYCBpcyBzZXQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaGFwcGVuaW5nIGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gUmlnaHQgYXdheSwgdGhlIGNvbm5lY3Rpb25zIGFyZSBzdGFydGluZyB0byBmb3JtLgoKYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzeXNmcyBpbnRlcmZhY2UgaGVyZS4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBBbHNvLCB0aGUgaW5jbHVzaW9uIG9mIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBzdWdnZXN0cyBtZW1jZyByZWNsYWltIGlzIGludm9sdmVkLiBBbmQgYGxydV9nZW5fc2VxX3dyaXRlYCBpcyBwcm9iYWJseSB0aWVkIHRvIE1HTFJVJiMzOTtzIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlLCBiYXNlZCBvbiB0aGUgY29udGV4dC4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBjYWxsZWQgZnJvbSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLiBJcyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIG9ubHkgdXNlZCB3aXRoIGBDT05GSUdfTFJVX0dFTmA/IEkgbmVlZCB0byBjaGVjay4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBZZXMsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXMgaW5kZWVkIHdyYXBwZWQgd2l0aCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGxpbmUgbnVtYmVycywgNDk2Mi4gVGhhdCYjMzk7cyBiZXR3ZWVuIDI2MjUgYW5kIDU4NjAsIHdoaWNoIG1lYW5zIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwgaGVyZSwgdGhhdCBjb25maXJtcyBpdC4KCk5vdywgYXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gSSB3YW50IHRvIGxvb2sgYmFjayBhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGByZWNsYWltX3N0b3JlYCwgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgwMDk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTgwMTEtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbm1tL3Ztc2Nhbi5jOjgwMTI6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5tbS92bXNjYW4uYy04MDEzLVx0XHRcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgcmVjbGFpbV9zdG9yZWAqKgoKUmlnaHQsIHNvIGByZWNsYWltX3N0b3JlYCwgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSB3aG9sZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IHJlY2xhbWF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgY2xlYXJseSBoYW5naW5nIG91dCB1bmRlciBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYC4gVGhhdCBtYWtlcyBzZW5zZSAtIFN5c0ZTIGlzIHRoZSBjb250cm9sIHBsYW5lLCB0aGUgd2F5IHdlIGV4cG9zZSB0aGUgbWVtb3J5IGNvbnRyb2wgaW5mb3JtYXRpb24sIGFuZCBOVU1BLCB3ZWxsLCB0aGF0JiMzOTtzIGNyaXRpY2FsIGZvciBob3cgd2UgbWFuYWdlIG1lbW9yeSBhY3Jvc3MgdGhlIGRpZmZlcmVudCBub2Rlcy4gSSYjMzk7ZCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgY29kZSwgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBpcyB0aGUgZmVhdHVyZSBzdG9yZSB1c2VkIGJ5IFN5c0ZTLgoKQnV0IGhvbGQgb24sIHRoZXJlJiMzOTtzIGFub3RoZXIgcG9pbnQuIFRoaXMgYHNjLSZndDtwcm9hY3RpdmVgIGZsYWcuLi4gdGhhdCYjMzk7cyBhbHNvIGJlaW5nIHNldCB3aXRoaW4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBOb3csIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4uLiBhaCwgdGhhdCYjMzk7cyBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBtZWFucyB0aGlzIGByZWNsYWltX3N0b3JlYCBoYXMgYSBiaXQgb2YgYW4gaW50ZXJlc3RpbmcgcmVsYXRpb25zaGlwIHdpdGggdGhlIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuIFNvLCBpdCYjMzk7cyBub3QganVzdCBhIHN0YW5kYWxvbmUgU3lzRlMvTlVNQSBmZWF0dXJlLCBpdCYjMzk7cyBnb3QgYSBkaXJlY3QgbGluayB0byB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHByb2Nlc3Mgd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEkgaGF2ZSB0byB0aGluayBhYm91dCBob3cgdGhpcyBwcm9hY3RpdmUgZmxhZyBpbnRlcnBsYXlzIHdpdGggdGhlIG90aGVyIG1lY2hhbmlzbXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgdGVsbGluZyB0aGUgc3lzdGVtIHRvIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCBmcmVlaW5nIG1lbW9yeSBwYWdlcyBvbiBhIHBlci1jZ3JvdXAgYmFzaXMsIEkmIzM5O2QgYmV0LiBJIGRlZmluaXRlbHkgbmVlZCB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdHJhY2UgaG93IHRoaXMgZmxhZyBpcyB1c2VkIHRvIHNlZSBob3cgaXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY2dyb3VwIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNDgxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTUyMS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNTIyOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTUyMy1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE1NDA9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTU1My1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNTU0Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTU1NS1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzNDMtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzNDQ6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM0NS1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNTk1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjU0LVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjY1NTpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI2NTYtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NzY4PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDgwMi1cbm1tL21lbWNvbnRyb2wuYzo0ODAzOlx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDgwNC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4MjA9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NTQtXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ4NTU6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00ODU2LVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02NzI1PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjc2NC1cbm1tL3Ztc2Nhbi5jOjY3NjU6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY3NjYtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjgwNS0jZWxzZVxubW0vdm1zY2FuLmM6NjgwNjp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjgwNy1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03ODY5PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy03OTI5LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6NzkzMDpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtNzkzMS1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBSZWNsYW1hdGlvbiBUcmlnZ2VycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20gd29ya3MsIGFuZCBJJiMzOTt2ZSB0cmFjZWQgYSBjYWxsIHBhdGggSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkgc2VlIHRoYXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGdldHRpbmcgaW52b2tlZCB3aXRoIGBNRU1DR19SRUNMQUlNX1BST0FDVElWRWAgYXMgYSBmbGFnLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgZnJlZWluZyBwYWdlcyBzcGVjaWZpY2FsbHkgd2l0aGluIGEgbWVtb3J5IGNncm91cCwgYW5kIHRoZSBgUFJPQUNUSVZFYCBmbGFnIHNpZ25hbHMgdGhhdCB0aGUgcmVjbGFpbSBpcyBpbml0aWF0ZWQgcHJvYWN0aXZlbHksIHJhdGhlciB0aGFuIHJlYWN0aXZlbHkgdG8gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbi4KCk5vdywgd2hlcmUgaXMgdGhpcyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgY2FsbCBjb21pbmcgZnJvbSBpbiB0aGUgZmlyc3QgcGxhY2U/IEFoLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoaXMgc2VlbXMgbG9naWNhbCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlIHRvIGFnZ3Jlc3NpdmVseSBmcmVlIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgaGFuZyBvbiwgdGhpcyBpc24mIzM5O3QgdGhlIG9ubHkgcGxhY2UgaXQmIzM5O3MgdHJpZ2dlcmVkLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpdHNlbGYsIHdoaWNoIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IG1lYW5zIHRoaXMgcHJvYWN0aXZlIHJlY2xhbWF0aW9uIGlzbiYjMzk7dCBleGNsdXNpdmVseSBhIHVzZXItdHJpZ2dlcmVkIGZ1bmN0aW9uLCBidXQgaXMgYWxzbyBwYXJ0IG9mIHRoZSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBUaGlzIG1lYW5zIGl0IG1pZ2h0IGJlIGludGVncmF0ZWQgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgdG8gdHJ5IGFuZCBmcmVlIHVwIG1lbW9yeSBiYXNlZCBvbiBzb21lIGludGVybmFsIHRyaWdnZXJzIGFuZCB0aHJlc2hvbGRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGF0aHMgaW50ZXJhY3QgYW5kIHdoZXRoZXIgdGhleSYjMzk7cmUgYmVoYXZpbmcgYXMgaW50ZW5kZWQuIFRoZXJlJiMzOTtzIHByb2JhYmx5IG92ZXJsYXAsIGJ1dCB0aGF0IGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9uIGhvdyBtZW1vcnkgaXMgY29udHJvbGxlZCBhbmQgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTYzMT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XG5tbS9pbnRlcm5hbC5oOjYzMjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS9pbnRlcm5hbC5oLTYzMy1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00OTg5PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTk0LVxubW0vbWVtY29udHJvbC5jOjQ5OTU6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGJ1ZiwgbWVtY2csIE5VTEwpO1xubW0vbWVtY29udHJvbC5jLTQ5OTYtXHRpZiAocmV0KVxuLS1cbm1tL3Ztc2Nhbi5jPTc4NjM9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4NjgtXG5tbS92bXNjYW4uYzo3ODY5OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4NzAtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAxNy1cbm1tL3Ztc2Nhbi5jOjgwMTg6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDE5LVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJvYWN0aXZlIFJlY2xhaW0gYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyB0aGUgY2dyb3VwIHYyIGludGVyZmFjZSBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgZmVhdHVyZSDigJMgb3IgYHJlY2xhaW1gIGluIHRoZSBzeXNmcyBub2RlIGRpcmVjdG9yeS4gVGhpcyAmIzM0O3Byb2FjdGl2ZSByZWNsYWltJiMzNDsgZnVuY3Rpb25hbGl0eSBpcyB0cmlnZ2VyZWQgd2hlbiBhIHVzZXIgd3JpdGVzIHRvIHRoYXQgY29udHJvbCBmaWxlLiBJIHNlZSB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBjaGVjayB0aGF0IHdpbGwgYWJvcnQgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBwcm9jZXNzIGlmIHRoZSB0YXNrIGluaXRpYXRpbmcgdGhlIHJlY2xhaW0gaGFzIGEgc2lnbmFsIHBlbmRpbmcuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBwYXRoIHRoYXQmIzM5O3MgYm90aCBmdW5jdGlvbmFsIGFuZCBleHBvc2VkIHRvIHVzZXJzcGFjZSDigJMgdXNlcnMgY2FuIGludGVyYWN0IHdpdGggaXQgYnkgd3JpdGluZyB0byB0aGUgY29udHJvbCBmaWxlcyBhbmQgc2VuZGluZyBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcywgdGh1cyBsZWFkaW5nIGl0IHRvIHByb2FjdGl2ZSByZWNsYWltLiBUaGUgc2lnbmFsIHBhdGggbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgcGF0aCBpdCBpcyB3b3J0aCBhIHRlc3QuCgpNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX21hbnlgIHN5bWJvbHMuIFdhaXQgYSBzZWNvbmQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKmFsc28qIGNhbGxlZCBmcm9tIGBzaHJpbmtfbWFueWAsIHdoaWNoIGlzIGl0c2VsZiB1c2VkIGluIGEgZmVhdHVyZSByZWxhdGVkIHRvIGBDT05GSUdfTFJVX0dFTmAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBjb25maXJtIHRoYXQgYHNocmlua19tYW55YCBpcyBhY3R1YWxseSB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVxubW0vdm1zY2FuLmM6NTA0ODpzdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUwNDkte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY3LVx0ZWxzZVxubW0vdm1zY2FuLmM6NTE2ODpcdFx0c2hyaW5rX21hbnkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDkyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBgc2hyaW5rX21hbnlgLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW5lIHJhbmdlLCBjb25maXJtaW5nIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwgaGVyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsdXJraW5nIGFyb3VuZCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IHRoYXQgYENPTkZJR19NRU1DR2AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGNncm91cCBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uYWxpdHkgaW4gYG1tL21lbWNvbnRyb2wuY2AgYWN0dWFsbHkgbGl2ZXMgdW5kZXIgdGhhdCBgQ09ORklHX01FTUNHYCBndWFyZC4gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYG1tL21lbWNvbnRyb2wuY2AgZ2V0cyBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCBhbmQgdmVyaWZ5LCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjkwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBmb3IgYG1lbWNvbnRyb2wub2AgdG8gZnVuY3Rpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgYHJlY2xhaW1fc3RvcmVgLiBJIGtub3cgdGhhdCYjMzk7cyBhbiBhbHRlcm5hdGl2ZSBtZXRob2QgdG8gaW5pdGlhdGUgcHJvYWN0aXZlIHJlY2xhaW0sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb25maWd1cmluZyBldmVyeXRoaW5nIGNvcnJlY3RseS4KCkhtbSwgd2hhdCBhYm91dCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCBpbiByZWxhdGlvbiB0byBgcmVjbGFpbV9zdG9yZWA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEJ1dCB0aGUgY29yZSBkZXBlbmRlbmN5IEkmIzM5O20gcmVhbGx5IGNvbmNlcm5lZCB3aXRoIGhlcmUgaXMgYENPTkZJR19MUlVfR0VOYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBvbmUgZHJpdmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUga2VybmVsIG9yIGlmIGl0IHJlcXVpcmVzIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGNvbmZpcm0gdGhhdC4gU2luY2UgaXTigJlzIGEga2VybmVsIGNvbmZpZyBmbGFnLCBJIG5lZWQgdG8gY2hlY2sgYG1tL0tjb25maWdgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjMtXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMyLVxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBMUlVfR0VOYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBCdXQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgYExSVV9HRU5fRU5BQkxFRGAgYWxzbyBwbGF5cyBhIHJvbGUgaW4gZW5hYmxpbmcgdGhpcyBmZWF0dXJlIGJ5IGRlZmF1bHQsIG9yIGlmIHJ1bnRpbWUgY29udHJvbCB2aWEgc3lzZnMgaXMgdGhlIG9ubHkgd2F5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGltcGFjdCBvZiBqdXN0IGBMUlVfR0VOYC4KCkVzc2VudGlhbGx5LCBpZiBgTFJVX0dFTmAgaXMgZW5hYmxlZCwgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIElmIGBMUlVfR0VOX0VOQUJMRURgIGlzbiYjMzk7dCBzZXQsIHRoZW4gTUdMUlUgbWlnaHQgYmUgZGlzYWJsZWQgYXQgcnVudGltZSBieSBkZWZhdWx0LgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBpbml0X2xydV9nZW5gIGZ1bmN0aW9uIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X2xydV9nZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01ODE0PXZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy01ODQyLVxubW0vdm1zY2FuLmM6NTg0MzpzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcbm1tL3Ztc2Nhbi5jLTU4NDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTU4NTctfTtcbm1tL3Ztc2Nhbi5jOjU4NTg6bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBpbml0X2xydV9nZW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaW5pdF9scnVfZ2VuYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBMUlUgY2FjaGUgY29udGV4dC4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgY3JpdGljYWwgdG8gdGhlIExSVSBldmljdGlvbiBwb2xpY3kuIFByb2JhYmx5IHNldHRpbmcgdXAgdGhlIGRvdWJseS1saW5rZWQgbGlzdCBmb3IgcmVjZW5jeSB0cmFja2luZyBhbmQgdGhlIGhhc2ggdGFibGUgKGxpa2VseSBhIGRpY3Rpb25hcnkgb3IgZXF1aXZhbGVudCBpbiB3aGF0ZXZlciBsYW5ndWFnZSB0aGlzIGlzKSBmb3IgZmFzdCBrZXkgbG9va3Vwcy4KCkkgaW1tZWRpYXRlbHkgc3RhcnQgY29uc2lkZXJpbmcgZWRnZSBjYXNlcy4gRG9lcyBpdCBoYW5kbGUgZW1wdHkgY2FjaGVzIGdyYWNlZnVsbHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBpZiB0aGlzIGlzIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQgZHVyaW5nIGluaXRpYWxpemF0aW9uPyBXaGF0IGFib3V0IHByZS1hbGxvY2F0aW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgb3IgaXMgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBhcyBuZWVkZWQsIHdoaWNoIHdvdWxkIGltcGFjdCBwZXJmb3JtYW5jZT8gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY2FjaGUgc2l6ZTsgaXMgaXQgYSBmaXhlZCBzaXplIG9yIGR5bmFtaWNhbGx5IHJlc2l6YWJsZT8gQW5kIGhvdyBkb2VzIGl0IGhhbmRsZSB0aGUgJiMzOTtob3Qgc3RhcnQmIzM5OyBwcm9ibGVtIC0gd2hlbiB5b3UgaW5pdGlhbGl6ZSBhbiBMUlUsIGlzIGl0ICYjMzk7d2FybSYjMzk7IG9yIGRvZXMgaXQgYXNzdW1lIGV2ZXJ5dGhpbmcgc3RhcnRzIHdpdGggZXF1YWwgcmVjZW5jeT8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaWYgdGhlIGluaXRpYWwgY2FjaGUgc2l6ZSBpcyBzdWJzdGFudGlhbC4gQmlnIE8gbm90YXRpb24gd2lsbCB0ZWxsIHRoZSB0YWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgYW55IGhpbnRzLCBjb21tZW50cywgb3IgdmFyaWFibGUgbmFtZXMgdGhhdCByZXZlYWwgd2hhdCBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGNvbmN1cnJlbnQgcHJvZ3JhbW1pbmcgcHJpbWl0aXZlcyBhcmUgYXQgcGxheS4gQmFzaWNhbGx5LCBhbSBJIGdvaW5nIHRvIHNlZSBtdXRleGVzLCBhdG9taWMgb3BlcmF0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgZWxlZ2FudD8KCkZpbmFsbHksIG15IGV4cGVydCBleWUgbG9va3MgZm9yIGFueSBwb3RlbnRpYWwgZGVzaWduIGZsYXdzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBMUlUsIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgaXQgaXMgbm90IHRoZSBib3R0bGVuZWNrLiBEb2VzIHRoZSBvdmVyYWxsIGRlc2lnbiBzZWVtIHdlbGwtc3RydWN0dXJlZCwgb3IgYXJlIHRoZXJlIGFueSBzaWducyBvZiBwcmVtYXR1cmUgb3B0aW1pemF0aW9uIG9yLCB3b3JzZSwgcG9vcmx5LWNvbmNlaXZlZCBkZXNpZ24gZGVjaXNpb25zPyBJIHdpbGwgbWFrZSBteSByZWNvbW1lbmRhdGlvbnMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NDA6XHRcbjU4NDE6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG41ODQyOlx0XG41ODQzOlx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXG41ODQ0Olx0e1xuNTg0NTpcdFx0QlVJTERfQlVHX09OKE1JTl9OUl9HRU5TICYjNDM7IDEgXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG41ODQ2Olx0XHRCVUlMRF9CVUdfT04oQklUKExSVV9HRU5fV0lEVEgpIFx1MDAzYz0gTUFYX05SX0dFTlMpO1xuNTg0NzpcdFxuNTg0ODpcdFx0aWYgKHN5c2ZzX2NyZWF0ZV9ncm91cChtbV9rb2JqLCBcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxuNTg0OTpcdFx0XHRwcl9lcnIoXCYjMzQ7bHJ1X2dlbjogZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBncm91cFxcblwmIzM0Oyk7XG41ODUwOlx0XG41ODUxOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlblwmIzM0OywgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXG41ODUyOlx0XHRcdFx0XHQgICAgXHUwMDI2bHJ1X2dlbl9yd19mb3BzKTtcbjU4NTM6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtscnVfZ2VuX2Z1bGxcJiMzNDssIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXG41ODU0Olx0XHRcdFx0XHQgICAgXHUwMDI2bHJ1X2dlbl9yb19mb3BzKTtcbjU4NTU6XHRcbjU4NTY6XHRcdHJldHVybiAwO1xuNTg1NzpcdH07XG41ODU4Olx0bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xuNTg1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGlnZ2luZyBpbnRvIGBMUlVfR0VOX0VOQUJMRURgIGFuZCBgbHJ1X2dlbl9jYXBzYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseS4gSXQgc2VlbXMgbGlrZSBgTFJVX0dFTl9FTkFCTEVEYCBpcyB0aGUgY29udHJvbCBzd2l0Y2ggZm9yIGhvdyB3ZSBjb25maWd1cmUgYGxydV9nZW5fY2Fwc2AuIEkmIzM5O3ZlIGdvdCB0byBjb25maXJtIHRoaXMgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBub3QganVzdCBhc3N1bWU7IGEgcXVpY2sgY2hlY2sgb2YgaG93IGBscnVfZ2VuX2NhcHNgIGlzIGRlZmluZWQgYW5kIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhhdCBlbmFibGUgZmxhZyBzaG91bGQgY2xhcmlmeSB0aGluZ3MgaW1tZWRpYXRlbHkuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IgY29kZSB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZCB0byB2ZXJpZnkgdGhlIGV4YWN0IHJlbGF0aW9uc2hpcC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVmb3JlIEkgY2FuIG1vdmUgZm9yd2FyZCBjb25maWRlbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9jYXBzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jLTI2MjgtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI2Mjk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYzoyNjMwOiNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2MzEtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI2MzI6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjYzMzojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2MzQtI2VuZGlmXG4tLVxubW0vdm1zY2FuLmM9NTI2OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTI4NC1cdGlmIChlbmFibGVkKVxubW0vdm1zY2FuLmM6NTI4NTpcdFx0c3RhdGljX2JyYW5jaF9lbmFibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG5tbS92bXNjYW4uYy01Mjg2LVx0ZWxzZVxubW0vdm1zY2FuLmM6NTI4NzpcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xubW0vdm1zY2FuLmMtNTI4OC1cbi0tXG5tbS92bXNjYW4uYz01MzY2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01Mzg0LVx0XHRlbHNlIGlmIChlbmFibGVkKVxubW0vdm1zY2FuLmM6NTM4NTpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xubW0vdm1zY2FuLmMtNTM4Ni1cdFx0ZWxzZVxubW0vdm1zY2FuLmM6NTM4NzpcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbm1tL3Ztc2Nhbi5jLTUzODgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUcmFpbiBvZiBUaG91Z2h0KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyBsaWtlIHNldHRpbmcgYExSVV9HRU5fRU5BQkxFRGAgYXV0b21hdGljYWxseSB0dXJucyB0aGUgd2hvbGUgZmVhdHVyZSBvbiwgd2hpY2ggaXMgYSBjb21tb24gcHJhY3RpY2UuIEhtbSwgcGVyaGFwcyBpdCB3b3VsZCBiZSBjbGVhbmVyLCBmb3IgbWFpbnRhaW5hYmlsaXR5IGFuZCBjbGFyaXR5LCB0byBhZGQgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2V0LiBUaGF0IHdvdWxkIG1ha2UgdGhlIGRlcGVuZGVuY2llcyBleHBsaWNpdCBhbmQgZWFzaWVyIHRvIG1hbmFnZSBsb25nLXRlcm0uCgpOb3csIEkmIzM5O20gc3BvdHRpbmcgYHNob3VsZF9hYm9ydF9zY2FuYCBiZWluZyB1dGlsaXplZCBpbiBgc2hyaW5rX21hbnlgIHRvbywgd2hpY2ggaXMgYSBwb2ludCBvZiBjb25jZXJuLiBJcyBgc2hyaW5rX21hbnlgIGxpbWl0ZWQgdG8gb25seSBiZWluZyBpbnZva2VkIHdoZW4gdGhlIE1HTFJVIGlzIGFjdGl2ZT8gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIG5vdCBmb3JnZXR0aW5nIHNvbWV0aGluZy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBscnVfZ2VuX3Nocmlua19ub2RlYCB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgcHJvY2VzcyBhbmQgTUdMUlUgZW5hYmxlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxMzgtXG5tbS92bXNjYW4uYzo1MTM5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTQwLXtcbi0tXG5tbS92bXNjYW4uYz01ODY3PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NzEtXG5tbS92bXNjYW4uYzo1ODcyOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODczLXtcbi0tXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNTYtXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MTU3Olx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MTU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNvbnRleHQgaXMgcHJlc3VtYWJseSBhbGdvcml0aG0gZGVzaWduIG9yIG9wdGltaXphdGlvbjoKCioqQ2hlY2tpbmcgYHNocmlua19ub2RlYCoqCgpBbHJpZ2h0LCAqc2hyaW5rX25vZGUqLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBvbmUgdGhhdCBsaWtlbHkgcmVkdWNlcyB0aGUgc2l6ZSBvciBjb21wbGV4aXR5IG9mIGEgbm9kZSBpbiB3aGF0ZXZlciBkYXRhIHN0cnVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gQ291bGQgYmUgYSB0cmVlLCBhIGdyYXBoLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4uLiBkb2VzbiYjMzk7dCBtYXR0ZXIsIHRoZSBuYW1lIHNheXMgaXQmIzM5O3MgYWJvdXQgb3B0aW1pemF0aW9uIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGF0IGEgbm9kZSBsZXZlbC4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgb246CgoqICAgKipJbXBsZW1lbnRhdGlvbjoqKiBIb3cgZG9lcyBpdCAqYWN0dWFsbHkqIHdvcms/IFdoYXQmIzM5O3MgdGhlIGNvcmUgbG9naWM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlbW92aW5nIGVsZW1lbnRzLCBtZXJnaW5nIHN1Yi1ub2RlcywgcmVkdWNpbmcgdGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBub2RlLCBvciBzb21ldGhpbmcgbW9yZSBleG90aWMgbGlrZSBsYXp5LWRlY29uc3RydWN0aW9uPwoqICAgKipTaWRlIEVmZmVjdHM6KiogV2hhdCBlbHNlIGRvZXMgaXQgdG91Y2g/IERvZXMgaXQgcG90ZW50aWFsbHkgaW52YWxpZGF0ZSBpdGVyYXRvcnMsIHRyaWdnZXIgcmViYWxhbmNpbmcgaWYgaXQmIzM5O3MgYSBiYWxhbmNlZCB0cmVlLCBvciByZXF1aXJlIHVwZGF0ZXMgdG8gcGFyZW50L2NoaWxkIHBvaW50ZXJzPyBUaG9zZSBoaWRkZW4gaW50ZXJhY3Rpb25zIGFyZSB1c3VhbGx5IHdoZXJlIHRoZSBidWdzIGxpZS4gR290dGEgZXhhbWluZSAqYWxsKiBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgoqICAgKipQZXJmb3JtYW5jZToqKiBXaGF0JiMzOTtzIHRoZSB0aW1lIGFuZCBzcGFjZSBjb21wbGV4aXR5PyBJcyBpdCBPKDEpLCBPKGxvZyBuKSwgb3Igd29yc2U/IE1vcmUgaW1wb3J0YW50bHksIGhvdyAqb2Z0ZW4qIGlzIGl0IGNhbGxlZD8gQSBzbG93LCBpbmZyZXF1ZW50bHktdXNlZCBmdW5jdGlvbiBpcyBvbmUgdGhpbmcsIGJ1dCBhIGJvdHRsZW5lY2sgaW4gYSBjcml0aWNhbCBwYXRoIGlzIGEgZGlzYXN0ZXIuIElmIHRoaXMgaXMgaW52b2tlZCBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgZnVuY3Rpb24sIEkgbmVlZCB0byBrbm93IHRoZSBlZmZlY3RzIG9uIHRob3NlLgoqICAgKipVc2FnZSBDb250ZXh0OioqIFdoYXQmIzM5O3MgdGhlIGJpZ2dlciBwaWN0dXJlPyAqV2h5KiBhcmUgd2Ugc2hyaW5raW5nIG5vZGVzPyBJcyBpdCB0byBwcmV2ZW50IGFuIG92ZXJmbG93PyBPcHRpbWl6ZSBtZW1vcnkgdXNhZ2U/IE9yIGVuaGFuY2UgcGVyZm9ybWFuY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nICpnb2FsKiB0byBldmFsdWF0ZSBpZiBgc2hyaW5rX25vZGVgIGlzIGRvaW5nIGl0cyBqb2IgZWZmZWN0aXZlbHkuIEFyZSB3ZSBtYWtpbmcgdGhlIHN0cnVjdHVyZSAmIzM5O3NtYXJ0ZXImIzM5OyBieSByZW9yZ2FuaXppbmcgdGhlIG5vZGVzPyBPciBwZXJoYXBzIHJlbW92aW5nIGRhdGEgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3M/CiogICAqKlByZSBhbmQgUG9zdCBDb25kaXRpb25zOioqIFdoYXQgYXJlIHRoZSBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHM/IERvZXMgaXQgaGFuZGxlIGVkZ2UgY2FzZXM/IENhbiBpdCBkZWFsIHdpdGggZW1wdHkgb3IgbnVsbCBub2Rlcz8gRG9lcyBpdCBtYWludGFpbiBpbnZhcmlhbnRzIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlPyBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIGRvY3VtZW50ZWQgaWYgSSBhbSB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4KCkluIHNob3J0LCAmIzM0O0xldCYjMzk7cyBjaGVjayBgc2hyaW5rX25vZGVgJiMzNDsgaXMgdGhlIGJlZ2lubmluZyBvZiBhIGRlZXAgZGl2ZS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlLCB0cmFjZSB0aHJvdWdoIGl0cyBleGVjdXRpb24gd2l0aCB2YXJpb3VzIGlucHV0cywgYW5kIHByb2JhYmx5IHJ1biBzb21lIHRlc3QgY2FzZXMgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGRvaW5nIHdoYXQgSSB0aGluayBpdCYjMzk7cyBkb2luZywgYW5kIHRoYXQgaXQgaXNuJiMzOTt0IGdvaW5nIHRvIGJsb3cgdXAgdGhlIHdob2xlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgbXVjaCB3b3JrIGlzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MTQ1Olx0XHRcdH1cbjYxNDY6XHRcdH0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcih0YXJnZXRfbWVtY2csIG1lbWNnLCBwYXJ0aWFsKSkpO1xuNjE0NzpcdH1cbjYxNDg6XHRcbjYxNDk6XHRzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYxNTA6XHR7XG42MTUxOlx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XG42MTUyOlx0XHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xuNjE1MzpcdFx0Ym9vbCByZWNsYWltYWJsZSA9IGZhbHNlO1xuNjE1NDpcdFxuNjE1NTpcdFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xuNjE1NjpcdFx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xuNjE1NzpcdFx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG42MTU4Olx0XG42MTU5Olx0XHRcdGlmICghbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbjYxNjA6XHRcdFx0XHRyZXR1cm47XG42MTYxOlx0XG42MTYyOlx0XHR9XG42MTYzOlx0XG42MTY0Olx0XHR0YXJnZXRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHBnZGF0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTFJVIEdlbmVyYXRpb24gYW5kIFByb2FjdGl2ZSBSZWNsYWltKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGxydV9nZW5fc2hyaW5rX25vZGVgIGdldHMgaW52b2tlZC4gSXQmIzM5O3MgdHJpZ2dlcmVkIG9ubHkgaWYgYGxydV9nZW5fZW5hYmxlZCgpYCByZXR1cm5zIHRydWUuIERpdmluZyBkZWVwZXIsIGBscnVfZ2VuX2VuYWJsZWQoKWAgaGluZ2VzIG9uIGNoZWNraW5nIHRoZSBgbHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV1gIGNhcGFiaWxpdHkuIENsZWFybHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBmbGFncyBhcmUgbm9uLW5lZ290aWFibGUgcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRob3NlLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcGVydGluZW50PyBNeSBtaW5kIHdlbnQgc3RyYWlnaHQgdG8gYENPTkZJR19NRU1DR2AuIFRoZSBjb2RlIHRlbGxzIG1lIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gY3JpdGljYWwgaGVyZS4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYW5kIHRoYXQgY29kZSByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gRnVydGhlcm1vcmUsIEkgc2VlIGl0JiMzOTtzIGFsc28gY2FsbGVkIGZyb20gYHJlY2xhaW1fc3RvcmVgIGluIGBtbS92bXNjYW4uY2AsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLiBTbywgYENPTkZJR19NRU1DR2AgZGVmaW5pdGVseSBsb29rcyBsaWtlIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGluY2x1c2lvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgbW9yZSBjbGFyaXR5IGJ5IGNoZWNraW5nIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgZGV0YWlscyBiZWhpbmQgYE1FTUNHYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgc29tZXRoaW5nIGp1c3QgY2xpY2tlZC4gSXQgbG9va3MgbGlrZSBgTUVNQ0dgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIGBpbml0L0tjb25maWdgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UuLi4gd2VsbCwgSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBMb2NhdGluZyBpdCB0aGVyZSBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhlIHN5c3RlbSYjMzk7cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgb3IgcGVyaGFwcyB0aWVkIHRvIGEgY29yZSBjb21wb25lbnQgdGhhdCYjMzk7cyBicm91Z2h0IHVwIHZlcnkgZWFybHkuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCBtZW50YWxseSB0cmFjaW5nIGhvdyB0aGlzIGNvbmZpZyBvcHRpb24gaW1wYWN0cyBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoeSBpdCBtaWdodCBiZSBpbiBpbml0IGFuZCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbml0IGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzItXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDgxLVxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDgzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg4LVxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5NS1cbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTEwOTctXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9hY3RpdmUgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGVuYWJsZWQsIGJlY2F1c2UgdGhhdCBzZWVtcyByZWxldmFudC4gSSYjMzk7bSBjaGVja2luZyBpZiBgTFJVX0dFTmAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTUVNQ0dgLCBidXQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoLCB0aG91Z2gsIGlzIGBzYy0mZ3Q7cHJvYWN0aXZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuCgpUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoYXQgaXQgYWRkcyBhIGNoZWNrIGZvciBgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHdpdGhpbiB0aGUgYHNjLSZndDtwcm9hY3RpdmVgIGNvbnRleHQuIEFoYSwgdGhpcyBpcyBkZWZpbml0ZWx5IGFib3V0IHByb2FjdGl2ZSByZWNsYWltLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIE5vdywgd2hlcmUgaXMgKnRoYXQqIGNhbGxlZCBmcm9tPyBEaWdnaW5nIGludG8gdGhhdCBmdW5jdGlvbiwgSSBzZWUgdHdvIGNhbGwgc2l0ZXM6CgoxLiAgYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gU28gdGhhdCBzdXBwb3J0cyBteSBpbml0aWFsIGh1bmNoIGFib3V0IG5lZWRpbmcgYE1FTUNHYC4gSXTigJlzIGxpa2VseSBob3cgd2UgbWFrZSBpdCByZWFjaGFibGUgdmlhIGNncm91cCB2Mi4KMi4gIGByZWNsYWltX3N0b3JlYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIG5lZWRzIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLCB3aGljaCBpcyByZWxldmFudCBidXQgbm90IHRoZSBtYWluIGZvY3VzIGhlcmUuCgpTbywgSSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYE1FTUNHYCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYSBkZXBlbmRlbmN5IGZvciByZWFjaGluZyB0aGlzIGNvZGUgdmlhIGNncm91cCB2Mi4gQW5kIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFzIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLgoKV2FpdCwganVzdCBhIHNlY29uZC4uLiBpcyBgc2hvdWxkX2Fib3J0X3NjYW5gICpvbmx5KiBpbnNpZGUgdGhlIGBDT05GSUdfTFJVX0dFTmAgYmxvY2s/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIGRlZmluaXRpb25zIG9mIHRoYXQgZnVuY3Rpb24gdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHNjb3BlIG9mIHRoYXQgbWFjcm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MjYtXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTI4LXtcbi0tXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDk4OS1cbm1tL3Ztc2Nhbi5jOjQ5OTA6XHRcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQ5OTEtXHRcdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDkzLVxubW0vdm1zY2FuLmM6NTA5NDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTA5NS1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoZXJlJiMzOTtzIG9ubHkgb25lIHBhdGggdG8gYHNob3VsZF9hYm9ydF9zY2FuYC4gVGhhdCBtZWFucyBgQ09ORklHX0xSVV9HRU5gIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGZvciBldmVuIGNvbXBpbGluZyB0aGUgY29kZSBpbiB0aGUgZmlyc3QgcGxhY2Ug4oCTIGEgaGFyZCBkZXBlbmRlbmN5LiBUbyBhY3R1YWxseSBydW4gdGhlIGNvZGUgYnkgZGVmYXVsdCwgdGhhdCBleHRlbmRzIHRvIGFsc28gcmVxdWlyaW5nIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYC4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGNvZGUgZ2V0cyB0cmlnZ2VyZWQgdGhyb3VnaCBjZ3JvdXAgdjImIzM5O3MgYG1lbW9yeS5yZWNsYWltYCwgYW5kIHRoYXQgYnJpbmdzIGBDT05GSUdfTUVNQ0dgIGludG8gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gKmNvbXBpbGVkKiB3aXRob3V0IGBDT05GSUdfTUVNQ0dgLiBUaGlzIHNlZW1zIGEgY3JpdGljYWwgcmVxdWlyZW1lbnQgZm9yIHBvcnRhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgbWVtb3J5IGNncm91cCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19NRU1DR2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gSWYgaXQgaXMsIHRoZW4gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGF0IGZ1bmN0aW9uYWxpdHkgZGVwZW5kcyBvbiB3aGV0aGVyIG1lbW9yeSBjZ3JvdXBzIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoYXQgd291bGQgbWVhbiB0aGUgYmVoYXZpb3Igb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGNoYW5nZXMgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSYjMzk7cyBtZW1jZyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IGl04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHVuZGVyIGRpZmZlcmVudCBzY2VuYXJpb3MuIEtub3dpbmcgdGhpcyB3aWxsIGFmZmVjdCB3aGVyZSBJIGxvb2sgZm9yIHJlbGF0ZWQgY29kZSBvciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4NjA6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg2MTpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4NjI6XHR9O1xuNzg2MzpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4NjQ6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG43ODY1Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG43ODY2Olx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjc4Njc6XHR9O1xuNzg2ODpcdFxuNzg2OTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4NzA6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODcxOlx0e1xuNzg3MjpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg3MzpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg3NDpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NzU6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NzY6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4Nzc6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4Nzg6XHRcbjc4Nzk6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDE3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SG1tLCBpcyB0aGVyZSBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaGlkaW5nIGFyb3VuZCBoZXJlPyYjMzQ7IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYW4gYCNpZmRlZmAgKG9yIG1heWJlIGV2ZW4gYCNpZm5kZWZgIG9yIHNpbWlsYXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24pIGlzIHBvdGVudGlhbGx5IGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBibG9jayBvZiBjb2RlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEsIGFuZCBpdCYjMzk7cyBhbHdheXMgdGhlIGZpcnN0IHRoaW5nIEkgY2hlY2sgd2hlbiBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgaXMgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGFuZCBleGVjdXRlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTE4MS1cbm1tL3Ztc2Nhbi5jOjE4MjojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXG5tbS92bXNjYW4uYy0xODMtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4tLVxubW0vdm1zY2FuLmM9MTk5PWludCB2bV9zd2FwcGluZXNzID0gNjA7XG5tbS92bXNjYW4uYy0yMDAtXG5tbS92bXNjYW4uYzoyMDE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjAyLVxuLS1cbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzNC1cdFx0cmV0dXJuIHRydWU7XG5tbS92bXNjYW4uYzoyMzU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS92bXNjYW4uYy0yMzYtXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi0tXG5tbS92bXNjYW4uYz04MjQ9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzAtXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzItLypcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjg1LVx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbm1tL3Ztc2Nhbi5jOjEyODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vdm1zY2FuLmMtMTI4Ny1cdFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xuLS1cbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI0LVxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjYtXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yNjc3PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNjgwLVxubW0vdm1zY2FuLmM6MjY4MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNjgyLVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODI4LVxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yODMwLVxubW0vdm1zY2FuLmM9MjgzMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MzctXG5tbS92bXNjYW4uYzoyODM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4MzktXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjg3MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NzctXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyODc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4NzktXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg5OD12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MDYtXG5tbS92bXNjYW4uYzoyOTA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MDgtXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMjkzMC1cbm1tL3Ztc2Nhbi5jOjI5MzE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkzMi1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzYtXG5tbS92bXNjYW4uYzoyOTM3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5Mzgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDMwNz1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00MzUyLVxubW0vdm1zY2FuLmM6NDM1MzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00MzU0LVxuLS1cbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NTI4LVxubW0vdm1zY2FuLmM6NTUyOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NTMwLVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTc4MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4MDAtXG5tbS92bXNjYW4uYzo1ODAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU4MDItXG4tLVxubW0vdm1zY2FuLmM9NjY3OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02NzIxLVxubW0vdm1zY2FuLmM6NjcyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02NzIzLVxuLS1cbm1tL3Ztc2Nhbi5jPTc1NDk9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTMtXG5tbS92bXNjYW4uYzo3NTU0OiNpZmRlZiBDT05GSUdfSElCRVJOQVRJT05cbm1tL3Ztc2Nhbi5jLTc1NTUtLypcbi0tXG5tbS92bXNjYW4uYz03NjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcbi0tXG5tbS92bXNjYW4uYy03NjQzLVx0fSxcbm1tL3Ztc2Nhbi5jOjc2NDQ6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03NjQ1LVx0e1xuLS1cbm1tL3Ztc2Nhbi5jPTc2Njc9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG5tbS92bXNjYW4uYy03NjY4LVxubW0vdm1zY2FuLmM6NzY2OTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc2NzAtLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSXQgbG9va3MgbGlrZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXNuJiMzOTt0IGFjdHVhbGx5IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBhc3N1bXB0aW9uIEkgbmVlZCB0byB2ZXJpZnkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5lZWRzIGltbWVkaWF0ZSBjb3JyZWN0aW9uLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB3aGVyZSB0aGlzIGZ1bmN0aW9uLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkmIzM5O3ZlIGdvdCB0byBlbnN1cmUgdGhlIGxvZ2ljIGZsb3dzIGFzIEkgZXhwZWN0IGl0IHRvLgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBsaW5lIG51bWJlcjogNzg2OS4gTm93LCB3aGVyZSBkb2VzIHRoZSBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jayBiZWdpbj8gTGluZSA3NjY5LiBHb29kLCB0aGF0JiMzOTtzIHdpdGhpbiBhIGNvdXBsZSBvZiBodW5kcmVkIGxpbmVzLiBUaGF0JiMzOTtzIGNsb3NlIGVub3VnaCBmb3IgdGhlIGxpbmUgY291bnQgdG8gYmUgYWNjdXJhdGUsIGJ1dCBJIG5lZWQgdG8gZGVmaW5pdGl2ZWx5IGVzdGFibGlzaCB3aGV0aGVyIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZXNpZGVzICp3aXRoaW4qIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfTlVNQWAuIEl0JiMzOTtzIGEgc2ltcGxlIGNoZWNrLCBidXQgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzY2NTpcdH1cbjc2NjY6XHRcbjc2Njc6XHRtb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbjc2Njg6XHRcbjc2Njk6XHQjaWZkZWYgQ09ORklHX05VTUFcbjc2NzA6XHQvKlxuNzY3MTpcdCAqIE5vZGUgcmVjbGFpbSBtb2RlXG43NjcyOlx0ICpcbjc2NzM6XHQgKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xuNzY3NDpcdCAqIHRoZSB3YXRlcm1hcmtzLlxuNzY3NTpcdCAqL1xuNzY3NjpcdGludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xuNzY3NzpcdFxuNzY3ODpcdC8qXG43Njc5Olx0ICogUHJpb3JpdHkgZm9yIE5PREVfUkVDTEFJTS4gVGhpcyBkZXRlcm1pbmVzIHRoZSBmcmFjdGlvbiBvZiBwYWdlc1xuNzY4MDpcdCAqIG9mIGEgbm9kZSBjb25zaWRlcmVkIGZvciBlYWNoIHpvbmVfcmVjbGFpbS4gNCBzY2FucyAxLzE2dGggb2Zcbjc2ODE6XHQgKiBhIHpvbmUuXG43NjgyOlx0ICovXG43NjgzOlx0I2RlZmluZSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFkgNFxuNzY4NDpcdFxuNzY4NTpcdC8qXG43Njg2Olx0ICogUGVyY2VudGFnZSBvZiBwYWdlcyBpbiBhIHpvbmUgdGhhdCBtdXN0IGJlIHVubWFwcGVkIGZvciBub2RlX3JlY2xhaW0gdG9cbjc2ODc6XHQgKiBvY2N1ci5cbjc2ODg6XHQgKi9cbjc2ODk6XHRpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbyA9IDE7XG43NjkwOlx0XG43NjkxOlx0Lypcbjc2OTI6XHQgKiBJZiB0aGUgbnVtYmVyIG9mIHNsYWIgcGFnZXMgaW4gYSB6b25lIGdyb3dzIGJleW9uZCB0aGlzIHBlcmNlbnRhZ2UgdGhlblxuNzY5MzpcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cbjc2OTQ6XHQgKi9cbjc2OTU6XHRpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbjc2OTY6XHRcbjc2OTc6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV91bm1hcHBlZF9maWxlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG43Njk4Olx0e1xuNzY5OTpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX21hcHBlZCA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9NQVBQRUQpO1xuNzcwMDpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX2xydSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbjc3MDE6XHRcdFx0bm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfRklMRSk7XG43NzAyOlx0XG43NzAzOlx0XHQvKlxuNzcwNDpcdFx0ICogSXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZXJlIHRvIGJlIG1vcmUgZmlsZSBtYXBwZWQgcGFnZXMgdGhhblxuNzcwNTpcdFx0ICogYWNjb3VudGVkIGZvciBieSB0aGUgcGFnZXMgb24gdGhlIGZpbGUgTFJVIGxpc3RzIGJlY2F1c2Vcbjc3MDY6XHRcdCAqIHRtcGZzIHBhZ2VzIGFjY291bnRlZCBmb3IgYXMgQU5PTiBjYW4gYWxzbyBiZSBGSUxFX01BUFBFRFxuNzcwNzpcdFx0ICovXG43NzA4Olx0XHRyZXR1cm4gKGZpbGVfbHJ1IFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xuNzcwOTpcdH1cbjc3MTA6XHRcbjc3MTE6XHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXG43NzEyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjc3MTM6XHR7XG43NzE0Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlVNQSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhpcyBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVW5kZXJzdGFuZGluZyBleGFjdGx5IHdoZXJlIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZW5kcyBpcyBjcnVjaWFsLiBJIGtub3cgdGhpcyBjb2RlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgYW5kIHByZWNpc2VseSByZS1lc3RhYmxpc2ggbXkgYmVhcmluZ3Mgd2l0aGluIHRoaXMgcGFydGljdWxhciBzZWN0aW9uLiBJcyB0aGlzIGEgbG9jYWwgc2NvcGUgaXNzdWUsIG9yIGlzIGl0IGEgdG9wLWxldmVsIGJsb2NrPyBEZXRlcm1pbmluZyB0aGUgZXh0ZW50IG9mIGl0cyBpbmZsdWVuY2UgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIHVuZGVyc3RhbmRpbmcgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcGVyZm9ybWFuY2UgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBMZXTigJlzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2VuZGlmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtMTkzLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxubW0vdm1zY2FuLmM6MTk0OiNlbmRpZlxubW0vdm1zY2FuLmMtMTk1LVxuLS1cbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzNy1cdFx0cmV0dXJuIHRydWU7XG5tbS92bXNjYW4uYzoyMzg6I2VuZGlmXG5tbS92bXNjYW4uYy0yMzktXHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9MjY0PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2Ny19XG5tbS92bXNjYW4uYzoyNjg6I2VuZGlmXG5tbS92bXNjYW4uYy0yNjktXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyOTEtXHRcdFx0XHR9XG5tbS92bXNjYW4uYzoxMjkyOiNlbmRpZlxubW0vdm1zY2FuLmMtMTI5My1cdFx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XG4tLVxubW0vdm1zY2FuLmM9MjYzMj1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNjMzLSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmM6MjYzNDojZW5kaWZcbm1tL3Ztc2Nhbi5jLTI2MzUtXG4tLVxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY5MC1cdH1cbm1tL3Ztc2Nhbi5jOjI2OTE6I2VuZGlmXG5tbS92bXNjYW4uYy0yNjkyLVx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODQwLVx0XHRyZXR1cm4gXHUwMDI2bWVtY2ctXHUwMDNlbW1fbGlzdDtcbm1tL3Ztc2Nhbi5jOjI4NDE6I2VuZGlmXG5tbS92bXNjYW4uYy0yODQyLVx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4NzE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODgwLVx0bW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IG1lbWNnO1xubW0vdm1zY2FuLmM6Mjg4MTojZW5kaWZcbm1tL3Ztc2Nhbi5jLTI4ODItXHRzcGluX2xvY2soXHUwMDI2bW1fbGlzdC1cdTAwM2Vsb2NrKTtcbi0tXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjkwOC1cdG1lbWNnID0gbW0tXHUwMDNlbHJ1X2dlbi5tZW1jZztcbm1tL3Ztc2Nhbi5jOjI5MDk6I2VuZGlmXG5tbS92bXNjYW4uYy0yOTEwLVx0bW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTMzLVx0bW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IE5VTEw7XG5tbS92bXNjYW4uYzoyOTM0OiNlbmRpZlxubW0vdm1zY2FuLmMtMjkzNS19XG4tLVxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTY0LX1cbm1tL3Ztc2Nhbi5jOjI5NjU6I2VuZGlmXG5tbS92bXNjYW4uYy0yOTY2LVxuLS1cbm1tL3Ztc2Nhbi5jPTI5Nzk9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMjk4My1cbm1tL3Ztc2Nhbi5jOjI5ODQ6I2VuZGlmXG5tbS92bXNjYW4uYy0yOTg1LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ1NDU9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NTY3LVxubW0vdm1zY2FuLmM6NDU2ODojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS92bXNjYW4uYy00NTY5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NTMxLVx0XHRcdGNncm91cF9wYXRoKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXAsIG0tXHUwMDNlcHJpdmF0ZSwgUEFUSF9NQVgpO1xubW0vdm1zY2FuLmM6NTUzMjojZW5kaWZcbm1tL3Ztc2Nhbi5jLTU1MzMtXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7bWVtY2cgJWxsdSAlc1xcblwmIzM0OywgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU4MTQ9dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NDAtXG5tbS92bXNjYW4uYzo1ODQxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3Ztc2Nhbi5jLTU4NDItXG4tLVxubW0vdm1zY2FuLmM9NTg3Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NzYtXG5tbS92bXNjYW4uYzo1ODc3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTg3OC1cbi0tXG5tbS92bXNjYW4uYz02ODA2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgxMy19XG5tbS92bXNjYW4uYzo2ODE0OiNlbmRpZlxubW0vdm1zY2FuLmMtNjgxNS1cbi0tXG5tbS92bXNjYW4uYz03NTYzPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1OTAtfVxubW0vdm1zY2FuLmM6NzU5MTojZW5kaWYgLyogQ09ORklHX0hJQkVSTkFUSU9OICovXG5tbS92bXNjYW4uYy03NTkyLVxuLS1cbm1tL3Ztc2Nhbi5jPTc2MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc2NTItXHR9XG5tbS92bXNjYW4uYzo3NjUzOiNlbmRpZlxubW0vdm1zY2FuLmMtNzY1NC19O1xuLS1cbm1tL3Ztc2Nhbi5jPTc4NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vdm1zY2FuLmMtNzg1NS1cbm1tL3Ztc2Nhbi5jOjc4NTY6I2VuZGlmXG5tbS92bXNjYW4uYy03ODU3LVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMjg9dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbi0tXG5tbS92bXNjYW4uYy04MDMxLX1cbm1tL3Ztc2Nhbi5jOjgwMzI6I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjI1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipWZXJpZnlpbmcgTlVNQSBDb25maWd1cmF0aW9uIEltcGFjdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBsb2NhdGVkIGF0IGxpbmUgNzg2OS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTlVNQSBjb25maWd1cmF0aW9uLiBBaCwgYCNpZmRlZiBDT05GSUdfTlVNQWAgc3RhcnRzIHdheSBiYWNrIGF0IGxpbmUgNzY2OSwgYW5kIGl0IGVuZHMgYXQgNzg1NiEgU28sIHRoYXQgbWVhbnMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZhbGxzICpvdXRzaWRlKiBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2sgY29udHJvbGxlZCBieSBgI2lmZGVmIENPTkZJR19OVU1BYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYW5kIGVsaW1pbmF0ZSBhbnkgcG90ZW50aWFsIGZvciBmdXR1cmUgY29uZnVzaW9uLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gR290dGEgYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggTlVNQS1yZWxhdGVkIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODUwOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjc4NTE6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjc4NTI6XHR7XG43ODUzOlx0XHRyZXR1cm4gMDtcbjc4NTQ6XHR9XG43ODU1Olx0XG43ODU2Olx0I2VuZGlmXG43ODU3Olx0XG43ODU4Olx0ZW51bSB7XG43ODU5Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjc4NjA6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg2MTpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4NjI6XHR9O1xuNzg2MzpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4NjQ6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG43ODY1Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG43ODY2Olx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjc4Njc6XHR9O1xuNzg2ODpcdFxuNzg2OTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3ODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IFJlY2xhbWF0aW9uIGluIGEgTlVNQSBDb250ZXh0KioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9uIGlzICpvdXRzaWRlKiB0aGUgYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgdGhlIGxvZ2ljIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3Qgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBOVU1BIHN5c3RlbXMsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYW5hbHl6ZSBpdHMgYmVoYXZpb3IuIEkgbmVlZCB0byBiZSBjYXJlZnVsIG9mIGhvdyBpdCBpbnRlcmFjdHMgaW4gbW9yZSBnZW5lcmFsIHNjZW5hcmlvcy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSB0aGF0IGl0IG1heSBvciBtYXkgbm90IGJlIG9wdGltaXplZCBmb3IgTlVNQSBhcmNoaXRlY3R1cmVzLiBJIG11c3QgYW5hbHl6ZSBjYXJlZnVsbHkuCgpOb3csIHRoYXQgYnJpbmdzIHVwIGByZWNsYWltX3N0b3JlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgcmV0cmFjZSBteSBzdGVwcyBzbyBJIGhhdmUgYSBmdWxsIHBpY3R1cmUgYW5kIGRvbiYjMzk7dCBtYWtlIGFueSBhc3N1bXB0aW9ucy4gSG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQ/IFdoYXQmIzM5O3MgaXRzIHJvbGUgaW4sIGZvciBpbnN0YW5jZSwgcGFnZSByZWNsYW1hdGlvbiBvciBwcm9jZXNzIHBhZ2UgZmF1bHRzPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIGFuZCBhbnkgb3RoZXIgbWVtb3J5IHJlY2xhbWF0aW9uLXJlbGF0ZWQgY29kZSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IGlzbiYjMzk7dCB3aXRoaW4gYSBOVU1BLXNwZWNpZmljIGJsb2NrLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYHJlY2xhaW1fc3RvcmVgIGlzIHVzZWQuIEkgbXVzdCBhbmFseXplIHdoZXJlIHRoaXMgaXMgaW52b2tlZCBhbmQgaG93IHZhcmlhYmxlcyBhcmUgcGFzc2VkIGFyb3VuZC4gVGhlIG5leHQgY29kZSBibG9jayBzaG91bGQgaGlnaGxpZ2h0IHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDA1Olx0XHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xuODAwNjpcdFx0XHRjb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ3NjYW5uZWQpO1xuODAwNzpcdFx0fVxuODAwODpcdH1cbjgwMDk6XHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG44MDEwOlx0XG44MDExOlx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbjgwMTI6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgwMTM6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODAxNDpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MDE1Olx0e1xuODAxNjpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODAxNzpcdFxuODAxODpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODAxOTpcdFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbjgwMjA6XHR9XG44MDIxOlx0XG44MDIyOlx0c3RhdGljIERFVklDRV9BVFRSX1dPKHJlY2xhaW0pO1xuODAyMzpcdGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG44MDI0Olx0e1xuODAyNTpcdFx0cmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZShcdTAwMjZub2RlLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XG44MDI2Olx0fVxuODAyNzpcdFxuODAyODpcdHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG44MDI5Olx0e1xuODAzMDpcdFx0cmV0dXJuIGRldmljZV9yZW1vdmVfZmlsZShcdTAwMjZub2RlLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XG44MDMxOlx0fVxuODAzMjpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBNZW1vcnkgUmVjbGFpbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgY2FsbCBjaGFpbnMuIEkgc2VlIHRoYXQgYHJlY2xhaW1fc3RvcmVgIHJlbGllcyBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpbGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgc3VnZ2VzdHMgc29tZSBmbGV4aWJpbGl0eSBpbiBob3cgaXQgY2FuIGJlIHRyaWdnZXJlZC4KCk5vdywgdGhlIGltcG9ydGFudCBjb25uZWN0aW9uIGlzIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHVsdGltYXRlbHkgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgd2hpY2ggc3VnZ2VzdHMgdGhlIHByaW1hcnkgdHJpZ2dlciBmb3IgdGhpcyBpcyBub3cgbWVtb3J5IGNncm91cHMgdjIgdXNpbmcgYG1lbW9yeS5yZWNsYWltYC4KClNvLCB0byBzdW1tYXJpemUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLCBwcm9hY3RpdmUgcmVjbGFpbSBjYW4gYmUgdHJpZ2dlcmVkIGluIHR3byB3YXlzOgoxLiAgVGhyb3VnaCBgQ09ORklHX01FTUNHYCAoZm9yIGNncm91cCB2MiYjMzk7cyBgbWVtb3J5LnJlY2xhaW1gKS4KMi4gIFRocm91Z2ggYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAgKGZvciB0aGUgc3lzZnMgYHJlY2xhaW1gIG5vZGUpLgoKR2l2ZW4gdGhhdCBgQ09ORklHX01FTUNHYCBpcyBlc3NlbnRpYWxseSBhIHN0YW5kYXJkIGZlYXR1cmUgbm93YWRheXMsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gaW5jbHVkaW5nIHRoYXQgb25lLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgYXJlIGVuYWJsZWQgYmVjYXVzZSB0aGUgcGF0Y2hlZCBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGVtIHZpYSBhbiBgI2lmZGVmYCBwcmVwcm9jZXNzb3Igc3RhdGVtZW50LgoKU28sIHRoZSBrZXkgY29uZmlncyBmb3IgbXkgdW5kZXJzdGFuZGluZyBhcmU6CiogICBgTFJVX0dFTmAKKiAgIGBMUlVfR0VOX0VOQUJMRURgCiogICBgTUVNQ0dgCgpOb3csIGxldCYjMzk7cyBob25lIGluIG9uIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBmbG93OiBgc2hvdWxkX2Fib3J0X3NjYW5gLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19tYW55YC4gSSBub3RpY2UgdGhleSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIHRoZW0gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJdCBsb29rcyBsaWtlIGBscnVfZ2VuX3Nocmlua19ub2RlYCBjYWxscyBgc2hyaW5rX21hbnlgLCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBjYWxscyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19vbmVgIGNhbGxzIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AuIGBzaHJpbmtfbm9kZWAgYWxzbyBjYWxscyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhY3R1YWxseSBjYWxscz8gRG9lcyBpdCBjYWxsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBvciBkb2VzIGl0IGNhbGwgYHNocmlua19ub2RlYD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3JrcyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzkyMDpcdFx0XHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxuNzkyMTpcdFx0XHQgKi9cbjc5MjI6XHRcdFx0aWYgKCFucl9yZXRyaWVzKVxuNzkyMzpcdFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG43OTI0Olx0XG43OTI1Olx0XHRcdGlmIChtZW1jZykge1xuNzkyNjpcdFx0XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG43OTI3Olx0XG43OTI4Olx0XHRcdFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCB8XG43OTI5Olx0XHRcdFx0XHRcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XG43OTMwOlx0XHRcdFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcbjc5MzE6XHRcdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG43OTMyOlx0XHRcdFx0XHRcdFx0IHJlY2xhaW1fb3B0aW9ucyxcbjc5MzM6XHRcdFx0XHRcdFx0XHQgc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcdTAwMjZzd2FwcGluZXNzKTtcbjc5MzQ6XHRcdFx0fSBlbHNlIHtcbjc5MzU6XHRcdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNzkzNjpcdFx0XHRcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG43OTM3Olx0XHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG43OTM4Olx0XHRcdFx0XHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MsXG43OTM5Olx0XHRcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqUHJvYmluZyB0aGUgTWVtb3J5IFJlY2xhaW0gTG9naWMqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSB0cmlnZ2VyLiBNeSBtZW50YWwgbW9kZWwgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgYWN0aXZlIG1lbW9yeSByZWNsYW1hdGlvbiBlZmZvcnRzIGluaXRpYXRlZCBieSB0aGUgdXNlci4gSXQgY2FsbHMgZWl0aGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCAod2hpY2ggSSBrbm93IHRhcmdldHMgcGFnZXMgd2l0aGluIGEgc3BlY2lmaWMgY2dyb3VwKSBvciBgc2hyaW5rX25vZGVgICh3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBicm9hZGVyIG5vZGUtbGV2ZWwgcmVjbGFpbSkuIE5vdywgSSB3YW50IHRvIGRlbHZlIGludG8gd2hhdCBoYXBwZW5zIHdoZW4gbmVpdGhlciBvZiB0aG9zZSBjYWxscyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQsIGJlY2F1c2UgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgbW9yZSBzdWJ0bGUgaXNzdWVzIG9yIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBsaWUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYGVsc2VgIGJyYW5jaCBvZiB0aGUgY29uZGl0aW9uYWwgaXMgZG9pbmcgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXQgcHJvdmlkZXMuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG5leHQgaW50ZXJlc3RpbmcgaW5zaWdodHMgYXJlIGxpa2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk0MDpcdFx0XHRcdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuNzk0MTpcdFx0XHRcdFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgoYmF0Y2hfc2l6ZSwgU1dBUF9DTFVTVEVSX01BWCksXG43OTQyOlx0XHRcdFx0XHQubWF5X3VubWFwID0gMSxcbjc5NDM6XHRcdFx0XHRcdC5tYXlfc3dhcCA9IDEsXG43OTQ0Olx0XHRcdFx0XHQucHJvYWN0aXZlID0gMSxcbjc5NDU6XHRcdFx0XHR9O1xuNzk0NjpcdFxuNzk0NzpcdFx0XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsXG43OTQ4Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG43OTQ5Olx0XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuNzk1MDpcdFxuNzk1MTpcdFx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcbjc5NTI6XHRcdFx0XHRcdFx0XHQgICBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG43OTUzOlx0XHRcdFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuNzk1NDpcdFx0XHR9XG43OTU1Olx0XG43OTU2Olx0XHRcdGlmICghcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbnJfcmV0cmllcy0tKVxuNzk1NzpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuNzk1ODpcdFxuNzk1OTpcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0OTUKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQcm9hY3RpdmUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGtleSBtb2RpZmljYXRpb24gaGVyZS4gSXQmIzM5O3MgcmVhY2hlZCB0aHJvdWdoIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgcGF0aCwgd2hpY2ggdGhlbiBjYWxscyBgc2hyaW5rX25vZGVgIG9yIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gVGhvc2UgcGF0aHMgYXJlIGludGVyZXN0aW5nIHRvby4gU3BlY2lmaWNhbGx5LCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgY2FsbHMgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggbGVhZHMgdG8gYHNocmlua196b25lc2AgYW5kIGZpbmFsbHkgYmFjayB0byBgc2hyaW5rX25vZGVgLgoKTXkgdGhvdWdodCBwcm9jZXNzIGxlZCBtZSB0byByZWFsaXplIHRoYXQgYHNocmlua19ub2RlYCBjYWxscyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgaWYgTXVsdGktR2VuIExSVSAoTUdMUlUpIGlzIGVuYWJsZWQuIEFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgY2FsbHMgYHNocmlua19tYW55YCwgd2hpY2ggKmZpbmFsbHkqIGNhbGxzIGBzaG91bGRfYWJvcnRfc2NhbmAuIFNvLCB5ZXMsIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIE1HTFJVIGNvZGUgcGF0aCwgYXNzdW1pbmcgcHJvYWN0aXZlIHJlY2xhaW0gaXMgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLgoKV2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb25kaXRpb24gd2hlcmUgdGhlIHNjYW4gaXMgYWJvcnRlZCBpZiBgc2MtJmd0O3Byb2FjdGl2ZWAgaXMgdHJ1ZSAoaW5kaWNhdGluZyBhIHByb2FjdGl2ZSByZWNsYWltIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSkgYW5kIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBkZWxpYmVyYXRlIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0byBhbGxvdyB1c2Vyc3BhY2UsIGVzc2VudGlhbGx5LCB0byBpbnRlcnJ1cHQgdGhlIHJlY2xhaW0gcHJvY2VzcyBieSBzZW5kaW5nIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzIHdyaXRpbmcgdG8gYG1lbW9yeS5yZWNsYWltYC4gVGhpcyBzZWVtcyBsaWtlIGEgZ3JlYXQgYXJlYSB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgb25seSBjb21waWxlZCBpZiBNR0xSVSBpcyBlbmFibGVkIHRocm91Z2ggYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYW5kIHRoYXQgYExSVV9HRU5fRU5BQkxFRGAgZW5hYmxlcyBNR0xSVSBieSBkZWZhdWx0LCBhbmQgYE1FTUNHYCBpcyBuZWVkZWQgdG8gZXhwb3NlIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGludGVyZmFjZS4gSXQgaXMgZ29vZCB0aGF0IEkmIzM5O3ZlIGVuc3VyZWQgdGhlc2UgYXJlIHRoZSBjb25maWd1cmF0aW9ucyBuZWVkZWQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBNR0xSVSByZWNsYWltIHBhdGguIFRoZSBjaGFuZ2UgYWxsb3dzIHVzZXJzcGFjZSB0byBzaWduYWwgYSBsb25nLXJ1bm5pbmcsIHByb2FjdGl2ZSByZWNsYWltIHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAuIFNvIEkmIzM5O20gbm93IGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBlZGdlIGNhc2VzIGFyb3VuZCBzaWduYWwgaGFuZGxpbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBhbmQgZW5zdXJpbmcgY29uc2lzdGVudCBzdGF0ZXMgYWZ0ZXIgaW50ZXJydXB0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoZXNlIHBhdGhzIHRob3JvdWdobHkuIEkgYW0gbm93IGdvaW5nIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhpcywgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7c2hyaW5rX21hbnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nIGZvciB0aGUgY3VycmVudCB0YXNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGgsIGFsbG93aW5nIHVzZXJzcGFjZSB0byBpbnRlcnJ1cHQgYSBwb3RlbnRpYWxseSBsb25nLXJ1bm5pbmcgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9uICh0cmlnZ2VyZWQgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzKSBieSBzZW5kaW5nIGEgc2lnbmFsLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGFib3J0cyB0aGUgc2NhbiB3aXRob3V0IGNhdXNpbmcgcmVzb3VyY2UgbGVha3Mgb3IgaW5jb25zaXN0ZW50IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjE5LjQ1MTAwNTI1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM1MTM0Njg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToxOS40NTEwMTIxMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg0MDc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiMjI4Yjk1Y2Q0NTBlYjk5NWZjZGE3YmU1MjRhMDQxOGFlYjFkMGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAyMjo1OToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNDkyOSw2ICs0OTI5LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0aW50IGk7XFxuIFxcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XFxuIFxcbitcXHRpZiAodW5saWtlbHkoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZT0gbWF4KHNjLVxcdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cXHUwMDNlb3JkZXIpKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToxOS45ODI2MjY5ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDgxOTcxNjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiMjI4Yjk1Y2Q0NTBlYjk5NWZjZGE3YmU1MjRhMDQxOGFlYjFkMGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDIyOjU5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICs0OTI5LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGludCBpO1xuIFx0ZW51bSB6b25lX3dhdGVybWFya3MgbWFyaztcbiBcbitcdGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZT0gbWF4KHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLVx1MDAzZW9yZGVyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MTkuOTgyNjI4MjQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMTc0NDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZNU2NhbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS92bXNjYW4uY2AuIEl0J3MgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLiBUaGUga2V5IGFkZGl0aW9uIGlzIHRoaXMgYGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSkgcmV0dXJuIHRydWU7YCBibG9jay5cblxuTXkgaW1tZWRpYXRlIGludGVycHJldGF0aW9uIGlzIHRoYXQgdGhpcyBpbnRyb2R1Y2VzIGEgc2lnbmFsIGhhbmRsaW5nIGFzcGVjdCBpbnRvIHByb2FjdGl2ZSByZWNsYWltLiBFc3NlbnRpYWxseSwgaXQgbWVhbnMgdGhhdCBpZiBwcm9hY3RpdmUgc2Nhbm5pbmcgaXMgZW5hYmxlZCAoYHNjLVx1MDAzZXByb2FjdGl2ZWAgaXMgdHJ1ZSkgYW5kIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIChgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHJldHVybnMgdHJ1ZSksIHRoZW4gdGhlIHNjYW4gaXMgYWJvcnRlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgaW5mbHVlbmNpbmcgaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgdG8gc2lnbmFscyBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IG1ha2VzIHNlbnNlIHRvIG1lLCB0byBwcm92aWRlIHRoZSBzeXN0ZW0gd2l0aCB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8gZXh0ZXJuYWwgZXZlbnRzLCBsaWtlIHNpZ25hbHMgdGhhdCBtaWdodCBpbmRpY2F0ZSB1c2VyIHJlcXVlc3RzIGZvciBzdG9wcGluZyBhIHBvdGVudGlhbGx5IGxvbmcgYmFja2dyb3VuZCBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG1tL3Ztc2Nhbi5jYCBtb3JlIHRob3JvdWdobHkgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToyMy42MDQzNzQzNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxMTk0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDkyNi1cXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDkyOC17XFxuLS1cXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTg5LVxcbm1tL3Ztc2Nhbi5jOjQ5OTA6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQ5OTEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA5My1cXG5tbS92bXNjYW4uYzo1MDk0OlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MDk1LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToyMy42NzQ1MDExMDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg2NDczNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBBYm9ydCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgdGhhdCBgc2hvdWxkX2Fib3J0X3NjYW5gIGdldHMgY2FsbGVkIGJ5IGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHNocmlua19tYW55YC4gSW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoaXMgYXMgcHJldHR5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gaXRzIHJvbGUsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCwgSSBoYXZlIHRvIGNvbnNpZGVyIGZ1enppbmcgdGhpcy4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBpcyBoaWdoLlxuXG5MZXQncyB6b29tIGluIGEgYml0IGhlcmUuIE5vdywgd2FpdCBhIHNlY29uZC4uLiBgc2hvdWxkX2Fib3J0X3NjYW5gLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19tYW55YCBhcmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBTaW5jZSB0aGV5J3JlIGBzdGF0aWNgIGl0IHNlZW1zIHRoYXQgdGhlIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBIb3dldmVyLCBJIHdhbnQgdG8gY29uZmlybSB3aGVyZSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgIGFyZSBhY3R1YWxseSBjYWxsZWQgZnJvbSwgZ2l2ZW4gdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCBgc2hvdWxkX2Fib3J0X3NjYW5gLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGlzIGFib3J0IGxvZ2ljIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUsIHNvIHRoYXQgSSBjYW4gY29uc3RydWN0IHRlc3QgY2FzZXMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MjcuNDYwOTc2NDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTM5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NjEtICovXFxubW0vdm1zY2FuLmM6NDk2MjpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5NjMte1xcbi0tXFxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMjYtXFxubW0vdm1zY2FuLmM6NTAyNzpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUwMjgtXFxuLS1cXG5tbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEzMC1cXG5tbS92bXNjYW4uYzo1MTMxOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MTMyLVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MjcuNTU4OTIwNDc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNjE3MzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIExSVSBWZWN0b3IgU2hyaW5raW5nIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBMUlUgdmVjdG9yIHNocmlua3MuIGBzaHJpbmtfb25lYCBhbmQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgYXJlIGJvdGggdXNpbmcgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknZCBleHBlY3QgdGhleSdkIGJlIHRoZSBjb21tb24gcGF0aCBmb3Igc2luZ2xlLWVsZW1lbnQgc2hyaW5rcyBvciB0aG9zZSB0cmlnZ2VyZWQgYnkgdGhlIGdlbmVyYWwgTFJVIGdlbmVyYXRpb24gY3ljbGUuIE5vdywgYHNocmlua19tYW55YCBpcyBhbHNvIGJlaW5nIGNhbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyB0aGF0IHRyaWdnZXIgX211bHRpcGxlXyBzaHJpbmsgb3BlcmF0aW9ucyBpbiBvbmUgZ28uIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBjYWxsIHNpdGVzIGZvciBgc2hyaW5rX21hbnlgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmRpdGlvbnMgd291bGQgY2F1c2UgYSBzdHJhdGVneSBzaGlmdCB0byBidWxrIHNocmlua2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMwLjM2NTA5NjQ5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ2NDM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA0Ny1cXG5tbS92bXNjYW4uYzo1MDQ4OnN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTEzOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2Ny1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NTE2ODpcXHRcXHRzaHJpbmtfbWFueShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMwLjQzMjU2NzU0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI2NDY0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTUdMUlUgU2hyaW5rYWdlIFN0cmF0ZWd5IFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgTUdMUlUgY29kZSBoYW5kbGVzIG1lbW9yeSBzaHJpbmthZ2UuIFNwZWNpZmljYWxseSwgYGxydV9nZW5fc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHNocmlua19tYW55YCwgYW5kIHRoYXQncyBhIGtleSBpbnRlcmFjdGlvbiB0byB1bmRlcnN0YW5kLiBJdCdzIGNsZWFyIHRoYXQgYm90aCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGxydV9nZW5fc2hyaW5rX25vZGVgIGFyZSBkZWVwbHkgZW1iZWRkZWQgd2l0aGluIHRoZSBNR0xSVSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gTUdMUlUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgZm9yIHR1bmluZyB0aGlzIGJlaGF2aW9yIGFuZCBwb3NzaWJseSBvcHRpbWl6aW5nIGl0IGZvciBzcGVjaWZpYyB3b3JrbG9hZHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMzLjQ5NTIxNTk5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MTUzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEzOC1cXG5tbS92bXNjYW4uYzo1MTM5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE0MC17XFxuLS1cXG5tbS92bXNjYW4uYz01ODY3PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg3MS1cXG5tbS92bXNjYW4uYzo1ODcyOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTg3My17XFxuLS1cXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE1Ni1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYxNTc6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxNTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMzLjU1NTkzNTI4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIzNzYxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAg4oCTIENvbnRleHQgaXMgS2V5KipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgZnVuY3Rpb24sIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGVyIHNlbnNlcyBhcmUgdGluZ2xpbmcuIEkgc2VlICp0d28qIGRlZmluaXRpb25zLCB3aGljaCBpcyBvZnRlbiBhIHJlZCBmbGFnIGluIGtlcm5lbCBjb2RlLiBJdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGF0IG9uZSBvZiB0aGVtIGlzIGEgcGxhY2Vob2xkZXIsIGEgZHVtbXkgaW1wbGVtZW50YXRpb24sIG9yIGEgZmFsbGJhY2sgbWVjaGFuaXNtLiBXZSBhbGwga25vdyBob3cgdGhlc2UgdGhpbmdzIGdvIOKAkyB5b3Ugb2Z0ZW4gZW5kIHVwIHdpdGggYSBmZXcgZGlmZmVyZW50IGRlZmluaXRpb25zIGJhc2VkIG9uIGNvbXBpbGUtdGltZSBjb25maWdzLlxuXG5UbyBmaWd1cmUgb3V0IHRoZSBhY3R1YWwgaW50ZW5kZWQgYmVoYXZpb3IsIEkgbmVlZCBtb3JlIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlIE11bHRpcGxlIEdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmZWF0dXJlIGlzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gTUdMUlUsIGdpdmVuIHRoZSBuYW1pbmcsIGJ1dCBJIG5lZWQgc29saWQgZXZpZGVuY2UgYmVmb3JlIG1ha2luZyBhc3N1bXB0aW9ucy4gU28sIGxldCdzIGp1bXAgc3RyYWlnaHQgdG8gdGhlIEtjb25maWcgYW5kIHZlcmlmeSB3aGV0aGVyIE1HTFJVIGlzIGFjdGl2ZS4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwIHJlYWxseSBxdWlja2x5LiBUaGUgS2NvbmZpZyB3aWxsIGRpY3RhdGUgd2hpY2ggZGVmaW5pdGlvbiBpcyBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTozNi42Nzk2OTk0ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDk4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19MUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDU1Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ1NzMtXFxubW0vbWVtY29udHJvbC5jOjQ1NzQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtY29udHJvbC5jLTQ1NzUtc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDU5Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5tbS9tZW1jb250cm9sLmM6NDU5NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cXG4tLVxcbm1tL21lbW9yeS5jPTY1MzU9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxubW0vbWVtb3J5LmMtNjU4Ny1cXG5tbS9tZW1vcnkuYzo2NTg4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbW9yeS5jLTY1ODktc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jPTY2MDQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnkuYy02NjA2LX1cXG5tbS9tZW1vcnkuYzo2NjA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbW9yeS5jLTY2MDgtXFxuLS1cXG5tbS9zd2FwLmM9Mzk2PXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmMtNDI1LVxcbm1tL3N3YXAuYzo0MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vc3dhcC5jLTQyNy1cXG4tLVxcbm1tL3N3YXAuYz00NTI9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmMtNDY5LVxcbm1tL3N3YXAuYzo0NzA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vc3dhcC5jLTQ3MS1cXG4tLVxcbm1tL3N3YXAuYz00NzY9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmMtNDgwLVxcbm1tL3N3YXAuYzo0ODE6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vc3dhcC5jLTQ4Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTgyND1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODMwLVxcbm1tL3Ztc2Nhbi5jOjgzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04MzItLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg1ND1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy04NTctfVxcbm1tL3Ztc2Nhbi5jOjg1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy04NTktXFxuLS1cXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjI0LVxcbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjYyNi1cXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYy0yNjI5LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjgtXFxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgzMC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Mzg9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTY2LVxcbm1tL3Ztc2Nhbi5jOjI5Njc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbm1tL3Ztc2Nhbi5jLTI5NjgtXFxuLS1cXG5tbS92bXNjYW4uYz01ODU4PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG5tbS92bXNjYW4uYy01ODU5LVxcbm1tL3Ztc2Nhbi5jOjU4NjA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTg2MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NzI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NzYtXFxubW0vdm1zY2FuLmM6NTg3NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01ODc4LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMjMyLVxcbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vd29ya2luZ3NldC5jLTIzNC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zMzYtXFxubW0vd29ya2luZ3NldC5jOjMzNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS93b3JraW5nc2V0LmMtMzM4LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTM1MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTM1My1cXG5tbS93b3JraW5nc2V0LmM6MzU0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjM2Ljc3ODIwMTY5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQzMzExNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHJlZ2FyZGluZyBgQ09ORklHX0xSVV9HRU5gLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBNR0xSVS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBob2xkIG9uIGEgc2Vjb25kLi4uIEkgc2VlIGBzaG91bGRfYWJvcnRfc2NhbmAgYmVpbmcgcmVmZXJlbmNlZCwgYnV0IGl0J3MgKm91dHNpZGUqIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBjb25kaXRpb25hbC4gVGhhdCdzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBjbGFyaWZ5IGV4YWN0bHkgd2hlcmUgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBkZWZpbmVkIGJlY2F1c2UgdGhpcyBzZXR1cCBzZWVtcyB1bnVzdWFsLCBhbmQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB3aGVyZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGNvbWVzIGZyb20sIGFuZCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byB0aGUgTUdMUlUgY29kZSBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTozOS42MjE1MTY0MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTA0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5MTA9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjYtXFxubW0vdm1zY2FuLmM6NDkyNzpzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xcbi0tXFxubW0vdm1zY2FuLmM9NDk2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk4OS1cXG5tbS92bXNjYW4uYzo0OTkwOlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy00OTkxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTMtXFxubW0vdm1zY2FuLmM6NTA5NDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTA5NS1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MzkuNjgzMDI1NzM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTM3MjM4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBsaW5lIDQ5MjcsIGdpdmUgb3IgdGFrZSwgaW4gYG1tL3Ztc2Nhbi5jYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2Vhci4gYHZtc2Nhbi5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWVtb3J5IHNjYW5uZXIsIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIHJlY2xhaW1pbmcgcGFnZXMgYW5kIGdlbmVyYWxseSBrZWVwaW5nIG1lbW9yeSB1dGlsaXphdGlvbiBoZWFsdGh5LiBMaW5lIDQ5MjcuLi4gdGhhdCdzIGEgKnNwZWNpZmljKiBzcG90LiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGF0IHNwZWNpZmljIGFyZWEgaGFzIGJlZW4gZmxhZ2dlZC4gSXQncyBsaWtlbHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBldmljdGlvbiwgbWF5YmUgaGFuZGxpbmcgZGlydHkgcGFnZXMsIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIGJhY2tncm91bmQgcmVjbGFpbSBwcm9jZXNzIGl0c2VsZi4gVGltZSB0byBsb2FkIHVwIHRoZSBzb3VyY2UgYW5kIGRpZyBpbi4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyB3aGF0IHRoZSBjb250ZXh0IG9mIHRoYXQgbGluZSBpcywgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMsIGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gaXMgZG9pbmcgaW4gdGhhdCBhcmVhLiBDaGFuY2VzIGFyZSB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBhIHN1YnRsZSBlZGdlIGNhc2UgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZWNsYWltaW5nIHBhZ2VzIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIFBlcmhhcHMgYSByYWNlIGNvbmRpdGlvbiwgYSBzdWJ0bGUgbWVtb3J5IGxlYWssIG9yIGV2ZW4ganVzdCBhbiBpbmVmZmljaWVudCBhbGxvY2F0aW9uIHBhdHRlcm4uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6NDMuMDM2NzUxMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0OTEwOlxcdHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNDkxMTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBzd2FwcGluZXNzKVxcbjQ5MTI6XFx0e1xcbjQ5MTM6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBldmljdGFibGU7XFxuNDkxNDpcXHRcXG40OTE1OlxcdFxcdGV2aWN0YWJsZSA9IGxydXZlY19ldmljdGFibGVfc2l6ZShscnV2ZWMsIHN3YXBwaW5lc3MpO1xcbjQ5MTY6XFx0XFxuNDkxNzpcXHRcXHQvKiB0cnkgdG8gc2NyYXBlIGFsbCBpdHMgbWVtb3J5IGlmIHRoaXMgbWVtY2cgd2FzIGRlbGV0ZWQgKi9cXG40OTE4OlxcdFxcdGlmICghbWVtX2Nncm91cF9vbmxpbmUobWVtY2cpKVxcbjQ5MTk6XFx0XFx0XFx0cmV0dXJuIGV2aWN0YWJsZTtcXG40OTIwOlxcdFxcbjQ5MjE6XFx0XFx0bnJfdG9fc2NhbiA9IGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKG1lbWNnLCBzYywgZXZpY3RhYmxlKTtcXG40OTIyOlxcdFxcdG5yX3RvX3NjYW4gXFx1MDAzZVxcdTAwM2U9IHNjLVxcdTAwM2Vwcmlvcml0eTtcXG40OTIzOlxcdFxcbjQ5MjQ6XFx0XFx0cmV0dXJuIG5yX3RvX3NjYW47XFxuNDkyNTpcXHR9XFxuNDkyNjpcXHRcXG40OTI3OlxcdHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNDkyODpcXHR7XFxuNDkyOTpcXHRcXHRpbnQgaTtcXG40OTMwOlxcdFxcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XFxuNDkzMTpcXHRcXG40OTMyOlxcdFxcdGlmICh1bmxpa2VseShzYy1cXHUwMDNlcHJvYWN0aXZlIFxcdTAwMjZcXHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcXG40OTMzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjQ5MzQ6XFx0XFxuNDkzNTpcXHRcXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlPSBtYXgoc2MtXFx1MDAzZW5yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLVxcdTAwM2VvcmRlcikpKVxcbjQ5MzY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDkzNzpcXHRcXG40OTM4OlxcdFxcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXFxuNDkzOTpcXHRcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW9yZGVyKVxcbjQ5NDA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ5NDE6XFx0XFxuNDk0MjpcXHRcXHRtYXJrID0gc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORyA/XFxuNDk0MzpcXHRcXHQgICAgICAgV01BUktfUFJPTU8gOiBXTUFSS19ISUdIO1xcbjQ5NDQ6XFx0XFxuNDk0NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IHNjLVxcdTAwM2VyZWNsYWltX2lkeDsgaSsrKSB7XFxuNDk0NjpcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSA9IGxydXZlY19wZ2RhdChscnV2ZWMpLVxcdTAwM2Vub2RlX3pvbmVzICsgaTtcXG40OTQ3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHdtYXJrX3BhZ2VzKHpvbmUsIG1hcmspICsgTUlOX0xSVV9CQVRDSDtcXG40OTQ4OlxcdFxcbjQ5NDk6XFx0XFx0XFx0aWYgKG1hbmFnZWRfem9uZSh6b25lKSBcXHUwMDI2XFx1MDAyNiAhem9uZV93YXRlcm1hcmtfb2soem9uZSwgMCwgc2l6ZSwgc2MtXFx1MDAzZXJlY2xhaW1faWR4LCAwKSlcXG40OTUwOlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40OTUxOlxcdFxcdH1cXG40OTUyOlxcdFxcbjQ5NTM6XFx0XFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cXG40OTU0OlxcdFxcdHJldHVybiB0cnVlO1xcbjQ5NTU6XFx0fVxcbjQ5NTY6XFx0XFxuNDk1NzpcXHQvKlxcbjQ5NTg6XFx0ICogRm9yIGZ1dHVyZSBvcHRpbWl6YXRpb25zOlxcbjQ5NTk6XFx0ICogMS4gRGVmZXIgdHJ5X3RvX2luY19tYXhfc2VxKCkgdG8gd29ya3F1ZXVlcyB0byByZWR1Y2UgbGF0ZW5jeSBmb3IgbWVtY2dcXG40OTYwOlxcdCAqICAgIHJlY2xhaW0uXFxuNDk2MTpcXHQgKi9cXG40OTYyOlxcdHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNDk2MzpcXHR7XFxuNDk2NDpcXHRcXHRib29sIG5lZWRfcm90YXRlID0gZmFsc2UsIHNob3VsZF9hZ2UgPSBmYWxzZTtcXG40OTY1OlxcdFxcdGxvbmcgbnJfYmF0Y2gsIG5yX3RvX3NjYW47XFxuNDk2NjpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xcbjQ5Njc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuNDk2ODpcXHRcXG40OTY5OlxcdFxcdG5yX3RvX3NjYW4gPSBnZXRfbnJfdG9fc2NhbihscnV2ZWMsIHNjLCBtZW1jZywgc3dhcHBpbmVzcyk7XFxuNDk3MDpcXHRcXHR3aGlsZSAobnJfdG9fc2NhbiBcXHUwMDNlIDApIHtcXG40OTcxOlxcdFxcdFxcdGludCBkZWx0YTtcXG40OTcyOlxcdFxcdFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuNDk3MzpcXHRcXG40OTc0OlxcdFxcdFxcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIG1lbWNnKSkge1xcbjQ5NzU6XFx0XFx0XFx0XFx0bmVlZF9yb3RhdGUgPSB0cnVlO1xcbjQ5NzY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDk3NzpcXHRcXHRcXHR9XFxuNDk3ODpcXHRcXG40OTc5OlxcdFxcdFxcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XFxuNDk4MDpcXHRcXHRcXHRcXHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxcbjQ5ODE6XFx0XFx0XFx0XFx0XFx0bmVlZF9yb3RhdGUgPSB0cnVlO1xcbjQ5ODI6XFx0XFx0XFx0XFx0c2hvdWxkX2FnZSA9IHRydWU7XFxuNDk4MzpcXHRcXHRcXHR9XFxuNDk4NDpcXHRcXG40OTg1OlxcdFxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xcbjQ5ODY6XFx0XFx0XFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xcbjQ5ODc6XFx0XFx0XFx0aWYgKCFkZWx0YSlcXG40OTg4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ5ODk6XFx0XFxuNDk5MDpcXHRcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxuNDk5MTpcXHRcXHRcXHRcXHRicmVhaztcXG40OTkyOlxcdFxcbjQ5OTM6XFx0XFx0XFx0LypcXG40OTk0OlxcdFxcdFxcdCAqIFJvb3QgcmVjbGFpbSBuZWVkcyByb3RhdGlvbiB3aGVuIGxvdyBvbiBjb2xkIGZvbGlvIGZvciBiZXR0ZXJcXG40OTk1OlxcdFxcdFxcdCAqIGZhaXJuZXNzLiBDZ3JvdXAgcmVjbGFpbSBnZXRzIGZhaXJuZXNzIGZyb20gdGhlIGl0ZXJhdG9yLlxcbjQ5OTY6XFx0XFx0XFx0ICovXFxuNDk5NzpcXHRcXHRcXHRpZiAocm9vdF9yZWNsYWltKHNjKSBcXHUwMDI2XFx1MDAyNiBzaG91bGRfYWdlKVxcbjQ5OTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDk5OTpcXHRcXG41MDAwOlxcdFxcdFxcdG5yX3RvX3NjYW4gLT0gZGVsdGE7XFxuNTAwMTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41MDAyOlxcdFxcdH1cXG41MDAzOlxcdFxcbjUwMDQ6XFx0XFx0cmV0dXJuIG5lZWRfcm90YXRlO1xcbjUwMDU6XFx0fVxcbjUwMDY6XFx0XFxuNTAwNzpcXHRzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG41MDA4OlxcdHtcXG41MDA5OlxcdFxcdGJvb2wgbmVlZF9yb3RhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQzLjAzNzEyNjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODQ4NTgwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBzaG91bGRfYWJvcnRfc2NhbmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2hvdWxkX2Fib3J0X3NjYW5gLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGlzIHRoaXMgYSBmdW5jdGlvbiBzcGVjaWZpYyB0byBNdWx0aS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSksIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgdGhhdCBtaWdodCBiZSB1c2VkIGFjcm9zcyBvdGhlciByZWNsYWltIG1lY2hhbmlzbXM/IFRvIGZpZ3VyZSB0aGlzIG91dCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0J3MgZGVmaW5lZC4gTXkgcHJpbWFyeSBzdXNwZWN0IGlzIE1HTFJVLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBwb3RlbnRpYWxseSB1c2VkIG1vcmUgYnJvYWRseS4gVGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIGEgcHJlcHJvY2Vzc29yIGNoZWNrLiBMZXQncyBzZWUgaWYgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhhdCB3aWxsIGRlZmluaXRpdmVseSB0ZWxsIG1lIGlmIGl0J3MgdGllZCB0byB0aGUgZ2VuZXJhdGlvbmFsIExSVSBpbXBsZW1lbnRhdGlvbiwgYXMgZXhwZWN0ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgYW5zd2VyIGFib3V0IGl0cyBzY29wZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciByZWNsYWltIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQ2LjEyMTk4NjA4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4NTYyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjQtXFxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjI2LVxcbm1tL3Ztc2Nhbi5jPTI2Mjc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2MjktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyOC1cXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODMwLVxcbi0tXFxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjYtXFxubW0vdm1zY2FuLmM6Mjk2NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMjk2OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NTg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU4NTktXFxubW0vdm1zY2FuLmM6NTg2MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01ODYxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTg3Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg3Ni1cXG5tbS92bXNjYW4uYzo1ODc3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU4NzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQ2LjE5MDg1MDQ4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQwMTkyOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBhbmQgQWJvcnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb25hbGl0eS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHZhcmlhYmxlIGlzIGRlZmluZWQgYW5kIHVzZWQgc29tZXdoZXJlIGRlZXAgd2l0aGluIHRoaXMgY29kZWJhc2UuIExldCdzIHNlZS4uLiB5ZXAsIGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIGFuZCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgb24gbGluZSA0OTI3LlxuXG5Ob3csIEknbSBwcmV0dHkgc3VyZSBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUgYWZmZWN0aW5nIHRoaXMgd2hvbGUgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGd1YXJkZWQgYnkgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHByZXByb2Nlc3NvciBtYWNyby4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIHRoaW5raW5nIGNsZWFybHkuIE9rYXksIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayAqYXBwZWFycyogdG8gc3RhcnQgYXQgbGluZSAyNjI1IGFuZCBydW5zIGFsbCB0aGUgd2F5IHRvIGxpbmUgNTg2MC4gVGhhdCdzIGEgaHVnZSBibG9jayBvZiBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBjb2RlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgZnVsbCBleHRlbnQuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGUgbG9naWMgSSdtIGxvb2tpbmcgYXQgaXMgYWN0dWFsbHkgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciBwYXJ0aWFsbHkgaW5jbHVkZWQgYnkgdGhlIG1hY3JvLiBTbywgSSB3aWxsIGNvbmZpcm0gdGhlIGxpbmUgbnVtYmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQ5LjUzMTA0NTM0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYyMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjYyMDpcXHRcXHQvKiBBbHNvIHZhbHVhYmxlIGlmIGFub24gcGFnZXMgY2FuIGJlIGRlbW90ZWQ6ICovXFxuMjYyMTpcXHRcXHRyZXR1cm4gY2FuX2RlbW90ZShscnV2ZWNfcGdkYXQobHJ1dmVjKS1cXHUwMDNlbm9kZV9pZCwgc2MsXFxuMjYyMjpcXHRcXHRcXHRcXHQgIGxydXZlY19tZW1jZyhscnV2ZWMpKTtcXG4yNjIzOlxcdH1cXG4yNjI0OlxcdFxcbjI2MjU6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuMjYyNjpcXHRcXG4yNjI3OlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbjI2Mjg6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG4yNjI5OlxcdERFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTo0OS41MzEzMjc4NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMzAwMzUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogTGluZSA1ODU1KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBhIHNwZWNpZmljIHBvaW50LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgbGluZSA1ODU1LiBJJ20gaGl0dGluZyBhIG1lbnRhbCBjaGVja3BvaW50IHRoZXJlLCB3YW50aW5nIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlIGV4ZWN1dGlvbiBmbG93LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB3aHkgSSBzdXNwZWN0IHRoYXQgbGluZSA1ODU1IGlzIGludGVyZXN0aW5nLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIHRoZSBjb3JlIGFsZ29yaXRobSwgYSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb24sIGEgY2FsbCB0byBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYW4gYW5vbWFseSBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24uIFRoaXMgbGluZSBudW1iZXIgYWN0cyBhcyBteSBhbmNob3IgdG8gZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0OiB3aGF0IHByZWNlZGVzIGl0LCBhbmQgd2hhdCBmb2xsb3dzPyBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBsaW5lIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6NTIuNjM0MzMzMTY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODU1OlxcdFxcbjU4NTY6XFx0XFx0cmV0dXJuIDA7XFxuNTg1NzpcXHR9O1xcbjU4NTg6XFx0bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbjU4NTk6XFx0XFxuNTg2MDpcXHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG41ODYxOlxcdFxcbjU4NjI6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG41ODYzOlxcdHtcXG41ODY0OlxcdFxcdEJVSUxEX0JVRygpO1xcbjU4NjU6XFx0fVxcbjU4NjY6XFx0XFxuNTg2NzpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG41ODY4OlxcdHtcXG41ODY5OlxcdFxcdEJVSUxEX0JVRygpO1xcbjU4NzA6XFx0fVxcbjU4NzE6XFx0XFxuNTg3MjpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjU4NzM6XFx0e1xcbjU4NzQ6XFx0XFx0QlVJTERfQlVHKCk7XFxuNTg3NTpcXHR9XFxuNTg3NjpcXHRcXG41ODc3OlxcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNTg4MDpcXHR7XFxuNTg4MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107XFxuNTg4MjpcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldHNbTlJfTFJVX0xJU1RTXTtcXG41ODgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbjtcXG41ODg0OlxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTo1Mi42MzQ3OTE4MjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDI1NDM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBteSBpbnRlcm5hbCBjb21waWxlciBmbGFncyBhcmUgc3RhcnRpbmcgdG8gbGlnaHQgdXAuICpzaG91bGRcXF9hYm9ydFxcX3NjYW4qLi4uIGFoLCB0aGF0J3MgdHVja2VkIGF3YXkgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBBbmQgdGhhdCdzIGNvbmZpcm1lZCBieSB0aGUgbGluZSBudW1iZXIsIGxpbmUgNDkyNywgd2hpY2ggSSByZW1lbWJlciBiZWluZyBzb21ld2hlcmUgYmV0d2VlbiB0aG9zZSBlYXJsaWVyIGNoZWNrcyB0aGF0IHVzZWQgQ09ORklHXFxfTFJVXFxfR0VOLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiAyNjI1IGFuZCA1ODYwLiBTbywgZGVmaW5pdGVseSwgKkNPTkZJR1xcX0xSVVxcX0dFTiogaXMgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IGlzIHRoYXQgKmFsbCo/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzIGZ1bmN0aW9uPyBJIHNob3VsZCBwcm9iYWJseSBpbnZlc3RpZ2F0ZSAqc2MtXHUwMDNlcHJvYWN0aXZlKiBuZXh0OyBpcyB0aGF0IHRpZWQgdG8gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gTGV0IG1lIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjU1Ljg4OTA0ODI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ0OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9hY3RpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy05NS1cXG5tbS92bXNjYW4uYzo5NjpcXHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXFxubW0vdm1zY2FuLmM6OTc6XFx0aW50ICpwcm9hY3RpdmVfc3dhcHBpbmVzcztcXG5tbS92bXNjYW4uYy05OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyMS1cXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbnZva2VkIGJ5IHVzZXJzcGFjZSAqL1xcbm1tL3Ztc2Nhbi5jOjEyMjpcXHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XFxubW0vdm1zY2FuLmMtMTIzLVxcbi0tXFxubW0vdm1zY2FuLmM9MjQyPXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTI0My17XFxubW0vdm1zY2FuLmM6MjQ0OlxcdGlmIChzYy1cXHUwMDNlcHJvYWN0aXZlIFxcdTAwMjZcXHUwMDI2IHNjLVxcdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYzoyNDU6XFx0XFx0cmV0dXJuICpzYy1cXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3M7XFxubW0vdm1zY2FuLmMtMjQ2LVxcdHJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg2PXN0YXRpYyB2b2lkIGZsdXNoX3JlY2xhaW1fc3RhdGUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0zMDItXFx0ICogZnJvbSB0aGUgdGFyZ2V0IG1lbWNnOyBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IHJldHJpZXMgZHVyaW5nIG1lbWNnXFxubW0vdm1zY2FuLmM6MzAzOlxcdCAqIGNoYXJnaW5nIGFuZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBwcm9hY3RpdmUgcmVjbGFpbS5cXG5tbS92bXNjYW4uYy0zMDQtXFx0ICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0ND1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NTMtXFx0XFx0cmV0dXJuIFBHU1RFQUxfS0hVR0VQQUdFRCAtIFBHU1RFQUxfS1NXQVBEO1xcbm1tL3Ztc2Nhbi5jOjQ1NDpcXHRpZiAoc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5tbS92bXNjYW4uYy00NTUtXFx0XFx0cmV0dXJuIFBHU1RFQUxfUFJPQUNUSVZFIC0gUEdTVEVBTF9LU1dBUEQ7XFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE1NjgtXFx0XFx0ICogbWxvY2tlZCBvciB0b28gaG90IHRvIHJlY2xhaW0uIFdlIGNhbiBkaXNhYmxlIHJlY2xhaW1cXG5tbS92bXNjYW4uYzoxNTY5OlxcdFxcdCAqIGZyb20gdG9wIHRpZXIgbm9kZXMgaW4gcHJvYWN0aXZlIHJlY2xhaW0gdGhvdWdoIGFzIHRoYXQgaXNcXG5tbS92bXNjYW4uYy0xNTcwLVxcdFxcdCAqIG5vdCByZWFsIG1lbW9yeSBwcmVzc3VyZS5cXG5tbS92bXNjYW4uYy0xNTcxLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjE1NzI6XFx0XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKSB7XFxubW0vdm1zY2FuLmMtMTU3My1cXHRcXHRcXHRkb19kZW1vdGVfcGFzcyA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9MjQ5Mz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjUyMy1cXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbm1tL3Ztc2Nhbi5jOjI1MjQ6XFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYy0yNTI1LVxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MzEtXFxubW0vdm1zY2FuLmM6NDkzMjpcXHRpZiAodW5saWtlbHkoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXFxubW0vdm1zY2FuLmMtNDkzMy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDMwLVxcbm1tL3Ztc2Nhbi5jOjUwMzE6XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTUwMzItXFx0XFx0dm1wcmVzc3VyZShzYy1cXHUwMDNlZ2ZwX21hc2ssIHNjLVxcdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxcbi0tXFxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjgtXFxubW0vdm1zY2FuLmM6NTEyOTpcXHRzZXRfbW1fd2FsayhOVUxMLCBzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYy01MTMwLVxcbi0tXFxubW0vdm1zY2FuLmM9NTEzOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE1Ny1cXG5tbS92bXNjYW4uYzo1MTU4OlxcdHNldF9tbV93YWxrKHBnZGF0LCBzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYy01MTU5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTY2MT1zdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NzQtXFx0XFx0LmdmcF9tYXNrID0gR0ZQX0tFUk5FTCxcXG5tbS92bXNjYW4uYzo1Njc1OlxcdFxcdC5wcm9hY3RpdmUgPSB0cnVlLFxcbm1tL3Ztc2Nhbi5jLTU2NzYtXFx0fTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNzA9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEzNS1cXHRcXHQvKiBSZWNvcmQgdGhlIGdyb3VwJ3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXFxubW0vdm1zY2FuLmM6NjEzNjpcXHRcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpXFxubW0vdm1zY2FuLmMtNjEzNy1cXHRcXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXFxuLS1cXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE4MC1cXHQvKiBSZWNvcmQgdGhlIHN1YnRyZWUncyByZWNsYWltIGVmZmljaWVuY3kgKi9cXG5tbS92bXNjYW4uYzo2MTgxOlxcdGlmICghc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5tbS92bXNjYW4uYy02MTgyLVxcdFxcdHZtcHJlc3N1cmUoc2MtXFx1MDAzZWdmcF9tYXNrLCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgdHJ1ZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0NTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0NzAtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjY0NzE6XFx0XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTY0NzItXFx0XFx0XFx0dm1wcmVzc3VyZV9wcmlvKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxcbi0tXFxubW0vdm1zY2FuLmM9Njc2NT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3NC1cXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXFxubW0vdm1zY2FuLmM6Njc3NTpcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzLFxcbm1tL3Ztc2Nhbi5jLTY3NzYtXFx0XFx0LmdmcF9tYXNrID0gKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxcbi0tXFxubW0vdm1zY2FuLmMtNjc4My1cXHRcXHQubWF5X3N3YXAgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX01BWV9TV0FQKSxcXG5tbS92bXNjYW4uYzo2Nzg0OlxcdFxcdC5wcm9hY3RpdmUgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX1BST0FDVElWRSksXFxubW0vdm1zY2FuLmMtNjc4NS1cXHR9O1xcbi0tXFxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzkzNy1cXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxubW0vdm1zY2FuLmM6NzkzODpcXHRcXHRcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFxcdTAwMjZzd2FwcGluZXNzLFxcbm1tL3Ztc2Nhbi5jLTc5MzktXFx0XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbi0tXFxubW0vdm1zY2FuLmMtNzk0My1cXHRcXHRcXHRcXHQubWF5X3N3YXAgPSAxLFxcbm1tL3Ztc2Nhbi5jOjc5NDQ6XFx0XFx0XFx0XFx0LnByb2FjdGl2ZSA9IDEsXFxubW0vdm1zY2FuLmMtNzk0NS1cXHRcXHRcXHR9O1xcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTo1NS45ODY1MDM2MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTYwMjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQcm9hY3RpdmUgUmVjbGFpbSBUcmlnZ2VycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHBvaW50cyB3aGVyZSBgc2MtXHUwMDNlcHJvYWN0aXZlYCBpcyBzZXQuIEl0IGxvb2tzIGxpa2UgaXQncyBoYXBwZW5pbmcgaW4gYGxydV9nZW5fc2VxX3dyaXRlYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBSaWdodCBhd2F5LCB0aGUgY29ubmVjdGlvbnMgYXJlIHN0YXJ0aW5nIHRvIGZvcm0uXG5cbmB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN5c2ZzIGludGVyZmFjZSBoZXJlLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbi4gQWxzbywgdGhlIGluY2x1c2lvbiBvZiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agc3VnZ2VzdHMgbWVtY2cgcmVjbGFpbSBpcyBpbnZvbHZlZC4gQW5kIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgcHJvYmFibHkgdGllZCB0byBNR0xSVSdzIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlLCBiYXNlZCBvbiB0aGUgY29udGV4dC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGNhbGxlZCBmcm9tIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAuIElzIGB0cnlfdG9fc2hyaW5rX2xydXZlY2Agb25seSB1c2VkIHdpdGggYENPTkZJR19MUlVfR0VOYD8gSSBuZWVkIHRvIGNoZWNrLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgWWVzLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzIGluZGVlZCB3cmFwcGVkIHdpdGggYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAuIEknbSBnb2luZyB0byBsb29rIGF0IGxpbmUgbnVtYmVycywgNDk2Mi4gVGhhdCdzIGJldHdlZW4gMjYyNSBhbmQgNTg2MCwgd2hpY2ggbWVhbnMgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGVzc2VudGlhbCBoZXJlLCB0aGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM/IEkgd2FudCB0byBsb29rIGJhY2sgYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFuZCBgcmVjbGFpbV9zdG9yZWAsIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjAxLjA5NjEwOTM4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTUwOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY2xhaW1fc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODAwOT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XFxuLS1cXG5tbS92bXNjYW4uYy04MDExLSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5tbS92bXNjYW4uYzo4MDEyOnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbm1tL3Ztc2Nhbi5jLTgwMTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MDEuMjUzMDY2MjU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDk4NDk0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgYHJlY2xhaW1fc3RvcmVgKipcblxuUmlnaHQsIHNvIGByZWNsYWltX3N0b3JlYCwgdGhhdCdzIHBhcnQgb2YgdGhlIHdob2xlIHN5c3RlbSdzIG1lbW9yeSByZWNsYW1hdGlvbiBwcm9jZXNzLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgY2xlYXJseSBoYW5naW5nIG91dCB1bmRlciBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYC4gVGhhdCBtYWtlcyBzZW5zZSAtIFN5c0ZTIGlzIHRoZSBjb250cm9sIHBsYW5lLCB0aGUgd2F5IHdlIGV4cG9zZSB0aGUgbWVtb3J5IGNvbnRyb2wgaW5mb3JtYXRpb24sIGFuZCBOVU1BLCB3ZWxsLCB0aGF0J3MgY3JpdGljYWwgZm9yIGhvdyB3ZSBtYW5hZ2UgbWVtb3J5IGFjcm9zcyB0aGUgZGlmZmVyZW50IG5vZGVzLiBJJ2QgbmVlZCB0byBnbyBsb29rIGludG8gdGhlIGNvZGUsIGJ1dCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQgaXMgdGhlIGZlYXR1cmUgc3RvcmUgdXNlZCBieSBTeXNGUy5cblxuQnV0IGhvbGQgb24sIHRoZXJlJ3MgYW5vdGhlciBwb2ludC4gVGhpcyBgc2MtXHUwMDNlcHJvYWN0aXZlYCBmbGFnLi4uIHRoYXQncyBhbHNvIGJlaW5nIHNldCB3aXRoaW4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBOb3csIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4uLiBhaCwgdGhhdCdzIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IG1lYW5zIHRoaXMgYHJlY2xhaW1fc3RvcmVgIGhhcyBhIGJpdCBvZiBhbiBpbnRlcmVzdGluZyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY2dyb3VwIG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4gU28sIGl0J3Mgbm90IGp1c3QgYSBzdGFuZGFsb25lIFN5c0ZTL05VTUEgZmVhdHVyZSwgaXQncyBnb3QgYSBkaXJlY3QgbGluayB0byB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHByb2Nlc3Mgd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEkgaGF2ZSB0byB0aGluayBhYm91dCBob3cgdGhpcyBwcm9hY3RpdmUgZmxhZyBpbnRlcnBsYXlzIHdpdGggdGhlIG90aGVyIG1lY2hhbmlzbXMuIExvb2tzIGxpa2UgaXQncyB0ZWxsaW5nIHRoZSBzeXN0ZW0gdG8gYmUgbW9yZSBhZ2dyZXNzaXZlIGFib3V0IGZyZWVpbmcgbWVtb3J5IHBhZ2VzIG9uIGEgcGVyLWNncm91cCBiYXNpcywgSSdkIGJldC4gSSBkZWZpbml0ZWx5IG5lZWQgdG8gZGlnIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRyYWNlIGhvdyB0aGlzIGZsYWcgaXMgdXNlZCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDowNS4xNjI5MTc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc0ODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTQ4MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTUyMS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTUyMjpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE1MjMtXFx0XFx0XFx0XFx0bWVtc3cgPyAwIDogTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNTQwPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTU1My1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTU1NDpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE1NTUtXFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjM0My1cXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjIzNDQ6XFx0XFx0bnJfcmVjbGFpbWVkICs9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yMzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1OTU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1NC1cXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjI2NTU6XFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTI2NTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ3Njg9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4MDItXFxubW0vbWVtY29udHJvbC5jOjQ4MDM6XFx0XFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMgLSBoaWdoLFxcbm1tL21lbWNvbnRyb2wuYy00ODA0LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MjA9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg1NC1cXHRcXHRpZiAobnJfcmVjbGFpbXMpIHtcXG5tbS9tZW1jb250cm9sLmM6NDg1NTpcXHRcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gbWF4LFxcbm1tL21lbWNvbnRyb2wuYy00ODU2LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbi0tXFxubW0vdm1zY2FuLmM9NjcyNT11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc2NC1cXG5tbS92bXNjYW4uYzo2NzY1OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc2Ni1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwNS0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjY4MDY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODA3LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03ODY5PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MjktXFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG5tbS92bXNjYW4uYzo3OTMwOlxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxubW0vdm1zY2FuLmMtNzkzMS1cXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjA1LjIyODY3MjU0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ0MDc0OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgTWVtb3J5IFJlY2xhbWF0aW9uIFRyaWdnZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20gd29ya3MsIGFuZCBJJ3ZlIHRyYWNlZCBhIGNhbGwgcGF0aCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSBzZWUgdGhhdCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgZ2V0dGluZyBpbnZva2VkIHdpdGggYE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFYCBhcyBhIGZsYWcuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGZyZWVpbmcgcGFnZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAsIGFuZCB0aGUgYFBST0FDVElWRWAgZmxhZyBzaWduYWxzIHRoYXQgdGhlIHJlY2xhaW0gaXMgaW5pdGlhdGVkIHByb2FjdGl2ZWx5LCByYXRoZXIgdGhhbiByZWFjdGl2ZWx5IHRvIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG5cbk5vdywgd2hlcmUgaXMgdGhpcyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgY2FsbCBjb21pbmcgZnJvbSBpbiB0aGUgZmlyc3QgcGxhY2U/IEFoLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoaXMgc2VlbXMgbG9naWNhbCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlIHRvIGFnZ3Jlc3NpdmVseSBmcmVlIG1lbW9yeS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0LCBoYW5nIG9uLCB0aGlzIGlzbid0IHRoZSBvbmx5IHBsYWNlIGl0J3MgdHJpZ2dlcmVkLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpdHNlbGYsIHdoaWNoIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IG1lYW5zIHRoaXMgcHJvYWN0aXZlIHJlY2xhbWF0aW9uIGlzbid0IGV4Y2x1c2l2ZWx5IGEgdXNlci10cmlnZ2VyZWQgZnVuY3Rpb24sIGJ1dCBpcyBhbHNvIHBhcnQgb2YgdGhlIG1vcmUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIFRoaXMgbWVhbnMgaXQgbWlnaHQgYmUgaW50ZWdyYXRlZCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyB0byB0cnkgYW5kIGZyZWUgdXAgbWVtb3J5IGJhc2VkIG9uIHNvbWUgaW50ZXJuYWwgdHJpZ2dlcnMgYW5kIHRocmVzaG9sZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwYXRocyBpbnRlcmFjdCBhbmQgd2hldGhlciB0aGV5J3JlIGJlaGF2aW5nIGFzIGludGVuZGVkLiBUaGVyZSdzIHByb2JhYmx5IG92ZXJsYXAsIGJ1dCB0aGF0IGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9uIGhvdyBtZW1vcnkgaXMgY29udHJvbGxlZCBhbmQgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDowOS4yNzI3NTA0MDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTg3MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NjMxPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjYzMjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC02MzMtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTg5PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5OTQtXFxubW0vbWVtY29udHJvbC5jOjQ5OTU6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNDk5Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDowOS4zMzM5NDMwNDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5ODU0MzcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcm9hY3RpdmUgUmVjbGFpbSBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyB0aGUgY2dyb3VwIHYyIGludGVyZmFjZSBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgZmVhdHVyZSDigJMgb3IgYHJlY2xhaW1gIGluIHRoZSBzeXNmcyBub2RlIGRpcmVjdG9yeS4gVGhpcyBcInByb2FjdGl2ZSByZWNsYWltXCIgZnVuY3Rpb25hbGl0eSBpcyB0cmlnZ2VyZWQgd2hlbiBhIHVzZXIgd3JpdGVzIHRvIHRoYXQgY29udHJvbCBmaWxlLiBJIHNlZSB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBjaGVjayB0aGF0IHdpbGwgYWJvcnQgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBwcm9jZXNzIGlmIHRoZSB0YXNrIGluaXRpYXRpbmcgdGhlIHJlY2xhaW0gaGFzIGEgc2lnbmFsIHBlbmRpbmcuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIHBhdGggdGhhdCdzIGJvdGggZnVuY3Rpb25hbCBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2Ug4oCTIHVzZXJzIGNhbiBpbnRlcmFjdCB3aXRoIGl0IGJ5IHdyaXRpbmcgdG8gdGhlIGNvbnRyb2wgZmlsZXMgYW5kIHNlbmRpbmcgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MsIHRodXMgbGVhZGluZyBpdCB0byBwcm9hY3RpdmUgcmVjbGFpbS4gVGhlIHNpZ25hbCBwYXRoIG1ha2VzIGl0IHJpcGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBmdW5jdGlvbmFsIHBhdGggaXQgaXMgd29ydGggYSB0ZXN0LlxuXG5NeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX21hbnlgIHN5bWJvbHMuIFdhaXQgYSBzZWNvbmQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKmFsc28qIGNhbGxlZCBmcm9tIGBzaHJpbmtfbWFueWAsIHdoaWNoIGlzIGl0c2VsZiB1c2VkIGluIGEgZmVhdHVyZSByZWxhdGVkIHRvIGBDT05GSUdfTFJVX0dFTmAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBjb25maXJtIHRoYXQgYHNocmlua19tYW55YCBpcyBhY3R1YWxseSB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzU4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjE0LjEzMjQ4OTExNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNDA4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX21hbnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDctXFxubW0vdm1zY2FuLmM6NTA0ODpzdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MDQ5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjctXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjUxNjg6XFx0XFx0c2hyaW5rX21hbnkocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy01MTY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDoxNC4xODk3MzI4MDRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMzA4ODk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSd2ZSBwaW5wb2ludGVkIGBzaHJpbmtfbWFueWAsIGFuZCBpdCdzIGRlZmluaXRlbHkgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGluZSByYW5nZSwgY29uZmlybWluZyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZXNzZW50aWFsIGhlcmUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsdXJraW5nIGFyb3VuZCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IHRoYXQgYENPTkZJR19NRU1DR2AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGNncm91cCBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uYWxpdHkgaW4gYG1tL21lbWNvbnRyb2wuY2AgYWN0dWFsbHkgbGl2ZXMgdW5kZXIgdGhhdCBgQ09ORklHX01FTUNHYCBndWFyZC4gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgbW0vbWVtY29udHJvbC5jYCBnZXRzIGNvbXBpbGVkIG9ubHkgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoIGFuZCB2ZXJpZnksIEkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDkyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjE3LjYxMjgyNDEzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMjA4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MTcuNjgxMDUwODQ1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDk3NDU1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBmb3IgYG1lbWNvbnRyb2wub2AgdG8gZnVuY3Rpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBsZXQncyB0aGluayBhYm91dCBgcmVjbGFpbV9zdG9yZWAuIEkga25vdyB0aGF0J3MgYW4gYWx0ZXJuYXRpdmUgbWV0aG9kIHRvIGluaXRpYXRlIHByb2FjdGl2ZSByZWNsYWltLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25maWd1cmluZyBldmVyeXRoaW5nIGNvcnJlY3RseS5cblxuSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgIGluIHJlbGF0aW9uIHRvIGByZWNsYWltX3N0b3JlYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCwganVzdCB0byBiZSB0aG9yb3VnaC4gQnV0IHRoZSBjb3JlIGRlcGVuZGVuY3kgSSdtIHJlYWxseSBjb25jZXJuZWQgd2l0aCBoZXJlIGlzIGBDT05GSUdfTFJVX0dFTmAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gb25lIGRyaXZpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUga2VybmVsIG9yIGlmIGl0IHJlcXVpcmVzIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlybSB0aGF0LiBTaW5jZSBpdOKAmXMgYSBrZXJuZWwgY29uZmlnIGZsYWcsIEkgbmVlZCB0byBjaGVjayBgbW0vS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MjkuMTc4NTA5MDc0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgzOTg2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MDY9ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbi0tXFxubW0vS2NvbmZpZy0xNDA4LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDEwLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTctXFxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjMtXFxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDI1LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQzMi1cXG5tbS9LY29uZmlnOjE0MzM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDM0LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MjkuMzc2OTEzMDIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjgzOTY4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBMUlVfR0VOYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBCdXQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgYExSVV9HRU5fRU5BQkxFRGAgYWxzbyBwbGF5cyBhIHJvbGUgaW4gZW5hYmxpbmcgdGhpcyBmZWF0dXJlIGJ5IGRlZmF1bHQsIG9yIGlmIHJ1bnRpbWUgY29udHJvbCB2aWEgc3lzZnMgaXMgdGhlIG9ubHkgd2F5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgaW1wYWN0IG9mIGp1c3QgYExSVV9HRU5gLlxuXG5Fc3NlbnRpYWxseSwgaWYgYExSVV9HRU5gIGlzIGVuYWJsZWQsIHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJZiBgTFJVX0dFTl9FTkFCTEVEYCBpc24ndCBzZXQsIHRoZW4gTUdMUlUgbWlnaHQgYmUgZGlzYWJsZWQgYXQgcnVudGltZSBieSBkZWZhdWx0LlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGluaXRfbHJ1X2dlbmAgZnVuY3Rpb24gd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQncyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozMi45NDUzMTE5MDFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODc2ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfbHJ1X2dlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01ODE0PXZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NDItXFxubW0vdm1zY2FuLmM6NTg0MzpzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG5tbS92bXNjYW4uYy01ODQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NTctfTtcXG5tbS92bXNjYW4uYzo1ODU4OmxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG5tbS92bXNjYW4uYy01ODU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozMy4wMTkxOTE5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk5NzEwOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBpbml0X2xydV9nZW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGluaXRfbHJ1X2dlbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgTFJVIGNhY2hlIGNvbnRleHQuIEknbSBhc3N1bWluZyBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBjcml0aWNhbCB0byB0aGUgTFJVIGV2aWN0aW9uIHBvbGljeS4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgZG91Ymx5LWxpbmtlZCBsaXN0IGZvciByZWNlbmN5IHRyYWNraW5nIGFuZCB0aGUgaGFzaCB0YWJsZSAobGlrZWx5IGEgZGljdGlvbmFyeSBvciBlcXVpdmFsZW50IGluIHdoYXRldmVyIGxhbmd1YWdlIHRoaXMgaXMpIGZvciBmYXN0IGtleSBsb29rdXBzLlxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IGNvbnNpZGVyaW5nIGVkZ2UgY2FzZXMuIERvZXMgaXQgaGFuZGxlIGVtcHR5IGNhY2hlcyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgdGhpcyBpcyBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IGR1cmluZyBpbml0aWFsaXphdGlvbj8gV2hhdCBhYm91dCBwcmUtYWxsb2NhdGluZyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIGlzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgYXMgbmVlZGVkLCB3aGljaCB3b3VsZCBpbXBhY3QgcGVyZm9ybWFuY2U/IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY2FjaGUgc2l6ZTsgaXMgaXQgYSBmaXhlZCBzaXplIG9yIGR5bmFtaWNhbGx5IHJlc2l6YWJsZT8gQW5kIGhvdyBkb2VzIGl0IGhhbmRsZSB0aGUgJ2hvdCBzdGFydCcgcHJvYmxlbSAtIHdoZW4geW91IGluaXRpYWxpemUgYW4gTFJVLCBpcyBpdCAnd2FybScgb3IgZG9lcyBpdCBhc3N1bWUgZXZlcnl0aGluZyBzdGFydHMgd2l0aCBlcXVhbCByZWNlbmN5P1xuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaWYgdGhlIGluaXRpYWwgY2FjaGUgc2l6ZSBpcyBzdWJzdGFudGlhbC4gQmlnIE8gbm90YXRpb24gd2lsbCB0ZWxsIHRoZSB0YWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGZvciBhbnkgaGludHMsIGNvbW1lbnRzLCBvciB2YXJpYWJsZSBuYW1lcyB0aGF0IHJldmVhbCB3aGF0IGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgY29uY3VycmVudCBwcm9ncmFtbWluZyBwcmltaXRpdmVzIGFyZSBhdCBwbGF5LiBCYXNpY2FsbHksIGFtIEkgZ29pbmcgdG8gc2VlIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zLCBvciBzb21ldGhpbmcgbW9yZSBlbGVnYW50P1xuXG5GaW5hbGx5LCBteSBleHBlcnQgZXllIGxvb2tzIGZvciBhbnkgcG90ZW50aWFsIGRlc2lnbiBmbGF3cyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgTFJVLCBzbyBJIHdhbnQgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCB0aGUgYm90dGxlbmVjay4gRG9lcyB0aGUgb3ZlcmFsbCBkZXNpZ24gc2VlbSB3ZWxsLXN0cnVjdHVyZWQsIG9yIGFyZSB0aGVyZSBhbnkgc2lnbnMgb2YgcHJlbWF0dXJlIG9wdGltaXphdGlvbiBvciwgd29yc2UsIHBvb3JseS1jb25jZWl2ZWQgZGVzaWduIGRlY2lzaW9ucz8gSSB3aWxsIG1ha2UgbXkgcmVjb21tZW5kYXRpb25zIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc4NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjM2LjkxODkwNTA2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTg0MDpcXHRcXG41ODQxOlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG41ODQyOlxcdFxcbjU4NDM6XFx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuNTg0NDpcXHR7XFxuNTg0NTpcXHRcXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG41ODQ2OlxcdFxcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXFx1MDAzYz0gTUFYX05SX0dFTlMpO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbjU4NDk6XFx0XFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG41ODUwOlxcdFxcbjU4NTE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxuNTg1MjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxuNTg1MzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNTg1NDpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNTg1NTpcXHRcXG41ODU2OlxcdFxcdHJldHVybiAwO1xcbjU4NTc6XFx0fTtcXG41ODU4OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG41ODU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozNi45MTkxODcwNzZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMDQyMDIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gYExSVV9HRU5fRU5BQkxFRGAgYW5kIGBscnVfZ2VuX2NhcHNgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHkuIEl0IHNlZW1zIGxpa2UgYExSVV9HRU5fRU5BQkxFRGAgaXMgdGhlIGNvbnRyb2wgc3dpdGNoIGZvciBob3cgd2UgY29uZmlndXJlIGBscnVfZ2VuX2NhcHNgLiBJJ3ZlIGdvdCB0byBjb25maXJtIHRoaXMgaW50ZXJhY3Rpb24uIExldCdzIG5vdCBqdXN0IGFzc3VtZTsgYSBxdWljayBjaGVjayBvZiBob3cgYGxydV9nZW5fY2Fwc2AgaXMgZGVmaW5lZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGF0IGVuYWJsZSBmbGFnIHNob3VsZCBjbGFyaWZ5IHRoaW5ncyBpbW1lZGlhdGVseS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIGNvZGUgd2hlcmUgdGhvc2UgYXJlIGRlZmluZWQgdG8gdmVyaWZ5IHRoZSBleGFjdCByZWxhdGlvbnNoaXAuIFRoaXMgaXMgaW1wb3J0YW50IGJlZm9yZSBJIGNhbiBtb3ZlIGZvcndhcmQgY29uZmlkZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozOS43Mjk2MDk1NDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjYwMTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYy0yNjI4LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmM6MjYyOTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYzoyNjMwOiNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI2MzEtI2Vsc2VcXG5tbS92bXNjYW4uYzoyNjMyOkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYzoyNjMzOiNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjYzNC0jZW5kaWZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyNjg9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI4NC1cXHRpZiAoZW5hYmxlZClcXG5tbS92bXNjYW4uYzo1Mjg1OlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG5tbS92bXNjYW4uYy01Mjg2LVxcdGVsc2VcXG5tbS92bXNjYW4uYzo1Mjg3OlxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxubW0vdm1zY2FuLmMtNTI4OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUzNjY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTM4NC1cXHRcXHRlbHNlIGlmIChlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jOjUzODU6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxubW0vdm1zY2FuLmMtNTM4Ni1cXHRcXHRlbHNlXFxubW0vdm1zY2FuLmM6NTM4NzpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxubW0vdm1zY2FuLmMtNTM4OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjM5Ljg1MjIxNjI3NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUxMzc3OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVHJhaW4gb2YgVGhvdWdodCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGxpa2Ugc2V0dGluZyBgTFJVX0dFTl9FTkFCTEVEYCBhdXRvbWF0aWNhbGx5IHR1cm5zIHRoZSB3aG9sZSBmZWF0dXJlIG9uLCB3aGljaCBpcyBhIGNvbW1vbiBwcmFjdGljZS4gSG1tLCBwZXJoYXBzIGl0IHdvdWxkIGJlIGNsZWFuZXIsIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIGNsYXJpdHksIHRvIGFkZCBib3RoIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBzZXQuIFRoYXQgd291bGQgbWFrZSB0aGUgZGVwZW5kZW5jaWVzIGV4cGxpY2l0IGFuZCBlYXNpZXIgdG8gbWFuYWdlIGxvbmctdGVybS5cblxuTm93LCBJJ20gc3BvdHRpbmcgYHNob3VsZF9hYm9ydF9zY2FuYCBiZWluZyB1dGlsaXplZCBpbiBgc2hyaW5rX21hbnlgIHRvbywgd2hpY2ggaXMgYSBwb2ludCBvZiBjb25jZXJuLiBJcyBgc2hyaW5rX21hbnlgIGxpbWl0ZWQgdG8gb25seSBiZWluZyBpbnZva2VkIHdoZW4gdGhlIE1HTFJVIGlzIGFjdGl2ZT8gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIG5vdCBmb3JnZXR0aW5nIHNvbWV0aGluZy4gTGV0J3MgZGVsdmUgaW50byB0aGUgYGxydV9nZW5fc2hyaW5rX25vZGVgIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBwcm9jZXNzIGFuZCBNR0xSVSBlbmFibGVtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDo0NC4yMDM1OTYwNDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzMxNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzgtXFxubW0vdm1zY2FuLmM6NTEzOTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxNDAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTg2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NzEtXFxubW0vdm1zY2FuLmM6NTg3MjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU4NzMte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE0OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTYtXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG5tbS92bXNjYW4uYzo2MTU3OlxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MTU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDo0NC4yNzQzMzIzMDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NjQxNjUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNvbnRleHQgaXMgcHJlc3VtYWJseSBhbGdvcml0aG0gZGVzaWduIG9yIG9wdGltaXphdGlvbjpcblxuKipDaGVja2luZyBgc2hyaW5rX25vZGVgKipcblxuQWxyaWdodCwgKnNocmlua19ub2RlKi4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBpc24ndCBpdD8gSXQncyB0aGUgb25lIHRoYXQgbGlrZWx5IHJlZHVjZXMgdGhlIHNpemUgb3IgY29tcGxleGl0eSBvZiBhIG5vZGUgaW4gd2hhdGV2ZXIgZGF0YSBzdHJ1Y3R1cmUgSSdtIHdvcmtpbmcgd2l0aC4gQ291bGQgYmUgYSB0cmVlLCBhIGdyYXBoLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4uLiBkb2Vzbid0IG1hdHRlciwgdGhlIG5hbWUgc2F5cyBpdCdzIGFib3V0IG9wdGltaXphdGlvbiBvciBtZW1vcnkgbWFuYWdlbWVudCBhdCBhIG5vZGUgbGV2ZWwuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IG9uOlxuXG4qICAgKipJbXBsZW1lbnRhdGlvbjoqKiBIb3cgZG9lcyBpdCAqYWN0dWFsbHkqIHdvcms/IFdoYXQncyB0aGUgY29yZSBsb2dpYz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVtb3ZpbmcgZWxlbWVudHMsIG1lcmdpbmcgc3ViLW5vZGVzLCByZWR1Y2luZyB0aGUgZGF0YSBzdG9yZWQgYXQgdGhlIG5vZGUsIG9yIHNvbWV0aGluZyBtb3JlIGV4b3RpYyBsaWtlIGxhenktZGVjb25zdHJ1Y3Rpb24/XG4qICAgKipTaWRlIEVmZmVjdHM6KiogV2hhdCBlbHNlIGRvZXMgaXQgdG91Y2g/IERvZXMgaXQgcG90ZW50aWFsbHkgaW52YWxpZGF0ZSBpdGVyYXRvcnMsIHRyaWdnZXIgcmViYWxhbmNpbmcgaWYgaXQncyBhIGJhbGFuY2VkIHRyZWUsIG9yIHJlcXVpcmUgdXBkYXRlcyB0byBwYXJlbnQvY2hpbGQgcG9pbnRlcnM/IFRob3NlIGhpZGRlbiBpbnRlcmFjdGlvbnMgYXJlIHVzdWFsbHkgd2hlcmUgdGhlIGJ1Z3MgbGllLiBHb3R0YSBleGFtaW5lICphbGwqIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4qICAgKipQZXJmb3JtYW5jZToqKiBXaGF0J3MgdGhlIHRpbWUgYW5kIHNwYWNlIGNvbXBsZXhpdHk/IElzIGl0IE8oMSksIE8obG9nIG4pLCBvciB3b3JzZT8gTW9yZSBpbXBvcnRhbnRseSwgaG93ICpvZnRlbiogaXMgaXQgY2FsbGVkPyBBIHNsb3csIGluZnJlcXVlbnRseS11c2VkIGZ1bmN0aW9uIGlzIG9uZSB0aGluZywgYnV0IGEgYm90dGxlbmVjayBpbiBhIGNyaXRpY2FsIHBhdGggaXMgYSBkaXNhc3Rlci4gSWYgdGhpcyBpcyBpbnZva2VkIGFzIHBhcnQgb2Ygc29tZSBvdGhlciBmdW5jdGlvbiwgSSBuZWVkIHRvIGtub3cgdGhlIGVmZmVjdHMgb24gdGhvc2UuXG4qICAgKipVc2FnZSBDb250ZXh0OioqIFdoYXQncyB0aGUgYmlnZ2VyIHBpY3R1cmU/ICpXaHkqIGFyZSB3ZSBzaHJpbmtpbmcgbm9kZXM/IElzIGl0IHRvIHByZXZlbnQgYW4gb3ZlcmZsb3c/IE9wdGltaXplIG1lbW9yeSB1c2FnZT8gT3IgZW5oYW5jZSBwZXJmb3JtYW5jZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgKmdvYWwqIHRvIGV2YWx1YXRlIGlmIGBzaHJpbmtfbm9kZWAgaXMgZG9pbmcgaXRzIGpvYiBlZmZlY3RpdmVseS4gQXJlIHdlIG1ha2luZyB0aGUgc3RydWN0dXJlICdzbWFydGVyJyBieSByZW9yZ2FuaXppbmcgdGhlIG5vZGVzPyBPciBwZXJoYXBzIHJlbW92aW5nIGRhdGEgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3M/XG4qICAgKipQcmUgYW5kIFBvc3QgQ29uZGl0aW9uczoqKiBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzPyBEb2VzIGl0IGhhbmRsZSBlZGdlIGNhc2VzPyBDYW4gaXQgZGVhbCB3aXRoIGVtcHR5IG9yIG51bGwgbm9kZXM/IERvZXMgaXQgbWFpbnRhaW4gaW52YXJpYW50cyBvZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZT8gVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBkb2N1bWVudGVkIGlmIEkgYW0gdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cbkluIHNob3J0LCBcIkxldCdzIGNoZWNrIGBzaHJpbmtfbm9kZWBcIiBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgZGVlcCBkaXZlLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY29kZSwgdHJhY2UgdGhyb3VnaCBpdHMgZXhlY3V0aW9uIHdpdGggdmFyaW91cyBpbnB1dHMsIGFuZCBwcm9iYWJseSBydW4gc29tZSB0ZXN0IGNhc2VzIHRvIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHdoYXQgSSB0aGluayBpdCdzIGRvaW5nLCBhbmQgdGhhdCBpdCBpc24ndCBnb2luZyB0byBibG93IHVwIHRoZSB3aG9sZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgbXVjaCB3b3JrIGlzIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6NDkuMDIwNzUxOTY2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MTQ1OlxcdFxcdFxcdH1cXG42MTQ2OlxcdFxcdH0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcih0YXJnZXRfbWVtY2csIG1lbWNnLCBwYXJ0aWFsKSkpO1xcbjYxNDc6XFx0fVxcbjYxNDg6XFx0XFxuNjE0OTpcXHRzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG42MTUwOlxcdHtcXG42MTUxOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBucl9zY2FubmVkLCBucl9ub2RlX3JlY2xhaW1lZDtcXG42MTUyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XFxuNjE1MzpcXHRcXHRib29sIHJlY2xhaW1hYmxlID0gZmFsc2U7XFxuNjE1NDpcXHRcXG42MTU1OlxcdFxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xcbjYxNTY6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG42MTU3OlxcdFxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG42MTU4OlxcdFxcbjYxNTk6XFx0XFx0XFx0aWYgKCFscnVfZ2VuX3N3aXRjaGluZygpKVxcbjYxNjA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjYxNjE6XFx0XFxuNjE2MjpcXHRcXHR9XFxuNjE2MzpcXHRcXG42MTY0OlxcdFxcdHRhcmdldF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHBnZGF0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6NDkuMDIxMDIyNDI2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDc3MjM5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTFJVIEdlbmVyYXRpb24gYW5kIFByb2FjdGl2ZSBSZWNsYWltKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBscnVfZ2VuX3Nocmlua19ub2RlYCBnZXRzIGludm9rZWQuIEl0J3MgdHJpZ2dlcmVkIG9ubHkgaWYgYGxydV9nZW5fZW5hYmxlZCgpYCByZXR1cm5zIHRydWUuIERpdmluZyBkZWVwZXIsIGBscnVfZ2VuX2VuYWJsZWQoKWAgaGluZ2VzIG9uIGNoZWNraW5nIHRoZSBgbHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV1gIGNhcGFiaWxpdHkuIENsZWFybHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBmbGFncyBhcmUgbm9uLW5lZ290aWFibGUgcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRob3NlLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBwZXJ0aW5lbnQ/IE15IG1pbmQgd2VudCBzdHJhaWdodCB0byBgQ09ORklHX01FTUNHYC4gVGhlIGNvZGUgdGVsbHMgbWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYWxzbyBjcml0aWNhbCBoZXJlLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gYW5kIGl0J3MgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYW5kIHRoYXQgY29kZSByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gRnVydGhlcm1vcmUsIEkgc2VlIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggcmVxdWlyZXMgYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAuIFNvLCBgQ09ORklHX01FTUNHYCBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBpbmNsdXNpb24uIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IG1vcmUgY2xhcml0eSBieSBjaGVja2luZyB0aGUgYG1tL0tjb25maWdgIGZpbGUgYW5kIHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGRldGFpbHMgYmVoaW5kIGBNRU1DR2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTU3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6NTMuMTY4NzQ5NTU4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc1OTU3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjUzLjI1MDUxNzQ4N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM1NDM4MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQuIEl0IGxvb2tzIGxpa2UgYE1FTUNHYCBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiBgaW5pdC9LY29uZmlnYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlLi4uIHdlbGwsIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gTG9jYXRpbmcgaXQgdGhlcmUgbGlrZWx5IG1lYW5zIGl0J3MgZnVuZGFtZW50YWwgdG8gdGhlIHN5c3RlbSdzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBvciBwZXJoYXBzIHRpZWQgdG8gYSBjb3JlIGNvbXBvbmVudCB0aGF0J3MgYnJvdWdodCB1cCB2ZXJ5IGVhcmx5LiBJJ20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCBtZW50YWxseSB0cmFjaW5nIGhvdyB0aGlzIGNvbmZpZyBvcHRpb24gaW1wYWN0cyBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoeSBpdCBtaWdodCBiZSBpbiBpbml0IGFuZCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbml0IGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ3MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjU2LjA4NTk1ODc4N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwODMxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcyLVxcbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc0LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODEtXFxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4My1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA4OC1cXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5MC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5NS1cXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTA5Ny1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDo1Ni4xODEwNDY3NDZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMjU0MjQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGVuYWJsZWQsIGJlY2F1c2UgdGhhdCBzZWVtcyByZWxldmFudC4gSSdtIGNoZWNraW5nIGlmIGBMUlVfR0VOYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBNRU1DR2AsIGJ1dCBpdCBkb2Vzbid0IGFwcGVhciB0by4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgdGhvdWdoLCBpcyBgc2MtXHUwMDNlcHJvYWN0aXZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuXG5cblRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgdGhhdCBpdCBhZGRzIGEgY2hlY2sgZm9yIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAgd2l0aGluIHRoZSBgc2MtXHUwMDNlcHJvYWN0aXZlYCBjb250ZXh0LiBBaGEsIHRoaXMgaXMgZGVmaW5pdGVseSBhYm91dCBwcm9hY3RpdmUgcmVjbGFpbS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBOb3csIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gRGlnZ2luZyBpbnRvIHRoYXQgZnVuY3Rpb24sIEkgc2VlIHR3byBjYWxsIHNpdGVzOlxuXG4xLiAgYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gU28gdGhhdCBzdXBwb3J0cyBteSBpbml0aWFsIGh1bmNoIGFib3V0IG5lZWRpbmcgYE1FTUNHYC4gSXTigJlzIGxpa2VseSBob3cgd2UgbWFrZSBpdCByZWFjaGFibGUgdmlhIGNncm91cCB2Mi5cbjIuICBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhpcyBuZWVkcyBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpY2ggaXMgcmVsZXZhbnQgYnV0IG5vdCB0aGUgbWFpbiBmb2N1cyBoZXJlLlxuXG5TbywgSSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYE1FTUNHYCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYSBkZXBlbmRlbmN5IGZvciByZWFjaGluZyB0aGlzIGNvZGUgdmlhIGNncm91cCB2Mi4gQW5kIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFzIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLlxuXG5XYWl0LCBqdXN0IGEgc2Vjb25kLi4uIGlzIGBzaG91bGRfYWJvcnRfc2NhbmAgKm9ubHkqIGluc2lkZSB0aGUgYENPTkZJR19MUlVfR0VOYCBibG9jaz8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBkZWZpbml0aW9ucyBvZiB0aGF0IGZ1bmN0aW9uIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHNjb3BlIG9mIHRoYXQgbWFjcm8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjAxLjc5MzU5MjAyN1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNTgzMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5MTA9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjYtXFxubW0vdm1zY2FuLmM6NDkyNzpzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xcbi0tXFxubW0vdm1zY2FuLmM9NDk2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk4OS1cXG5tbS92bXNjYW4uYzo0OTkwOlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy00OTkxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTMtXFxubW0vdm1zY2FuLmM6NTA5NDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTA5NS1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MDEuOTc2MTgwMjI0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjcwMjY3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSdzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQncyBwcmV0dHkgY2xlYXI6IHRoZXJlJ3Mgb25seSBvbmUgcGF0aCB0byBgc2hvdWxkX2Fib3J0X3NjYW5gLiBUaGF0IG1lYW5zIGBDT05GSUdfTFJVX0dFTmAgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgZm9yIGV2ZW4gY29tcGlsaW5nIHRoZSBjb2RlIGluIHRoZSBmaXJzdCBwbGFjZSDigJMgYSBoYXJkIGRlcGVuZGVuY3kuIFRvIGFjdHVhbGx5IHJ1biB0aGUgY29kZSBieSBkZWZhdWx0LCB0aGF0IGV4dGVuZHMgdG8gYWxzbyByZXF1aXJpbmcgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBOb3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGUgY29kZSBnZXRzIHRyaWdnZXJlZCB0aHJvdWdoIGNncm91cCB2MidzIGBtZW1vcnkucmVjbGFpbWAsIGFuZCB0aGF0IGJyaW5ncyBgQ09ORklHX01FTUNHYCBpbnRvIHBsYXkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gKmNvbXBpbGVkKiB3aXRob3V0IGBDT05GSUdfTUVNQ0dgLiBUaGlzIHNlZW1zIGEgY3JpdGljYWwgcmVxdWlyZW1lbnQgZm9yIHBvcnRhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMTowNS43MDMyMTA0MDJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDM4MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMTowNS43NzMyNTYzNTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MzA5NTY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBtZW1vcnkgY2dyb3VwIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgaXQncyBwcm90ZWN0ZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIElmIGl0IGlzLCB0aGVuIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhhdCBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24gd2hldGhlciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBUaGF0IHdvdWxkIG1lYW4gdGhlIGJlaGF2aW9yIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjaGFuZ2VzIHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0ncyBtZW1jZyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IGl04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHVuZGVyIGRpZmZlcmVudCBzY2VuYXJpb3MuIEtub3dpbmcgdGhpcyB3aWxsIGFmZmVjdCB3aGVyZSBJIGxvb2sgZm9yIHJlbGF0ZWQgY29kZSBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MDkuMTY2MzU1MzQ0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODYwOlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxcbjc4NjE6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcXG43ODYyOlxcdH07XFxuNzg2MzpcXHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuNzg2NDpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFxcXCJzd2FwcGluZXNzPSVkXFxcIn0sXFxuNzg2NTpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcXFwic3dhcHBpbmVzcz1tYXhcXFwifSxcXG43ODY2OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fTlVMTCwgTlVMTCB9LFxcbjc4Njc6XFx0fTtcXG43ODY4OlxcdFxcbjc4Njk6XFx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbjc4NzA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbjc4NzE6XFx0e1xcbjc4NzI6XFx0XFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbjc4NzM6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbjc4NzQ6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcXG43ODc1OlxcdFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG43ODc2OlxcdFxcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcXG43ODc3OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG43ODc4OlxcdFxcbjc4Nzk6XFx0XFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjA5LjE2NjYyNDExM1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQ2MTk4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSG1tLCBpcyB0aGVyZSBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaGlkaW5nIGFyb3VuZCBoZXJlP1wiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYW4gYCNpZmRlZmAgKG9yIG1heWJlIGV2ZW4gYCNpZm5kZWZgIG9yIHNpbWlsYXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24pIGlzIHBvdGVudGlhbGx5IGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBibG9jayBvZiBjb2RlLiBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYSwgYW5kIGl0J3MgYWx3YXlzIHRoZSBmaXJzdCB0aGluZyBJIGNoZWNrIHdoZW4gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBJJ20gbG9va2luZyBhdCBpcyB3aGF0J3MgKmFjdHVhbGx5KiBnb2luZyB0byBiZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQuIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAxNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MTEuODEyODI0NjY3WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTU4ODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xODEtXFxubW0vdm1zY2FuLmM6MTgyOiNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG5tbS92bXNjYW4uYy0xODMtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVxcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE5OT1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xcbm1tL3Ztc2Nhbi5jLTIwMC1cXG5tbS92bXNjYW4uYzoyMDE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTIwMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjM0LVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3Ztc2Nhbi5jOjIzNTojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS92bXNjYW4uYy0yMzYtXFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLS1cXG5tbS92bXNjYW4uYz04MjQ9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMC1cXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODMyLS8qXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyODUtXFx0XFx0XFx0XFx0XFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XFxubW0vdm1zY2FuLmM6MTI4NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vdm1zY2FuLmMtMTI4Ny1cXHRcXHRcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjI0LVxcbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjYyNi1cXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYy0yNjI5LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjgwLVxcbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI2ODItXFx0aWYgKG1lbWNnKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyOC1cXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODMwLVxcbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MzctXFxubW0vdm1zY2FuLmM6MjgzODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjgzOS1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yODcxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODc3LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI4Nzg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4NzktXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4OTg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MDYtXFxubW0vdm1zY2FuLmM6MjkwNzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkwOC1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMjkzMC1cXG5tbS92bXNjYW4uYzoyOTMxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTMyLVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzYtXFxubW0vdm1zY2FuLmM6MjkzNzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzMDc9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00MzUyLVxcbm1tL3Ztc2Nhbi5jOjQzNTM6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQzNTQtXFxuLS1cXG5tbS92bXNjYW4uYz01NTE1PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NTI4LVxcbm1tL3Ztc2Nhbi5jOjU1Mjk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU1MzAtXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc4MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTgwMC1cXG5tbS92bXNjYW4uYzo1ODAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01ODAyLVxcbi0tXFxubW0vdm1zY2FuLmM9NjY3OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MjEtXFxubW0vdm1zY2FuLmM6NjcyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjcyMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NDk9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzU1My1cXG5tbS92bXNjYW4uYzo3NTU0OiNpZmRlZiBDT05GSUdfSElCRVJOQVRJT05cXG5tbS92bXNjYW4uYy03NTU1LS8qXFxuLS1cXG5tbS92bXNjYW4uYz03NjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NDMtXFx0fSxcXG5tbS92bXNjYW4uYzo3NjQ0OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2NDUtXFx0e1xcbi0tXFxubW0vdm1zY2FuLmM9NzY2Nz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcXG5tbS92bXNjYW4uYy03NjY4LVxcbm1tL3Ztc2Nhbi5jOjc2Njk6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vdm1zY2FuLmMtNzY3MC0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMToxMS44ODQ0MTc4MzVaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MjU0MTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJdCBsb29rcyBsaWtlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpc24ndCBhY3R1YWxseSBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX01FTUNHYC4gVGhhdCdzIGEgY3J1Y2lhbCBhc3N1bXB0aW9uIEkgbmVlZCB0byB2ZXJpZnkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5lZWRzIGltbWVkaWF0ZSBjb3JyZWN0aW9uLiBMZXQncyB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSBsb2dpYyBmbG93cyBhcyBJIGV4cGVjdCBpdCB0by5cblxuQWxyaWdodCwgSSd2ZSBnb3QgdGhlIGxpbmUgbnVtYmVyOiA3ODY5LiBOb3csIHdoZXJlIGRvZXMgdGhlIGAjaWZkZWYgQ09ORklHX05VTUFgIGJsb2NrIGJlZ2luPyBMaW5lIDc2NjkuIEdvb2QsIHRoYXQncyB3aXRoaW4gYSBjb3VwbGUgb2YgaHVuZHJlZCBsaW5lcy4gVGhhdCdzIGNsb3NlIGVub3VnaCBmb3IgdGhlIGxpbmUgY291bnQgdG8gYmUgYWNjdXJhdGUsIGJ1dCBJIG5lZWQgdG8gZGVmaW5pdGl2ZWx5IGVzdGFibGlzaCB3aGV0aGVyIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZXNpZGVzICp3aXRoaW4qIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfTlVNQWAuIEl0J3MgYSBzaW1wbGUgY2hlY2ssIGJ1dCBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHRoZSBzY29waW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjE1LjQ1Njk2Mjk2NVoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzY2NTpcXHR9XFxuNzY2NjpcXHRcXG43NjY3OlxcdG1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbjc2Njg6XFx0XFxuNzY2OTpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43NjcwOlxcdC8qXFxuNzY3MTpcXHQgKiBOb2RlIHJlY2xhaW0gbW9kZVxcbjc2NzI6XFx0ICpcXG43NjczOlxcdCAqIElmIG5vbi16ZXJvIGNhbGwgbm9kZV9yZWNsYWltIHdoZW4gdGhlIG51bWJlciBvZiBmcmVlIHBhZ2VzIGZhbGxzIGJlbG93XFxuNzY3NDpcXHQgKiB0aGUgd2F0ZXJtYXJrcy5cXG43Njc1OlxcdCAqL1xcbjc2NzY6XFx0aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XFxuNzY3NzpcXHRcXG43Njc4OlxcdC8qXFxuNzY3OTpcXHQgKiBQcmlvcml0eSBmb3IgTk9ERV9SRUNMQUlNLiBUaGlzIGRldGVybWluZXMgdGhlIGZyYWN0aW9uIG9mIHBhZ2VzXFxuNzY4MDpcXHQgKiBvZiBhIG5vZGUgY29uc2lkZXJlZCBmb3IgZWFjaCB6b25lX3JlY2xhaW0uIDQgc2NhbnMgMS8xNnRoIG9mXFxuNzY4MTpcXHQgKiBhIHpvbmUuXFxuNzY4MjpcXHQgKi9cXG43NjgzOlxcdCNkZWZpbmUgTk9ERV9SRUNMQUlNX1BSSU9SSVRZIDRcXG43Njg0OlxcdFxcbjc2ODU6XFx0LypcXG43Njg2OlxcdCAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXFxuNzY4NzpcXHQgKiBvY2N1ci5cXG43Njg4OlxcdCAqL1xcbjc2ODk6XFx0aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xcbjc2OTA6XFx0XFxuNzY5MTpcXHQvKlxcbjc2OTI6XFx0ICogSWYgdGhlIG51bWJlciBvZiBzbGFiIHBhZ2VzIGluIGEgem9uZSBncm93cyBiZXlvbmQgdGhpcyBwZXJjZW50YWdlIHRoZW5cXG43NjkzOlxcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cXG43Njk0OlxcdCAqL1xcbjc2OTU6XFx0aW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbyA9IDU7XFxuNzY5NjpcXHRcXG43Njk3OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3VubWFwcGVkX2ZpbGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG43Njk4OlxcdHtcXG43Njk5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9tYXBwZWQgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0ZJTEVfTUFQUEVEKTtcXG43NzAwOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9scnUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG43NzAxOlxcdFxcdFxcdG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0ZJTEUpO1xcbjc3MDI6XFx0XFxuNzcwMzpcXHRcXHQvKlxcbjc3MDQ6XFx0XFx0ICogSXQncyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUgbW9yZSBmaWxlIG1hcHBlZCBwYWdlcyB0aGFuXFxuNzcwNTpcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYWdlcyBvbiB0aGUgZmlsZSBMUlUgbGlzdHMgYmVjYXVzZVxcbjc3MDY6XFx0XFx0ICogdG1wZnMgcGFnZXMgYWNjb3VudGVkIGZvciBhcyBBTk9OIGNhbiBhbHNvIGJlIEZJTEVfTUFQUEVEXFxuNzcwNzpcXHRcXHQgKi9cXG43NzA4OlxcdFxcdHJldHVybiAoZmlsZV9scnUgXFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xcbjc3MDk6XFx0fVxcbjc3MTA6XFx0XFxuNzcxMTpcXHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXFxuNzcxMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbjc3MTM6XFx0e1xcbjc3MTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlY2FjaGVfcmVjbGFpbWFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjE1LjQ1NzI1NzE0NVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg4ODYwOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTlVNQSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGlzIGAjaWZkZWYgQ09ORklHX05VTUFgIGJsb2NrLiBVbmRlcnN0YW5kaW5nIGV4YWN0bHkgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBlbmRzIGlzIGNydWNpYWwuIEkga25vdyB0aGlzIGNvZGUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBhbmQgcHJlY2lzZWx5IHJlLWVzdGFibGlzaCBteSBiZWFyaW5ncyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uIElzIHRoaXMgYSBsb2NhbCBzY29wZSBpc3N1ZSwgb3IgaXMgaXQgYSB0b3AtbGV2ZWwgYmxvY2s/IERldGVybWluaW5nIHRoZSBleHRlbnQgb2YgaXRzIGluZmx1ZW5jZSBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBwZXJmb3JtYW5jZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIExldOKAmXMgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODExNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MTguMjQ2MTIwODA2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIwNTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xOTMtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXFxubW0vdm1zY2FuLmM6MTk0OiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTE5NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjM3LVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3Ztc2Nhbi5jOjIzODojZW5kaWZcXG5tbS92bXNjYW4uYy0yMzktXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9MjY0PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY3LX1cXG5tbS92bXNjYW4uYzoyNjg6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjY5LVxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTI5MS1cXHRcXHRcXHRcXHR9XFxubW0vdm1zY2FuLmM6MTI5MjojZW5kaWZcXG5tbS92bXNjYW4uYy0xMjkzLVxcdFxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yNjMyPURFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNjMzLSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmM6MjYzNDojZW5kaWZcXG5tbS92bXNjYW4uYy0yNjM1LVxcbi0tXFxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjkwLVxcdH1cXG5tbS92bXNjYW4uYzoyNjkxOiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTI2OTItXFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjgzMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg0MC1cXHRcXHRyZXR1cm4gXFx1MDAyNm1lbWNnLVxcdTAwM2VtbV9saXN0O1xcbm1tL3Ztc2Nhbi5jOjI4NDE6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjg0Mi1cXHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODcxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODgwLVxcdG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnID0gbWVtY2c7XFxubW0vdm1zY2FuLmM6Mjg4MTojZW5kaWZcXG5tbS92bXNjYW4uYy0yODgyLVxcdHNwaW5fbG9jayhcXHUwMDI2bW1fbGlzdC1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTA4LVxcdG1lbWNnID0gbW0tXFx1MDAzZWxydV9nZW4ubWVtY2c7XFxubW0vdm1zY2FuLmM6MjkwOTojZW5kaWZcXG5tbS92bXNjYW4uYy0yOTEwLVxcdG1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTMzLVxcdG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnID0gTlVMTDtcXG5tbS92bXNjYW4uYzoyOTM0OiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTI5MzUtfVxcbi0tXFxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjQtfVxcbm1tL3Ztc2Nhbi5jOjI5NjU6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjk2Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Nzk9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTgzLVxcbm1tL3Ztc2Nhbi5jOjI5ODQ6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjk4NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDU9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjctXFxubW0vdm1zY2FuLmM6NDU2ODojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vdm1zY2FuLmMtNDU2OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU1MzEtXFx0XFx0XFx0Y2dyb3VwX3BhdGgobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIG0tXFx1MDAzZXByaXZhdGUsIFBBVEhfTUFYKTtcXG5tbS92bXNjYW4uYzo1NTMyOiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTU1MzMtXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwibWVtY2cgJWxsdSAlc1xcXFxuXFxcIiwgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTgxND12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy01ODQwLVxcbm1tL3Ztc2Nhbi5jOjU4NDE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Ztc2Nhbi5jLTU4NDItXFxuLS1cXG5tbS92bXNjYW4uYz01ODcyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODc2LVxcbm1tL3Ztc2Nhbi5jOjU4Nzc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTg3OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MDY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MTMtfVxcbm1tL3Ztc2Nhbi5jOjY4MTQ6I2VuZGlmXFxubW0vdm1zY2FuLmMtNjgxNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NjM9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NTkwLX1cXG5tbS92bXNjYW4uYzo3NTkxOiNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi9cXG5tbS92bXNjYW4uYy03NTkyLVxcbi0tXFxubW0vdm1zY2FuLmM9NzYzND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjUyLVxcdH1cXG5tbS92bXNjYW4uYzo3NjUzOiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTc2NTQtfTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bXNjYW4uYy03ODU1LVxcbm1tL3Ztc2Nhbi5jOjc4NTY6I2VuZGlmXFxubW0vdm1zY2FuLmMtNzg1Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMjg9dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMzEtfVxcbm1tL3Ztc2Nhbi5jOjgwMzI6I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjE4LjMyOTMzMTEyNVoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMyMjM2NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVmVyaWZ5aW5nIE5VTUEgQ29uZmlndXJhdGlvbiBJbXBhY3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGxvY2F0ZWQgYXQgbGluZSA3ODY5LiBOb3csIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb24uIEFoLCBgI2lmZGVmIENPTkZJR19OVU1BYCBzdGFydHMgd2F5IGJhY2sgYXQgbGluZSA3NjY5LCBhbmQgaXQgZW5kcyBhdCA3ODU2ISBTbywgdGhhdCBtZWFucyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZmFsbHMgKm91dHNpZGUqIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBjb250cm9sbGVkIGJ5IGAjaWZkZWYgQ09ORklHX05VTUFgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhbmQgZWxpbWluYXRlIGFueSBwb3RlbnRpYWwgZm9yIGZ1dHVyZSBjb25mdXNpb24sIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEdvdHRhIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIE5VTUEtcmVsYXRlZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMToyMS40NjE1Njk2MTFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4NTA6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuNzg1MTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNzg1MjpcXHR7XFxuNzg1MzpcXHRcXHRyZXR1cm4gMDtcXG43ODU0OlxcdH1cXG43ODU1OlxcdFxcbjc4NTY6XFx0I2VuZGlmXFxuNzg1NzpcXHRcXG43ODU4OlxcdGVudW0ge1xcbjc4NTk6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXFxuNzg2MDpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcXG43ODYxOlxcdFxcdE1FTU9SWV9SRUNMQUlNX05VTEwsXFxuNzg2MjpcXHR9O1xcbjc4NjM6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjc4NjQ6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjc4NjU6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuNzg2NjpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG43ODY3OlxcdH07XFxuNzg2ODpcXHRcXG43ODY5OlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MjEuNDYyMjkwODYxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTkwNjE5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgUmVjbGFtYXRpb24gaW4gYSBOVU1BIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgKm91dHNpZGUqIHRoZSBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LCBtZWFuaW5nIHRoZSBsb2dpYyBJJ20gbG9va2luZyBhdCBpc24ndCBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIE5VTUEgc3lzdGVtcywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhbmFseXplIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgb2YgaG93IGl0IGludGVyYWN0cyBpbiBtb3JlIGdlbmVyYWwgc2NlbmFyaW9zLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHRoYXQgaXQgbWF5IG9yIG1heSBub3QgYmUgb3B0aW1pemVkIGZvciBOVU1BIGFyY2hpdGVjdHVyZXMuIEkgbXVzdCBhbmFseXplIGNhcmVmdWxseS5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCBgcmVjbGFpbV9zdG9yZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IHJldHJhY2UgbXkgc3RlcHMgc28gSSBoYXZlIGEgZnVsbCBwaWN0dXJlIGFuZCBkb24ndCBtYWtlIGFueSBhc3N1bXB0aW9ucy4gSG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQ/IFdoYXQncyBpdHMgcm9sZSBpbiwgZm9yIGluc3RhbmNlLCBwYWdlIHJlY2xhbWF0aW9uIG9yIHByb2Nlc3MgcGFnZSBmYXVsdHM/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgYW5kIGFueSBvdGhlciBtZW1vcnkgcmVjbGFtYXRpb24tcmVsYXRlZCBjb2RlLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXNuJ3Qgd2l0aGluIGEgTlVNQS1zcGVjaWZpYyBibG9jay4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGByZWNsYWltX3N0b3JlYCBpcyB1c2VkLiBJIG11c3QgYW5hbHl6ZSB3aGVyZSB0aGlzIGlzIGludm9rZWQgYW5kIGhvdyB2YXJpYWJsZXMgYXJlIHBhc3NlZCBhcm91bmQuIFRoZSBuZXh0IGNvZGUgYmxvY2sgc2hvdWxkIGhpZ2hsaWdodCB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjI1LjA2MTM1NTU2MVoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODAwNTpcXHRcXHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xcbjgwMDY6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHU0NBTk5FRCwgcGdzY2FubmVkKTtcXG44MDA3OlxcdFxcdH1cXG44MDA4OlxcdH1cXG44MDA5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG44MDEwOlxcdFxcbjgwMTE6XFx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbjgwMTI6XFx0c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuODAxMzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjgwMTQ6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG44MDE1OlxcdHtcXG44MDE2OlxcdFxcdGludCByZXQsIG5pZCA9IGRldi1cXHUwMDNlaWQ7XFxuODAxNzpcXHRcXG44MDE4OlxcdFxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG44MDE5OlxcdFxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuODAyMDpcXHR9XFxuODAyMTpcXHRcXG44MDIyOlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZWNsYWltKTtcXG44MDIzOlxcdGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuODAyNDpcXHR7XFxuODAyNTpcXHRcXHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFxcdTAwMjZub2RlLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcXG44MDI2OlxcdH1cXG44MDI3OlxcdFxcbjgwMjg6XFx0dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG44MDI5OlxcdHtcXG44MDMwOlxcdFxcdHJldHVybiBkZXZpY2VfcmVtb3ZlX2ZpbGUoXFx1MDAyNm5vZGUtXFx1MDAzZWRldiwgXFx1MDAyNmRldl9hdHRyX3JlY2xhaW0pO1xcbjgwMzE6XFx0fVxcbjgwMzI6XFx0I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjI1LjA2MTYzMDk1MVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjAyMDU5MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvYWN0aXZlIE1lbW9yeSBSZWNsYWltIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgY2FsbCBjaGFpbnMuIEkgc2VlIHRoYXQgYHJlY2xhaW1fc3RvcmVgIHJlbGllcyBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpbGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgc3VnZ2VzdHMgc29tZSBmbGV4aWJpbGl0eSBpbiBob3cgaXQgY2FuIGJlIHRyaWdnZXJlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNvbm5lY3Rpb24gaXMgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgbWVtb3J5X3JlY2xhaW1gIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB3aGljaCBzdWdnZXN0cyB0aGUgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGlzIG5vdyBtZW1vcnkgY2dyb3VwcyB2MiB1c2luZyBgbWVtb3J5LnJlY2xhaW1gLlxuXG5TbywgdG8gc3VtbWFyaXplIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciwgcHJvYWN0aXZlIHJlY2xhaW0gY2FuIGJlIHRyaWdnZXJlZCBpbiB0d28gd2F5czpcbjEuICBUaHJvdWdoIGBDT05GSUdfTUVNQ0dgIChmb3IgY2dyb3VwIHYyJ3MgYG1lbW9yeS5yZWNsYWltYCkuXG4yLiAgVGhyb3VnaCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCAoZm9yIHRoZSBzeXNmcyBgcmVjbGFpbWAgbm9kZSkuXG5cbkdpdmVuIHRoYXQgYENPTkZJR19NRU1DR2AgaXMgZXNzZW50aWFsbHkgYSBzdGFuZGFyZCBmZWF0dXJlIG5vd2FkYXlzLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gaW5jbHVkaW5nIHRoYXQgb25lLlxuXG5GdXJ0aGVybW9yZSwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhcmUgZW5hYmxlZCBiZWNhdXNlIHRoZSBwYXRjaGVkIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZW0gdmlhIGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBzdGF0ZW1lbnQuXG5cblNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIG15IHVuZGVyc3RhbmRpbmcgYXJlOlxuKiAgIGBMUlVfR0VOYFxuKiAgIGBMUlVfR0VOX0VOQUJMRURgXG4qICAgYE1FTUNHYFxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3c6IGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX21hbnlgLiBJIG5vdGljZSB0aGV5IGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucy4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGluZyB0aGVtIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSXQgbG9va3MgbGlrZSBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgY2FsbHMgYHNocmlua19tYW55YCwgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgY2FsbHMgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfb25lYCBjYWxscyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLiBgc2hyaW5rX25vZGVgIGFsc28gY2FsbHMgYGxydV9nZW5fc2hyaW5rX25vZGVgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYWN0dWFsbHkgY2FsbHM/IERvZXMgaXQgY2FsbCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agb3IgZG9lcyBpdCBjYWxsIGBzaHJpbmtfbm9kZWA/IEkgbmVlZCB0byBjaGVjayBob3cgaXQgd29ya3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MzEuNjYzNjkzMTA4WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTIwOlxcdFxcdFxcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXFxuNzkyMTpcXHRcXHRcXHQgKi9cXG43OTIyOlxcdFxcdFxcdGlmICghbnJfcmV0cmllcylcXG43OTIzOlxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW5fYWxsKCk7XFxuNzkyNDpcXHRcXG43OTI1OlxcdFxcdFxcdGlmIChtZW1jZykge1xcbjc5MjY6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcXG43OTI3OlxcdFxcbjc5Mjg6XFx0XFx0XFx0XFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCB8XFxuNzkyOTpcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xcbjc5MzA6XFx0XFx0XFx0XFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcXG43OTMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBiYXRjaF9zaXplLCBnZnBfbWFzayxcXG43OTMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCByZWNsYWltX29wdGlvbnMsXFxuNzkzMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcXHUwMDI2c3dhcHBpbmVzcyk7XFxuNzkzNDpcXHRcXHRcXHR9IGVsc2Uge1xcbjc5MzU6XFx0XFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG43OTM2OlxcdFxcdFxcdFxcdFxcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxcbjc5Mzc6XFx0XFx0XFx0XFx0XFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxcbjc5Mzg6XFx0XFx0XFx0XFx0XFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcXHUwMDI2c3dhcHBpbmVzcyxcXG43OTM5OlxcdFxcdFxcdFxcdFxcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MzEuNjYzOTY4MDg4WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjA0OTE1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlByb2JpbmcgdGhlIE1lbW9yeSBSZWNsYWltIExvZ2ljKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSB0cmlnZ2VyLiBNeSBtZW50YWwgbW9kZWwgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgYWN0aXZlIG1lbW9yeSByZWNsYW1hdGlvbiBlZmZvcnRzIGluaXRpYXRlZCBieSB0aGUgdXNlci4gSXQgY2FsbHMgZWl0aGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCAod2hpY2ggSSBrbm93IHRhcmdldHMgcGFnZXMgd2l0aGluIGEgc3BlY2lmaWMgY2dyb3VwKSBvciBgc2hyaW5rX25vZGVgICh3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBicm9hZGVyIG5vZGUtbGV2ZWwgcmVjbGFpbSkuIE5vdywgSSB3YW50IHRvIGRlbHZlIGludG8gd2hhdCBoYXBwZW5zIHdoZW4gbmVpdGhlciBvZiB0aG9zZSBjYWxscyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQsIGJlY2F1c2UgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBtb3JlIHN1YnRsZSBpc3N1ZXMgb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zIGxpZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGBlbHNlYCBicmFuY2ggb2YgdGhlIGNvbmRpdGlvbmFsIGlzIGRvaW5nIGFuZCB3aGF0IGluZm9ybWF0aW9uIGl0IHByb3ZpZGVzLiBUaGF0J3Mgd2hlcmUgdGhlIG5leHQgaW50ZXJlc3RpbmcgaW5zaWdodHMgYXJlIGxpa2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjM0Ljc4NDQ2MjU2NVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk0MDpcXHRcXHRcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzk0MTpcXHRcXHRcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcXG43OTQyOlxcdFxcdFxcdFxcdFxcdC5tYXlfdW5tYXAgPSAxLFxcbjc5NDM6XFx0XFx0XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTQ0OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmUgPSAxLFxcbjc5NDU6XFx0XFx0XFx0XFx0fTtcXG43OTQ2OlxcdFxcbjc5NDc6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcXG43OTQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk0OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjc5NTA6XFx0XFxuNzk1MTpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXFxuNzk1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBiYXRjaF9zaXplLCBcXHUwMDI2c2MpO1xcbjc5NTM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuNzk1NDpcXHRcXHRcXHR9XFxuNzk1NTpcXHRcXG43OTU2OlxcdFxcdFxcdGlmICghcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFucl9yZXRyaWVzLS0pXFxuNzk1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG43OTU4OlxcdFxcbjc5NTk6XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MzQuNzg0OTI3Mzc1WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzY2NzMyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb2FjdGl2ZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGtleSBtb2RpZmljYXRpb24gaGVyZS4gSXQncyByZWFjaGVkIHRocm91Z2ggdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBwYXRoLCB3aGljaCB0aGVuIGNhbGxzIGBzaHJpbmtfbm9kZWAgb3IgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBUaG9zZSBwYXRocyBhcmUgaW50ZXJlc3RpbmcgdG9vLiBTcGVjaWZpY2FsbHksIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBjYWxscyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCB3aGljaCBsZWFkcyB0byBgc2hyaW5rX3pvbmVzYCBhbmQgZmluYWxseSBiYWNrIHRvIGBzaHJpbmtfbm9kZWAuXG5cbk15IHRob3VnaHQgcHJvY2VzcyBsZWQgbWUgdG8gcmVhbGl6ZSB0aGF0IGBzaHJpbmtfbm9kZWAgY2FsbHMgYGxydV9nZW5fc2hyaW5rX25vZGVgIGlmIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpcyBlbmFibGVkLiBBbmQgYGxydV9nZW5fc2hyaW5rX25vZGVgIGNhbGxzIGBzaHJpbmtfbWFueWAsIHdoaWNoICpmaW5hbGx5KiBjYWxscyBgc2hvdWxkX2Fib3J0X3NjYW5gLiBTbywgeWVzLCB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgd2l0aGluIHRoZSBNR0xSVSBjb2RlIHBhdGgsIGFzc3VtaW5nIHByb2FjdGl2ZSByZWNsYWltIGlzIHJlcXVlc3RlZCBieSB0aGUgdXNlci5cblxuV2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbmRpdGlvbiB3aGVyZSB0aGUgc2NhbiBpcyBhYm9ydGVkIGlmIGBzYy1cdTAwM2Vwcm9hY3RpdmVgIGlzIHRydWUgKGluZGljYXRpbmcgYSBwcm9hY3RpdmUgcmVjbGFpbSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UpIGFuZCBhIHNpZ25hbCBpcyBwZW5kaW5nIGZvciB0aGUgY3VycmVudCB0YXNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgZGVsaWJlcmF0ZSBtb2RpZmljYXRpb24gb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdG8gYWxsb3cgdXNlcnNwYWNlLCBlc3NlbnRpYWxseSwgdG8gaW50ZXJydXB0IHRoZSByZWNsYWltIHByb2Nlc3MgYnkgc2VuZGluZyBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcyB3cml0aW5nIHRvIGBtZW1vcnkucmVjbGFpbWAuIFRoaXMgc2VlbXMgbGlrZSBhIGdyZWF0IGFyZWEgdG8gZm9jdXMgZnV6emluZyBlZmZvcnRzLlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBvbmx5IGNvbXBpbGVkIGlmIE1HTFJVIGlzIGVuYWJsZWQgdGhyb3VnaCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBhbmQgdGhhdCBgTFJVX0dFTl9FTkFCTEVEYCBlbmFibGVzIE1HTFJVIGJ5IGRlZmF1bHQsIGFuZCBgTUVNQ0dgIGlzIG5lZWRlZCB0byBleHBvc2UgdGhlIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBJdCBpcyBnb29kIHRoYXQgSSd2ZSBlbnN1cmVkIHRoZXNlIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBNR0xSVSByZWNsYWltIHBhdGguIFRoZSBjaGFuZ2UgYWxsb3dzIHVzZXJzcGFjZSB0byBzaWduYWwgYSBsb25nLXJ1bm5pbmcsIHByb2FjdGl2ZSByZWNsYWltIHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAuIFNvIEknbSBub3cgZ29pbmcgdG8gZm9jdXMgb24gdGhlIGVkZ2UgY2FzZXMgYXJvdW5kIHNpZ25hbCBoYW5kbGluZywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcmVzb3VyY2UgbGVha3MsIGFuZCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlcyBhZnRlciBpbnRlcnJ1cHRpb24uIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGVzZSBwYXRocyB0aG9yb3VnaGx5LiBJIGFtIG5vdyBnb2luZyB0byBmb2N1cyBvbiBmdXp6aW5nIHRoaXMsIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDk1LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjQ0LjcyMTYwMzU1NVoiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNzM0OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG91bGRfYWJvcnRfc2NhblwiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInNocmlua19tYW55XCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCB0byBhYm9ydCBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gaWYgYSBzaWduYWwgaXMgcGVuZGluZyBmb3IgdGhlIGN1cnJlbnQgdGFzay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcmVjbGFpbSBwYXRoLCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gaW50ZXJydXB0IGEgcG90ZW50aWFsbHkgbG9uZy1ydW5uaW5nIHByb2FjdGl2ZSByZWNsYWltIG9wZXJhdGlvbiAodHJpZ2dlcmVkIHZpYSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcykgYnkgc2VuZGluZyBhIHNpZ25hbC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBhYm9ydHMgdGhlIHNjYW4gd2l0aG91dCBjYXVzaW5nIHJlc291cmNlIGxlYWtzIG9yIGluY29uc2lzdGVudCBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowxhkz4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 22:41:29 +0000 UTC FinishedAt: 2026-07-09 23:01:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f278138808608775ad1ff2f3727829c6f840f16c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "f278138808608775ad1ff2f3727829c6f840f16c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "64441c0e-5980-4c92-bd97-edbcfbc8217d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "should_abort_scan", "try_to_shrink_lruvec", "shrink_many", "user_proactive_reclaim", "try_to_free_mem_cgroup_pages" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7c2hyaW5rX21hbnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgY2IyMjhiOTVjZDQ1MGViOTk1ZmNkYTdiZTUyNGEwNDE4YWViMWQwZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMjI6NTk6MTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICYjNDM7NDkyOSw5IEBAIHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXHRpbnQgaTtcbiBcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG4gXG4mIzQzO1x0aWYgKHVubGlrZWx5KHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuIFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nIGZvciB0aGUgY3VycmVudCB0YXNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGgsIGFsbG93aW5nIHVzZXJzcGFjZSB0byBpbnRlcnJ1cHQgYSBwb3RlbnRpYWxseSBsb25nLXJ1bm5pbmcgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9uICh0cmlnZ2VyZWQgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzKSBieSBzZW5kaW5nIGEgc2lnbmFsLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGFib3J0cyB0aGUgc2NhbiB3aXRob3V0IGNhdXNpbmcgcmVzb3VyY2UgbGVha3Mgb3IgaW5jb25zaXN0ZW50IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2IyMjhiOTVjZDQ1MGViOTk1ZmNkYTdiZTUyNGEwNDE4YWViMWQwZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMjI6NTk6MTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi5mYjQ3MmU5MjRmYzc3MSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTQ5MjksNiAmIzQzOzQ5MjksOSBAQCBzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogCWludCBpOwogCWVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7CiAKJiM0MzsJaWYgKHVubGlrZWx5KHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsKIAlpZiAoc2MtJmd0O25yX3JlY2xhaW1lZCAmZ3Q7PSBtYXgoc2MtJmd0O25yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLSZndDtvcmRlcikpKQogCQlyZXR1cm4gdHJ1ZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVk1TY2FuIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBhIHRhcmdldGVkIG1vZGlmaWNhdGlvbiwgc3BlY2lmaWNhbGx5IGZvY3VzZWQgb24gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24uIFRoZSBrZXkgYWRkaXRpb24gaXMgdGhpcyBgaWYgKHVubGlrZWx5KHNjLSZndDtwcm9hY3RpdmUgJmFtcDsmYW1wOyBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpIHJldHVybiB0cnVlO2AgYmxvY2suCgpNeSBpbW1lZGlhdGUgaW50ZXJwcmV0YXRpb24gaXMgdGhhdCB0aGlzIGludHJvZHVjZXMgYSBzaWduYWwgaGFuZGxpbmcgYXNwZWN0IGludG8gcHJvYWN0aXZlIHJlY2xhaW0uIEVzc2VudGlhbGx5LCBpdCBtZWFucyB0aGF0IGlmIHByb2FjdGl2ZSBzY2FubmluZyBpcyBlbmFibGVkIChgc2MtJmd0O3Byb2FjdGl2ZWAgaXMgdHJ1ZSkgYW5kIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIChgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHJldHVybnMgdHJ1ZSksIHRoZW4gdGhlIHNjYW4gaXMgYWJvcnRlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgaW5mbHVlbmNpbmcgaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgdG8gc2lnbmFscyBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IG1ha2VzIHNlbnNlIHRvIG1lLCB0byBwcm92aWRlIHRoZSBzeXN0ZW0gd2l0aCB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8gZXh0ZXJuYWwgZXZlbnRzLCBsaWtlIHNpZ25hbHMgdGhhdCBtaWdodCBpbmRpY2F0ZSB1c2VyIHJlcXVlc3RzIGZvciBzdG9wcGluZyBhIHBvdGVudGlhbGx5IGxvbmcgYmFja2dyb3VuZCBwcm9jZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIGBtbS92bXNjYW4uY2AgbW9yZSB0aG9yb3VnaGx5IHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MjYtXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTI4LXtcbi0tXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDk4OS1cbm1tL3Ztc2Nhbi5jOjQ5OTA6XHRcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQ5OTEtXHRcdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDkzLVxubW0vdm1zY2FuLmM6NTA5NDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTA5NS1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBBYm9ydCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IGBzaG91bGRfYWJvcnRfc2NhbmAgZ2V0cyBjYWxsZWQgYnkgYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLiBJbW1lZGlhdGVseSwgSSByZWNvZ25pemUgdGhpcyBhcyBwcmV0dHkgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5LiBHaXZlbiBpdHMgcm9sZSwgYW5kIHRoZSBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBJIGhhdmUgdG8gY29uc2lkZXIgZnV6emluZyB0aGlzLiBUaGUgcG90ZW50aWFsIGZvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGlzIGhpZ2guCgpMZXQmIzM5O3Mgem9vbSBpbiBhIGJpdCBoZXJlLiBOb3csIHdhaXQgYSBzZWNvbmQuLi4gYHNob3VsZF9hYm9ydF9zY2FuYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfbWFueWAgYXJlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gU2luY2UgdGhleSYjMzk7cmUgYHN0YXRpY2AgaXQgc2VlbXMgdGhhdCB0aGUgc2NvcGUgaXMgbGltaXRlZCB0byB0aGlzIHBhcnRpY3VsYXIgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIEhvd2V2ZXIsIEkgd2FudCB0byBjb25maXJtIHdoZXJlIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAgYXJlIGFjdHVhbGx5IGNhbGxlZCBmcm9tLCBnaXZlbiB0aGVpciBpbnRlcmFjdGlvbiB3aXRoIGBzaG91bGRfYWJvcnRfc2NhbmAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbCBzaXRlcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgc2Vuc2Ugb2YgaG93IHRoaXMgYWJvcnQgbG9naWMgZml0cyBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSwgc28gdGhhdCBJIGNhbiBjb25zdHJ1Y3QgdGVzdCBjYXNlcyBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fc2hyaW5rX2xydXZlYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTYxLSAqL1xubW0vdm1zY2FuLmM6NDk2MjpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNDk2My17XG4tLVxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDI2LVxubW0vdm1zY2FuLmM6NTAyNzpcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG5tbS92bXNjYW4uYy01MDI4LVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMTg9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEzMC1cbm1tL3Ztc2Nhbi5jOjUxMzE6XHRpZiAodHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MTMyLVx0XHRscnVfZ2VuX3JvdGF0ZV9tZW1jZyhscnV2ZWMsIE1FTUNHX0xSVV9ZT1VORyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBMUlUgVmVjdG9yIFNocmlua2luZyBTdHJhdGVnaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhpcyBMUlUgdmVjdG9yIHNocmlua3MuIGBzaHJpbmtfb25lYCBhbmQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgYXJlIGJvdGggdXNpbmcgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2QgZXhwZWN0IHRoZXkmIzM5O2QgYmUgdGhlIGNvbW1vbiBwYXRoIGZvciBzaW5nbGUtZWxlbWVudCBzaHJpbmtzIG9yIHRob3NlIHRyaWdnZXJlZCBieSB0aGUgZ2VuZXJhbCBMUlUgZ2VuZXJhdGlvbiBjeWNsZS4gTm93LCBgc2hyaW5rX21hbnlgIGlzIGFsc28gYmVpbmcgY2FsbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NlbmFyaW9zIHRoYXQgdHJpZ2dlciBfbXVsdGlwbGVfIHNocmluayBvcGVyYXRpb25zIGluIG9uZSBnby4gTXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGNhbGwgc2l0ZXMgZm9yIGBzaHJpbmtfbWFueWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZGl0aW9ucyB3b3VsZCBjYXVzZSBhIHN0cmF0ZWd5IHNoaWZ0IHRvIGJ1bGsgc2hyaW5raW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVxubW0vdm1zY2FuLmM6NTA0ODpzdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUwNDkte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY3LVx0ZWxzZVxubW0vdm1zY2FuLmM6NTE2ODpcdFx0c2hyaW5rX21hbnkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1HTFJVIFNocmlua2FnZSBTdHJhdGVneSBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgTUdMUlUgY29kZSBoYW5kbGVzIG1lbW9yeSBzaHJpbmthZ2UuIFNwZWNpZmljYWxseSwgYGxydV9nZW5fc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHNocmlua19tYW55YCwgYW5kIHRoYXQmIzM5O3MgYSBrZXkgaW50ZXJhY3Rpb24gdG8gdW5kZXJzdGFuZC4gSXQmIzM5O3MgY2xlYXIgdGhhdCBib3RoIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgIGFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgYXJlIGRlZXBseSBlbWJlZGRlZCB3aXRoaW4gdGhlIE1HTFJVIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG9yIGJ1aWxkIG9wdGlvbnMgcmVsYXRlZCB0byBNR0xSVS4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdHVuaW5nIHRoaXMgYmVoYXZpb3IgYW5kIHBvc3NpYmx5IG9wdGltaXppbmcgaXQgZm9yIHNwZWNpZmljIHdvcmtsb2Fkcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb250cm9scyB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3Nocmlua19ub2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTM4LVxubW0vdm1zY2FuLmM6NTEzOTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTE0MC17XG4tLVxubW0vdm1zY2FuLmM9NTg2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODcxLVxubW0vdm1zY2FuLmM6NTg3MjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNTg3My17XG4tLVxubW0vdm1zY2FuLmM9NjE0OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MTU2LVx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xubW0vdm1zY2FuLmM6NjE1NzpcdFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xubW0vdm1zY2FuLmMtNjE1OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBscnVfZ2VuX3Nocmlua19ub2RlYCDigJMgQ29udGV4dCBpcyBLZXkqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGxydV9nZW5fc2hyaW5rX25vZGVgIGZ1bmN0aW9uLCBhbmQgaW1tZWRpYXRlbHksIG15IHNwaWRlciBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJIHNlZSAqdHdvKiBkZWZpbml0aW9ucywgd2hpY2ggaXMgb2Z0ZW4gYSByZWQgZmxhZyBpbiBrZXJuZWwgY29kZS4gSXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgb25lIG9mIHRoZW0gaXMgYSBwbGFjZWhvbGRlciwgYSBkdW1teSBpbXBsZW1lbnRhdGlvbiwgb3IgYSBmYWxsYmFjayBtZWNoYW5pc20uIFdlIGFsbCBrbm93IGhvdyB0aGVzZSB0aGluZ3MgZ28g4oCTIHlvdSBvZnRlbiBlbmQgdXAgd2l0aCBhIGZldyBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgYmFzZWQgb24gY29tcGlsZS10aW1lIGNvbmZpZ3MuCgpUbyBmaWd1cmUgb3V0IHRoZSBhY3R1YWwgaW50ZW5kZWQgYmVoYXZpb3IsIEkgbmVlZCBtb3JlIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlIE11bHRpcGxlIEdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmZWF0dXJlIGlzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gTUdMUlUsIGdpdmVuIHRoZSBuYW1pbmcsIGJ1dCBJIG5lZWQgc29saWQgZXZpZGVuY2UgYmVmb3JlIG1ha2luZyBhc3N1bXB0aW9ucy4gU28sIGxldCYjMzk7cyBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBLY29uZmlnIGFuZCB2ZXJpZnkgd2hldGhlciBNR0xSVSBpcyBhY3RpdmUuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cCByZWFsbHkgcXVpY2tseS4gVGhlIEtjb25maWcgd2lsbCBkaWN0YXRlIHdoaWNoIGRlZmluaXRpb24gaXMgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9NDU1Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTczLVxubW0vbWVtY29udHJvbC5jOjQ1NzQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1jb250cm9sLmMtNDU3NS1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDU5Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cbm1tL21lbWNvbnRyb2wuYzo0NTk0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtY29udHJvbC5jLTQ1OTUtXG4tLVxubW0vbWVtb3J5LmM9NjUzNT1zdGF0aWMgaW5saW5lIHZvaWQgbW1fYWNjb3VudF9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsXG4tLVxubW0vbWVtb3J5LmMtNjU4Ny1cbm1tL21lbW9yeS5jOjY1ODg6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS9tZW1vcnkuYy02NTg5LXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtb3J5LmM9NjYwND1zdGF0aWMgdm9pZCBscnVfZ2VuX2V4aXRfZmF1bHQodm9pZClcbi0tXG5tbS9tZW1vcnkuYy02NjA2LX1cbm1tL21lbW9yeS5jOjY2MDc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS9tZW1vcnkuYy02NjA4LVxuLS1cbm1tL3N3YXAuYz0zOTY9c3RhdGljIHZvaWQgX19scnVfY2FjaGVfYWN0aXZhdGVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmMtNDI1LVxubW0vc3dhcC5jOjQyNjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3N3YXAuYy00MjctXG4tLVxubW0vc3dhcC5jPTQ1Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmMtNDY5LVxubW0vc3dhcC5jOjQ3MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3N3YXAuYy00NzEtXG4tLVxubW0vc3dhcC5jPTQ3Nj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmMtNDgwLVxubW0vc3dhcC5jOjQ4MTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3N3YXAuYy00ODItXG4tLVxubW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI0LVxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjYtXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjgtXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbm1tL3Ztc2Nhbi5jLTI4MzAtXG4tLVxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTY2LVxubW0vdm1zY2FuLmM6Mjk2NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5tbS92bXNjYW4uYy0yOTY4LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NTg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg1OS1cbm1tL3Ztc2Nhbi5jOjU4NjA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODYxLVxuLS1cbm1tL3Ztc2Nhbi5jPTU4NzI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01ODc2LVxubW0vdm1zY2FuLmM6NTg3NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU4NzgtXG4tLVxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXG4tLVxubW0vd29ya2luZ3NldC5jLTIzMi1cbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS93b3JraW5nc2V0LmMtMjM0LVxuLS1cbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcbi0tXG5tbS93b3JraW5nc2V0LmMtMzM2LVxubW0vd29ya2luZ3NldC5jOjMzNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3dvcmtpbmdzZXQuYy0zMzgtXG4tLVxubW0vd29ya2luZ3NldC5jPTM1MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zNTMtXG5tbS93b3JraW5nc2V0LmM6MzU0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTM1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEwNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaGVyZSBpcyByZWdhcmRpbmcgYENPTkZJR19MUlVfR0VOYCwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgTUdMUlUuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgaG9sZCBvbiBhIHNlY29uZC4uLiBJIHNlZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGJlaW5nIHJlZmVyZW5jZWQsIGJ1dCBpdCYjMzk7cyAqb3V0c2lkZSogdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGNvbmRpdGlvbmFsLiBUaGF0JiMzOTtzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBjbGFyaWZ5IGV4YWN0bHkgd2hlcmUgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBkZWZpbmVkIGJlY2F1c2UgdGhpcyBzZXR1cCBzZWVtcyB1bnVzdWFsLCBhbmQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBuZWVkIHRvIGJlIHN1cmUgd2hlcmUgYHNob3VsZF9hYm9ydF9zY2FuYCBjb21lcyBmcm9tLCBhbmQgd2hldGhlciBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBNR0xSVSBjb2RlIGF0IGFsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00OTEwPXN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDkyNi1cbm1tL3Ztc2Nhbi5jOjQ5Mjc6c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5NjI9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTg5LVxubW0vdm1zY2FuLmM6NDk5MDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNDk5MS1cdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUwOTMtXG5tbS92bXNjYW4uYzo1MDk0Olx0XHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXG5tbS92bXNjYW4uYy01MDk1LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHBvaW50aW5nIG1lIHRvd2FyZHMgbGluZSA0OTI3LCBnaXZlIG9yIHRha2UsIGluIGBtbS92bXNjYW4uY2AuIEltbWVkaWF0ZWx5LCBteSBicmFpbiBraWNrcyBpbnRvIGdlYXIuIGB2bXNjYW4uY2AgaXMgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciwgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgcmVjbGFpbWluZyBwYWdlcyBhbmQgZ2VuZXJhbGx5IGtlZXBpbmcgbWVtb3J5IHV0aWxpemF0aW9uIGhlYWx0aHkuIExpbmUgNDkyNy4uLiB0aGF0JiMzOTtzIGEgKnNwZWNpZmljKiBzcG90LiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGF0IHNwZWNpZmljIGFyZWEgaGFzIGJlZW4gZmxhZ2dlZC4gSXQmIzM5O3MgbGlrZWx5IHNvbWV0aGluZyByZWxhdGVkIHRvIHBhZ2UgZXZpY3Rpb24sIG1heWJlIGhhbmRsaW5nIGRpcnR5IHBhZ2VzLCBvciBwb3NzaWJseSBldmVuIHRoZSBiYWNrZ3JvdW5kIHJlY2xhaW0gcHJvY2VzcyBpdHNlbGYuIFRpbWUgdG8gbG9hZCB1cCB0aGUgc291cmNlIGFuZCBkaWcgaW4uIEkgd2lsbCBzdGFydCBieSBzZWVpbmcgd2hhdCB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUgaXMsIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGxpbmVzLCBhbmQgc2VlIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIGRvaW5nIGluIHRoYXQgYXJlYS4gQ2hhbmNlcyBhcmUgdGhlIGlzc3VlIGlzIHJlbGF0ZWQgdG8gYSBzdWJ0bGUgZWRnZSBjYXNlIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcmVjbGFpbWluZyBwYWdlcyB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBQZXJoYXBzIGEgcmFjZSBjb25kaXRpb24sIGEgc3VidGxlIG1lbW9yeSBsZWFrLCBvciBldmVuIGp1c3QgYW4gaW5lZmZpY2llbnQgYWxsb2NhdGlvbiBwYXR0ZXJuLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDkxMDpcdHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG40OTExOlx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgc3dhcHBpbmVzcylcbjQ5MTI6XHR7XG40OTEzOlx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIGV2aWN0YWJsZTtcbjQ5MTQ6XHRcbjQ5MTU6XHRcdGV2aWN0YWJsZSA9IGxydXZlY19ldmljdGFibGVfc2l6ZShscnV2ZWMsIHN3YXBwaW5lc3MpO1xuNDkxNjpcdFxuNDkxNzpcdFx0LyogdHJ5IHRvIHNjcmFwZSBhbGwgaXRzIG1lbW9yeSBpZiB0aGlzIG1lbWNnIHdhcyBkZWxldGVkICovXG40OTE4Olx0XHRpZiAoIW1lbV9jZ3JvdXBfb25saW5lKG1lbWNnKSlcbjQ5MTk6XHRcdFx0cmV0dXJuIGV2aWN0YWJsZTtcbjQ5MjA6XHRcbjQ5MjE6XHRcdG5yX3RvX3NjYW4gPSBhcHBseV9wcm9wb3J0aW9uYWxfcHJvdGVjdGlvbihtZW1jZywgc2MsIGV2aWN0YWJsZSk7XG40OTIyOlx0XHRucl90b19zY2FuIFx1MDAzZVx1MDAzZT0gc2MtXHUwMDNlcHJpb3JpdHk7XG40OTIzOlx0XG40OTI0Olx0XHRyZXR1cm4gbnJfdG9fc2NhbjtcbjQ5MjU6XHR9XG40OTI2Olx0XG40OTI3Olx0c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5Mjg6XHR7XG40OTI5Olx0XHRpbnQgaTtcbjQ5MzA6XHRcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XG40OTMxOlx0XG40OTMyOlx0XHRpZiAodW5saWtlbHkoc2MtXHUwMDNlcHJvYWN0aXZlIFx1MDAyNlx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXG40OTMzOlx0XHRcdHJldHVybiB0cnVlO1xuNDkzNDpcdFxuNDkzNTpcdFx0aWYgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2U9IG1heChzYy1cdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cdTAwM2VvcmRlcikpKVxuNDkzNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjQ5Mzc6XHRcbjQ5Mzg6XHRcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXG40OTM5Olx0XHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXHUwMDNlb3JkZXIpXG40OTQwOlx0XHRcdHJldHVybiBmYWxzZTtcbjQ5NDE6XHRcbjQ5NDI6XHRcdG1hcmsgPSBzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcdTAwMjYgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcgP1xuNDk0MzpcdFx0ICAgICAgIFdNQVJLX1BST01PIDogV01BUktfSElHSDtcbjQ5NDQ6XHRcbjQ5NDU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBzYy1cdTAwM2VyZWNsYWltX2lkeDsgaSYjNDM7JiM0MzspIHtcbjQ5NDY6XHRcdFx0c3RydWN0IHpvbmUgKnpvbmUgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKS1cdTAwM2Vub2RlX3pvbmVzICYjNDM7IGk7XG40OTQ3Olx0XHRcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHdtYXJrX3BhZ2VzKHpvbmUsIG1hcmspICYjNDM7IE1JTl9MUlVfQkFUQ0g7XG40OTQ4Olx0XG40OTQ5Olx0XHRcdGlmIChtYW5hZ2VkX3pvbmUoem9uZSkgXHUwMDI2XHUwMDI2ICF6b25lX3dhdGVybWFya19vayh6b25lLCAwLCBzaXplLCBzYy1cdTAwM2VyZWNsYWltX2lkeCwgMCkpXG40OTUwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuNDk1MTpcdFx0fVxuNDk1MjpcdFxuNDk1MzpcdFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cbjQ5NTQ6XHRcdHJldHVybiB0cnVlO1xuNDk1NTpcdH1cbjQ5NTY6XHRcbjQ5NTc6XHQvKlxuNDk1ODpcdCAqIEZvciBmdXR1cmUgb3B0aW1pemF0aW9uczpcbjQ5NTk6XHQgKiAxLiBEZWZlciB0cnlfdG9faW5jX21heF9zZXEoKSB0byB3b3JrcXVldWVzIHRvIHJlZHVjZSBsYXRlbmN5IGZvciBtZW1jZ1xuNDk2MDpcdCAqICAgIHJlY2xhaW0uXG40OTYxOlx0ICovXG40OTYyOlx0c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjQ5NjM6XHR7XG40OTY0Olx0XHRib29sIG5lZWRfcm90YXRlID0gZmFsc2UsIHNob3VsZF9hZ2UgPSBmYWxzZTtcbjQ5NjU6XHRcdGxvbmcgbnJfYmF0Y2gsIG5yX3RvX3NjYW47XG40OTY2Olx0XHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xuNDk2NzpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG40OTY4Olx0XG40OTY5Olx0XHRucl90b19zY2FuID0gZ2V0X25yX3RvX3NjYW4obHJ1dmVjLCBzYywgbWVtY2csIHN3YXBwaW5lc3MpO1xuNDk3MDpcdFx0d2hpbGUgKG5yX3RvX3NjYW4gXHUwMDNlIDApIHtcbjQ5NzE6XHRcdFx0aW50IGRlbHRhO1xuNDk3MjpcdFx0XHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xuNDk3MzpcdFxuNDk3NDpcdFx0XHRpZiAobWVtX2Nncm91cF9iZWxvd19taW4oc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIG1lbWNnKSkge1xuNDk3NTpcdFx0XHRcdG5lZWRfcm90YXRlID0gdHJ1ZTtcbjQ5NzY6XHRcdFx0XHRicmVhaztcbjQ5Nzc6XHRcdFx0fVxuNDk3ODpcdFxuNDk3OTpcdFx0XHRpZiAoc2hvdWxkX3J1bl9hZ2luZyhscnV2ZWMsIG1heF9zZXEsIHNjLCBzd2FwcGluZXNzKSkge1xuNDk4MDpcdFx0XHRcdGlmICh0cnlfdG9faW5jX21heF9zZXEobHJ1dmVjLCBtYXhfc2VxLCBzd2FwcGluZXNzLCBmYWxzZSkpXG40OTgxOlx0XHRcdFx0XHRuZWVkX3JvdGF0ZSA9IHRydWU7XG40OTgyOlx0XHRcdFx0c2hvdWxkX2FnZSA9IHRydWU7XG40OTgzOlx0XHRcdH1cbjQ5ODQ6XHRcbjQ5ODU6XHRcdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG40OTg2Olx0XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbjQ5ODc6XHRcdFx0aWYgKCFkZWx0YSlcbjQ5ODg6XHRcdFx0XHRicmVhaztcbjQ5ODk6XHRcbjQ5OTA6XHRcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxuNDk5MTpcdFx0XHRcdGJyZWFrO1xuNDk5MjpcdFxuNDk5MzpcdFx0XHQvKlxuNDk5NDpcdFx0XHQgKiBSb290IHJlY2xhaW0gbmVlZHMgcm90YXRpb24gd2hlbiBsb3cgb24gY29sZCBmb2xpbyBmb3IgYmV0dGVyXG40OTk1Olx0XHRcdCAqIGZhaXJuZXNzLiBDZ3JvdXAgcmVjbGFpbSBnZXRzIGZhaXJuZXNzIGZyb20gdGhlIGl0ZXJhdG9yLlxuNDk5NjpcdFx0XHQgKi9cbjQ5OTc6XHRcdFx0aWYgKHJvb3RfcmVjbGFpbShzYykgXHUwMDI2XHUwMDI2IHNob3VsZF9hZ2UpXG40OTk4Olx0XHRcdFx0YnJlYWs7XG40OTk5Olx0XG41MDAwOlx0XHRcdG5yX3RvX3NjYW4gLT0gZGVsdGE7XG41MDAxOlx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTAwMjpcdFx0fVxuNTAwMzpcdFxuNTAwNDpcdFx0cmV0dXJuIG5lZWRfcm90YXRlO1xuNTAwNTpcdH1cbjUwMDY6XHRcbjUwMDc6XHRzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjUwMDg6XHR7XG41MDA5Olx0XHRib29sIG5lZWRfcm90YXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTI0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBzaG91bGRfYWJvcnRfc2NhbmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBzaG91bGRfYWJvcnRfc2NhbmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcywgaXMgdGhpcyBhIGZ1bmN0aW9uIHNwZWNpZmljIHRvIE11bHRpLUdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSwgb3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgZ2VuZXJhbCB0aGF0IG1pZ2h0IGJlIHVzZWQgYWNyb3NzIG90aGVyIHJlY2xhaW0gbWVjaGFuaXNtcz8gVG8gZmlndXJlIHRoaXMgb3V0LCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIE15IHByaW1hcnkgc3VzcGVjdCBpcyBNR0xSVSwgYnV0IEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIHBvdGVudGlhbGx5IHVzZWQgbW9yZSBicm9hZGx5LiBUaGUgbW9zdCBkaXJlY3QgYXBwcm9hY2ggaXMgYSBwcmVwcm9jZXNzb3IgY2hlY2suIExldCYjMzk7cyBzZWUgaWYgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhhdCB3aWxsIGRlZmluaXRpdmVseSB0ZWxsIG1lIGlmIGl0JiMzOTtzIHRpZWQgdG8gdGhlIGdlbmVyYXRpb25hbCBMUlUgaW1wbGVtZW50YXRpb24sIGFzIGV4cGVjdGVkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIGFuc3dlciBhYm91dCBpdHMgc2NvcGUgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcmVjbGFpbSBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgyND1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMC1cbm1tL3Ztc2Nhbi5jOjgzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzMi0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg1ND1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtODU3LX1cbm1tL3Ztc2Nhbi5jOjg1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg1OS1cbi0tXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYyNC1cbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjI2LVxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MjktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODI4LVxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yODMwLVxuLS1cbm1tL3Ztc2Nhbi5jPTI5Mzg9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk2Ni1cbm1tL3Ztc2Nhbi5jOjI5Njc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMjk2OC1cbi0tXG5tbS92bXNjYW4uYz01ODU4PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTU4NTktXG5tbS92bXNjYW4uYzo1ODYwOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTg2MS1cbi0tXG5tbS92bXNjYW4uYz01ODcyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTg3Ni1cbm1tL3Ztc2Nhbi5jOjU4Nzc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01ODc4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDY0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gYW5kIEFib3J0IExvZ2ljKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbmFsaXR5LiBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgdmFyaWFibGUgaXMgZGVmaW5lZCBhbmQgdXNlZCBzb21ld2hlcmUgZGVlcCB3aXRoaW4gdGhpcyBjb2RlYmFzZS4gTGV0JiMzOTtzIHNlZS4uLiB5ZXAsIGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5lZCBhbmQgcG90ZW50aWFsbHkgdHJpZ2dlcmVkIG9uIGxpbmUgNDkyNy4KCk5vdywgSSYjMzk7bSBwcmV0dHkgc3VyZSBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUgYWZmZWN0aW5nIHRoaXMgd2hvbGUgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGd1YXJkZWQgYnkgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHByZXByb2Nlc3NvciBtYWNyby4gTGV0JiMzOTtzIG1ha2UgYWJzb2x1dGVseSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgY2xlYXJseS4gT2theSwgdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrICphcHBlYXJzKiB0byBzdGFydCBhdCBsaW5lIDI2MjUgYW5kIHJ1bnMgYWxsIHRoZSB3YXkgdG8gbGluZSA1ODYwLiBUaGF0JiMzOTtzIGEgaHVnZSBibG9jayBvZiBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBjb2RlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoYXQmIzM5O3MgdGhlIGZ1bGwgZXh0ZW50LiBJIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlIGxvZ2ljIEkmIzM5O20gbG9va2luZyBhdCBpcyBhY3R1YWxseSBpbmNsdWRlZCwgZXhjbHVkZWQsIG9yIHBhcnRpYWxseSBpbmNsdWRlZCBieSB0aGUgbWFjcm8uIFNvLCBJIHdpbGwgY29uZmlybSB0aGUgbGluZSBudW1iZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNjIwOlx0XHQvKiBBbHNvIHZhbHVhYmxlIGlmIGFub24gcGFnZXMgY2FuIGJlIGRlbW90ZWQ6ICovXG4yNjIxOlx0XHRyZXR1cm4gY2FuX2RlbW90ZShscnV2ZWNfcGdkYXQobHJ1dmVjKS1cdTAwM2Vub2RlX2lkLCBzYyxcbjI2MjI6XHRcdFx0XHQgIGxydXZlY19tZW1jZyhscnV2ZWMpKTtcbjI2MjM6XHR9XG4yNjI0Olx0XG4yNjI1Olx0I2lmZGVmIENPTkZJR19MUlVfR0VOXG4yNjI2Olx0XG4yNjI3Olx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG4yNjI4Olx0I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbjI2Mjk6XHRERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IExpbmUgNTg1NSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBhIHNwZWNpZmljIHBvaW50LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgbGluZSA1ODU1LiBJJiMzOTttIGhpdHRpbmcgYSBtZW50YWwgY2hlY2twb2ludCB0aGVyZSwgd2FudGluZyB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoYXQgcGFydGljdWxhciBwb2ludCBpbiB0aGUgZXhlY3V0aW9uIGZsb3cuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgd2h5IEkgc3VzcGVjdCB0aGF0IGxpbmUgNTg1NSBpcyBpbnRlcmVzdGluZy4gSXQgY291bGQgYmUgcmVsYXRlZCB0byB0aGUgY29yZSBhbGdvcml0aG0sIGEgZGF0YSBzdHJ1Y3R1cmUgbW9kaWZpY2F0aW9uLCBhIGNhbGwgdG8gYSBjcml0aWNhbCBmdW5jdGlvbiwgb3IgcGVyaGFwcyBldmVuIGFuIGFub21hbHkgSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2sgZG93bi4gVGhpcyBsaW5lIG51bWJlciBhY3RzIGFzIG15IGFuY2hvciB0byBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0OiB3aGF0IHByZWNlZGVzIGl0LCBhbmQgd2hhdCBmb2xsb3dzPyBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBsaW5lIGlzIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU4NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTg1NTpcdFxuNTg1NjpcdFx0cmV0dXJuIDA7XG41ODU3Olx0fTtcbjU4NTg6XHRsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG41ODU5Olx0XG41ODYwOlx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG41ODYxOlx0XG41ODYyOlx0c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjU4NjM6XHR7XG41ODY0Olx0XHRCVUlMRF9CVUcoKTtcbjU4NjU6XHR9XG41ODY2Olx0XG41ODY3Olx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG41ODY4Olx0e1xuNTg2OTpcdFx0QlVJTERfQlVHKCk7XG41ODcwOlx0fVxuNTg3MTpcdFxuNTg3MjpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG41ODczOlx0e1xuNTg3NDpcdFx0QlVJTERfQlVHKCk7XG41ODc1Olx0fVxuNTg3NjpcdFxuNTg3NzpcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuNTg3ODpcdFxuNTg3OTpcdHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjU4ODA6XHR7XG41ODgxOlx0XHR1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107XG41ODgyOlx0XHR1bnNpZ25lZCBsb25nIHRhcmdldHNbTlJfTFJVX0xJU1RTXTtcbjU4ODM6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbjtcbjU4ODQ6XHRcdGVudW0gbHJ1X2xpc3QgbHJ1O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKQWxyaWdodCwgbXkgaW50ZXJuYWwgY29tcGlsZXIgZmxhZ3MgYXJlIHN0YXJ0aW5nIHRvIGxpZ2h0IHVwLiAqc2hvdWxkXF9hYm9ydFxfc2NhbiouLi4gYWgsIHRoYXQmIzM5O3MgdHVja2VkIGF3YXkgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBBbmQgdGhhdCYjMzk7cyBjb25maXJtZWQgYnkgdGhlIGxpbmUgbnVtYmVyLCBsaW5lIDQ5MjcsIHdoaWNoIEkgcmVtZW1iZXIgYmVpbmcgc29tZXdoZXJlIGJldHdlZW4gdGhvc2UgZWFybGllciBjaGVja3MgdGhhdCB1c2VkIENPTkZJR1xfTFJVXF9HRU4sIHNwZWNpZmljYWxseSBiZXR3ZWVuIDI2MjUgYW5kIDU4NjAuIFNvLCBkZWZpbml0ZWx5LCAqQ09ORklHXF9MUlVcX0dFTiogaXMgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIEJ1dCBpcyB0aGF0ICphbGwqPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBmdW5jdGlvbj8gSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgKnNjLSZndDtwcm9hY3RpdmUqIG5leHQ7IGlzIHRoYXQgdGllZCB0byBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zPyBMZXQgbWUgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9hY3RpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy05NS1cbm1tL3Ztc2Nhbi5jOjk2Olx0LyogU3dhcHBpbmVzcyB2YWx1ZSBmb3IgcHJvYWN0aXZlIHJlY2xhaW0uIEFsd2F5cyB1c2Ugc2Nfc3dhcHBpbmVzcygpISAqL1xubW0vdm1zY2FuLmM6OTc6XHRpbnQgKnByb2FjdGl2ZV9zd2FwcGluZXNzO1xubW0vdm1zY2FuLmMtOTgtXG4tLVxubW0vdm1zY2FuLmMtMTIxLVx0LyogUHJvYWN0aXZlIHJlY2xhaW0gaW52b2tlZCBieSB1c2Vyc3BhY2UgKi9cbm1tL3Ztc2Nhbi5jOjEyMjpcdHVuc2lnbmVkIGludCBwcm9hY3RpdmU6MTtcbm1tL3Ztc2Nhbi5jLTEyMy1cbi0tXG5tbS92bXNjYW4uYz0yNDI9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS92bXNjYW4uYy0yNDMte1xubW0vdm1zY2FuLmM6MjQ0Olx0aWYgKHNjLVx1MDAzZXByb2FjdGl2ZSBcdTAwMjZcdTAwMjYgc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3MpXG5tbS92bXNjYW4uYzoyNDU6XHRcdHJldHVybiAqc2MtXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3M7XG5tbS92bXNjYW4uYy0yNDYtXHRyZXR1cm4gbWVtX2Nncm91cF9zd2FwcGluZXNzKG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYz0yODY9c3RhdGljIHZvaWQgZmx1c2hfcmVjbGFpbV9zdGF0ZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0zMDItXHQgKiBmcm9tIHRoZSB0YXJnZXQgbWVtY2c7IHByZXZlbnRpbmcgdW5uZWNlc3NhcnkgcmV0cmllcyBkdXJpbmcgbWVtY2dcbm1tL3Ztc2Nhbi5jOjMwMzpcdCAqIGNoYXJnaW5nIGFuZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBwcm9hY3RpdmUgcmVjbGFpbS5cbm1tL3Ztc2Nhbi5jLTMwNC1cdCAqXG4tLVxubW0vdm1zY2FuLmM9NDQ0PXN0YXRpYyBpbnQgcmVjbGFpbWVyX29mZnNldChzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NTMtXHRcdHJldHVybiBQR1NURUFMX0tIVUdFUEFHRUQgLSBQR1NURUFMX0tTV0FQRDtcbm1tL3Ztc2Nhbi5jOjQ1NDpcdGlmIChzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy00NTUtXHRcdHJldHVybiBQR1NURUFMX1BST0FDVElWRSAtIFBHU1RFQUxfS1NXQVBEO1xuLS1cbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTE1NjgtXHRcdCAqIG1sb2NrZWQgb3IgdG9vIGhvdCB0byByZWNsYWltLiBXZSBjYW4gZGlzYWJsZSByZWNsYWltXG5tbS92bXNjYW4uYzoxNTY5Olx0XHQgKiBmcm9tIHRvcCB0aWVyIG5vZGVzIGluIHByb2FjdGl2ZSByZWNsYWltIHRob3VnaCBhcyB0aGF0IGlzXG5tbS92bXNjYW4uYy0xNTcwLVx0XHQgKiBub3QgcmVhbCBtZW1vcnkgcHJlc3N1cmUuXG5tbS92bXNjYW4uYy0xNTcxLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjE1NzI6XHRcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKSB7XG5tbS92bXNjYW4uYy0xNTczLVx0XHRcdGRvX2RlbW90ZV9wYXNzID0gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9MjQ5Mz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI1MjMtXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xubW0vdm1zY2FuLmM6MjUyNDpcdFx0V0FSTl9PTl9PTkNFKCFzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmMtMjUyNS1cdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00OTMxLVxubW0vdm1zY2FuLmM6NDkzMjpcdGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcbm1tL3Ztc2Nhbi5jLTQ5MzMtXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTAzMC1cbm1tL3Ztc2Nhbi5jOjUwMzE6XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbm1tL3Ztc2Nhbi5jLTUwMzItXHRcdHZtcHJlc3N1cmUoc2MtXHUwMDNlZ2ZwX21hc2ssIHNjLVx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXG4tLVxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTI4LVxubW0vdm1zY2FuLmM6NTEyOTpcdHNldF9tbV93YWxrKE5VTEwsIHNjLVx1MDAzZXByb2FjdGl2ZSk7XG5tbS92bXNjYW4uYy01MTMwLVxuLS1cbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTU3LVxubW0vdm1zY2FuLmM6NTE1ODpcdHNldF9tbV93YWxrKHBnZGF0LCBzYy1cdTAwM2Vwcm9hY3RpdmUpO1xubW0vdm1zY2FuLmMtNTE1OS1cbi0tXG5tbS92bXNjYW4uYz01NjYxPXN0YXRpYyBzc2l6ZV90IGxydV9nZW5fc2VxX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqc3JjLFxuLS1cbm1tL3Ztc2Nhbi5jLTU2NzQtXHRcdC5nZnBfbWFzayA9IEdGUF9LRVJORUwsXG5tbS92bXNjYW4uYzo1Njc1Olx0XHQucHJvYWN0aXZlID0gdHJ1ZSxcbm1tL3Ztc2Nhbi5jLTU2NzYtXHR9O1xuLS1cbm1tL3Ztc2Nhbi5jPTYwNzA9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMzUtXHRcdC8qIFJlY29yZCB0aGUgZ3JvdXAmIzM5O3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXG5tbS92bXNjYW4uYzo2MTM2Olx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbm1tL3Ztc2Nhbi5jLTYxMzctXHRcdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIG1lbWNnLCBmYWxzZSxcbi0tXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxODAtXHQvKiBSZWNvcmQgdGhlIHN1YnRyZWUmIzM5O3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXG5tbS92bXNjYW4uYzo2MTgxOlx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5tbS92bXNjYW4uYy02MTgyLVx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXG4tLVxubW0vdm1zY2FuLmM9NjQ1Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb190cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTY0NzAtXHRkbyB7XG5tbS92bXNjYW4uYzo2NDcxOlx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbm1tL3Ztc2Nhbi5jLTY0NzItXHRcdFx0dm1wcmVzc3VyZV9wcmlvKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi0tXG5tbS92bXNjYW4uYz02NzY1PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjc3NC1cdFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxubW0vdm1zY2FuLmM6Njc3NTpcdFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jLTY3NzYtXHRcdC5nZnBfbWFzayA9IChjdXJyZW50X2dmcF9jb250ZXh0KGdmcF9tYXNrKSBcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxuLS1cbm1tL3Ztc2Nhbi5jLTY3ODMtXHRcdC5tYXlfc3dhcCA9ICEhKHJlY2xhaW1fb3B0aW9ucyBcdTAwMjYgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCksXG5tbS92bXNjYW4uYzo2Nzg0Olx0XHQucHJvYWN0aXZlID0gISEocmVjbGFpbV9vcHRpb25zIFx1MDAyNiBNRU1DR19SRUNMQUlNX1BST0FDVElWRSksXG5tbS92bXNjYW4uYy02Nzg1LVx0fTtcbi0tXG5tbS92bXNjYW4uYz03ODYzPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY4LVxubW0vdm1zY2FuLmM6Nzg2OTppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODcwLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03OTM3LVx0XHRcdFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxubW0vdm1zY2FuLmM6NzkzODpcdFx0XHRcdC5wcm9hY3RpdmVfc3dhcHBpbmVzcyA9IHN3YXBwaW5lc3MgPT0gLTEgPyBOVUxMIDogXHUwMDI2c3dhcHBpbmVzcyxcbm1tL3Ztc2Nhbi5jLTc5MzktXHRcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG4tLVxubW0vdm1zY2FuLmMtNzk0My1cdFx0XHRcdC5tYXlfc3dhcCA9IDEsXG5tbS92bXNjYW4uYzo3OTQ0Olx0XHRcdFx0LnByb2FjdGl2ZSA9IDEsXG5tbS92bXNjYW4uYy03OTQ1LVx0XHRcdH07XG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE2OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQcm9hY3RpdmUgUmVjbGFpbSBUcmlnZ2VycyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgcG9pbnRzIHdoZXJlIGBzYy0mZ3Q7cHJvYWN0aXZlYCBpcyBzZXQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaGFwcGVuaW5nIGluIGBscnVfZ2VuX3NlcV93cml0ZWAsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gUmlnaHQgYXdheSwgdGhlIGNvbm5lY3Rpb25zIGFyZSBzdGFydGluZyB0byBmb3JtLgoKYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBzeXNmcyBpbnRlcmZhY2UgaGVyZS4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uLiBBbHNvLCB0aGUgaW5jbHVzaW9uIG9mIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBzdWdnZXN0cyBtZW1jZyByZWNsYWltIGlzIGludm9sdmVkLiBBbmQgYGxydV9nZW5fc2VxX3dyaXRlYCBpcyBwcm9iYWJseSB0aWVkIHRvIE1HTFJVJiMzOTtzIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlLCBiYXNlZCBvbiB0aGUgY29udGV4dC4KCkhvbGQgb24gYSBzZWNvbmQuLi4gYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBjYWxsZWQgZnJvbSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgLiBJcyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIG9ubHkgdXNlZCB3aXRoIGBDT05GSUdfTFJVX0dFTmA/IEkgbmVlZCB0byBjaGVjay4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBZZXMsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgaXMgaW5kZWVkIHdyYXBwZWQgd2l0aCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGxpbmUgbnVtYmVycywgNDk2Mi4gVGhhdCYjMzk7cyBiZXR3ZWVuIDI2MjUgYW5kIDU4NjAsIHdoaWNoIG1lYW5zIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwgaGVyZSwgdGhhdCBjb25maXJtcyBpdC4KCk5vdywgYXJlIHRoZXJlIGFueSBvdGhlciByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gSSB3YW50IHRvIGxvb2sgYmFjayBhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGByZWNsYWltX3N0b3JlYCwgYW5kIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgwMDk9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTgwMTEtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbm1tL3Ztc2Nhbi5jOjgwMTI6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5tbS92bXNjYW4uYy04MDEzLVx0XHRcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC4KCioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmN5IExhbmRzY2FwZSBvZiBgcmVjbGFpbV9zdG9yZWAqKgoKUmlnaHQsIHNvIGByZWNsYWltX3N0b3JlYCwgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSB3aG9sZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IHJlY2xhbWF0aW9uIHByb2Nlc3MsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgY2xlYXJseSBoYW5naW5nIG91dCB1bmRlciBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYC4gVGhhdCBtYWtlcyBzZW5zZSAtIFN5c0ZTIGlzIHRoZSBjb250cm9sIHBsYW5lLCB0aGUgd2F5IHdlIGV4cG9zZSB0aGUgbWVtb3J5IGNvbnRyb2wgaW5mb3JtYXRpb24sIGFuZCBOVU1BLCB3ZWxsLCB0aGF0JiMzOTtzIGNyaXRpY2FsIGZvciBob3cgd2UgbWFuYWdlIG1lbW9yeSBhY3Jvc3MgdGhlIGRpZmZlcmVudCBub2Rlcy4gSSYjMzk7ZCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgY29kZSwgYnV0IG15IGluaXRpYWwgZ3V0IGZlZWxpbmcgaXMgdGhhdCBpdCBpcyB0aGUgZmVhdHVyZSBzdG9yZSB1c2VkIGJ5IFN5c0ZTLgoKQnV0IGhvbGQgb24sIHRoZXJlJiMzOTtzIGFub3RoZXIgcG9pbnQuIFRoaXMgYHNjLSZndDtwcm9hY3RpdmVgIGZsYWcuLi4gdGhhdCYjMzk7cyBhbHNvIGJlaW5nIHNldCB3aXRoaW4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBOb3csIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4uLiBhaCwgdGhhdCYjMzk7cyBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBtZWFucyB0aGlzIGByZWNsYWltX3N0b3JlYCBoYXMgYSBiaXQgb2YgYW4gaW50ZXJlc3RpbmcgcmVsYXRpb25zaGlwIHdpdGggdGhlIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuIFNvLCBpdCYjMzk7cyBub3QganVzdCBhIHN0YW5kYWxvbmUgU3lzRlMvTlVNQSBmZWF0dXJlLCBpdCYjMzk7cyBnb3QgYSBkaXJlY3QgbGluayB0byB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHByb2Nlc3Mgd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEkgaGF2ZSB0byB0aGluayBhYm91dCBob3cgdGhpcyBwcm9hY3RpdmUgZmxhZyBpbnRlcnBsYXlzIHdpdGggdGhlIG90aGVyIG1lY2hhbmlzbXMuIExvb2tzIGxpa2UgaXQmIzM5O3MgdGVsbGluZyB0aGUgc3lzdGVtIHRvIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCBmcmVlaW5nIG1lbW9yeSBwYWdlcyBvbiBhIHBlci1jZ3JvdXAgYmFzaXMsIEkmIzM5O2QgYmV0LiBJIGRlZmluaXRlbHkgbmVlZCB0byBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYCBhbmQgdHJhY2UgaG93IHRoaXMgZmxhZyBpcyB1c2VkIHRvIHNlZSBob3cgaXQgbWlnaHQgYmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY2dyb3VwIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wtdjEuYz0xNDgxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTUyMS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNTIyOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTUyMy1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE1NDA9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTU1My1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNTU0Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTU1NS1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzNDMtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzNDQ6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM0NS1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNTk1PXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNjU0LVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjY1NTpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI2NTYtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NzY4PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDgwMi1cbm1tL21lbWNvbnRyb2wuYzo0ODAzOlx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDgwNC1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4MjA9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NTQtXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ4NTU6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00ODU2LVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02NzI1PXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjc2NC1cbm1tL3Ztc2Nhbi5jOjY3NjU6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY3NjYtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjgwNS0jZWxzZVxubW0vdm1zY2FuLmM6NjgwNjp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjgwNy1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03ODY5PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy03OTI5LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6NzkzMDpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtNzkzMS1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTA0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBSZWNsYW1hdGlvbiBUcmlnZ2VycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20gd29ya3MsIGFuZCBJJiMzOTt2ZSB0cmFjZWQgYSBjYWxsIHBhdGggSSBuZWVkIHRvIHVuZGVyc3RhbmQuIEkgc2VlIHRoYXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGdldHRpbmcgaW52b2tlZCB3aXRoIGBNRU1DR19SRUNMQUlNX1BST0FDVElWRWAgYXMgYSBmbGFnLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCYjMzk7cyB0aGUgY29yZSBmdW5jdGlvbiBmb3IgZnJlZWluZyBwYWdlcyBzcGVjaWZpY2FsbHkgd2l0aGluIGEgbWVtb3J5IGNncm91cCwgYW5kIHRoZSBgUFJPQUNUSVZFYCBmbGFnIHNpZ25hbHMgdGhhdCB0aGUgcmVjbGFpbSBpcyBpbml0aWF0ZWQgcHJvYWN0aXZlbHksIHJhdGhlciB0aGFuIHJlYWN0aXZlbHkgdG8gYSBsb3cgbWVtb3J5IHNpdHVhdGlvbi4KCk5vdywgd2hlcmUgaXMgdGhpcyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgY2FsbCBjb21pbmcgZnJvbSBpbiB0aGUgZmlyc3QgcGxhY2U/IEFoLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoaXMgc2VlbXMgbG9naWNhbCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlIHRvIGFnZ3Jlc3NpdmVseSBmcmVlIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgaGFuZyBvbiwgdGhpcyBpc24mIzM5O3QgdGhlIG9ubHkgcGxhY2UgaXQmIzM5O3MgdHJpZ2dlcmVkLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpdHNlbGYsIHdoaWNoIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IG1lYW5zIHRoaXMgcHJvYWN0aXZlIHJlY2xhbWF0aW9uIGlzbiYjMzk7dCBleGNsdXNpdmVseSBhIHVzZXItdHJpZ2dlcmVkIGZ1bmN0aW9uLCBidXQgaXMgYWxzbyBwYXJ0IG9mIHRoZSBtb3JlIGdlbmVyYWwgbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLiBUaGlzIG1lYW5zIGl0IG1pZ2h0IGJlIGludGVncmF0ZWQgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgdG8gdHJ5IGFuZCBmcmVlIHVwIG1lbW9yeSBiYXNlZCBvbiBzb21lIGludGVybmFsIHRyaWdnZXJzIGFuZCB0aHJlc2hvbGRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGF0aHMgaW50ZXJhY3QgYW5kIHdoZXRoZXIgdGhleSYjMzk7cmUgYmVoYXZpbmcgYXMgaW50ZW5kZWQuIFRoZXJlJiMzOTtzIHByb2JhYmx5IG92ZXJsYXAsIGJ1dCB0aGF0IGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9uIGhvdyBtZW1vcnkgaXMgY29udHJvbGxlZCBhbmQgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTYzMT1leHRlcm4gdm9pZCByZWNsYWltX3Rocm90dGxlKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0gdm1zY2FuX3Rocm90dGxlX3N0YXRlIHJlYXNvbik7XG5tbS9pbnRlcm5hbC5oOjYzMjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS9pbnRlcm5hbC5oLTYzMy1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00OTg5PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00OTk0LVxubW0vbWVtY29udHJvbC5jOjQ5OTU6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGJ1ZiwgbWVtY2csIE5VTEwpO1xubW0vbWVtY29udHJvbC5jLTQ5OTYtXHRpZiAocmV0KVxuLS1cbm1tL3Ztc2Nhbi5jPTc4NjM9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc4NjgtXG5tbS92bXNjYW4uYzo3ODY5OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL3Ztc2Nhbi5jLTc4NzAtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxubW0vdm1zY2FuLmMtODAxNy1cbm1tL3Ztc2Nhbi5jOjgwMTg6XHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy04MDE5LVx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzNTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUHJvYWN0aXZlIFJlY2xhaW0gYW5kIFBvdGVudGlhbCBGdXp6aW5nIFRhcmdldHMqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyB0aGUgY2dyb3VwIHYyIGludGVyZmFjZSBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgZmVhdHVyZSDigJMgb3IgYHJlY2xhaW1gIGluIHRoZSBzeXNmcyBub2RlIGRpcmVjdG9yeS4gVGhpcyAmIzM0O3Byb2FjdGl2ZSByZWNsYWltJiMzNDsgZnVuY3Rpb25hbGl0eSBpcyB0cmlnZ2VyZWQgd2hlbiBhIHVzZXIgd3JpdGVzIHRvIHRoYXQgY29udHJvbCBmaWxlLiBJIHNlZSB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBjaGVjayB0aGF0IHdpbGwgYWJvcnQgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBwcm9jZXNzIGlmIHRoZSB0YXNrIGluaXRpYXRpbmcgdGhlIHJlY2xhaW0gaGFzIGEgc2lnbmFsIHBlbmRpbmcuCgpUaGlzIGlzIGRlZmluaXRlbHkgYSBwYXRoIHRoYXQmIzM5O3MgYm90aCBmdW5jdGlvbmFsIGFuZCBleHBvc2VkIHRvIHVzZXJzcGFjZSDigJMgdXNlcnMgY2FuIGludGVyYWN0IHdpdGggaXQgYnkgd3JpdGluZyB0byB0aGUgY29udHJvbCBmaWxlcyBhbmQgc2VuZGluZyBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcywgdGh1cyBsZWFkaW5nIGl0IHRvIHByb2FjdGl2ZSByZWNsYWltLiBUaGUgc2lnbmFsIHBhdGggbWFrZXMgaXQgcmlwZSBmb3IgZnV6emluZy4gR2l2ZW4gdGhlIGZ1bmN0aW9uYWwgcGF0aCBpdCBpcyB3b3J0aCBhIHRlc3QuCgpNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX21hbnlgIHN5bWJvbHMuIFdhaXQgYSBzZWNvbmQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKmFsc28qIGNhbGxlZCBmcm9tIGBzaHJpbmtfbWFueWAsIHdoaWNoIGlzIGl0c2VsZiB1c2VkIGluIGEgZmVhdHVyZSByZWxhdGVkIHRvIGBDT05GSUdfTFJVX0dFTmAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBjb25maXJtIHRoYXQgYHNocmlua19tYW55YCBpcyBhY3R1YWxseSB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDQ3LVxubW0vdm1zY2FuLmM6NTA0ODpzdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbm1tL3Ztc2Nhbi5jLTUwNDkte1xuLS1cbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTY3LVx0ZWxzZVxubW0vdm1zY2FuLmM6NTE2ODpcdFx0c2hyaW5rX21hbnkocGdkYXQsIHNjKTtcbm1tL3Ztc2Nhbi5jLTUxNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDkyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgcGlucG9pbnRlZCBgc2hyaW5rX21hbnlgLCBhbmQgaXQmIzM5O3MgZGVmaW5pdGVseSB3aXRoaW4gdGhlIHNwZWNpZmllZCBsaW5lIHJhbmdlLCBjb25maXJtaW5nIHRoYXQgYENPTkZJR19MUlVfR0VOYCBpcyBlc3NlbnRpYWwgaGVyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsdXJraW5nIGFyb3VuZCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IHRoYXQgYENPTkZJR19NRU1DR2AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGNncm91cCBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uYWxpdHkgaW4gYG1tL21lbWNvbnRyb2wuY2AgYWN0dWFsbHkgbGl2ZXMgdW5kZXIgdGhhdCBgQ09ORklHX01FTUNHYCBndWFyZC4gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYG1tL21lbWNvbnRyb2wuY2AgZ2V0cyBjb21waWxlZCBvbmx5IGlmIGBDT05GSUdfTUVNQ0dgIGlzIGVuYWJsZWQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSB0aG9yb3VnaCBhbmQgdmVyaWZ5LCBJIHNob3VsZCBjaGVjayB0aGUgcmVsZXZhbnQgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbm1tL01ha2VmaWxlLTMwLUtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4tLVxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSAmIzQzOz0gbWVtZmRfbHVvLm9cbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICYjNDM7PSBtZW1jb250cm9sLXYxLm9cbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gYnBmX21lbWNvbnRyb2wub1xubW0vTWFrZWZpbGUtMTA4LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjkwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgaGVyZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBmb3IgYG1lbWNvbnRyb2wub2AgdG8gZnVuY3Rpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgYHJlY2xhaW1fc3RvcmVgLiBJIGtub3cgdGhhdCYjMzk7cyBhbiBhbHRlcm5hdGl2ZSBtZXRob2QgdG8gaW5pdGlhdGUgcHJvYWN0aXZlIHJlY2xhaW0sIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBjb25maWd1cmluZyBldmVyeXRoaW5nIGNvcnJlY3RseS4KCkhtbSwgd2hhdCBhYm91dCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCBpbiByZWxhdGlvbiB0byBgcmVjbGFpbV9zdG9yZWA/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEJ1dCB0aGUgY29yZSBkZXBlbmRlbmN5IEkmIzM5O20gcmVhbGx5IGNvbmNlcm5lZCB3aXRoIGhlcmUgaXMgYENPTkZJR19MUlVfR0VOYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBvbmUgZHJpdmluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpBbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUga2VybmVsIG9yIGlmIGl0IHJlcXVpcmVzIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIGNvbmZpcm0gdGhhdC4gU2luY2UgaXTigJlzIGEga2VybmVsIGNvbmZpZyBmbGFnLCBJIG5lZWQgdG8gY2hlY2sgYG1tL0tjb25maWdgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xNDA2PWVuZGlmICMgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTE0MDgtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE3LVxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjMtXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyNS1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMyLVxubW0vS2NvbmZpZzoxNDMzOmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODMwMwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMUlUgR2VuZXJhdGlvbiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgc2VlIGBMUlVfR0VOYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBCdXQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgYExSVV9HRU5fRU5BQkxFRGAgYWxzbyBwbGF5cyBhIHJvbGUgaW4gZW5hYmxpbmcgdGhpcyBmZWF0dXJlIGJ5IGRlZmF1bHQsIG9yIGlmIHJ1bnRpbWUgY29udHJvbCB2aWEgc3lzZnMgaXMgdGhlIG9ubHkgd2F5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGltcGFjdCBvZiBqdXN0IGBMUlVfR0VOYC4KCkVzc2VudGlhbGx5LCBpZiBgTFJVX0dFTmAgaXMgZW5hYmxlZCwgdGhlIHJlbGV2YW50IGNvZGUgd2lsbCBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIElmIGBMUlVfR0VOX0VOQUJMRURgIGlzbiYjMzk7dCBzZXQsIHRoZW4gTUdMUlUgbWlnaHQgYmUgZGlzYWJsZWQgYXQgcnVudGltZSBieSBkZWZhdWx0LgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBpbml0X2xydV9nZW5gIGZ1bmN0aW9uIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbml0X2xydV9nZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01ODE0PXZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy01ODQyLVxubW0vdm1zY2FuLmM6NTg0MzpzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcbm1tL3Ztc2Nhbi5jLTU4NDQte1xuLS1cbm1tL3Ztc2Nhbi5jLTU4NTctfTtcbm1tL3Ztc2Nhbi5jOjU4NTg6bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xubW0vdm1zY2FuLmMtNTg1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBpbml0X2xydV9nZW5gKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaW5pdF9scnVfZ2VuYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBMUlUgY2FjaGUgY29udGV4dC4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgY3JpdGljYWwgdG8gdGhlIExSVSBldmljdGlvbiBwb2xpY3kuIFByb2JhYmx5IHNldHRpbmcgdXAgdGhlIGRvdWJseS1saW5rZWQgbGlzdCBmb3IgcmVjZW5jeSB0cmFja2luZyBhbmQgdGhlIGhhc2ggdGFibGUgKGxpa2VseSBhIGRpY3Rpb25hcnkgb3IgZXF1aXZhbGVudCBpbiB3aGF0ZXZlciBsYW5ndWFnZSB0aGlzIGlzKSBmb3IgZmFzdCBrZXkgbG9va3Vwcy4KCkkgaW1tZWRpYXRlbHkgc3RhcnQgY29uc2lkZXJpbmcgZWRnZSBjYXNlcy4gRG9lcyBpdCBoYW5kbGUgZW1wdHkgY2FjaGVzIGdyYWNlZnVsbHk/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBpZiB0aGlzIGlzIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQgZHVyaW5nIGluaXRpYWxpemF0aW9uPyBXaGF0IGFib3V0IHByZS1hbGxvY2F0aW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgb3IgaXMgaXQgZHluYW1pY2FsbHkgYWxsb2NhdGluZyBhcyBuZWVkZWQsIHdoaWNoIHdvdWxkIGltcGFjdCBwZXJmb3JtYW5jZT8gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY2FjaGUgc2l6ZTsgaXMgaXQgYSBmaXhlZCBzaXplIG9yIGR5bmFtaWNhbGx5IHJlc2l6YWJsZT8gQW5kIGhvdyBkb2VzIGl0IGhhbmRsZSB0aGUgJiMzOTtob3Qgc3RhcnQmIzM5OyBwcm9ibGVtIC0gd2hlbiB5b3UgaW5pdGlhbGl6ZSBhbiBMUlUsIGlzIGl0ICYjMzk7d2FybSYjMzk7IG9yIGRvZXMgaXQgYXNzdW1lIGV2ZXJ5dGhpbmcgc3RhcnRzIHdpdGggZXF1YWwgcmVjZW5jeT8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaWYgdGhlIGluaXRpYWwgY2FjaGUgc2l6ZSBpcyBzdWJzdGFudGlhbC4gQmlnIE8gbm90YXRpb24gd2lsbCB0ZWxsIHRoZSB0YWxlLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgbG9vayBmb3IgYW55IGhpbnRzLCBjb21tZW50cywgb3IgdmFyaWFibGUgbmFtZXMgdGhhdCByZXZlYWwgd2hhdCBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGNvbmN1cnJlbnQgcHJvZ3JhbW1pbmcgcHJpbWl0aXZlcyBhcmUgYXQgcGxheS4gQmFzaWNhbGx5LCBhbSBJIGdvaW5nIHRvIHNlZSBtdXRleGVzLCBhdG9taWMgb3BlcmF0aW9ucywgb3Igc29tZXRoaW5nIG1vcmUgZWxlZ2FudD8KCkZpbmFsbHksIG15IGV4cGVydCBleWUgbG9va3MgZm9yIGFueSBwb3RlbnRpYWwgZGVzaWduIGZsYXdzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRoZSBMUlUsIHNvIEkgd2FudCB0byBtYWtlIHN1cmUgaXQgaXMgbm90IHRoZSBib3R0bGVuZWNrLiBEb2VzIHRoZSBvdmVyYWxsIGRlc2lnbiBzZWVtIHdlbGwtc3RydWN0dXJlZCwgb3IgYXJlIHRoZXJlIGFueSBzaWducyBvZiBwcmVtYXR1cmUgb3B0aW1pemF0aW9uIG9yLCB3b3JzZSwgcG9vcmx5LWNvbmNlaXZlZCBkZXNpZ24gZGVjaXNpb25zPyBJIHdpbGwgbWFrZSBteSByZWNvbW1lbmRhdGlvbnMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1ODQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU4NDA6XHRcbjU4NDE6XHQjZW5kaWYgLyogQ09ORklHX01FTUNHICovXG41ODQyOlx0XG41ODQzOlx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXG41ODQ0Olx0e1xuNTg0NTpcdFx0QlVJTERfQlVHX09OKE1JTl9OUl9HRU5TICYjNDM7IDEgXHUwMDNlPSBNQVhfTlJfR0VOUyk7XG41ODQ2Olx0XHRCVUlMRF9CVUdfT04oQklUKExSVV9HRU5fV0lEVEgpIFx1MDAzYz0gTUFYX05SX0dFTlMpO1xuNTg0NzpcdFxuNTg0ODpcdFx0aWYgKHN5c2ZzX2NyZWF0ZV9ncm91cChtbV9rb2JqLCBcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxuNTg0OTpcdFx0XHRwcl9lcnIoXCYjMzQ7bHJ1X2dlbjogZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBncm91cFxcblwmIzM0Oyk7XG41ODUwOlx0XG41ODUxOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlblwmIzM0OywgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXG41ODUyOlx0XHRcdFx0XHQgICAgXHUwMDI2bHJ1X2dlbl9yd19mb3BzKTtcbjU4NTM6XHRcdGRlYnVnZnNfY3JlYXRlX2ZpbGVfYXV4X251bShcJiMzNDtscnVfZ2VuX2Z1bGxcJiMzNDssIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXG41ODU0Olx0XHRcdFx0XHQgICAgXHUwMDI2bHJ1X2dlbl9yb19mb3BzKTtcbjU4NTU6XHRcbjU4NTY6XHRcdHJldHVybiAwO1xuNTg1NzpcdH07XG41ODU4Olx0bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xuNTg1OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTU5OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGlnZ2luZyBpbnRvIGBMUlVfR0VOX0VOQUJMRURgIGFuZCBgbHJ1X2dlbl9jYXBzYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGlzIGNvcnJlY3RseS4gSXQgc2VlbXMgbGlrZSBgTFJVX0dFTl9FTkFCTEVEYCBpcyB0aGUgY29udHJvbCBzd2l0Y2ggZm9yIGhvdyB3ZSBjb25maWd1cmUgYGxydV9nZW5fY2Fwc2AuIEkmIzM5O3ZlIGdvdCB0byBjb25maXJtIHRoaXMgaW50ZXJhY3Rpb24uIExldCYjMzk7cyBub3QganVzdCBhc3N1bWU7IGEgcXVpY2sgY2hlY2sgb2YgaG93IGBscnVfZ2VuX2NhcHNgIGlzIGRlZmluZWQgYW5kIHVzZWQgaW4gcmVsYXRpb24gdG8gdGhhdCBlbmFibGUgZmxhZyBzaG91bGQgY2xhcmlmeSB0aGluZ3MgaW1tZWRpYXRlbHkuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3IgY29kZSB3aGVyZSB0aG9zZSBhcmUgZGVmaW5lZCB0byB2ZXJpZnkgdGhlIGV4YWN0IHJlbGF0aW9uc2hpcC4gVGhpcyBpcyBpbXBvcnRhbnQgYmVmb3JlIEkgY2FuIG1vdmUgZm9yd2FyZCBjb25maWRlbnRseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9jYXBzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jLTI2MjgtI2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jOjI2Mjk6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYzoyNjMwOiNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2MzEtI2Vsc2Vcbm1tL3Ztc2Nhbi5jOjI2MzI6REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfRkFMU0UobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xubW0vdm1zY2FuLmM6MjYzMzojZGVmaW5lIGdldF9jYXAoY2FwKVx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbm1tL3Ztc2Nhbi5jLTI2MzQtI2VuZGlmXG4tLVxubW0vdm1zY2FuLmM9NTI2OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTI4NC1cdGlmIChlbmFibGVkKVxubW0vdm1zY2FuLmM6NTI4NTpcdFx0c3RhdGljX2JyYW5jaF9lbmFibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG5tbS92bXNjYW4uYy01Mjg2LVx0ZWxzZVxubW0vdm1zY2FuLmM6NTI4NzpcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xubW0vdm1zY2FuLmMtNTI4OC1cbi0tXG5tbS92bXNjYW4uYz01MzY2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01Mzg0LVx0XHRlbHNlIGlmIChlbmFibGVkKVxubW0vdm1zY2FuLmM6NTM4NTpcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xubW0vdm1zY2FuLmMtNTM4Ni1cdFx0ZWxzZVxubW0vdm1zY2FuLmM6NTM4NzpcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbm1tL3Ztc2Nhbi5jLTUzODgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMzYxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBUcmFpbiBvZiBUaG91Z2h0KioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyBsaWtlIHNldHRpbmcgYExSVV9HRU5fRU5BQkxFRGAgYXV0b21hdGljYWxseSB0dXJucyB0aGUgd2hvbGUgZmVhdHVyZSBvbiwgd2hpY2ggaXMgYSBjb21tb24gcHJhY3RpY2UuIEhtbSwgcGVyaGFwcyBpdCB3b3VsZCBiZSBjbGVhbmVyLCBmb3IgbWFpbnRhaW5hYmlsaXR5IGFuZCBjbGFyaXR5LCB0byBhZGQgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgIHRvIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2V0LiBUaGF0IHdvdWxkIG1ha2UgdGhlIGRlcGVuZGVuY2llcyBleHBsaWNpdCBhbmQgZWFzaWVyIHRvIG1hbmFnZSBsb25nLXRlcm0uCgpOb3csIEkmIzM5O20gc3BvdHRpbmcgYHNob3VsZF9hYm9ydF9zY2FuYCBiZWluZyB1dGlsaXplZCBpbiBgc2hyaW5rX21hbnlgIHRvbywgd2hpY2ggaXMgYSBwb2ludCBvZiBjb25jZXJuLiBJcyBgc2hyaW5rX21hbnlgIGxpbWl0ZWQgdG8gb25seSBiZWluZyBpbnZva2VkIHdoZW4gdGhlIE1HTFJVIGlzIGFjdGl2ZT8gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIG5vdCBmb3JnZXR0aW5nIHNvbWV0aGluZy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBscnVfZ2VuX3Nocmlua19ub2RlYCB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgcHJvY2VzcyBhbmQgTUdMUlUgZW5hYmxlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdyBoZXJlIHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fc2hyaW5rX25vZGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUxMzgtXG5tbS92bXNjYW4uYzo1MTM5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01MTQwLXtcbi0tXG5tbS92bXNjYW4uYz01ODY3PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NzEtXG5tbS92bXNjYW4uYzo1ODcyOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy01ODczLXtcbi0tXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNTYtXHRcdG1lbXNldChcdTAwMjZzYy1cdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVx1MDAzZW5yKSk7XG5tbS92bXNjYW4uYzo2MTU3Olx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG5tbS92bXNjYW4uYy02MTU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTAzMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNvbnRleHQgaXMgcHJlc3VtYWJseSBhbGdvcml0aG0gZGVzaWduIG9yIG9wdGltaXphdGlvbjoKCioqQ2hlY2tpbmcgYHNocmlua19ub2RlYCoqCgpBbHJpZ2h0LCAqc2hyaW5rX25vZGUqLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHRoZSBvbmUgdGhhdCBsaWtlbHkgcmVkdWNlcyB0aGUgc2l6ZSBvciBjb21wbGV4aXR5IG9mIGEgbm9kZSBpbiB3aGF0ZXZlciBkYXRhIHN0cnVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gQ291bGQgYmUgYSB0cmVlLCBhIGdyYXBoLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4uLiBkb2VzbiYjMzk7dCBtYXR0ZXIsIHRoZSBuYW1lIHNheXMgaXQmIzM5O3MgYWJvdXQgb3B0aW1pemF0aW9uIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGF0IGEgbm9kZSBsZXZlbC4gTXkgZm9jdXMgaXMgaW1tZWRpYXRlbHkgb246CgoqICAgKipJbXBsZW1lbnRhdGlvbjoqKiBIb3cgZG9lcyBpdCAqYWN0dWFsbHkqIHdvcms/IFdoYXQmIzM5O3MgdGhlIGNvcmUgbG9naWM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHJlbW92aW5nIGVsZW1lbnRzLCBtZXJnaW5nIHN1Yi1ub2RlcywgcmVkdWNpbmcgdGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBub2RlLCBvciBzb21ldGhpbmcgbW9yZSBleG90aWMgbGlrZSBsYXp5LWRlY29uc3RydWN0aW9uPwoqICAgKipTaWRlIEVmZmVjdHM6KiogV2hhdCBlbHNlIGRvZXMgaXQgdG91Y2g/IERvZXMgaXQgcG90ZW50aWFsbHkgaW52YWxpZGF0ZSBpdGVyYXRvcnMsIHRyaWdnZXIgcmViYWxhbmNpbmcgaWYgaXQmIzM5O3MgYSBiYWxhbmNlZCB0cmVlLCBvciByZXF1aXJlIHVwZGF0ZXMgdG8gcGFyZW50L2NoaWxkIHBvaW50ZXJzPyBUaG9zZSBoaWRkZW4gaW50ZXJhY3Rpb25zIGFyZSB1c3VhbGx5IHdoZXJlIHRoZSBidWdzIGxpZS4gR290dGEgZXhhbWluZSAqYWxsKiBpbXBsaWNhdGlvbnMgb2YgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgoqICAgKipQZXJmb3JtYW5jZToqKiBXaGF0JiMzOTtzIHRoZSB0aW1lIGFuZCBzcGFjZSBjb21wbGV4aXR5PyBJcyBpdCBPKDEpLCBPKGxvZyBuKSwgb3Igd29yc2U/IE1vcmUgaW1wb3J0YW50bHksIGhvdyAqb2Z0ZW4qIGlzIGl0IGNhbGxlZD8gQSBzbG93LCBpbmZyZXF1ZW50bHktdXNlZCBmdW5jdGlvbiBpcyBvbmUgdGhpbmcsIGJ1dCBhIGJvdHRsZW5lY2sgaW4gYSBjcml0aWNhbCBwYXRoIGlzIGEgZGlzYXN0ZXIuIElmIHRoaXMgaXMgaW52b2tlZCBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgZnVuY3Rpb24sIEkgbmVlZCB0byBrbm93IHRoZSBlZmZlY3RzIG9uIHRob3NlLgoqICAgKipVc2FnZSBDb250ZXh0OioqIFdoYXQmIzM5O3MgdGhlIGJpZ2dlciBwaWN0dXJlPyAqV2h5KiBhcmUgd2Ugc2hyaW5raW5nIG5vZGVzPyBJcyBpdCB0byBwcmV2ZW50IGFuIG92ZXJmbG93PyBPcHRpbWl6ZSBtZW1vcnkgdXNhZ2U/IE9yIGVuaGFuY2UgcGVyZm9ybWFuY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nICpnb2FsKiB0byBldmFsdWF0ZSBpZiBgc2hyaW5rX25vZGVgIGlzIGRvaW5nIGl0cyBqb2IgZWZmZWN0aXZlbHkuIEFyZSB3ZSBtYWtpbmcgdGhlIHN0cnVjdHVyZSAmIzM5O3NtYXJ0ZXImIzM5OyBieSByZW9yZ2FuaXppbmcgdGhlIG5vZGVzPyBPciBwZXJoYXBzIHJlbW92aW5nIGRhdGEgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3M/CiogICAqKlByZSBhbmQgUG9zdCBDb25kaXRpb25zOioqIFdoYXQgYXJlIHRoZSBleHBlY3RlZCBpbnB1dHMgYW5kIG91dHB1dHM/IERvZXMgaXQgaGFuZGxlIGVkZ2UgY2FzZXM/IENhbiBpdCBkZWFsIHdpdGggZW1wdHkgb3IgbnVsbCBub2Rlcz8gRG9lcyBpdCBtYWludGFpbiBpbnZhcmlhbnRzIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlPyBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIGRvY3VtZW50ZWQgaWYgSSBhbSB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4KCkluIHNob3J0LCAmIzM0O0xldCYjMzk7cyBjaGVjayBgc2hyaW5rX25vZGVgJiMzNDsgaXMgdGhlIGJlZ2lubmluZyBvZiBhIGRlZXAgZGl2ZS4gSSYjMzk7bSBnb2luZyB0byBwdWxsIHVwIHRoZSBjb2RlLCB0cmFjZSB0aHJvdWdoIGl0cyBleGVjdXRpb24gd2l0aCB2YXJpb3VzIGlucHV0cywgYW5kIHByb2JhYmx5IHJ1biBzb21lIHRlc3QgY2FzZXMgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGRvaW5nIHdoYXQgSSB0aGluayBpdCYjMzk7cyBkb2luZywgYW5kIHRoYXQgaXQgaXNuJiMzOTt0IGdvaW5nIHRvIGJsb3cgdXAgdGhlIHdob2xlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBob3cgbXVjaCB3b3JrIGlzIGludm9sdmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjE0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MTQ1Olx0XHRcdH1cbjYxNDY6XHRcdH0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcih0YXJnZXRfbWVtY2csIG1lbWNnLCBwYXJ0aWFsKSkpO1xuNjE0NzpcdH1cbjYxNDg6XHRcbjYxNDk6XHRzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYxNTA6XHR7XG42MTUxOlx0XHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XG42MTUyOlx0XHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xuNjE1MzpcdFx0Ym9vbCByZWNsYWltYWJsZSA9IGZhbHNlO1xuNjE1NDpcdFxuNjE1NTpcdFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xuNjE1NjpcdFx0XHRtZW1zZXQoXHUwMDI2c2MtXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cdTAwM2VucikpO1xuNjE1NzpcdFx0XHRscnVfZ2VuX3Nocmlua19ub2RlKHBnZGF0LCBzYyk7XG42MTU4Olx0XG42MTU5Olx0XHRcdGlmICghbHJ1X2dlbl9zd2l0Y2hpbmcoKSlcbjYxNjA6XHRcdFx0XHRyZXR1cm47XG42MTYxOlx0XG42MTYyOlx0XHR9XG42MTYzOlx0XG42MTY0Olx0XHR0YXJnZXRfbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHBnZGF0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE5NTcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTFJVIEdlbmVyYXRpb24gYW5kIFByb2FjdGl2ZSBSZWNsYWltKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYGxydV9nZW5fc2hyaW5rX25vZGVgIGdldHMgaW52b2tlZC4gSXQmIzM5O3MgdHJpZ2dlcmVkIG9ubHkgaWYgYGxydV9nZW5fZW5hYmxlZCgpYCByZXR1cm5zIHRydWUuIERpdmluZyBkZWVwZXIsIGBscnVfZ2VuX2VuYWJsZWQoKWAgaGluZ2VzIG9uIGNoZWNraW5nIHRoZSBgbHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV1gIGNhcGFiaWxpdHkuIENsZWFybHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBmbGFncyBhcmUgbm9uLW5lZ290aWFibGUgcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRob3NlLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcGVydGluZW50PyBNeSBtaW5kIHdlbnQgc3RyYWlnaHQgdG8gYENPTkZJR19NRU1DR2AuIFRoZSBjb2RlIHRlbGxzIG1lIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gY3JpdGljYWwgaGVyZS4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYW5kIHRoYXQgY29kZSByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gRnVydGhlcm1vcmUsIEkgc2VlIGl0JiMzOTtzIGFsc28gY2FsbGVkIGZyb20gYHJlY2xhaW1fc3RvcmVgIGluIGBtbS92bXNjYW4uY2AsIHdoaWNoIHJlcXVpcmVzIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLiBTbywgYENPTkZJR19NRU1DR2AgZGVmaW5pdGVseSBsb29rcyBsaWtlIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGluY2x1c2lvbi4gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgbW9yZSBjbGFyaXR5IGJ5IGNoZWNraW5nIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGUgZGV0YWlscyBiZWhpbmQgYE1FTUNHYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgc29tZXRoaW5nIGp1c3QgY2xpY2tlZC4gSXQgbG9va3MgbGlrZSBgTUVNQ0dgIGlzIGFjdHVhbGx5IGRlZmluZWQgd2l0aGluIGBpbml0L0tjb25maWdgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UuLi4gd2VsbCwgSSBpbW1lZGlhdGVseSBzdGFydCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBMb2NhdGluZyBpdCB0aGVyZSBsaWtlbHkgbWVhbnMgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gdGhlIHN5c3RlbSYjMzk7cyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgb3IgcGVyaGFwcyB0aWVkIHRvIGEgY29yZSBjb21wb25lbnQgdGhhdCYjMzk7cyBicm91Z2h0IHVwIHZlcnkgZWFybHkuIEkmIzM5O20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCBtZW50YWxseSB0cmFjaW5nIGhvdyB0aGlzIGNvbmZpZyBvcHRpb24gaW1wYWN0cyBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoeSBpdCBtaWdodCBiZSBpbiBpbml0IGFuZCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbml0IGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjM9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzItXG5pbml0L0tjb25maWc6MTA3Mzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDgxLVxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDgzLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDg4LVxuaW5pdC9LY29uZmlnOjEwODk6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5MC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5NS1cbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTEwOTctXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9hY3RpdmUgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGVuYWJsZWQsIGJlY2F1c2UgdGhhdCBzZWVtcyByZWxldmFudC4gSSYjMzk7bSBjaGVja2luZyBpZiBgTFJVX0dFTmAgaGFzIGEgZGVwZW5kZW5jeSBvbiBgTUVNQ0dgLCBidXQgaXQgZG9lc24mIzM5O3QgYXBwZWFyIHRvLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoLCB0aG91Z2gsIGlzIGBzYy0mZ3Q7cHJvYWN0aXZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuCgpUaGUgY29kZSBzbmlwcGV0IHNob3dzIHRoYXQgaXQgYWRkcyBhIGNoZWNrIGZvciBgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHdpdGhpbiB0aGUgYHNjLSZndDtwcm9hY3RpdmVgIGNvbnRleHQuIEFoYSwgdGhpcyBpcyBkZWZpbml0ZWx5IGFib3V0IHByb2FjdGl2ZSByZWNsYWltLiBUaGlzIGlzIHRyaWdnZXJlZCBieSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIE5vdywgd2hlcmUgaXMgKnRoYXQqIGNhbGxlZCBmcm9tPyBEaWdnaW5nIGludG8gdGhhdCBmdW5jdGlvbiwgSSBzZWUgdHdvIGNhbGwgc2l0ZXM6CgoxLiAgYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gU28gdGhhdCBzdXBwb3J0cyBteSBpbml0aWFsIGh1bmNoIGFib3V0IG5lZWRpbmcgYE1FTUNHYC4gSXTigJlzIGxpa2VseSBob3cgd2UgbWFrZSBpdCByZWFjaGFibGUgdmlhIGNncm91cCB2Mi4KMi4gIGByZWNsYWltX3N0b3JlYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIG5lZWRzIGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgLCB3aGljaCBpcyByZWxldmFudCBidXQgbm90IHRoZSBtYWluIGZvY3VzIGhlcmUuCgpTbywgSSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYE1FTUNHYCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYSBkZXBlbmRlbmN5IGZvciByZWFjaGluZyB0aGlzIGNvZGUgdmlhIGNncm91cCB2Mi4gQW5kIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFzIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLgoKV2FpdCwganVzdCBhIHNlY29uZC4uLiBpcyBgc2hvdWxkX2Fib3J0X3NjYW5gICpvbmx5KiBpbnNpZGUgdGhlIGBDT05GSUdfTFJVX0dFTmAgYmxvY2s/IEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayBmb3IgYW55IG90aGVyIGRlZmluaXRpb25zIG9mIHRoYXQgZnVuY3Rpb24gdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHNjb3BlIG9mIHRoYXQgbWFjcm8uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQ5MjYtXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG5tbS92bXNjYW4uYy00OTI4LXtcbi0tXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDk4OS1cbm1tL3Ztc2Nhbi5jOjQ5OTA6XHRcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcbm1tL3Ztc2Nhbi5jLTQ5OTEtXHRcdFx0YnJlYWs7XG4tLVxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MDkzLVxubW0vdm1zY2FuLmM6NTA5NDpcdFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxubW0vdm1zY2FuLmMtNTA5NS1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXI6IHRoZXJlJiMzOTtzIG9ubHkgb25lIHBhdGggdG8gYHNob3VsZF9hYm9ydF9zY2FuYC4gVGhhdCBtZWFucyBgQ09ORklHX0xSVV9HRU5gIGlzIGFic29sdXRlbHkgZXNzZW50aWFsIGZvciBldmVuIGNvbXBpbGluZyB0aGUgY29kZSBpbiB0aGUgZmlyc3QgcGxhY2Ug4oCTIGEgaGFyZCBkZXBlbmRlbmN5LiBUbyBhY3R1YWxseSBydW4gdGhlIGNvZGUgYnkgZGVmYXVsdCwgdGhhdCBleHRlbmRzIHRvIGFsc28gcmVxdWlyaW5nIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYC4gTm93LCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgdGhlIGNvZGUgZ2V0cyB0cmlnZ2VyZWQgdGhyb3VnaCBjZ3JvdXAgdjImIzM5O3MgYG1lbW9yeS5yZWNsYWltYCwgYW5kIHRoYXQgYnJpbmdzIGBDT05GSUdfTUVNQ0dgIGludG8gcGxheS4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gKmNvbXBpbGVkKiB3aXRob3V0IGBDT05GSUdfTUVNQ0dgLiBUaGlzIHNlZW1zIGEgY3JpdGljYWwgcmVxdWlyZW1lbnQgZm9yIHBvcnRhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2OC1cbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg3MC1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQyNAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byB0aGUgbWVtb3J5IGNncm91cCBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGNoZWNrIGlmIGl0JiMzOTtzIHByb3RlY3RlZCBieSBhbiBgI2lmZGVmIENPTkZJR19NRU1DR2AgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gSWYgaXQgaXMsIHRoZW4gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGF0IGZ1bmN0aW9uYWxpdHkgZGVwZW5kcyBvbiB3aGV0aGVyIG1lbW9yeSBjZ3JvdXBzIGFyZSBlbmFibGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoYXQgd291bGQgbWVhbiB0aGUgYmVoYXZpb3Igb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGNoYW5nZXMgc2lnbmlmaWNhbnRseSBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbSYjMzk7cyBtZW1jZyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IGl04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHVuZGVyIGRpZmZlcmVudCBzY2VuYXJpb3MuIEtub3dpbmcgdGhpcyB3aWxsIGFmZmVjdCB3aGVyZSBJIGxvb2sgZm9yIHJlbGF0ZWQgY29kZSBvciBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3ODYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc4NjA6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg2MTpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4NjI6XHR9O1xuNzg2MzpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4NjQ6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG43ODY1Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG43ODY2Olx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjc4Njc6XHR9O1xuNzg2ODpcdFxuNzg2OTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4NzA6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODcxOlx0e1xuNzg3MjpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg3MzpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg3NDpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NzU6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NzY6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4Nzc6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4Nzg6XHRcbjc4Nzk6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDE3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SG1tLCBpcyB0aGVyZSBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaGlkaW5nIGFyb3VuZCBoZXJlPyYjMzQ7IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYW4gYCNpZmRlZmAgKG9yIG1heWJlIGV2ZW4gYCNpZm5kZWZgIG9yIHNpbWlsYXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24pIGlzIHBvdGVudGlhbGx5IGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBibG9jayBvZiBjb2RlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBnb3RjaGEsIGFuZCBpdCYjMzk7cyBhbHdheXMgdGhlIGZpcnN0IHRoaW5nIEkgY2hlY2sgd2hlbiBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgaXMgd2hhdCYjMzk7cyAqYWN0dWFsbHkqIGdvaW5nIHRvIGJlIGNvbXBpbGVkIGFuZCBleGVjdXRlZC4gSSBuZWVkIHRvIGtub3cgdGhlIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTE4MS1cbm1tL3Ztc2Nhbi5jOjE4MjojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXG5tbS92bXNjYW4uYy0xODMtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVx0XHRcdFxcXG4tLVxubW0vdm1zY2FuLmM9MTk5PWludCB2bV9zd2FwcGluZXNzID0gNjA7XG5tbS92bXNjYW4uYy0yMDAtXG5tbS92bXNjYW4uYzoyMDE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjAyLVxuLS1cbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzNC1cdFx0cmV0dXJuIHRydWU7XG5tbS92bXNjYW4uYzoyMzU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXG5tbS92bXNjYW4uYy0yMzYtXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi0tXG5tbS92bXNjYW4uYz04MjQ9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzAtXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzItLypcbi0tXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xMjg1LVx0XHRcdFx0XHRnb3RvIGFjdGl2YXRlX2xvY2tlZDtcbm1tL3Ztc2Nhbi5jOjEyODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vdm1zY2FuLmMtMTI4Ny1cdFx0XHRcdGlmIChucl9wYWdlcyBcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xuLS1cbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy0yNjI0LVxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTI2MjYtXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcbi0tXG5tbS92bXNjYW4uYz0yNjc3PXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNjgwLVxubW0vdm1zY2FuLmM6MjY4MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNjgyLVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODI4LVxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yODMwLVxubW0vdm1zY2FuLmM9MjgzMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MzctXG5tbS92bXNjYW4uYzoyODM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4MzktXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjg3MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4NzctXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyODc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI4NzktXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg5OD12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MDYtXG5tbS92bXNjYW4uYzoyOTA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MDgtXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMjkzMC1cbm1tL3Ztc2Nhbi5jOjI5MzE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjkzMi1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzYtXG5tbS92bXNjYW4uYzoyOTM3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5Mzgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDMwNz1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00MzUyLVxubW0vdm1zY2FuLmM6NDM1MzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00MzU0LVxuLS1cbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NTI4LVxubW0vdm1zY2FuLmM6NTUyOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NTMwLVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTc4MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4MDAtXG5tbS92bXNjYW4uYzo1ODAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU4MDItXG4tLVxubW0vdm1zY2FuLmM9NjY3OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy02NzIxLVxubW0vdm1zY2FuLmM6NjcyMjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy02NzIzLVxuLS1cbm1tL3Ztc2Nhbi5jPTc1NDk9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc1NTMtXG5tbS92bXNjYW4uYzo3NTU0OiNpZmRlZiBDT05GSUdfSElCRVJOQVRJT05cbm1tL3Ztc2Nhbi5jLTc1NTUtLypcbi0tXG5tbS92bXNjYW4uYz03NjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcbi0tXG5tbS92bXNjYW4uYy03NjQzLVx0fSxcbm1tL3Ztc2Nhbi5jOjc2NDQ6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03NjQ1LVx0e1xuLS1cbm1tL3Ztc2Nhbi5jPTc2Njc9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG5tbS92bXNjYW4uYy03NjY4LVxubW0vdm1zY2FuLmM6NzY2OTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3Ztc2Nhbi5jLTc2NzAtLypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKgoKT2theSwgaG9sZCBvbiBhIG1pbnV0ZS4gSXQgbG9va3MgbGlrZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXNuJiMzOTt0IGFjdHVhbGx5IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBhc3N1bXB0aW9uIEkgbmVlZCB0byB2ZXJpZnkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5lZWRzIGltbWVkaWF0ZSBjb3JyZWN0aW9uLiBMZXQmIzM5O3MgdHJhY2UgYmFjayB3aGVyZSB0aGlzIGZ1bmN0aW9uLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIGlzIGFjdHVhbGx5IGRlZmluZWQuIEkmIzM5O3ZlIGdvdCB0byBlbnN1cmUgdGhlIGxvZ2ljIGZsb3dzIGFzIEkgZXhwZWN0IGl0IHRvLgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBsaW5lIG51bWJlcjogNzg2OS4gTm93LCB3aGVyZSBkb2VzIHRoZSBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jayBiZWdpbj8gTGluZSA3NjY5LiBHb29kLCB0aGF0JiMzOTtzIHdpdGhpbiBhIGNvdXBsZSBvZiBodW5kcmVkIGxpbmVzLiBUaGF0JiMzOTtzIGNsb3NlIGVub3VnaCBmb3IgdGhlIGxpbmUgY291bnQgdG8gYmUgYWNjdXJhdGUsIGJ1dCBJIG5lZWQgdG8gZGVmaW5pdGl2ZWx5IGVzdGFibGlzaCB3aGV0aGVyIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZXNpZGVzICp3aXRoaW4qIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfTlVNQWAuIEl0JiMzOTtzIGEgc2ltcGxlIGNoZWNrLCBidXQgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8ga25vdyB0aGUgc2NvcGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc2NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzY2NTpcdH1cbjc2NjY6XHRcbjc2Njc6XHRtb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcbjc2Njg6XHRcbjc2Njk6XHQjaWZkZWYgQ09ORklHX05VTUFcbjc2NzA6XHQvKlxuNzY3MTpcdCAqIE5vZGUgcmVjbGFpbSBtb2RlXG43NjcyOlx0ICpcbjc2NzM6XHQgKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xuNzY3NDpcdCAqIHRoZSB3YXRlcm1hcmtzLlxuNzY3NTpcdCAqL1xuNzY3NjpcdGludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xuNzY3NzpcdFxuNzY3ODpcdC8qXG43Njc5Olx0ICogUHJpb3JpdHkgZm9yIE5PREVfUkVDTEFJTS4gVGhpcyBkZXRlcm1pbmVzIHRoZSBmcmFjdGlvbiBvZiBwYWdlc1xuNzY4MDpcdCAqIG9mIGEgbm9kZSBjb25zaWRlcmVkIGZvciBlYWNoIHpvbmVfcmVjbGFpbS4gNCBzY2FucyAxLzE2dGggb2Zcbjc2ODE6XHQgKiBhIHpvbmUuXG43NjgyOlx0ICovXG43NjgzOlx0I2RlZmluZSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFkgNFxuNzY4NDpcdFxuNzY4NTpcdC8qXG43Njg2Olx0ICogUGVyY2VudGFnZSBvZiBwYWdlcyBpbiBhIHpvbmUgdGhhdCBtdXN0IGJlIHVubWFwcGVkIGZvciBub2RlX3JlY2xhaW0gdG9cbjc2ODc6XHQgKiBvY2N1ci5cbjc2ODg6XHQgKi9cbjc2ODk6XHRpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbyA9IDE7XG43NjkwOlx0XG43NjkxOlx0Lypcbjc2OTI6XHQgKiBJZiB0aGUgbnVtYmVyIG9mIHNsYWIgcGFnZXMgaW4gYSB6b25lIGdyb3dzIGJleW9uZCB0aGlzIHBlcmNlbnRhZ2UgdGhlblxuNzY5MzpcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cbjc2OTQ6XHQgKi9cbjc2OTU6XHRpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvID0gNTtcbjc2OTY6XHRcbjc2OTc6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbm9kZV91bm1hcHBlZF9maWxlX3BhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG43Njk4Olx0e1xuNzY5OTpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX21hcHBlZCA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9NQVBQRUQpO1xuNzcwMDpcdFx0dW5zaWduZWQgbG9uZyBmaWxlX2xydSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSU5BQ1RJVkVfRklMRSkgJiM0Mztcbjc3MDE6XHRcdFx0bm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9BQ1RJVkVfRklMRSk7XG43NzAyOlx0XG43NzAzOlx0XHQvKlxuNzcwNDpcdFx0ICogSXQmIzM5O3MgcG9zc2libGUgZm9yIHRoZXJlIHRvIGJlIG1vcmUgZmlsZSBtYXBwZWQgcGFnZXMgdGhhblxuNzcwNTpcdFx0ICogYWNjb3VudGVkIGZvciBieSB0aGUgcGFnZXMgb24gdGhlIGZpbGUgTFJVIGxpc3RzIGJlY2F1c2Vcbjc3MDY6XHRcdCAqIHRtcGZzIHBhZ2VzIGFjY291bnRlZCBmb3IgYXMgQU5PTiBjYW4gYWxzbyBiZSBGSUxFX01BUFBFRFxuNzcwNzpcdFx0ICovXG43NzA4Olx0XHRyZXR1cm4gKGZpbGVfbHJ1IFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xuNzcwOTpcdH1cbjc3MTA6XHRcbjc3MTE6XHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXG43NzEyOlx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbjc3MTM6XHR7XG43NzE0Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMTcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgTlVNQSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhpcyBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVW5kZXJzdGFuZGluZyBleGFjdGx5IHdoZXJlIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZW5kcyBpcyBjcnVjaWFsLiBJIGtub3cgdGhpcyBjb2RlLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgYW5kIHByZWNpc2VseSByZS1lc3RhYmxpc2ggbXkgYmVhcmluZ3Mgd2l0aGluIHRoaXMgcGFydGljdWxhciBzZWN0aW9uLiBJcyB0aGlzIGEgbG9jYWwgc2NvcGUgaXNzdWUsIG9yIGlzIGl0IGEgdG9wLWxldmVsIGJsb2NrPyBEZXRlcm1pbmluZyB0aGUgZXh0ZW50IG9mIGl0cyBpbmZsdWVuY2UgaXMgdGhlIGZpcnN0IHN0ZXAgdG93YXJkIHVuZGVyc3RhbmRpbmcgaXRzIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcGVyZm9ybWFuY2UgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBMZXTigJlzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2VuZGlmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XG4tLVxubW0vdm1zY2FuLmMtMTkzLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZCkgZG8geyB9IHdoaWxlICgwKVxubW0vdm1zY2FuLmM6MTk0OiNlbmRpZlxubW0vdm1zY2FuLmMtMTk1LVxuLS1cbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTIzNy1cdFx0cmV0dXJuIHRydWU7XG5tbS92bXNjYW4uYzoyMzg6I2VuZGlmXG5tbS92bXNjYW4uYy0yMzktXHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vdm1zY2FuLmM9MjY0PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI2Ny19XG5tbS92bXNjYW4uYzoyNjg6I2VuZGlmXG5tbS92bXNjYW4uYy0yNjktXG4tLVxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS92bXNjYW4uYy04NTctfVxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtODU5LVxuLS1cbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxuLS1cbm1tL3Ztc2Nhbi5jLTEyOTEtXHRcdFx0XHR9XG5tbS92bXNjYW4uYzoxMjkyOiNlbmRpZlxubW0vdm1zY2FuLmMtMTI5My1cdFx0XHRcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XG4tLVxubW0vdm1zY2FuLmM9MjYzMj1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9GQUxTRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG5tbS92bXNjYW4uYy0yNjMzLSNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX3VubGlrZWx5KFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxubW0vdm1zY2FuLmM6MjYzNDojZW5kaWZcbm1tL3Ztc2Nhbi5jLTI2MzUtXG4tLVxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY5MC1cdH1cbm1tL3Ztc2Nhbi5jOjI2OTE6I2VuZGlmXG5tbS92bXNjYW4uYy0yNjkyLVx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODQwLVx0XHRyZXR1cm4gXHUwMDI2bWVtY2ctXHUwMDNlbW1fbGlzdDtcbm1tL3Ztc2Nhbi5jOjI4NDE6I2VuZGlmXG5tbS92bXNjYW4uYy0yODQyLVx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4NzE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODgwLVx0bW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IG1lbWNnO1xubW0vdm1zY2FuLmM6Mjg4MTojZW5kaWZcbm1tL3Ztc2Nhbi5jLTI4ODItXHRzcGluX2xvY2soXHUwMDI2bW1fbGlzdC1cdTAwM2Vsb2NrKTtcbi0tXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjkwOC1cdG1lbWNnID0gbW0tXHUwMDNlbHJ1X2dlbi5tZW1jZztcbm1tL3Ztc2Nhbi5jOjI5MDk6I2VuZGlmXG5tbS92bXNjYW4uYy0yOTEwLVx0bW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTMzLVx0bW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyA9IE5VTEw7XG5tbS92bXNjYW4uYzoyOTM0OiNlbmRpZlxubW0vdm1zY2FuLmMtMjkzNS19XG4tLVxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTY0LX1cbm1tL3Ztc2Nhbi5jOjI5NjU6I2VuZGlmXG5tbS92bXNjYW4uYy0yOTY2LVxuLS1cbm1tL3Ztc2Nhbi5jPTI5Nzk9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMjk4My1cbm1tL3Ztc2Nhbi5jOjI5ODQ6I2VuZGlmXG5tbS92bXNjYW4uYy0yOTg1LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ1NDU9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NTY3LVxubW0vdm1zY2FuLmM6NDU2ODojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS92bXNjYW4uYy00NTY5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NTMxLVx0XHRcdGNncm91cF9wYXRoKG1lbWNnLVx1MDAzZWNzcy5jZ3JvdXAsIG0tXHUwMDNlcHJpdmF0ZSwgUEFUSF9NQVgpO1xubW0vdm1zY2FuLmM6NTUzMjojZW5kaWZcbm1tL3Ztc2Nhbi5jLTU1MzMtXHRcdHNlcV9wcmludGYobSwgXCYjMzQ7bWVtY2cgJWxsdSAlc1xcblwmIzM0OywgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xuLS1cbm1tL3Ztc2Nhbi5jPTU4MTQ9dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NDAtXG5tbS92bXNjYW4uYzo1ODQxOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3Ztc2Nhbi5jLTU4NDItXG4tLVxubW0vdm1zY2FuLmM9NTg3Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU4NzYtXG5tbS92bXNjYW4uYzo1ODc3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTg3OC1cbi0tXG5tbS92bXNjYW4uYz02ODA2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjgxMy19XG5tbS92bXNjYW4uYzo2ODE0OiNlbmRpZlxubW0vdm1zY2FuLmMtNjgxNS1cbi0tXG5tbS92bXNjYW4uYz03NTYzPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1OTAtfVxubW0vdm1zY2FuLmM6NzU5MTojZW5kaWYgLyogQ09ORklHX0hJQkVSTkFUSU9OICovXG5tbS92bXNjYW4uYy03NTkyLVxuLS1cbm1tL3Ztc2Nhbi5jPTc2MzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc2NTItXHR9XG5tbS92bXNjYW4uYzo3NjUzOiNlbmRpZlxubW0vdm1zY2FuLmMtNzY1NC19O1xuLS1cbm1tL3Ztc2Nhbi5jPTc4NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vdm1zY2FuLmMtNzg1NS1cbm1tL3Ztc2Nhbi5jOjc4NTY6I2VuZGlmXG5tbS92bXNjYW4uYy03ODU3LVxuLS1cbm1tL3Ztc2Nhbi5jPTgwMjg9dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbi0tXG5tbS92bXNjYW4uYy04MDMxLX1cbm1tL3Ztc2Nhbi5jOjgwMzI6I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjI1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCYjMzk7cyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipWZXJpZnlpbmcgTlVNQSBDb25maWd1cmF0aW9uIEltcGFjdCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBsb2NhdGVkIGF0IGxpbmUgNzg2OS4gTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHJlbGF0ZWQgdG8gTlVNQSBjb25maWd1cmF0aW9uLiBBaCwgYCNpZmRlZiBDT05GSUdfTlVNQWAgc3RhcnRzIHdheSBiYWNrIGF0IGxpbmUgNzY2OSwgYW5kIGl0IGVuZHMgYXQgNzg1NiEgU28sIHRoYXQgbWVhbnMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGZhbGxzICpvdXRzaWRlKiBvZiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2sgY29udHJvbGxlZCBieSBgI2lmZGVmIENPTkZJR19OVU1BYC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYW5kIGVsaW1pbmF0ZSBhbnkgcG90ZW50aWFsIGZvciBmdXR1cmUgY29uZnVzaW9uLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gR290dGEgYmUgdGhvcm91Z2gsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggTlVNQS1yZWxhdGVkIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODUwOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbjc4NTE6XHRcdFx0XHRcdCAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjc4NTI6XHR7XG43ODUzOlx0XHRyZXR1cm4gMDtcbjc4NTQ6XHR9XG43ODU1Olx0XG43ODU2Olx0I2VuZGlmXG43ODU3Olx0XG43ODU4Olx0ZW51bSB7XG43ODU5Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjc4NjA6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg2MTpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4NjI6XHR9O1xuNzg2MzpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4NjQ6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG43ODY1Olx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG43ODY2Olx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjc4Njc6XHR9O1xuNzg2ODpcdFxuNzg2OTpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3ODkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IFJlY2xhbWF0aW9uIGluIGEgTlVNQSBDb250ZXh0KioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IHRoZSByZWxldmFudCBzZWN0aW9uIGlzICpvdXRzaWRlKiB0aGUgYCNpZmRlZiBDT05GSUdfTlVNQWAgYmxvY2suIFRoYXQmIzM5O3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQsIG1lYW5pbmcgdGhlIGxvZ2ljIEkmIzM5O20gbG9va2luZyBhdCBpc24mIzM5O3Qgc3BlY2lmaWNhbGx5IHRhaWxvcmVkIGZvciBOVU1BIHN5c3RlbXMsIGF0IGxlYXN0IG5vdCBkaXJlY3RseS4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYW5hbHl6ZSBpdHMgYmVoYXZpb3IuIEkgbmVlZCB0byBiZSBjYXJlZnVsIG9mIGhvdyBpdCBpbnRlcmFjdHMgaW4gbW9yZSBnZW5lcmFsIHNjZW5hcmlvcy4gVGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFyZSB0aGF0IGl0IG1heSBvciBtYXkgbm90IGJlIG9wdGltaXplZCBmb3IgTlVNQSBhcmNoaXRlY3R1cmVzLiBJIG11c3QgYW5hbHl6ZSBjYXJlZnVsbHkuCgpOb3csIHRoYXQgYnJpbmdzIHVwIGByZWNsYWltX3N0b3JlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRlcmFjdGlvbnMgaGVyZS4gSSBzaG91bGQgcHJvYmFibHkgcmV0cmFjZSBteSBzdGVwcyBzbyBJIGhhdmUgYSBmdWxsIHBpY3R1cmUgYW5kIGRvbiYjMzk7dCBtYWtlIGFueSBhc3N1bXB0aW9ucy4gSG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQ/IFdoYXQmIzM5O3MgaXRzIHJvbGUgaW4sIGZvciBpbnN0YW5jZSwgcGFnZSByZWNsYW1hdGlvbiBvciBwcm9jZXNzIHBhZ2UgZmF1bHRzPyBJIG5lZWQgdG8gdGhpbmsgdGhyb3VnaCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGlzIGFuZCBhbnkgb3RoZXIgbWVtb3J5IHJlY2xhbWF0aW9uLXJlbGF0ZWQgY29kZSwgZXNwZWNpYWxseSBnaXZlbiB0aGF0IGl0IGlzbiYjMzk7dCB3aXRoaW4gYSBOVU1BLXNwZWNpZmljIGJsb2NrLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBob3cgYHJlY2xhaW1fc3RvcmVgIGlzIHVzZWQuIEkgbXVzdCBhbmFseXplIHdoZXJlIHRoaXMgaXMgaW52b2tlZCBhbmQgaG93IHZhcmlhYmxlcyBhcmUgcGFzc2VkIGFyb3VuZC4gVGhlIG5leHQgY29kZSBibG9jayBzaG91bGQgaGlnaGxpZ2h0IHRoZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODAwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs4MDA1Olx0XHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xuODAwNjpcdFx0XHRjb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ3NjYW5uZWQpO1xuODAwNzpcdFx0fVxuODAwODpcdH1cbjgwMDk6XHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG44MDEwOlx0XG44MDExOlx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbjgwMTI6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgwMTM6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODAxNDpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MDE1Olx0e1xuODAxNjpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODAxNzpcdFxuODAxODpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODAxOTpcdFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcbjgwMjA6XHR9XG44MDIxOlx0XG44MDIyOlx0c3RhdGljIERFVklDRV9BVFRSX1dPKHJlY2xhaW0pO1xuODAyMzpcdGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG44MDI0Olx0e1xuODAyNTpcdFx0cmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZShcdTAwMjZub2RlLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XG44MDI2Olx0fVxuODAyNzpcdFxuODAyODpcdHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG44MDI5Olx0e1xuODAzMDpcdFx0cmV0dXJuIGRldmljZV9yZW1vdmVfZmlsZShcdTAwMjZub2RlLVx1MDAzZWRldiwgXHUwMDI2ZGV2X2F0dHJfcmVjbGFpbSk7XG44MDMxOlx0fVxuODAzMjpcdCNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAyMzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTU2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBNZW1vcnkgUmVjbGFpbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgY2FsbCBjaGFpbnMuIEkgc2VlIHRoYXQgYHJlY2xhaW1fc3RvcmVgIHJlbGllcyBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpbGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgc3VnZ2VzdHMgc29tZSBmbGV4aWJpbGl0eSBpbiBob3cgaXQgY2FuIGJlIHRyaWdnZXJlZC4KCk5vdywgdGhlIGltcG9ydGFudCBjb25uZWN0aW9uIGlzIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHVsdGltYXRlbHkgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIG9ubHkgY29tcGlsZWQgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZCwgd2hpY2ggc3VnZ2VzdHMgdGhlIHByaW1hcnkgdHJpZ2dlciBmb3IgdGhpcyBpcyBub3cgbWVtb3J5IGNncm91cHMgdjIgdXNpbmcgYG1lbW9yeS5yZWNsYWltYC4KClNvLCB0byBzdW1tYXJpemUgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLCBwcm9hY3RpdmUgcmVjbGFpbSBjYW4gYmUgdHJpZ2dlcmVkIGluIHR3byB3YXlzOgoxLiAgVGhyb3VnaCBgQ09ORklHX01FTUNHYCAoZm9yIGNncm91cCB2MiYjMzk7cyBgbWVtb3J5LnJlY2xhaW1gKS4KMi4gIFRocm91Z2ggYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAgKGZvciB0aGUgc3lzZnMgYHJlY2xhaW1gIG5vZGUpLgoKR2l2ZW4gdGhhdCBgQ09ORklHX01FTUNHYCBpcyBlc3NlbnRpYWxseSBhIHN0YW5kYXJkIGZlYXR1cmUgbm93YWRheXMsIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gaW5jbHVkaW5nIHRoYXQgb25lLgoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgYXJlIGVuYWJsZWQgYmVjYXVzZSB0aGUgcGF0Y2hlZCBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGVtIHZpYSBhbiBgI2lmZGVmYCBwcmVwcm9jZXNzb3Igc3RhdGVtZW50LgoKU28sIHRoZSBrZXkgY29uZmlncyBmb3IgbXkgdW5kZXJzdGFuZGluZyBhcmU6CiogICBgTFJVX0dFTmAKKiAgIGBMUlVfR0VOX0VOQUJMRURgCiogICBgTUVNQ0dgCgpOb3csIGxldCYjMzk7cyBob25lIGluIG9uIHRoZSBpbXBvcnRhbnQgc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBmbG93OiBgc2hvdWxkX2Fib3J0X3NjYW5gLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19tYW55YC4gSSBub3RpY2UgdGhleSBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIHRoZW0gdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJdCBsb29rcyBsaWtlIGBscnVfZ2VuX3Nocmlua19ub2RlYCBjYWxscyBgc2hyaW5rX21hbnlgLCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBjYWxscyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19vbmVgIGNhbGxzIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AuIGBzaHJpbmtfbm9kZWAgYWxzbyBjYWxscyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAuIE15IHByaW1hcnkgY29uY2VybiBpcyB3aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhY3R1YWxseSBjYWxscz8gRG9lcyBpdCBjYWxsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBvciBkb2VzIGl0IGNhbGwgYHNocmlua19ub2RlYD8gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3b3JrcyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzkyMDpcdFx0XHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxuNzkyMTpcdFx0XHQgKi9cbjc5MjI6XHRcdFx0aWYgKCFucl9yZXRyaWVzKVxuNzkyMzpcdFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG43OTI0Olx0XG43OTI1Olx0XHRcdGlmIChtZW1jZykge1xuNzkyNjpcdFx0XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG43OTI3Olx0XG43OTI4Olx0XHRcdFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCB8XG43OTI5Olx0XHRcdFx0XHRcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XG43OTMwOlx0XHRcdFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcbjc5MzE6XHRcdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG43OTMyOlx0XHRcdFx0XHRcdFx0IHJlY2xhaW1fb3B0aW9ucyxcbjc5MzM6XHRcdFx0XHRcdFx0XHQgc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcdTAwMjZzd2FwcGluZXNzKTtcbjc5MzQ6XHRcdFx0fSBlbHNlIHtcbjc5MzU6XHRcdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNzkzNjpcdFx0XHRcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG43OTM3Olx0XHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG43OTM4Olx0XHRcdFx0XHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MsXG43OTM5Olx0XHRcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDIzOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyOTM1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjoKCioqUHJvYmluZyB0aGUgTWVtb3J5IFJlY2xhaW0gTG9naWMqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSB0cmlnZ2VyLiBNeSBtZW50YWwgbW9kZWwgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgYWN0aXZlIG1lbW9yeSByZWNsYW1hdGlvbiBlZmZvcnRzIGluaXRpYXRlZCBieSB0aGUgdXNlci4gSXQgY2FsbHMgZWl0aGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCAod2hpY2ggSSBrbm93IHRhcmdldHMgcGFnZXMgd2l0aGluIGEgc3BlY2lmaWMgY2dyb3VwKSBvciBgc2hyaW5rX25vZGVgICh3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBicm9hZGVyIG5vZGUtbGV2ZWwgcmVjbGFpbSkuIE5vdywgSSB3YW50IHRvIGRlbHZlIGludG8gd2hhdCBoYXBwZW5zIHdoZW4gbmVpdGhlciBvZiB0aG9zZSBjYWxscyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQsIGJlY2F1c2UgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGUgbW9yZSBzdWJ0bGUgaXNzdWVzIG9yIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBsaWUuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYGVsc2VgIGJyYW5jaCBvZiB0aGUgY29uZGl0aW9uYWwgaXMgZG9pbmcgYW5kIHdoYXQgaW5mb3JtYXRpb24gaXQgcHJvdmlkZXMuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG5leHQgaW50ZXJlc3RpbmcgaW5zaWdodHMgYXJlIGxpa2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Nzk0MDpcdFx0XHRcdFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxuNzk0MTpcdFx0XHRcdFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgoYmF0Y2hfc2l6ZSwgU1dBUF9DTFVTVEVSX01BWCksXG43OTQyOlx0XHRcdFx0XHQubWF5X3VubWFwID0gMSxcbjc5NDM6XHRcdFx0XHRcdC5tYXlfc3dhcCA9IDEsXG43OTQ0Olx0XHRcdFx0XHQucHJvYWN0aXZlID0gMSxcbjc5NDU6XHRcdFx0XHR9O1xuNzk0NjpcdFxuNzk0NzpcdFx0XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsXG43OTQ4Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG43OTQ5Olx0XHRcdFx0XHRyZXR1cm4gLUVCVVNZO1xuNzk1MDpcdFxuNzk1MTpcdFx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBnZnBfbWFzayxcbjc5NTI6XHRcdFx0XHRcdFx0XHQgICBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG43OTUzOlx0XHRcdFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpO1xuNzk1NDpcdFx0XHR9XG43OTU1Olx0XG43OTU2Olx0XHRcdGlmICghcmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbnJfcmV0cmllcy0tKVxuNzk1NzpcdFx0XHRcdHJldHVybiAtRUFHQUlOO1xuNzk1ODpcdFxuNzk1OTpcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0OTUKCQkJCQkJCW91dHB1dDogMjA3CgkJCQkJCQl0aG91Z2h0czogNjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBQcm9hY3RpdmUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGtleSBtb2RpZmljYXRpb24gaGVyZS4gSXQmIzM5O3MgcmVhY2hlZCB0aHJvdWdoIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgcGF0aCwgd2hpY2ggdGhlbiBjYWxscyBgc2hyaW5rX25vZGVgIG9yIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4gVGhvc2UgcGF0aHMgYXJlIGludGVyZXN0aW5nIHRvby4gU3BlY2lmaWNhbGx5LCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgY2FsbHMgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggbGVhZHMgdG8gYHNocmlua196b25lc2AgYW5kIGZpbmFsbHkgYmFjayB0byBgc2hyaW5rX25vZGVgLgoKTXkgdGhvdWdodCBwcm9jZXNzIGxlZCBtZSB0byByZWFsaXplIHRoYXQgYHNocmlua19ub2RlYCBjYWxscyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgaWYgTXVsdGktR2VuIExSVSAoTUdMUlUpIGlzIGVuYWJsZWQuIEFuZCBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgY2FsbHMgYHNocmlua19tYW55YCwgd2hpY2ggKmZpbmFsbHkqIGNhbGxzIGBzaG91bGRfYWJvcnRfc2NhbmAuIFNvLCB5ZXMsIHRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIE1HTFJVIGNvZGUgcGF0aCwgYXNzdW1pbmcgcHJvYWN0aXZlIHJlY2xhaW0gaXMgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLgoKV2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGlzIHRoYXQgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBjb25kaXRpb24gd2hlcmUgdGhlIHNjYW4gaXMgYWJvcnRlZCBpZiBgc2MtJmd0O3Byb2FjdGl2ZWAgaXMgdHJ1ZSAoaW5kaWNhdGluZyBhIHByb2FjdGl2ZSByZWNsYWltIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSkgYW5kIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBkZWxpYmVyYXRlIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0byBhbGxvdyB1c2Vyc3BhY2UsIGVzc2VudGlhbGx5LCB0byBpbnRlcnJ1cHQgdGhlIHJlY2xhaW0gcHJvY2VzcyBieSBzZW5kaW5nIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzIHdyaXRpbmcgdG8gYG1lbW9yeS5yZWNsYWltYC4gVGhpcyBzZWVtcyBsaWtlIGEgZ3JlYXQgYXJlYSB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMuCgpJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgb25seSBjb21waWxlZCBpZiBNR0xSVSBpcyBlbmFibGVkIHRocm91Z2ggYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYW5kIHRoYXQgYExSVV9HRU5fRU5BQkxFRGAgZW5hYmxlcyBNR0xSVSBieSBkZWZhdWx0LCBhbmQgYE1FTUNHYCBpcyBuZWVkZWQgdG8gZXhwb3NlIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGludGVyZmFjZS4gSXQgaXMgZ29vZCB0aGF0IEkmIzM5O3ZlIGVuc3VyZWQgdGhlc2UgYXJlIHRoZSBjb25maWd1cmF0aW9ucyBuZWVkZWQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBNR0xSVSByZWNsYWltIHBhdGguIFRoZSBjaGFuZ2UgYWxsb3dzIHVzZXJzcGFjZSB0byBzaWduYWwgYSBsb25nLXJ1bm5pbmcsIHByb2FjdGl2ZSByZWNsYWltIHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAuIFNvIEkmIzM5O20gbm93IGdvaW5nIHRvIGZvY3VzIG9uIHRoZSBlZGdlIGNhc2VzIGFyb3VuZCBzaWduYWwgaGFuZGxpbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHJlc291cmNlIGxlYWtzLCBhbmQgZW5zdXJpbmcgY29uc2lzdGVudCBzdGF0ZXMgYWZ0ZXIgaW50ZXJydXB0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIHRoZXNlIHBhdGhzIHRob3JvdWdobHkuIEkgYW0gbm93IGdvaW5nIHRvIGZvY3VzIG9uIGZ1enppbmcgdGhpcywgYW5kIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMjM6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvdWxkX2Fib3J0X3NjYW4mIzM0OywKICAgICYjMzQ7dHJ5X3RvX3Nocmlua19scnV2ZWMmIzM0OywKICAgICYjMzQ7c2hyaW5rX21hbnkmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDt0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3VsZF9hYm9ydF9zY2FuJiMzNDssCiAgICAmIzM0O3RyeV90b19zaHJpbmtfbHJ1dmVjJiMzNDssCiAgICAmIzM0O3Nocmlua19tYW55JiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgc2hvdWxkX2Fib3J0X3NjYW5gIHRvIGFib3J0IHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBpZiBhIHNpZ25hbCBpcyBwZW5kaW5nIGZvciB0aGUgY3VycmVudCB0YXNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIHBhdGgsIGFsbG93aW5nIHVzZXJzcGFjZSB0byBpbnRlcnJ1cHQgYSBwb3RlbnRpYWxseSBsb25nLXJ1bm5pbmcgcHJvYWN0aXZlIHJlY2xhaW0gb3BlcmF0aW9uICh0cmlnZ2VyZWQgdmlhIGNncm91cCB2MiBgbWVtb3J5LnJlY2xhaW1gIG9yIHN5c2ZzKSBieSBzZW5kaW5nIGEgc2lnbmFsLiBUaGlzIGxvZ2ljIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgaXQgY29ycmVjdGx5IGFib3J0cyB0aGUgc2NhbiB3aXRob3V0IGNhdXNpbmcgcmVzb3VyY2UgbGVha3Mgb3IgaW5jb25zaXN0ZW50IHN0YXRlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjE5LjQ1MTAwNTI1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTM1MTM0Njg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToxOS40NTEwMTIxMDFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDg0MDc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNiMjI4Yjk1Y2Q0NTBlYjk5NWZjZGE3YmU1MjRhMDQxOGFlYjFkMGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAyMjo1OToxOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNDkyOSw2ICs0OTI5LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFx0aW50IGk7XFxuIFxcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XFxuIFxcbitcXHRpZiAodW5saWtlbHkoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4gXFx0aWYgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzZT0gbWF4KHNjLVxcdTAwM2Vucl90b19yZWNsYWltLCBjb21wYWN0X2dhcChzYy1cXHUwMDNlb3JkZXIpKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToxOS45ODI2MjY5ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDgxOTcxNjIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNiMjI4Yjk1Y2Q0NTBlYjk5NWZjZGE3YmU1MjRhMDQxOGFlYjFkMGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCA5IDIyOjU5OjE4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLmZiNDcyZTkyNGZjNzcxIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNDkyOSw2ICs0OTI5LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcdGludCBpO1xuIFx0ZW51bSB6b25lX3dhdGVybWFya3MgbWFyaztcbiBcbitcdGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4gXHRpZiAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzZT0gbWF4KHNjLVx1MDAzZW5yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLVx1MDAzZW9yZGVyKSkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MTkuOTgyNjI4MjQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYyMTc0NDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZNU2NhbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS92bXNjYW4uY2AuIEl0J3MgYSB0YXJnZXRlZCBtb2RpZmljYXRpb24sIHNwZWNpZmljYWxseSBmb2N1c2VkIG9uIHRoZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGZ1bmN0aW9uLiBUaGUga2V5IGFkZGl0aW9uIGlzIHRoaXMgYGlmICh1bmxpa2VseShzYy1cdTAwM2Vwcm9hY3RpdmUgXHUwMDI2XHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSkgcmV0dXJuIHRydWU7YCBibG9jay5cblxuTXkgaW1tZWRpYXRlIGludGVycHJldGF0aW9uIGlzIHRoYXQgdGhpcyBpbnRyb2R1Y2VzIGEgc2lnbmFsIGhhbmRsaW5nIGFzcGVjdCBpbnRvIHByb2FjdGl2ZSByZWNsYWltLiBFc3NlbnRpYWxseSwgaXQgbWVhbnMgdGhhdCBpZiBwcm9hY3RpdmUgc2Nhbm5pbmcgaXMgZW5hYmxlZCAoYHNjLVx1MDAzZXByb2FjdGl2ZWAgaXMgdHJ1ZSkgYW5kIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrIChgc2lnbmFsX3BlbmRpbmcoY3VycmVudClgIHJldHVybnMgdHJ1ZSksIHRoZW4gdGhlIHNjYW4gaXMgYWJvcnRlZCwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgaW5mbHVlbmNpbmcgaG93IHRoZSBzeXN0ZW0gcmVzcG9uZHMgdG8gc2lnbmFscyBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIEl0IG1ha2VzIHNlbnNlIHRvIG1lLCB0byBwcm92aWRlIHRoZSBzeXN0ZW0gd2l0aCB0aGUgcmVzcG9uc2l2ZW5lc3MgdG8gZXh0ZXJuYWwgZXZlbnRzLCBsaWtlIHNpZ25hbHMgdGhhdCBtaWdodCBpbmRpY2F0ZSB1c2VyIHJlcXVlc3RzIGZvciBzdG9wcGluZyBhIHBvdGVudGlhbGx5IGxvbmcgYmFja2dyb3VuZCBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gYG1tL3Ztc2Nhbi5jYCBtb3JlIHRob3JvdWdobHkgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MTksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToyMy42MDQzNzQzNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAxMTk0MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NDkxMD1zdGF0aWMgbG9uZyBnZXRfbnJfdG9fc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDkyNi1cXG5tbS92bXNjYW4uYzo0OTI3OnN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNDkyOC17XFxuLS1cXG5tbS92bXNjYW4uYz00OTYyPXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00OTg5LVxcbm1tL3Ztc2Nhbi5jOjQ5OTA6XFx0XFx0aWYgKHNob3VsZF9hYm9ydF9zY2FuKGxydXZlYywgc2MpKVxcbm1tL3Ztc2Nhbi5jLTQ5OTEtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS92bXNjYW4uYz01MDQ4PXN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA5My1cXG5tbS92bXNjYW4uYzo1MDk0OlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MDk1LVxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OToyMy42NzQ1MDExMDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzg2NDczNTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBBYm9ydCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgdGhhdCBgc2hvdWxkX2Fib3J0X3NjYW5gIGdldHMgY2FsbGVkIGJ5IGJvdGggYHRyeV90b19zaHJpbmtfbHJ1dmVjYCBhbmQgYHNocmlua19tYW55YC4gSW1tZWRpYXRlbHksIEkgcmVjb2duaXplIHRoaXMgYXMgcHJldHR5IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25hbGl0eS4gR2l2ZW4gaXRzIHJvbGUsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCwgSSBoYXZlIHRvIGNvbnNpZGVyIGZ1enppbmcgdGhpcy4gVGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBpcyBoaWdoLlxuXG5MZXQncyB6b29tIGluIGEgYml0IGhlcmUuIE5vdywgd2FpdCBhIHNlY29uZC4uLiBgc2hvdWxkX2Fib3J0X3NjYW5gLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHNocmlua19tYW55YCBhcmUgYWxsIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBTaW5jZSB0aGV5J3JlIGBzdGF0aWNgIGl0IHNlZW1zIHRoYXQgdGhlIHNjb3BlIGlzIGxpbWl0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIGNvbXBpbGF0aW9uIHVuaXQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBIb3dldmVyLCBJIHdhbnQgdG8gY29uZmlybSB3aGVyZSBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgc2hyaW5rX21hbnlgIGFyZSBhY3R1YWxseSBjYWxsZWQgZnJvbSwgZ2l2ZW4gdGhlaXIgaW50ZXJhY3Rpb24gd2l0aCBgc2hvdWxkX2Fib3J0X3NjYW5gLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHNlbnNlIG9mIGhvdyB0aGlzIGFib3J0IGxvZ2ljIGZpdHMgaW50byB0aGUgbGFyZ2VyIHBpY3R1cmUsIHNvIHRoYXQgSSBjYW4gY29uc3RydWN0IHRlc3QgY2FzZXMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MjcuNDYwOTc2NDg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTM5MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5NjEtICovXFxubW0vdm1zY2FuLmM6NDk2MjpzdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5NjMte1xcbi0tXFxubW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMjYtXFxubW0vdm1zY2FuLmM6NTAyNzpcXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUwMjgtXFxuLS1cXG5tbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEzMC1cXG5tbS92bXNjYW4uYzo1MTMxOlxcdGlmICh0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy01MTMyLVxcdFxcdGxydV9nZW5fcm90YXRlX21lbWNnKGxydXZlYywgTUVNQ0dfTFJVX1lPVU5HKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MjcuNTU4OTIwNDc3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgwNjE3MzcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIExSVSBWZWN0b3IgU2hyaW5raW5nIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBMUlUgdmVjdG9yIHNocmlua3MuIGBzaHJpbmtfb25lYCBhbmQgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgYXJlIGJvdGggdXNpbmcgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknZCBleHBlY3QgdGhleSdkIGJlIHRoZSBjb21tb24gcGF0aCBmb3Igc2luZ2xlLWVsZW1lbnQgc2hyaW5rcyBvciB0aG9zZSB0cmlnZ2VyZWQgYnkgdGhlIGdlbmVyYWwgTFJVIGdlbmVyYXRpb24gY3ljbGUuIE5vdywgYHNocmlua19tYW55YCBpcyBhbHNvIGJlaW5nIGNhbGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjZW5hcmlvcyB0aGF0IHRyaWdnZXIgX211bHRpcGxlXyBzaHJpbmsgb3BlcmF0aW9ucyBpbiBvbmUgZ28uIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IHRoZSBjYWxsIHNpdGVzIGZvciBgc2hyaW5rX21hbnlgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmRpdGlvbnMgd291bGQgY2F1c2UgYSBzdHJhdGVneSBzaGlmdCB0byBidWxrIHNocmlua2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMwLjM2NTA5NjQ5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzQ2NDM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfbWFueVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MDA3PXN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTA0Ny1cXG5tbS92bXNjYW4uYzo1MDQ4OnN0YXRpYyB2b2lkIHNocmlua19tYW55KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUwNDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTEzOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE2Ny1cXHRlbHNlXFxubW0vdm1zY2FuLmM6NTE2ODpcXHRcXHRzaHJpbmtfbWFueShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTUxNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMwLjQzMjU2NzU0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjI2NDY0MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTUdMUlUgU2hyaW5rYWdlIFN0cmF0ZWd5IFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgTUdMUlUgY29kZSBoYW5kbGVzIG1lbW9yeSBzaHJpbmthZ2UuIFNwZWNpZmljYWxseSwgYGxydV9nZW5fc2hyaW5rX25vZGVgIGlzIGNhbGxpbmcgYHNocmlua19tYW55YCwgYW5kIHRoYXQncyBhIGtleSBpbnRlcmFjdGlvbiB0byB1bmRlcnN0YW5kLiBJdCdzIGNsZWFyIHRoYXQgYm90aCBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCBhbmQgYGxydV9nZW5fc2hyaW5rX25vZGVgIGFyZSBkZWVwbHkgZW1iZWRkZWQgd2l0aGluIHRoZSBNR0xSVSBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBidWlsZCBvcHRpb25zIHJlbGF0ZWQgdG8gTUdMUlUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGNydWNpYWwgZm9yIHR1bmluZyB0aGlzIGJlaGF2aW9yIGFuZCBwb3NzaWJseSBvcHRpbWl6aW5nIGl0IGZvciBzcGVjaWZpYyB3b3JrbG9hZHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcwNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMzLjQ5NTIxNTk5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA3MTUzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9zaHJpbmtfbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MTE4PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTEzOC1cXG5tbS92bXNjYW4uYzo1MTM5OnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTE0MC17XFxuLS1cXG5tbS92bXNjYW4uYz01ODY3PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg3MS1cXG5tbS92bXNjYW4uYzo1ODcyOnN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNTg3My17XFxuLS1cXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE1Ni1cXHRcXHRtZW1zZXQoXFx1MDAyNnNjLVxcdTAwM2VuciwgMCwgc2l6ZW9mKHNjLVxcdTAwM2VucikpO1xcbm1tL3Ztc2Nhbi5jOjYxNTc6XFx0XFx0bHJ1X2dlbl9zaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbm1tL3Ztc2Nhbi5jLTYxNTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjMzLjU1NTkzNTI4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIzNzYxODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAg4oCTIENvbnRleHQgaXMgS2V5KipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgZnVuY3Rpb24sIGFuZCBpbW1lZGlhdGVseSwgbXkgc3BpZGVyIHNlbnNlcyBhcmUgdGluZ2xpbmcuIEkgc2VlICp0d28qIGRlZmluaXRpb25zLCB3aGljaCBpcyBvZnRlbiBhIHJlZCBmbGFnIGluIGtlcm5lbCBjb2RlLiBJdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGF0IG9uZSBvZiB0aGVtIGlzIGEgcGxhY2Vob2xkZXIsIGEgZHVtbXkgaW1wbGVtZW50YXRpb24sIG9yIGEgZmFsbGJhY2sgbWVjaGFuaXNtLiBXZSBhbGwga25vdyBob3cgdGhlc2UgdGhpbmdzIGdvIOKAkyB5b3Ugb2Z0ZW4gZW5kIHVwIHdpdGggYSBmZXcgZGlmZmVyZW50IGRlZmluaXRpb25zIGJhc2VkIG9uIGNvbXBpbGUtdGltZSBjb25maWdzLlxuXG5UbyBmaWd1cmUgb3V0IHRoZSBhY3R1YWwgaW50ZW5kZWQgYmVoYXZpb3IsIEkgbmVlZCBtb3JlIGNvbnRleHQuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgdGhlIE11bHRpcGxlIEdlbmVyYXRpb25hbCBMUlUgKE1HTFJVKSBmZWF0dXJlIGlzIGVuYWJsZWQuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gTUdMUlUsIGdpdmVuIHRoZSBuYW1pbmcsIGJ1dCBJIG5lZWQgc29saWQgZXZpZGVuY2UgYmVmb3JlIG1ha2luZyBhc3N1bXB0aW9ucy4gU28sIGxldCdzIGp1bXAgc3RyYWlnaHQgdG8gdGhlIEtjb25maWcgYW5kIHZlcmlmeSB3aGV0aGVyIE1HTFJVIGlzIGFjdGl2ZS4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwIHJlYWxseSBxdWlja2x5LiBUaGUgS2NvbmZpZyB3aWxsIGRpY3RhdGUgd2hpY2ggZGVmaW5pdGlvbiBpcyBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTozNi42Nzk2OTk0ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NDk4Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19MUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9NDU1Nz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ1NzMtXFxubW0vbWVtY29udHJvbC5jOjQ1NzQ6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vbWVtY29udHJvbC5jLTQ1NzUtc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDU5Mz1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2xydV9nZW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfdGFza3NldCAqdHNldCkge31cXG5tbS9tZW1jb250cm9sLmM6NDU5NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cXG4tLVxcbm1tL21lbW9yeS5jPTY1MzU9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxcbi0tXFxubW0vbWVtb3J5LmMtNjU4Ny1cXG5tbS9tZW1vcnkuYzo2NTg4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbW9yeS5jLTY1ODktc3RhdGljIHZvaWQgbHJ1X2dlbl9lbnRlcl9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbW9yeS5jPTY2MDQ9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXFxuLS1cXG5tbS9tZW1vcnkuYy02NjA2LX1cXG5tbS9tZW1vcnkuYzo2NjA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL21lbW9yeS5jLTY2MDgtXFxuLS1cXG5tbS9zd2FwLmM9Mzk2PXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmMtNDI1LVxcbm1tL3N3YXAuYzo0MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vc3dhcC5jLTQyNy1cXG4tLVxcbm1tL3N3YXAuYz00NTI9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmMtNDY5LVxcbm1tL3N3YXAuYzo0NzA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vc3dhcC5jLTQ3MS1cXG4tLVxcbm1tL3N3YXAuYz00NzY9c3RhdGljIGJvb2wgbHJ1X2dlbl9jbGVhcl9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmMtNDgwLVxcbm1tL3N3YXAuYzo0ODE6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vc3dhcC5jLTQ4Mi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTgyND1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbi0tXFxubW0vdm1zY2FuLmMtODMwLVxcbm1tL3Ztc2Nhbi5jOjgzMTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy04MzItLypcXG4tLVxcbm1tL3Ztc2Nhbi5jPTg1ND1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS92bXNjYW4uYy04NTctfVxcbm1tL3Ztc2Nhbi5jOjg1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy04NTktXFxuLS1cXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjI0LVxcbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjYyNi1cXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYy0yNjI5LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjgtXFxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgzMC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Mzg9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTY2LVxcbm1tL3Ztc2Nhbi5jOjI5Njc6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbm1tL3Ztc2Nhbi5jLTI5NjgtXFxuLS1cXG5tbS92bXNjYW4uYz01ODU4PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG5tbS92bXNjYW4uYy01ODU5LVxcbm1tL3Ztc2Nhbi5jOjU4NjA6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTg2MS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NzI9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NzYtXFxubW0vdm1zY2FuLmM6NTg3NzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01ODc4LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTIxMz1zdGF0aWMgdm9pZCB1bnBhY2tfc2hhZG93KHZvaWQgKnNoYWRvdywgaW50ICptZW1jZ2lkcCwgcGdfZGF0YV90ICoqcGdkYXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMjMyLVxcbm1tL3dvcmtpbmdzZXQuYzoyMzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vd29ya2luZ3NldC5jLTIzNC1cXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz0yOTI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0zMzYtXFxubW0vd29ya2luZ3NldC5jOjMzNzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS93b3JraW5nc2V0LmMtMzM4LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTM1MD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTM1My1cXG5tbS93b3JraW5nc2V0LmM6MzU0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjM2Ljc3ODIwMTY5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQzMzExNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHJlZ2FyZGluZyBgQ09ORklHX0xSVV9HRU5gLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBNR0xSVS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBob2xkIG9uIGEgc2Vjb25kLi4uIEkgc2VlIGBzaG91bGRfYWJvcnRfc2NhbmAgYmVpbmcgcmVmZXJlbmNlZCwgYnV0IGl0J3MgKm91dHNpZGUqIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBjb25kaXRpb25hbC4gVGhhdCdzIGEgYml0IHVuZXhwZWN0ZWQuIEkgbmVlZCB0byBjbGFyaWZ5IGV4YWN0bHkgd2hlcmUgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBkZWZpbmVkIGJlY2F1c2UgdGhpcyBzZXR1cCBzZWVtcyB1bnVzdWFsLCBhbmQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyBpbnRlbmRlZCB0byBiZSB1c2VkLiBJIG5lZWQgdG8gYmUgc3VyZSB3aGVyZSBgc2hvdWxkX2Fib3J0X3NjYW5gIGNvbWVzIGZyb20sIGFuZCB3aGV0aGVyIGl0J3MgcmVsYXRlZCB0byB0aGUgTUdMUlUgY29kZSBhdCBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMDQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTozOS42MjE1MTY0MzhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNTA0NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5MTA9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjYtXFxubW0vdm1zY2FuLmM6NDkyNzpzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xcbi0tXFxubW0vdm1zY2FuLmM9NDk2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk4OS1cXG5tbS92bXNjYW4uYzo0OTkwOlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy00OTkxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTMtXFxubW0vdm1zY2FuLmM6NTA5NDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTA5NS1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6MzkuNjgzMDI1NzM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTM3MjM4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgdGV4dCwgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gYG1tL3Ztc2Nhbi5jYCoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgcG9pbnRpbmcgbWUgdG93YXJkcyBsaW5lIDQ5MjcsIGdpdmUgb3IgdGFrZSwgaW4gYG1tL3Ztc2Nhbi5jYC4gSW1tZWRpYXRlbHksIG15IGJyYWluIGtpY2tzIGludG8gZ2Vhci4gYHZtc2Nhbi5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWVtb3J5IHNjYW5uZXIsIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIHJlY2xhaW1pbmcgcGFnZXMgYW5kIGdlbmVyYWxseSBrZWVwaW5nIG1lbW9yeSB1dGlsaXphdGlvbiBoZWFsdGh5LiBMaW5lIDQ5MjcuLi4gdGhhdCdzIGEgKnNwZWNpZmljKiBzcG90LiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGF0IHNwZWNpZmljIGFyZWEgaGFzIGJlZW4gZmxhZ2dlZC4gSXQncyBsaWtlbHkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBldmljdGlvbiwgbWF5YmUgaGFuZGxpbmcgZGlydHkgcGFnZXMsIG9yIHBvc3NpYmx5IGV2ZW4gdGhlIGJhY2tncm91bmQgcmVjbGFpbSBwcm9jZXNzIGl0c2VsZi4gVGltZSB0byBsb2FkIHVwIHRoZSBzb3VyY2UgYW5kIGRpZyBpbi4gSSB3aWxsIHN0YXJ0IGJ5IHNlZWluZyB3aGF0IHRoZSBjb250ZXh0IG9mIHRoYXQgbGluZSBpcywgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgbGluZXMsIGFuZCBzZWUgd2hhdCB0aGUgZnVuY3Rpb24gaXMgZG9pbmcgaW4gdGhhdCBhcmVhLiBDaGFuY2VzIGFyZSB0aGUgaXNzdWUgaXMgcmVsYXRlZCB0byBhIHN1YnRsZSBlZGdlIGNhc2UgaW4gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyByZWNsYWltaW5nIHBhZ2VzIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIFBlcmhhcHMgYSByYWNlIGNvbmRpdGlvbiwgYSBzdWJ0bGUgbWVtb3J5IGxlYWssIG9yIGV2ZW4ganVzdCBhbiBpbmVmZmljaWVudCBhbGxvY2F0aW9uIHBhdHRlcm4uIExldCdzIHNlZSB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6NDMuMDM2NzUxMzhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzczNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5MTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0OTEwOlxcdHN0YXRpYyBsb25nIGdldF9ucl90b19zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuNDkxMTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBzd2FwcGluZXNzKVxcbjQ5MTI6XFx0e1xcbjQ5MTM6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBldmljdGFibGU7XFxuNDkxNDpcXHRcXG40OTE1OlxcdFxcdGV2aWN0YWJsZSA9IGxydXZlY19ldmljdGFibGVfc2l6ZShscnV2ZWMsIHN3YXBwaW5lc3MpO1xcbjQ5MTY6XFx0XFxuNDkxNzpcXHRcXHQvKiB0cnkgdG8gc2NyYXBlIGFsbCBpdHMgbWVtb3J5IGlmIHRoaXMgbWVtY2cgd2FzIGRlbGV0ZWQgKi9cXG40OTE4OlxcdFxcdGlmICghbWVtX2Nncm91cF9vbmxpbmUobWVtY2cpKVxcbjQ5MTk6XFx0XFx0XFx0cmV0dXJuIGV2aWN0YWJsZTtcXG40OTIwOlxcdFxcbjQ5MjE6XFx0XFx0bnJfdG9fc2NhbiA9IGFwcGx5X3Byb3BvcnRpb25hbF9wcm90ZWN0aW9uKG1lbWNnLCBzYywgZXZpY3RhYmxlKTtcXG40OTIyOlxcdFxcdG5yX3RvX3NjYW4gXFx1MDAzZVxcdTAwM2U9IHNjLVxcdTAwM2Vwcmlvcml0eTtcXG40OTIzOlxcdFxcbjQ5MjQ6XFx0XFx0cmV0dXJuIG5yX3RvX3NjYW47XFxuNDkyNTpcXHR9XFxuNDkyNjpcXHRcXG40OTI3OlxcdHN0YXRpYyBib29sIHNob3VsZF9hYm9ydF9zY2FuKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNDkyODpcXHR7XFxuNDkyOTpcXHRcXHRpbnQgaTtcXG40OTMwOlxcdFxcdGVudW0gem9uZV93YXRlcm1hcmtzIG1hcms7XFxuNDkzMTpcXHRcXG40OTMyOlxcdFxcdGlmICh1bmxpa2VseShzYy1cXHUwMDNlcHJvYWN0aXZlIFxcdTAwMjZcXHUwMDI2IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSlcXG40OTMzOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjQ5MzQ6XFx0XFxuNDkzNTpcXHRcXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlPSBtYXgoc2MtXFx1MDAzZW5yX3RvX3JlY2xhaW0sIGNvbXBhY3RfZ2FwKHNjLVxcdTAwM2VvcmRlcikpKVxcbjQ5MzY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuNDkzNzpcXHRcXG40OTM4OlxcdFxcdC8qIGNoZWNrIHRoZSBvcmRlciB0byBleGNsdWRlIGNvbXBhY3Rpb24taW5kdWNlZCByZWNsYWltICovXFxuNDkzOTpcXHRcXHRpZiAoIWN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgc2MtXFx1MDAzZW9yZGVyKVxcbjQ5NDA6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjQ5NDE6XFx0XFxuNDk0MjpcXHRcXHRtYXJrID0gc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXFx1MDAyNiBOVU1BX0JBTEFOQ0lOR19NRU1PUllfVElFUklORyA/XFxuNDk0MzpcXHRcXHQgICAgICAgV01BUktfUFJPTU8gOiBXTUFSS19ISUdIO1xcbjQ5NDQ6XFx0XFxuNDk0NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2M9IHNjLVxcdTAwM2VyZWNsYWltX2lkeDsgaSsrKSB7XFxuNDk0NjpcXHRcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZSA9IGxydXZlY19wZ2RhdChscnV2ZWMpLVxcdTAwM2Vub2RlX3pvbmVzICsgaTtcXG40OTQ3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc2l6ZSA9IHdtYXJrX3BhZ2VzKHpvbmUsIG1hcmspICsgTUlOX0xSVV9CQVRDSDtcXG40OTQ4OlxcdFxcbjQ5NDk6XFx0XFx0XFx0aWYgKG1hbmFnZWRfem9uZSh6b25lKSBcXHUwMDI2XFx1MDAyNiAhem9uZV93YXRlcm1hcmtfb2soem9uZSwgMCwgc2l6ZSwgc2MtXFx1MDAzZXJlY2xhaW1faWR4LCAwKSlcXG40OTUwOlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG40OTUxOlxcdFxcdH1cXG40OTUyOlxcdFxcbjQ5NTM6XFx0XFx0Lyoga3N3YXBkIHNob3VsZCBhYm9ydCBpZiBhbGwgZWxpZ2libGUgem9uZXMgYXJlIHNhZmUgKi9cXG40OTU0OlxcdFxcdHJldHVybiB0cnVlO1xcbjQ5NTU6XFx0fVxcbjQ5NTY6XFx0XFxuNDk1NzpcXHQvKlxcbjQ5NTg6XFx0ICogRm9yIGZ1dHVyZSBvcHRpbWl6YXRpb25zOlxcbjQ5NTk6XFx0ICogMS4gRGVmZXIgdHJ5X3RvX2luY19tYXhfc2VxKCkgdG8gd29ya3F1ZXVlcyB0byByZWR1Y2UgbGF0ZW5jeSBmb3IgbWVtY2dcXG40OTYwOlxcdCAqICAgIHJlY2xhaW0uXFxuNDk2MTpcXHQgKi9cXG40OTYyOlxcdHN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNDk2MzpcXHR7XFxuNDk2NDpcXHRcXHRib29sIG5lZWRfcm90YXRlID0gZmFsc2UsIHNob3VsZF9hZ2UgPSBmYWxzZTtcXG40OTY1OlxcdFxcdGxvbmcgbnJfYmF0Y2gsIG5yX3RvX3NjYW47XFxuNDk2NjpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IGdldF9zd2FwcGluZXNzKGxydXZlYywgc2MpO1xcbjQ5Njc6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XFxuNDk2ODpcXHRcXG40OTY5OlxcdFxcdG5yX3RvX3NjYW4gPSBnZXRfbnJfdG9fc2NhbihscnV2ZWMsIHNjLCBtZW1jZywgc3dhcHBpbmVzcyk7XFxuNDk3MDpcXHRcXHR3aGlsZSAobnJfdG9fc2NhbiBcXHUwMDNlIDApIHtcXG40OTcxOlxcdFxcdFxcdGludCBkZWx0YTtcXG40OTcyOlxcdFxcdFxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxuNDk3MzpcXHRcXG40OTc0OlxcdFxcdFxcdGlmIChtZW1fY2dyb3VwX2JlbG93X21pbihzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIG1lbWNnKSkge1xcbjQ5NzU6XFx0XFx0XFx0XFx0bmVlZF9yb3RhdGUgPSB0cnVlO1xcbjQ5NzY6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDk3NzpcXHRcXHRcXHR9XFxuNDk3ODpcXHRcXG40OTc5OlxcdFxcdFxcdGlmIChzaG91bGRfcnVuX2FnaW5nKGxydXZlYywgbWF4X3NlcSwgc2MsIHN3YXBwaW5lc3MpKSB7XFxuNDk4MDpcXHRcXHRcXHRcXHRpZiAodHJ5X3RvX2luY19tYXhfc2VxKGxydXZlYywgbWF4X3NlcSwgc3dhcHBpbmVzcywgZmFsc2UpKVxcbjQ5ODE6XFx0XFx0XFx0XFx0XFx0bmVlZF9yb3RhdGUgPSB0cnVlO1xcbjQ5ODI6XFx0XFx0XFx0XFx0c2hvdWxkX2FnZSA9IHRydWU7XFxuNDk4MzpcXHRcXHRcXHR9XFxuNDk4NDpcXHRcXG40OTg1OlxcdFxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xcbjQ5ODY6XFx0XFx0XFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xcbjQ5ODc6XFx0XFx0XFx0aWYgKCFkZWx0YSlcXG40OTg4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjQ5ODk6XFx0XFxuNDk5MDpcXHRcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxuNDk5MTpcXHRcXHRcXHRcXHRicmVhaztcXG40OTkyOlxcdFxcbjQ5OTM6XFx0XFx0XFx0LypcXG40OTk0OlxcdFxcdFxcdCAqIFJvb3QgcmVjbGFpbSBuZWVkcyByb3RhdGlvbiB3aGVuIGxvdyBvbiBjb2xkIGZvbGlvIGZvciBiZXR0ZXJcXG40OTk1OlxcdFxcdFxcdCAqIGZhaXJuZXNzLiBDZ3JvdXAgcmVjbGFpbSBnZXRzIGZhaXJuZXNzIGZyb20gdGhlIGl0ZXJhdG9yLlxcbjQ5OTY6XFx0XFx0XFx0ICovXFxuNDk5NzpcXHRcXHRcXHRpZiAocm9vdF9yZWNsYWltKHNjKSBcXHUwMDI2XFx1MDAyNiBzaG91bGRfYWdlKVxcbjQ5OTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDk5OTpcXHRcXG41MDAwOlxcdFxcdFxcdG5yX3RvX3NjYW4gLT0gZGVsdGE7XFxuNTAwMTpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG41MDAyOlxcdFxcdH1cXG41MDAzOlxcdFxcbjUwMDQ6XFx0XFx0cmV0dXJuIG5lZWRfcm90YXRlO1xcbjUwMDU6XFx0fVxcbjUwMDY6XFx0XFxuNTAwNzpcXHRzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG41MDA4OlxcdHtcXG41MDA5OlxcdFxcdGJvb2wgbmVlZF9yb3RhdGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQzLjAzNzEyNjAzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODQ4NTgwOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb250ZXh0IG9mIGBzaG91bGRfYWJvcnRfc2NhbmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2hvdWxkX2Fib3J0X3NjYW5gLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGlzIHRoaXMgYSBmdW5jdGlvbiBzcGVjaWZpYyB0byBNdWx0aS1HZW5lcmF0aW9uYWwgTFJVIChNR0xSVSksIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgdGhhdCBtaWdodCBiZSB1c2VkIGFjcm9zcyBvdGhlciByZWNsYWltIG1lY2hhbmlzbXM/IFRvIGZpZ3VyZSB0aGlzIG91dCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoZXJlIGl0J3MgZGVmaW5lZC4gTXkgcHJpbWFyeSBzdXNwZWN0IGlzIE1HTFJVLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBwb3RlbnRpYWxseSB1c2VkIG1vcmUgYnJvYWRseS4gVGhlIG1vc3QgZGlyZWN0IGFwcHJvYWNoIGlzIGEgcHJlcHJvY2Vzc29yIGNoZWNrLiBMZXQncyBzZWUgaWYgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhhdCB3aWxsIGRlZmluaXRpdmVseSB0ZWxsIG1lIGlmIGl0J3MgdGllZCB0byB0aGUgZ2VuZXJhdGlvbmFsIExSVSBpbXBsZW1lbnRhdGlvbiwgYXMgZXhwZWN0ZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgYW5zd2VyIGFib3V0IGl0cyBzY29wZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciByZWNsYWltIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MjQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQ2LjEyMTk4NjA4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4NTYyNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2MTM9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2MjQtXFxubW0vdm1zY2FuLmM6MjYyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjI2LVxcbm1tL3Ztc2Nhbi5jPTI2Mjc9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjYyODojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2MjktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyOC1cXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODMwLVxcbi0tXFxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjYtXFxubW0vdm1zY2FuLmM6Mjk2NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMjk2OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU4NTg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU4NTktXFxubW0vdm1zY2FuLmM6NTg2MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01ODYxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTg3Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg3Ni1cXG5tbS92bXNjYW4uYzo1ODc3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU4NzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQ2LjE5MDg1MDQ4NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQwMTkyOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBhbmQgQWJvcnQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb25hbGl0eS4gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHZhcmlhYmxlIGlzIGRlZmluZWQgYW5kIHVzZWQgc29tZXdoZXJlIGRlZXAgd2l0aGluIHRoaXMgY29kZWJhc2UuIExldCdzIHNlZS4uLiB5ZXAsIGxvb2tzIGxpa2UgaXQncyBkZWZpbmVkIGFuZCBwb3RlbnRpYWxseSB0cmlnZ2VyZWQgb24gbGluZSA0OTI3LlxuXG5Ob3csIEknbSBwcmV0dHkgc3VyZSBhIHNpZ25pZmljYW50IGNodW5rIG9mIGNvZGUgYWZmZWN0aW5nIHRoaXMgd2hvbGUgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGd1YXJkZWQgYnkgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHByZXByb2Nlc3NvciBtYWNyby4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIHRoaW5raW5nIGNsZWFybHkuIE9rYXksIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jayAqYXBwZWFycyogdG8gc3RhcnQgYXQgbGluZSAyNjI1IGFuZCBydW5zIGFsbCB0aGUgd2F5IHRvIGxpbmUgNTg2MC4gVGhhdCdzIGEgaHVnZSBibG9jayBvZiBwb3RlbnRpYWxseSBjb25kaXRpb25hbCBjb2RlLiBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgZnVsbCBleHRlbnQuIEkgd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCB0aGUgbG9naWMgSSdtIGxvb2tpbmcgYXQgaXMgYWN0dWFsbHkgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciBwYXJ0aWFsbHkgaW5jbHVkZWQgYnkgdGhlIG1hY3JvLiBTbywgSSB3aWxsIGNvbmZpcm0gdGhlIGxpbmUgbnVtYmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjQ5LjUzMTA0NTM0OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYyMCxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjYyMDpcXHRcXHQvKiBBbHNvIHZhbHVhYmxlIGlmIGFub24gcGFnZXMgY2FuIGJlIGRlbW90ZWQ6ICovXFxuMjYyMTpcXHRcXHRyZXR1cm4gY2FuX2RlbW90ZShscnV2ZWNfcGdkYXQobHJ1dmVjKS1cXHUwMDNlbm9kZV9pZCwgc2MsXFxuMjYyMjpcXHRcXHRcXHRcXHQgIGxydXZlY19tZW1jZyhscnV2ZWMpKTtcXG4yNjIzOlxcdH1cXG4yNjI0OlxcdFxcbjI2MjU6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuMjYyNjpcXHRcXG4yNjI3OlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbjI2Mjg6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG4yNjI5OlxcdERFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTo0OS41MzEzMjc4NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEwMzAwMzUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogTGluZSA1ODU1KipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiBhIHNwZWNpZmljIHBvaW50LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgbGluZSA1ODU1LiBJJ20gaGl0dGluZyBhIG1lbnRhbCBjaGVja3BvaW50IHRoZXJlLCB3YW50aW5nIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlIGV4ZWN1dGlvbiBmbG93LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGlzIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEknbGwgbmVlZCB0byByZW1lbWJlciB3aHkgSSBzdXNwZWN0IHRoYXQgbGluZSA1ODU1IGlzIGludGVyZXN0aW5nLiBJdCBjb3VsZCBiZSByZWxhdGVkIHRvIHRoZSBjb3JlIGFsZ29yaXRobSwgYSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb24sIGEgY2FsbCB0byBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBvciBwZXJoYXBzIGV2ZW4gYW4gYW5vbWFseSBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24uIFRoaXMgbGluZSBudW1iZXIgYWN0cyBhcyBteSBhbmNob3IgdG8gZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0OiB3aGF0IHByZWNlZGVzIGl0LCBhbmQgd2hhdCBmb2xsb3dzPyBUaGlzIHdpbGwgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGNvbnRleHQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBsaW5lIGlzIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjI6NTk6NTIuNjM0MzMzMTY2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1ODU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1ODU1OlxcdFxcbjU4NTY6XFx0XFx0cmV0dXJuIDA7XFxuNTg1NzpcXHR9O1xcbjU4NTg6XFx0bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbjU4NTk6XFx0XFxuNTg2MDpcXHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG41ODYxOlxcdFxcbjU4NjI6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG41ODYzOlxcdHtcXG41ODY0OlxcdFxcdEJVSUxEX0JVRygpO1xcbjU4NjU6XFx0fVxcbjU4NjY6XFx0XFxuNTg2NzpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG41ODY4OlxcdHtcXG41ODY5OlxcdFxcdEJVSUxEX0JVRygpO1xcbjU4NzA6XFx0fVxcbjU4NzE6XFx0XFxuNTg3MjpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjU4NzM6XFx0e1xcbjU4NzQ6XFx0XFx0QlVJTERfQlVHKCk7XFxuNTg3NTpcXHR9XFxuNTg3NjpcXHRcXG41ODc3OlxcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbjU4Nzg6XFx0XFxuNTg3OTpcXHRzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNTg4MDpcXHR7XFxuNTg4MTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107XFxuNTg4MjpcXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldHNbTlJfTFJVX0xJU1RTXTtcXG41ODgzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbjtcXG41ODg0OlxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTo1Mi42MzQ3OTE4MjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI1NDI1NDM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi5cblxuKipEaXZpbmcgaW50byB0aGUgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5BbHJpZ2h0LCBteSBpbnRlcm5hbCBjb21waWxlciBmbGFncyBhcmUgc3RhcnRpbmcgdG8gbGlnaHQgdXAuICpzaG91bGRcXF9hYm9ydFxcX3NjYW4qLi4uIGFoLCB0aGF0J3MgdHVja2VkIGF3YXkgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBBbmQgdGhhdCdzIGNvbmZpcm1lZCBieSB0aGUgbGluZSBudW1iZXIsIGxpbmUgNDkyNywgd2hpY2ggSSByZW1lbWJlciBiZWluZyBzb21ld2hlcmUgYmV0d2VlbiB0aG9zZSBlYXJsaWVyIGNoZWNrcyB0aGF0IHVzZWQgQ09ORklHXFxfTFJVXFxfR0VOLCBzcGVjaWZpY2FsbHkgYmV0d2VlbiAyNjI1IGFuZCA1ODYwLiBTbywgZGVmaW5pdGVseSwgKkNPTkZJR1xcX0xSVVxcX0dFTiogaXMgYSBwcmVyZXF1aXNpdGUgaGVyZS4gVGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0IGlzIHRoYXQgKmFsbCo/IEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gQXJlIHRoZXJlICphbnkqIG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGlzIGZ1bmN0aW9uPyBJIHNob3VsZCBwcm9iYWJseSBpbnZlc3RpZ2F0ZSAqc2MtXHUwMDNlcHJvYWN0aXZlKiBuZXh0OyBpcyB0aGF0IHRpZWQgdG8gYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucz8gTGV0IG1lIHNlZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIyOjU5OjU1Ljg4OTA0ODI3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ0OTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcm9hY3RpdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy05NS1cXG5tbS92bXNjYW4uYzo5NjpcXHQvKiBTd2FwcGluZXNzIHZhbHVlIGZvciBwcm9hY3RpdmUgcmVjbGFpbS4gQWx3YXlzIHVzZSBzY19zd2FwcGluZXNzKCkhICovXFxubW0vdm1zY2FuLmM6OTc6XFx0aW50ICpwcm9hY3RpdmVfc3dhcHBpbmVzcztcXG5tbS92bXNjYW4uYy05OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyMS1cXHQvKiBQcm9hY3RpdmUgcmVjbGFpbSBpbnZva2VkIGJ5IHVzZXJzcGFjZSAqL1xcbm1tL3Ztc2Nhbi5jOjEyMjpcXHR1bnNpZ25lZCBpbnQgcHJvYWN0aXZlOjE7XFxubW0vdm1zY2FuLmMtMTIzLVxcbi0tXFxubW0vdm1zY2FuLmM9MjQyPXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTI0My17XFxubW0vdm1zY2FuLmM6MjQ0OlxcdGlmIChzYy1cXHUwMDNlcHJvYWN0aXZlIFxcdTAwMjZcXHUwMDI2IHNjLVxcdTAwM2Vwcm9hY3RpdmVfc3dhcHBpbmVzcylcXG5tbS92bXNjYW4uYzoyNDU6XFx0XFx0cmV0dXJuICpzYy1cXHUwMDNlcHJvYWN0aXZlX3N3YXBwaW5lc3M7XFxubW0vdm1zY2FuLmMtMjQ2LVxcdHJldHVybiBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg2PXN0YXRpYyB2b2lkIGZsdXNoX3JlY2xhaW1fc3RhdGUoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0zMDItXFx0ICogZnJvbSB0aGUgdGFyZ2V0IG1lbWNnOyBwcmV2ZW50aW5nIHVubmVjZXNzYXJ5IHJldHJpZXMgZHVyaW5nIG1lbWNnXFxubW0vdm1zY2FuLmM6MzAzOlxcdCAqIGNoYXJnaW5nIGFuZCBmYWxzZSBwb3NpdGl2ZXMgZnJvbSBwcm9hY3RpdmUgcmVjbGFpbS5cXG5tbS92bXNjYW4uYy0zMDQtXFx0ICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0ND1zdGF0aWMgaW50IHJlY2xhaW1lcl9vZmZzZXQoc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NTMtXFx0XFx0cmV0dXJuIFBHU1RFQUxfS0hVR0VQQUdFRCAtIFBHU1RFQUxfS1NXQVBEO1xcbm1tL3Ztc2Nhbi5jOjQ1NDpcXHRpZiAoc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5tbS92bXNjYW4uYy00NTUtXFx0XFx0cmV0dXJuIFBHU1RFQUxfUFJPQUNUSVZFIC0gUEdTVEVBTF9LU1dBUEQ7XFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE1NjgtXFx0XFx0ICogbWxvY2tlZCBvciB0b28gaG90IHRvIHJlY2xhaW0uIFdlIGNhbiBkaXNhYmxlIHJlY2xhaW1cXG5tbS92bXNjYW4uYzoxNTY5OlxcdFxcdCAqIGZyb20gdG9wIHRpZXIgbm9kZXMgaW4gcHJvYWN0aXZlIHJlY2xhaW0gdGhvdWdoIGFzIHRoYXQgaXNcXG5tbS92bXNjYW4uYy0xNTcwLVxcdFxcdCAqIG5vdCByZWFsIG1lbW9yeSBwcmVzc3VyZS5cXG5tbS92bXNjYW4uYy0xNTcxLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjE1NzI6XFx0XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKSB7XFxubW0vdm1zY2FuLmMtMTU3My1cXHRcXHRcXHRkb19kZW1vdGVfcGFzcyA9IGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9MjQ5Mz1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjUyMy1cXHRpZiAoc3dhcHBpbmVzcyA9PSBTV0FQUElORVNTX0FOT05fT05MWSkge1xcbm1tL3Ztc2Nhbi5jOjI1MjQ6XFx0XFx0V0FSTl9PTl9PTkNFKCFzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYy0yNTI1LVxcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ5Mjc9c3RhdGljIGJvb2wgc2hvdWxkX2Fib3J0X3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MzEtXFxubW0vdm1zY2FuLmM6NDkzMjpcXHRpZiAodW5saWtlbHkoc2MtXFx1MDAzZXByb2FjdGl2ZSBcXHUwMDI2XFx1MDAyNiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkpXFxubW0vdm1zY2FuLmMtNDkzMy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMDc9c3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MDMwLVxcbm1tL3Ztc2Nhbi5jOjUwMzE6XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTUwMzItXFx0XFx0dm1wcmVzc3VyZShzYy1cXHUwMDNlZ2ZwX21hc2ssIHNjLVxcdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxcbi0tXFxubW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjgtXFxubW0vdm1zY2FuLmM6NTEyOTpcXHRzZXRfbW1fd2FsayhOVUxMLCBzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYy01MTMwLVxcbi0tXFxubW0vdm1zY2FuLmM9NTEzOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTE1Ny1cXG5tbS92bXNjYW4uYzo1MTU4OlxcdHNldF9tbV93YWxrKHBnZGF0LCBzYy1cXHUwMDNlcHJvYWN0aXZlKTtcXG5tbS92bXNjYW4uYy01MTU5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTY2MT1zdGF0aWMgc3NpemVfdCBscnVfZ2VuX3NlcV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU2NzQtXFx0XFx0LmdmcF9tYXNrID0gR0ZQX0tFUk5FTCxcXG5tbS92bXNjYW4uYzo1Njc1OlxcdFxcdC5wcm9hY3RpdmUgPSB0cnVlLFxcbm1tL3Ztc2Nhbi5jLTU2NzYtXFx0fTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTYwNzA9c3RhdGljIHZvaWQgc2hyaW5rX25vZGVfbWVtY2dzKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjEzNS1cXHRcXHQvKiBSZWNvcmQgdGhlIGdyb3VwJ3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXFxubW0vdm1zY2FuLmM6NjEzNjpcXHRcXHRpZiAoIXNjLVxcdTAwM2Vwcm9hY3RpdmUpXFxubW0vdm1zY2FuLmMtNjEzNy1cXHRcXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXFxuLS1cXG5tbS92bXNjYW4uYz02MTQ5PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjE4MC1cXHQvKiBSZWNvcmQgdGhlIHN1YnRyZWUncyByZWNsYWltIGVmZmljaWVuY3kgKi9cXG5tbS92bXNjYW4uYzo2MTgxOlxcdGlmICghc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5tbS92bXNjYW4uYy02MTgyLVxcdFxcdHZtcHJlc3N1cmUoc2MtXFx1MDAzZWdmcF9tYXNrLCBzYy1cXHUwMDNlb3JkZXIsIHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCwgdHJ1ZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY0NTc9c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY0NzAtXFx0ZG8ge1xcbm1tL3Ztc2Nhbi5jOjY0NzE6XFx0XFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbm1tL3Ztc2Nhbi5jLTY0NzItXFx0XFx0XFx0dm1wcmVzc3VyZV9wcmlvKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLFxcbi0tXFxubW0vdm1zY2FuLmM9Njc2NT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc3NC1cXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXFxubW0vdm1zY2FuLmM6Njc3NTpcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzLFxcbm1tL3Ztc2Nhbi5jLTY3NzYtXFx0XFx0LmdmcF9tYXNrID0gKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spIFxcdTAwMjYgR0ZQX1JFQ0xBSU1fTUFTSykgfFxcbi0tXFxubW0vdm1zY2FuLmMtNjc4My1cXHRcXHQubWF5X3N3YXAgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX01BWV9TV0FQKSxcXG5tbS92bXNjYW4uYzo2Nzg0OlxcdFxcdC5wcm9hY3RpdmUgPSAhIShyZWNsYWltX29wdGlvbnMgXFx1MDAyNiBNRU1DR19SRUNMQUlNX1BST0FDVElWRSksXFxubW0vdm1zY2FuLmMtNjc4NS1cXHR9O1xcbi0tXFxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzkzNy1cXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxubW0vdm1zY2FuLmM6NzkzODpcXHRcXHRcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFxcdTAwMjZzd2FwcGluZXNzLFxcbm1tL3Ztc2Nhbi5jLTc5MzktXFx0XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbi0tXFxubW0vdm1zY2FuLmMtNzk0My1cXHRcXHRcXHRcXHQubWF5X3N3YXAgPSAxLFxcbm1tL3Ztc2Nhbi5jOjc5NDQ6XFx0XFx0XFx0XFx0LnByb2FjdGl2ZSA9IDEsXFxubW0vdm1zY2FuLmMtNzk0NS1cXHRcXHRcXHR9O1xcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMjo1OTo1NS45ODY1MDM2MjlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEwOTYwMjg3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQcm9hY3RpdmUgUmVjbGFpbSBUcmlnZ2VycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHBvaW50cyB3aGVyZSBgc2MtXHUwMDNlcHJvYWN0aXZlYCBpcyBzZXQuIEl0IGxvb2tzIGxpa2UgaXQncyBoYXBwZW5pbmcgaW4gYGxydV9nZW5fc2VxX3dyaXRlYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBSaWdodCBhd2F5LCB0aGUgY29ubmVjdGlvbnMgYXJlIHN0YXJ0aW5nIHRvIGZvcm0uXG5cbmB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIGByZWNsYWltX3N0b3JlYCwgd2hpY2ggbGlrZWx5IG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHN5c2ZzIGludGVyZmFjZSBoZXJlLiBUaGF0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbi4gQWxzbywgdGhlIGluY2x1c2lvbiBvZiBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agc3VnZ2VzdHMgbWVtY2cgcmVjbGFpbSBpcyBpbnZvbHZlZC4gQW5kIGBscnVfZ2VuX3NlcV93cml0ZWAgaXMgcHJvYmFibHkgdGllZCB0byBNR0xSVSdzIHN5c2ZzIG9yIGRlYnVnZnMgaW50ZXJmYWNlLCBiYXNlZCBvbiB0aGUgY29udGV4dC5cblxuSG9sZCBvbiBhIHNlY29uZC4uLiBgc2hvdWxkX2Fib3J0X3NjYW5gIGlzIGNhbGxlZCBmcm9tIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBzaHJpbmtfbWFueWAuIElzIGB0cnlfdG9fc2hyaW5rX2xydXZlY2Agb25seSB1c2VkIHdpdGggYENPTkZJR19MUlVfR0VOYD8gSSBuZWVkIHRvIGNoZWNrLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgWWVzLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGlzIGluZGVlZCB3cmFwcGVkIHdpdGggYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAuIEknbSBnb2luZyB0byBsb29rIGF0IGxpbmUgbnVtYmVycywgNDk2Mi4gVGhhdCdzIGJldHdlZW4gMjYyNSBhbmQgNTg2MCwgd2hpY2ggbWVhbnMgdGhhdCBgQ09ORklHX0xSVV9HRU5gIGlzIGVzc2VudGlhbCBoZXJlLCB0aGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3csIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM/IEkgd2FudCB0byBsb29rIGJhY2sgYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFuZCBgcmVjbGFpbV9zdG9yZWAsIGFuZCBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTY5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjAxLjA5NjEwOTM4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2OTUwOTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY2xhaW1fc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODAwOT1FWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XFxuLS1cXG5tbS92bXNjYW4uYy04MDExLSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5tbS92bXNjYW4uYzo4MDEyOnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbm1tL3Ztc2Nhbi5jLTgwMTMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MDEuMjUzMDY2MjU1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDk4NDk0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0LlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgb2YgYHJlY2xhaW1fc3RvcmVgKipcblxuUmlnaHQsIHNvIGByZWNsYWltX3N0b3JlYCwgdGhhdCdzIHBhcnQgb2YgdGhlIHdob2xlIHN5c3RlbSdzIG1lbW9yeSByZWNsYW1hdGlvbiBwcm9jZXNzLCByaWdodD8gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGl0J3MgY2xlYXJseSBoYW5naW5nIG91dCB1bmRlciBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYC4gVGhhdCBtYWtlcyBzZW5zZSAtIFN5c0ZTIGlzIHRoZSBjb250cm9sIHBsYW5lLCB0aGUgd2F5IHdlIGV4cG9zZSB0aGUgbWVtb3J5IGNvbnRyb2wgaW5mb3JtYXRpb24sIGFuZCBOVU1BLCB3ZWxsLCB0aGF0J3MgY3JpdGljYWwgZm9yIGhvdyB3ZSBtYW5hZ2UgbWVtb3J5IGFjcm9zcyB0aGUgZGlmZmVyZW50IG5vZGVzLiBJJ2QgbmVlZCB0byBnbyBsb29rIGludG8gdGhlIGNvZGUsIGJ1dCBteSBpbml0aWFsIGd1dCBmZWVsaW5nIGlzIHRoYXQgaXQgaXMgdGhlIGZlYXR1cmUgc3RvcmUgdXNlZCBieSBTeXNGUy5cblxuQnV0IGhvbGQgb24sIHRoZXJlJ3MgYW5vdGhlciBwb2ludC4gVGhpcyBgc2MtXHUwMDNlcHJvYWN0aXZlYCBmbGFnLi4uIHRoYXQncyBhbHNvIGJlaW5nIHNldCB3aXRoaW4gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBOb3csIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYC4uLiBhaCwgdGhhdCdzIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IG1lYW5zIHRoaXMgYHJlY2xhaW1fc3RvcmVgIGhhcyBhIGJpdCBvZiBhbiBpbnRlcmVzdGluZyByZWxhdGlvbnNoaXAgd2l0aCB0aGUgY2dyb3VwIG1lbW9yeSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGJldHRlci4gU28sIGl0J3Mgbm90IGp1c3QgYSBzdGFuZGFsb25lIFN5c0ZTL05VTUEgZmVhdHVyZSwgaXQncyBnb3QgYSBkaXJlY3QgbGluayB0byB0aGUgYWN0dWFsIG1lbW9yeSBmcmVlaW5nIHByb2Nlc3Mgd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEkgaGF2ZSB0byB0aGluayBhYm91dCBob3cgdGhpcyBwcm9hY3RpdmUgZmxhZyBpbnRlcnBsYXlzIHdpdGggdGhlIG90aGVyIG1lY2hhbmlzbXMuIExvb2tzIGxpa2UgaXQncyB0ZWxsaW5nIHRoZSBzeXN0ZW0gdG8gYmUgbW9yZSBhZ2dyZXNzaXZlIGFib3V0IGZyZWVpbmcgbWVtb3J5IHBhZ2VzIG9uIGEgcGVyLWNncm91cCBiYXNpcywgSSdkIGJldC4gSSBkZWZpbml0ZWx5IG5lZWQgdG8gZGlnIGludG8gYG1tL21lbWNvbnRyb2wuY2AgYW5kIHRyYWNlIGhvdyB0aGlzIGZsYWcgaXMgdXNlZCB0byBzZWUgaG93IGl0IG1pZ2h0IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNncm91cCBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5ODIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDowNS4xNjI5MTc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTc0ODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLXYxLmM9MTQ4MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTUyMS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTUyMjpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE1MjMtXFx0XFx0XFx0XFx0bWVtc3cgPyAwIDogTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNTQwPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTU1My1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTU1NDpcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXFxubW0vbWVtY29udHJvbC12MS5jLTE1NTUtXFx0XFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yMzI4PXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjM0My1cXHRcXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjIzNDQ6XFx0XFx0bnJfcmVjbGFpbWVkICs9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yMzQ1LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1OTU9c3RhdGljIGludCB0cnlfY2hhcmdlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjY1NC1cXHRwc2lfbWVtc3RhbGxfZW50ZXIoXFx1MDAyNnBmbGFncyk7XFxubW0vbWVtY29udHJvbC5jOjI2NTU6XFx0bnJfcmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1fb3Zlcl9saW1pdCwgbnJfcGFnZXMsXFxubW0vbWVtY29udHJvbC5jLTI2NTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ3Njg9c3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ4MDItXFxubW0vbWVtY29udHJvbC5jOjQ4MDM6XFx0XFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMgLSBoaWdoLFxcbm1tL21lbWNvbnRyb2wuYy00ODA0LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MjA9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDg1NC1cXHRcXHRpZiAobnJfcmVjbGFpbXMpIHtcXG5tbS9tZW1jb250cm9sLmM6NDg1NTpcXHRcXHRcXHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gbWF4LFxcbm1tL21lbWNvbnRyb2wuYy00ODU2LVxcdFxcdFxcdFxcdFxcdEdGUF9LRVJORUwsIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbi0tXFxubW0vdm1zY2FuLmM9NjcyNT11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjc2NC1cXG5tbS92bXNjYW4uYzo2NzY1OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjc2Ni1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNjgwNS0jZWxzZVxcbm1tL3Ztc2Nhbi5jOjY4MDY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS92bXNjYW4uYy02ODA3LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03ODY5PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MjktXFx0XFx0XFx0XFx0XFx0ICBNRU1DR19SRUNMQUlNX1BST0FDVElWRTtcXG5tbS92bXNjYW4uYzo3OTMwOlxcdFxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csXFxubW0vdm1zY2FuLmMtNzkzMS1cXHRcXHRcXHRcXHRcXHRcXHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjA1LjIyODY3MjU0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDQ0MDc0OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgTWVtb3J5IFJlY2xhbWF0aW9uIFRyaWdnZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20gd29ya3MsIGFuZCBJJ3ZlIHRyYWNlZCBhIGNhbGwgcGF0aCBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gSSBzZWUgdGhhdCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgaXMgZ2V0dGluZyBpbnZva2VkIHdpdGggYE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFYCBhcyBhIGZsYWcuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGZyZWVpbmcgcGFnZXMgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIG1lbW9yeSBjZ3JvdXAsIGFuZCB0aGUgYFBST0FDVElWRWAgZmxhZyBzaWduYWxzIHRoYXQgdGhlIHJlY2xhaW0gaXMgaW5pdGlhdGVkIHByb2FjdGl2ZWx5LCByYXRoZXIgdGhhbiByZWFjdGl2ZWx5IHRvIGEgbG93IG1lbW9yeSBzaXR1YXRpb24uXG5cbk5vdywgd2hlcmUgaXMgdGhpcyBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgY2FsbCBjb21pbmcgZnJvbSBpbiB0aGUgZmlyc3QgcGxhY2U/IEFoLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoaXMgc2VlbXMgbG9naWNhbCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdXNlcnNwYWNlIHRvIGFnZ3Jlc3NpdmVseSBmcmVlIG1lbW9yeS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0LCBoYW5nIG9uLCB0aGlzIGlzbid0IHRoZSBvbmx5IHBsYWNlIGl0J3MgdHJpZ2dlcmVkLiBJIHNlZSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyAqYWxzbyogY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpdHNlbGYsIHdoaWNoIGlzIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IG1lYW5zIHRoaXMgcHJvYWN0aXZlIHJlY2xhbWF0aW9uIGlzbid0IGV4Y2x1c2l2ZWx5IGEgdXNlci10cmlnZ2VyZWQgZnVuY3Rpb24sIGJ1dCBpcyBhbHNvIHBhcnQgb2YgdGhlIG1vcmUgZ2VuZXJhbCBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0uIFRoaXMgbWVhbnMgaXQgbWlnaHQgYmUgaW50ZWdyYXRlZCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyB0byB0cnkgYW5kIGZyZWUgdXAgbWVtb3J5IGJhc2VkIG9uIHNvbWUgaW50ZXJuYWwgdHJpZ2dlcnMgYW5kIHRocmVzaG9sZHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwYXRocyBpbnRlcmFjdCBhbmQgd2hldGhlciB0aGV5J3JlIGJlaGF2aW5nIGFzIGludGVuZGVkLiBUaGVyZSdzIHByb2JhYmx5IG92ZXJsYXAsIGJ1dCB0aGF0IGhhcyBpbXBvcnRhbnQgaW1wbGljYXRpb25zIG9uIGhvdyBtZW1vcnkgaXMgY29udHJvbGxlZCBhbmQgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDowOS4yNzI3NTA0MDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTg3MzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NjMxPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjYzMjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC02MzMtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTg5PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5OTQtXFxubW0vbWVtY29udHJvbC5jOjQ5OTU6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNDk5Ni1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDowOS4zMzM5NDMwNDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5ODU0MzcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQcm9hY3RpdmUgUmVjbGFpbSBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgbWVhbnMgdGhpcyBpcyB0aGUgY2dyb3VwIHYyIGludGVyZmFjZSBmb3IgdGhlIGBtZW1vcnkucmVjbGFpbWAgZmVhdHVyZSDigJMgb3IgYHJlY2xhaW1gIGluIHRoZSBzeXNmcyBub2RlIGRpcmVjdG9yeS4gVGhpcyBcInByb2FjdGl2ZSByZWNsYWltXCIgZnVuY3Rpb25hbGl0eSBpcyB0cmlnZ2VyZWQgd2hlbiBhIHVzZXIgd3JpdGVzIHRvIHRoYXQgY29udHJvbCBmaWxlLiBJIHNlZSB0aGUgcGF0Y2ggaW5jbHVkZXMgYSBjaGVjayB0aGF0IHdpbGwgYWJvcnQgdGhpcyBwcm9hY3RpdmUgcmVjbGFpbSBwcm9jZXNzIGlmIHRoZSB0YXNrIGluaXRpYXRpbmcgdGhlIHJlY2xhaW0gaGFzIGEgc2lnbmFsIHBlbmRpbmcuXG5cblRoaXMgaXMgZGVmaW5pdGVseSBhIHBhdGggdGhhdCdzIGJvdGggZnVuY3Rpb25hbCBhbmQgZXhwb3NlZCB0byB1c2Vyc3BhY2Ug4oCTIHVzZXJzIGNhbiBpbnRlcmFjdCB3aXRoIGl0IGJ5IHdyaXRpbmcgdG8gdGhlIGNvbnRyb2wgZmlsZXMgYW5kIHNlbmRpbmcgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MsIHRodXMgbGVhZGluZyBpdCB0byBwcm9hY3RpdmUgcmVjbGFpbS4gVGhlIHNpZ25hbCBwYXRoIG1ha2VzIGl0IHJpcGUgZm9yIGZ1enppbmcuIEdpdmVuIHRoZSBmdW5jdGlvbmFsIHBhdGggaXQgaXMgd29ydGggYSB0ZXN0LlxuXG5NeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgb24gdGhlIGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX21hbnlgIHN5bWJvbHMuIFdhaXQgYSBzZWNvbmQsIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgKmFsc28qIGNhbGxlZCBmcm9tIGBzaHJpbmtfbWFueWAsIHdoaWNoIGlzIGl0c2VsZiB1c2VkIGluIGEgZmVhdHVyZSByZWxhdGVkIHRvIGBDT05GSUdfTFJVX0dFTmAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBjb25maXJtIHRoYXQgYHNocmlua19tYW55YCBpcyBhY3R1YWxseSB1bmRlciB0aGF0IGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzU4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjE0LjEzMjQ4OTExNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNDA4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX21hbnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTAwNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwNDctXFxubW0vdm1zY2FuLmM6NTA0ODpzdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG5tbS92bXNjYW4uYy01MDQ5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMzk9c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNjctXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjUxNjg6XFx0XFx0c2hyaW5rX21hbnkocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy01MTY5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDoxNC4xODk3MzI4MDRaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyMzA4ODk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSd2ZSBwaW5wb2ludGVkIGBzaHJpbmtfbWFueWAsIGFuZCBpdCdzIGRlZmluaXRlbHkgd2l0aGluIHRoZSBzcGVjaWZpZWQgbGluZSByYW5nZSwgY29uZmlybWluZyB0aGF0IGBDT05GSUdfTFJVX0dFTmAgaXMgZXNzZW50aWFsIGhlcmUuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgYXJlIHRoZXJlIGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBsdXJraW5nIGFyb3VuZCB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gSSBrbm93IHRoYXQgYENPTkZJR19NRU1DR2AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgbWVtb3J5LnJlY2xhaW1gIGNncm91cCBpbnRlcmZhY2UuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIGlmIHRoZSBgbWVtb3J5X3JlY2xhaW1gIGZ1bmN0aW9uYWxpdHkgaW4gYG1tL21lbWNvbnRyb2wuY2AgYWN0dWFsbHkgbGl2ZXMgdW5kZXIgdGhhdCBgQ09ORklHX01FTUNHYCBndWFyZC4gQWgsIHllcywgbG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgbW0vbWVtY29udHJvbC5jYCBnZXRzIGNvbXBpbGVkIG9ubHkgaWYgYENPTkZJR19NRU1DR2AgaXMgZW5hYmxlZC4gSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHRob3JvdWdoIGFuZCB2ZXJpZnksIEkgc2hvdWxkIGNoZWNrIHRoZSByZWxldmFudCBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDkyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjE3LjYxMjgyNDEzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgyMjA4OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXFxubW0vTWFrZWZpbGU6Mjk6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wtdjEubyA6PSBuXFxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICs9IGJwZl9tZW1jb250cm9sLm9cXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MTcuNjgxMDUwODQ1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDk3NDU1NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byB0aGUgZGVwZW5kZW5jaWVzIGhlcmUuIEl0J3MgY2xlYXIgdGhhdCBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IG5lZWRlZCBmb3IgYG1lbWNvbnRyb2wub2AgdG8gZnVuY3Rpb24sIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBsZXQncyB0aGluayBhYm91dCBgcmVjbGFpbV9zdG9yZWAuIEkga25vdyB0aGF0J3MgYW4gYWx0ZXJuYXRpdmUgbWV0aG9kIHRvIGluaXRpYXRlIHByb2FjdGl2ZSByZWNsYWltLCBzbyBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25maWd1cmluZyBldmVyeXRoaW5nIGNvcnJlY3RseS5cblxuSG1tLCB3aGF0IGFib3V0IGBDT05GSUdfU1lTRlNgIGFuZCBgQ09ORklHX05VTUFgIGluIHJlbGF0aW9uIHRvIGByZWNsYWltX3N0b3JlYD8gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCwganVzdCB0byBiZSB0aG9yb3VnaC4gQnV0IHRoZSBjb3JlIGRlcGVuZGVuY3kgSSdtIHJlYWxseSBjb25jZXJuZWQgd2l0aCBoZXJlIGlzIGBDT05GSUdfTFJVX0dFTmAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gb25lIGRyaXZpbmcgdGhpcyBmdW5jdGlvbmFsaXR5LlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgd2hldGhlciBgQ09ORklHX0xSVV9HRU5gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUga2VybmVsIG9yIGlmIGl0IHJlcXVpcmVzIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gY29uZmlybSB0aGF0LiBTaW5jZSBpdOKAmXMgYSBrZXJuZWwgY29uZmlnIGZsYWcsIEkgbmVlZCB0byBjaGVjayBgbW0vS2NvbmZpZ2AuIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHJldmVhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2OTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MjkuMTc4NTA5MDc0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTgzOTg2NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTE0MDY9ZW5kaWYgIyBVU0VSRkFVTFRGRFxcbi0tXFxubW0vS2NvbmZpZy0xNDA4LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDEwLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTctXFxubW0vS2NvbmZpZzoxNDE4OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTktXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjMtXFxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDI1LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQzMi1cXG5tbS9LY29uZmlnOjE0MzM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDM0LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6MjkuMzc2OTEzMDIxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjgzOTY4ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVIEdlbmVyYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIGBMUlVfR0VOYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBCdXQgSSBuZWVkIHRvIGNvbnNpZGVyIHdoZXRoZXIgYExSVV9HRU5fRU5BQkxFRGAgYWxzbyBwbGF5cyBhIHJvbGUgaW4gZW5hYmxpbmcgdGhpcyBmZWF0dXJlIGJ5IGRlZmF1bHQsIG9yIGlmIHJ1bnRpbWUgY29udHJvbCB2aWEgc3lzZnMgaXMgdGhlIG9ubHkgd2F5LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgY29uZmlybWluZyB0aGUgaW1wYWN0IG9mIGp1c3QgYExSVV9HRU5gLlxuXG5Fc3NlbnRpYWxseSwgaWYgYExSVV9HRU5gIGlzIGVuYWJsZWQsIHRoZSByZWxldmFudCBjb2RlIHdpbGwgYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJZiBgTFJVX0dFTl9FTkFCTEVEYCBpc24ndCBzZXQsIHRoZW4gTUdMUlUgbWlnaHQgYmUgZGlzYWJsZWQgYXQgcnVudGltZSBieSBkZWZhdWx0LlxuXG5UbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGluaXRfbHJ1X2dlbmAgZnVuY3Rpb24gd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQncyB3aGVyZSBJJ2xsIGdldCB0aGUgcmVhbCBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODMwMywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozMi45NDUzMTE5MDFaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODc2ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluaXRfbHJ1X2dlblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01ODE0PXZvaWQgbHJ1X2dlbl9leGl0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NDItXFxubW0vdm1zY2FuLmM6NTg0MzpzdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG5tbS92bXNjYW4uYy01ODQ0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NTctfTtcXG5tbS92bXNjYW4uYzo1ODU4OmxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG5tbS92bXNjYW4uYy01ODU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozMy4wMTkxOTE5NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk5NzEwOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBpbml0X2xydV9nZW5gKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGluaXRfbHJ1X2dlbmAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgTFJVIGNhY2hlIGNvbnRleHQuIEknbSBhc3N1bWluZyBpdCdzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRhdGEgc3RydWN0dXJlcyBjcml0aWNhbCB0byB0aGUgTFJVIGV2aWN0aW9uIHBvbGljeS4gUHJvYmFibHkgc2V0dGluZyB1cCB0aGUgZG91Ymx5LWxpbmtlZCBsaXN0IGZvciByZWNlbmN5IHRyYWNraW5nIGFuZCB0aGUgaGFzaCB0YWJsZSAobGlrZWx5IGEgZGljdGlvbmFyeSBvciBlcXVpdmFsZW50IGluIHdoYXRldmVyIGxhbmd1YWdlIHRoaXMgaXMpIGZvciBmYXN0IGtleSBsb29rdXBzLlxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IGNvbnNpZGVyaW5nIGVkZ2UgY2FzZXMuIERvZXMgaXQgaGFuZGxlIGVtcHR5IGNhY2hlcyBncmFjZWZ1bGx5PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgaWYgdGhpcyBpcyBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IGR1cmluZyBpbml0aWFsaXphdGlvbj8gV2hhdCBhYm91dCBwcmUtYWxsb2NhdGluZyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIGlzIGl0IGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgYXMgbmVlZGVkLCB3aGljaCB3b3VsZCBpbXBhY3QgcGVyZm9ybWFuY2U/IEknbSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY2FjaGUgc2l6ZTsgaXMgaXQgYSBmaXhlZCBzaXplIG9yIGR5bmFtaWNhbGx5IHJlc2l6YWJsZT8gQW5kIGhvdyBkb2VzIGl0IGhhbmRsZSB0aGUgJ2hvdCBzdGFydCcgcHJvYmxlbSAtIHdoZW4geW91IGluaXRpYWxpemUgYW4gTFJVLCBpcyBpdCAnd2FybScgb3IgZG9lcyBpdCBhc3N1bWUgZXZlcnl0aGluZyBzdGFydHMgd2l0aCBlcXVhbCByZWNlbmN5P1xuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBwb3RlbnRpYWwgdGltZSBjb21wbGV4aXR5IG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCBwYXJ0aWN1bGFybHkgaWYgdGhlIGluaXRpYWwgY2FjaGUgc2l6ZSBpcyBzdWJzdGFudGlhbC4gQmlnIE8gbm90YXRpb24gd2lsbCB0ZWxsIHRoZSB0YWxlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGZvciBhbnkgaGludHMsIGNvbW1lbnRzLCBvciB2YXJpYWJsZSBuYW1lcyB0aGF0IHJldmVhbCB3aGF0IGtpbmQgb2YgbWVtb3J5IG1hbmFnZW1lbnQgb3IgY29uY3VycmVudCBwcm9ncmFtbWluZyBwcmltaXRpdmVzIGFyZSBhdCBwbGF5LiBCYXNpY2FsbHksIGFtIEkgZ29pbmcgdG8gc2VlIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zLCBvciBzb21ldGhpbmcgbW9yZSBlbGVnYW50P1xuXG5GaW5hbGx5LCBteSBleHBlcnQgZXllIGxvb2tzIGZvciBhbnkgcG90ZW50aWFsIGRlc2lnbiBmbGF3cyBvciBwb3RlbnRpYWwgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgTFJVLCBzbyBJIHdhbnQgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCB0aGUgYm90dGxlbmVjay4gRG9lcyB0aGUgb3ZlcmFsbCBkZXNpZ24gc2VlbSB3ZWxsLXN0cnVjdHVyZWQsIG9yIGFyZSB0aGVyZSBhbnkgc2lnbnMgb2YgcHJlbWF0dXJlIG9wdGltaXphdGlvbiBvciwgd29yc2UsIHBvb3JseS1jb25jZWl2ZWQgZGVzaWduIGRlY2lzaW9ucz8gSSB3aWxsIG1ha2UgbXkgcmVjb21tZW5kYXRpb25zIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc4NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjM2LjkxODkwNTA2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA4NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTg0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTg0MDpcXHRcXG41ODQxOlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG41ODQyOlxcdFxcbjU4NDM6XFx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuNTg0NDpcXHR7XFxuNTg0NTpcXHRcXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG41ODQ2OlxcdFxcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXFx1MDAzYz0gTUFYX05SX0dFTlMpO1xcbjU4NDc6XFx0XFxuNTg0ODpcXHRcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbjU4NDk6XFx0XFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG41ODUwOlxcdFxcbjU4NTE6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxuNTg1MjpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxuNTg1MzpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNTg1NDpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNTg1NTpcXHRcXG41ODU2OlxcdFxcdHJldHVybiAwO1xcbjU4NTc6XFx0fTtcXG41ODU4OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG41ODU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozNi45MTkxODcwNzZaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMDQyMDIyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczpcblxuKipEaWdnaW5nIGludG8gYExSVV9HRU5fRU5BQkxFRGAgYW5kIGBscnVfZ2VuX2NhcHNgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhpcyBjb3JyZWN0bHkuIEl0IHNlZW1zIGxpa2UgYExSVV9HRU5fRU5BQkxFRGAgaXMgdGhlIGNvbnRyb2wgc3dpdGNoIGZvciBob3cgd2UgY29uZmlndXJlIGBscnVfZ2VuX2NhcHNgLiBJJ3ZlIGdvdCB0byBjb25maXJtIHRoaXMgaW50ZXJhY3Rpb24uIExldCdzIG5vdCBqdXN0IGFzc3VtZTsgYSBxdWljayBjaGVjayBvZiBob3cgYGxydV9nZW5fY2Fwc2AgaXMgZGVmaW5lZCBhbmQgdXNlZCBpbiByZWxhdGlvbiB0byB0aGF0IGVuYWJsZSBmbGFnIHNob3VsZCBjbGFyaWZ5IHRoaW5ncyBpbW1lZGlhdGVseS4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIGNvZGUgd2hlcmUgdGhvc2UgYXJlIGRlZmluZWQgdG8gdmVyaWZ5IHRoZSBleGFjdCByZWxhdGlvbnNoaXAuIFRoaXMgaXMgaW1wb3J0YW50IGJlZm9yZSBJIGNhbiBtb3ZlIGZvcndhcmQgY29uZmlkZW50bHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTk4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDozOS43Mjk2MDk1NDZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjYwMTY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYy0yNjI4LSNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmM6MjYyOTpERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYzoyNjMwOiNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNmxydV9nZW5fY2Fwc1tjYXBdKVxcbm1tL3Ztc2Nhbi5jLTI2MzEtI2Vsc2VcXG5tbS92bXNjYW4uYzoyNjMyOkRFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYzoyNjMzOiNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmMtMjYzNC0jZW5kaWZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUyNjg9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI4NC1cXHRpZiAoZW5hYmxlZClcXG5tbS92bXNjYW4uYzo1Mjg1OlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG5tbS92bXNjYW4uYy01Mjg2LVxcdGVsc2VcXG5tbS92bXNjYW4uYzo1Mjg3OlxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxubW0vdm1zY2FuLmMtNTI4OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUzNjY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTM4NC1cXHRcXHRlbHNlIGlmIChlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jOjUzODU6XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxubW0vdm1zY2FuLmMtNTM4Ni1cXHRcXHRlbHNlXFxubW0vdm1zY2FuLmM6NTM4NzpcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxubW0vdm1zY2FuLmMtNTM4OC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjM5Ljg1MjIxNjI3NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzUxMzc3OTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVHJhaW4gb2YgVGhvdWdodCoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24uIEl0IHNlZW1zIGxpa2Ugc2V0dGluZyBgTFJVX0dFTl9FTkFCTEVEYCBhdXRvbWF0aWNhbGx5IHR1cm5zIHRoZSB3aG9sZSBmZWF0dXJlIG9uLCB3aGljaCBpcyBhIGNvbW1vbiBwcmFjdGljZS4gSG1tLCBwZXJoYXBzIGl0IHdvdWxkIGJlIGNsZWFuZXIsIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIGNsYXJpdHksIHRvIGFkZCBib3RoIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBzZXQuIFRoYXQgd291bGQgbWFrZSB0aGUgZGVwZW5kZW5jaWVzIGV4cGxpY2l0IGFuZCBlYXNpZXIgdG8gbWFuYWdlIGxvbmctdGVybS5cblxuTm93LCBJJ20gc3BvdHRpbmcgYHNob3VsZF9hYm9ydF9zY2FuYCBiZWluZyB1dGlsaXplZCBpbiBgc2hyaW5rX21hbnlgIHRvbywgd2hpY2ggaXMgYSBwb2ludCBvZiBjb25jZXJuLiBJcyBgc2hyaW5rX21hbnlgIGxpbWl0ZWQgdG8gb25seSBiZWluZyBpbnZva2VkIHdoZW4gdGhlIE1HTFJVIGlzIGFjdGl2ZT8gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCBJIGFtIG5vdCBmb3JnZXR0aW5nIHNvbWV0aGluZy4gTGV0J3MgZGVsdmUgaW50byB0aGUgYGxydV9nZW5fc2hyaW5rX25vZGVgIHRvIGRldGVybWluZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBwcm9jZXNzIGFuZCBNR0xSVSBlbmFibGVtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IGhlcmUgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDo0NC4yMDM1OTYwNDNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNzMxNDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2hyaW5rX25vZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTExOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMzgtXFxubW0vdm1zY2FuLmM6NTEzOTpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTUxNDAte1xcbi0tXFxubW0vdm1zY2FuLmM9NTg2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NzEtXFxubW0vdm1zY2FuLmM6NTg3MjpzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTU4NzMte1xcbi0tXFxubW0vdm1zY2FuLmM9NjE0OT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTYtXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG5tbS92bXNjYW4uYzo2MTU3OlxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG5tbS92bXNjYW4uYy02MTU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDo0NC4yNzQzMzIzMDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0NjQxNjUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggY29kZSBhbmQgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNvbnRleHQgaXMgcHJlc3VtYWJseSBhbGdvcml0aG0gZGVzaWduIG9yIG9wdGltaXphdGlvbjpcblxuKipDaGVja2luZyBgc2hyaW5rX25vZGVgKipcblxuQWxyaWdodCwgKnNocmlua19ub2RlKi4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBpc24ndCBpdD8gSXQncyB0aGUgb25lIHRoYXQgbGlrZWx5IHJlZHVjZXMgdGhlIHNpemUgb3IgY29tcGxleGl0eSBvZiBhIG5vZGUgaW4gd2hhdGV2ZXIgZGF0YSBzdHJ1Y3R1cmUgSSdtIHdvcmtpbmcgd2l0aC4gQ291bGQgYmUgYSB0cmVlLCBhIGdyYXBoLCBzb21ldGhpbmcgZWxzZSBlbnRpcmVseS4uLiBkb2Vzbid0IG1hdHRlciwgdGhlIG5hbWUgc2F5cyBpdCdzIGFib3V0IG9wdGltaXphdGlvbiBvciBtZW1vcnkgbWFuYWdlbWVudCBhdCBhIG5vZGUgbGV2ZWwuIE15IGZvY3VzIGlzIGltbWVkaWF0ZWx5IG9uOlxuXG4qICAgKipJbXBsZW1lbnRhdGlvbjoqKiBIb3cgZG9lcyBpdCAqYWN0dWFsbHkqIHdvcms/IFdoYXQncyB0aGUgY29yZSBsb2dpYz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgcmVtb3ZpbmcgZWxlbWVudHMsIG1lcmdpbmcgc3ViLW5vZGVzLCByZWR1Y2luZyB0aGUgZGF0YSBzdG9yZWQgYXQgdGhlIG5vZGUsIG9yIHNvbWV0aGluZyBtb3JlIGV4b3RpYyBsaWtlIGxhenktZGVjb25zdHJ1Y3Rpb24/XG4qICAgKipTaWRlIEVmZmVjdHM6KiogV2hhdCBlbHNlIGRvZXMgaXQgdG91Y2g/IERvZXMgaXQgcG90ZW50aWFsbHkgaW52YWxpZGF0ZSBpdGVyYXRvcnMsIHRyaWdnZXIgcmViYWxhbmNpbmcgaWYgaXQncyBhIGJhbGFuY2VkIHRyZWUsIG9yIHJlcXVpcmUgdXBkYXRlcyB0byBwYXJlbnQvY2hpbGQgcG9pbnRlcnM/IFRob3NlIGhpZGRlbiBpbnRlcmFjdGlvbnMgYXJlIHVzdWFsbHkgd2hlcmUgdGhlIGJ1Z3MgbGllLiBHb3R0YSBleGFtaW5lICphbGwqIGltcGxpY2F0aW9ucyBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4qICAgKipQZXJmb3JtYW5jZToqKiBXaGF0J3MgdGhlIHRpbWUgYW5kIHNwYWNlIGNvbXBsZXhpdHk/IElzIGl0IE8oMSksIE8obG9nIG4pLCBvciB3b3JzZT8gTW9yZSBpbXBvcnRhbnRseSwgaG93ICpvZnRlbiogaXMgaXQgY2FsbGVkPyBBIHNsb3csIGluZnJlcXVlbnRseS11c2VkIGZ1bmN0aW9uIGlzIG9uZSB0aGluZywgYnV0IGEgYm90dGxlbmVjayBpbiBhIGNyaXRpY2FsIHBhdGggaXMgYSBkaXNhc3Rlci4gSWYgdGhpcyBpcyBpbnZva2VkIGFzIHBhcnQgb2Ygc29tZSBvdGhlciBmdW5jdGlvbiwgSSBuZWVkIHRvIGtub3cgdGhlIGVmZmVjdHMgb24gdGhvc2UuXG4qICAgKipVc2FnZSBDb250ZXh0OioqIFdoYXQncyB0aGUgYmlnZ2VyIHBpY3R1cmU/ICpXaHkqIGFyZSB3ZSBzaHJpbmtpbmcgbm9kZXM/IElzIGl0IHRvIHByZXZlbnQgYW4gb3ZlcmZsb3c/IE9wdGltaXplIG1lbW9yeSB1c2FnZT8gT3IgZW5oYW5jZSBwZXJmb3JtYW5jZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgKmdvYWwqIHRvIGV2YWx1YXRlIGlmIGBzaHJpbmtfbm9kZWAgaXMgZG9pbmcgaXRzIGpvYiBlZmZlY3RpdmVseS4gQXJlIHdlIG1ha2luZyB0aGUgc3RydWN0dXJlICdzbWFydGVyJyBieSByZW9yZ2FuaXppbmcgdGhlIG5vZGVzPyBPciBwZXJoYXBzIHJlbW92aW5nIGRhdGEgdG8gc2ltcGxpZnkgdGhlIHByb2Nlc3M/XG4qICAgKipQcmUgYW5kIFBvc3QgQ29uZGl0aW9uczoqKiBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzPyBEb2VzIGl0IGhhbmRsZSBlZGdlIGNhc2VzPyBDYW4gaXQgZGVhbCB3aXRoIGVtcHR5IG9yIG51bGwgbm9kZXM/IERvZXMgaXQgbWFpbnRhaW4gaW52YXJpYW50cyBvZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZT8gVGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBkb2N1bWVudGVkIGlmIEkgYW0gdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cbkluIHNob3J0LCBcIkxldCdzIGNoZWNrIGBzaHJpbmtfbm9kZWBcIiBpcyB0aGUgYmVnaW5uaW5nIG9mIGEgZGVlcCBkaXZlLiBJJ20gZ29pbmcgdG8gcHVsbCB1cCB0aGUgY29kZSwgdHJhY2UgdGhyb3VnaCBpdHMgZXhlY3V0aW9uIHdpdGggdmFyaW91cyBpbnB1dHMsIGFuZCBwcm9iYWJseSBydW4gc29tZSB0ZXN0IGNhc2VzIHRvIG1ha2Ugc3VyZSBpdCdzIGRvaW5nIHdoYXQgSSB0aGluayBpdCdzIGRvaW5nLCBhbmQgdGhhdCBpdCBpc24ndCBnb2luZyB0byBibG93IHVwIHRoZSB3aG9sZSBzeXN0ZW0uIExldCdzIHNlZSBob3cgbXVjaCB3b3JrIGlzIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTAzMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6NDkuMDIwNzUxOTY2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MTQ1OlxcdFxcdFxcdH1cXG42MTQ2OlxcdFxcdH0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcih0YXJnZXRfbWVtY2csIG1lbWNnLCBwYXJ0aWFsKSkpO1xcbjYxNDc6XFx0fVxcbjYxNDg6XFx0XFxuNjE0OTpcXHRzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG42MTUwOlxcdHtcXG42MTUxOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkLCBucl9zY2FubmVkLCBucl9ub2RlX3JlY2xhaW1lZDtcXG42MTUyOlxcdFxcdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XFxuNjE1MzpcXHRcXHRib29sIHJlY2xhaW1hYmxlID0gZmFsc2U7XFxuNjE1NDpcXHRcXG42MTU1OlxcdFxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xcbjYxNTY6XFx0XFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG42MTU3OlxcdFxcdFxcdGxydV9nZW5fc2hyaW5rX25vZGUocGdkYXQsIHNjKTtcXG42MTU4OlxcdFxcbjYxNTk6XFx0XFx0XFx0aWYgKCFscnVfZ2VuX3N3aXRjaGluZygpKVxcbjYxNjA6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjYxNjE6XFx0XFxuNjE2MjpcXHRcXHR9XFxuNjE2MzpcXHRcXG42MTY0OlxcdFxcdHRhcmdldF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHBnZGF0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6NDkuMDIxMDIyNDI2WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDc3MjM5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERlcGVuZGVuY2llcyBmb3IgTFJVIEdlbmVyYXRpb24gYW5kIFByb2FjdGl2ZSBSZWNsYWltKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBscnVfZ2VuX3Nocmlua19ub2RlYCBnZXRzIGludm9rZWQuIEl0J3MgdHJpZ2dlcmVkIG9ubHkgaWYgYGxydV9nZW5fZW5hYmxlZCgpYCByZXR1cm5zIHRydWUuIERpdmluZyBkZWVwZXIsIGBscnVfZ2VuX2VuYWJsZWQoKWAgaGluZ2VzIG9uIGNoZWNraW5nIHRoZSBgbHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV1gIGNhcGFiaWxpdHkuIENsZWFybHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBmbGFncyBhcmUgbm9uLW5lZ290aWFibGUgcHJlcmVxdWlzaXRlcy4gSSBuZWVkIHRob3NlLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBtaWdodCBiZSBwZXJ0aW5lbnQ/IE15IG1pbmQgd2VudCBzdHJhaWdodCB0byBgQ09ORklHX01FTUNHYC4gVGhlIGNvZGUgdGVsbHMgbWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYWxzbyBjcml0aWNhbCBoZXJlLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gYW5kIGl0J3MgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYCwgYW5kIHRoYXQgY29kZSByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gRnVydGhlcm1vcmUsIEkgc2VlIGl0J3MgYWxzbyBjYWxsZWQgZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggcmVxdWlyZXMgYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAuIFNvLCBgQ09ORklHX01FTUNHYCBkZWZpbml0ZWx5IGxvb2tzIGxpa2UgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBpbmNsdXNpb24uIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IG1vcmUgY2xhcml0eSBieSBjaGVja2luZyB0aGUgYG1tL0tjb25maWdgIGZpbGUgYW5kIHRha2luZyBhIGNsb3NlIGxvb2sgYXQgdGhlIGRldGFpbHMgYmVoaW5kIGBNRU1DR2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTU3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDA6NTMuMTY4NzQ5NTU4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTc1OTU3OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjUzLjI1MDUxNzQ4N1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM1NDM4MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIHNvbWV0aGluZyBqdXN0IGNsaWNrZWQuIEl0IGxvb2tzIGxpa2UgYE1FTUNHYCBpcyBhY3R1YWxseSBkZWZpbmVkIHdpdGhpbiBgaW5pdC9LY29uZmlnYC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlLi4uIHdlbGwsIEkgaW1tZWRpYXRlbHkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gTG9jYXRpbmcgaXQgdGhlcmUgbGlrZWx5IG1lYW5zIGl0J3MgZnVuZGFtZW50YWwgdG8gdGhlIHN5c3RlbSdzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCBvciBwZXJoYXBzIHRpZWQgdG8gYSBjb3JlIGNvbXBvbmVudCB0aGF0J3MgYnJvdWdodCB1cCB2ZXJ5IGVhcmx5LiBJJ20gYWxyZWFkeSB2aXN1YWxpemluZyB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCBtZW50YWxseSB0cmFjaW5nIGhvdyB0aGlzIGNvbmZpZyBvcHRpb24gaW1wYWN0cyBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoeSBpdCBtaWdodCBiZSBpbiBpbml0IGFuZCBpZiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBpbml0IGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ3MywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAwOjU2LjA4NTk1ODc4N1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUwODMxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcyLVxcbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc0LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODEtXFxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4My1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA4OC1cXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5MC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5NS1cXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTA5Ny1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMDo1Ni4xODEwNDY3NDZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMjU0MjQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb2FjdGl2ZSBSZWNsYWltIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLiBUaGUgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGlzIGVuYWJsZWQsIGJlY2F1c2UgdGhhdCBzZWVtcyByZWxldmFudC4gSSdtIGNoZWNraW5nIGlmIGBMUlVfR0VOYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBNRU1DR2AsIGJ1dCBpdCBkb2Vzbid0IGFwcGVhciB0by4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgdGhvdWdoLCBpcyBgc2MtXHUwMDNlcHJvYWN0aXZlYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBiZXR0ZXIuXG5cblRoZSBjb2RlIHNuaXBwZXQgc2hvd3MgdGhhdCBpdCBhZGRzIGEgY2hlY2sgZm9yIGBzaWduYWxfcGVuZGluZyhjdXJyZW50KWAgd2l0aGluIHRoZSBgc2MtXHUwMDNlcHJvYWN0aXZlYCBjb250ZXh0LiBBaGEsIHRoaXMgaXMgZGVmaW5pdGVseSBhYm91dCBwcm9hY3RpdmUgcmVjbGFpbS4gVGhpcyBpcyB0cmlnZ2VyZWQgYnkgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBOb3csIHdoZXJlIGlzICp0aGF0KiBjYWxsZWQgZnJvbT8gRGlnZ2luZyBpbnRvIHRoYXQgZnVuY3Rpb24sIEkgc2VlIHR3byBjYWxsIHNpdGVzOlxuXG4xLiAgYG1lbW9yeV9yZWNsYWltYCBpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhpcyByZXF1aXJlcyBgQ09ORklHX01FTUNHYC4gU28gdGhhdCBzdXBwb3J0cyBteSBpbml0aWFsIGh1bmNoIGFib3V0IG5lZWRpbmcgYE1FTUNHYC4gSXTigJlzIGxpa2VseSBob3cgd2UgbWFrZSBpdCByZWFjaGFibGUgdmlhIGNncm91cCB2Mi5cbjIuICBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhpcyBuZWVkcyBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpY2ggaXMgcmVsZXZhbnQgYnV0IG5vdCB0aGUgbWFpbiBmb2N1cyBoZXJlLlxuXG5TbywgSSBzaG91bGQgYWJzb2x1dGVseSBlbmFibGUgYE1FTUNHYCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgYSBkZXBlbmRlbmN5IGZvciByZWFjaGluZyB0aGlzIGNvZGUgdmlhIGNncm91cCB2Mi4gQW5kIEkgc2hvdWxkIGFsc28gZW5hYmxlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIGFzIGBzaG91bGRfYWJvcnRfc2NhbmAgaXMgaW5zaWRlIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLlxuXG5XYWl0LCBqdXN0IGEgc2Vjb25kLi4uIGlzIGBzaG91bGRfYWJvcnRfc2NhbmAgKm9ubHkqIGluc2lkZSB0aGUgYENPTkZJR19MUlVfR0VOYCBibG9jaz8gSSdkIGJldHRlciBkb3VibGUtY2hlY2sgZm9yIGFueSBvdGhlciBkZWZpbml0aW9ucyBvZiB0aGF0IGZ1bmN0aW9uIHRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIHNjb3BlIG9mIHRoYXQgbWFjcm8uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjAxLjc5MzU5MjAyN1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyNTgzMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3VsZF9hYm9ydF9zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5MTA9c3RhdGljIGxvbmcgZ2V0X25yX3RvX3NjYW4oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ5MjYtXFxubW0vdm1zY2FuLmM6NDkyNzpzdGF0aWMgYm9vbCBzaG91bGRfYWJvcnRfc2NhbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbm1tL3Ztc2Nhbi5jLTQ5Mjgte1xcbi0tXFxubW0vdm1zY2FuLmM9NDk2Mj1zdGF0aWMgYm9vbCB0cnlfdG9fc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk4OS1cXG5tbS92bXNjYW4uYzo0OTkwOlxcdFxcdGlmIChzaG91bGRfYWJvcnRfc2NhbihscnV2ZWMsIHNjKSlcXG5tbS92bXNjYW4uYy00OTkxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTA0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbWFueShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwOTMtXFxubW0vdm1zY2FuLmM6NTA5NDpcXHRcXHRpZiAoc2hvdWxkX2Fib3J0X3NjYW4obHJ1dmVjLCBzYykpXFxubW0vdm1zY2FuLmMtNTA5NS1cXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MDEuOTc2MTgwMjI0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjcwMjY3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSdzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQncyBwcmV0dHkgY2xlYXI6IHRoZXJlJ3Mgb25seSBvbmUgcGF0aCB0byBgc2hvdWxkX2Fib3J0X3NjYW5gLiBUaGF0IG1lYW5zIGBDT05GSUdfTFJVX0dFTmAgaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgZm9yIGV2ZW4gY29tcGlsaW5nIHRoZSBjb2RlIGluIHRoZSBmaXJzdCBwbGFjZSDigJMgYSBoYXJkIGRlcGVuZGVuY3kuIFRvIGFjdHVhbGx5IHJ1biB0aGUgY29kZSBieSBkZWZhdWx0LCB0aGF0IGV4dGVuZHMgdG8gYWxzbyByZXF1aXJpbmcgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLiBOb3csIGlmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGUgY29kZSBnZXRzIHRyaWdnZXJlZCB0aHJvdWdoIGNncm91cCB2MidzIGBtZW1vcnkucmVjbGFpbWAsIGFuZCB0aGF0IGJyaW5ncyBgQ09ORklHX01FTUNHYCBpbnRvIHBsYXkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGFsc28gKmNvbXBpbGVkKiB3aXRob3V0IGBDT05GSUdfTUVNQ0dgLiBUaGlzIHNlZW1zIGEgY3JpdGljYWwgcmVxdWlyZW1lbnQgZm9yIHBvcnRhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkxOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMTowNS43MDMyMTA0MDJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMDM4MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzg2Mz1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY4LVxcbm1tL3Ztc2Nhbi5jOjc4Njk6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NzAtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMTowNS43NzMyNTYzNTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MzA5NTY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIHRoZSBtZW1vcnkgY2dyb3VwIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgaXQncyBwcm90ZWN0ZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfTUVNQ0dgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIElmIGl0IGlzLCB0aGVuIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhhdCBmdW5jdGlvbmFsaXR5IGRlcGVuZHMgb24gd2hldGhlciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGJ1aWxkLiBUaGF0IHdvdWxkIG1lYW4gdGhlIGJlaGF2aW9yIG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjaGFuZ2VzIHNpZ25pZmljYW50bHkgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0ncyBtZW1jZyBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHk7IGl04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIHdvcmtzIHVuZGVyIGRpZmZlcmVudCBzY2VuYXJpb3MuIEtub3dpbmcgdGhpcyB3aWxsIGFmZmVjdCB3aGVyZSBJIGxvb2sgZm9yIHJlbGF0ZWQgY29kZSBvciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MDkuMTY2MzU1MzQ0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3ODYwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3ODYwOlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxcbjc4NjE6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcXG43ODYyOlxcdH07XFxuNzg2MzpcXHRzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuNzg2NDpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MsIFxcXCJzd2FwcGluZXNzPSVkXFxcIn0sXFxuNzg2NTpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcXFwic3dhcHBpbmVzcz1tYXhcXFwifSxcXG43ODY2OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fTlVMTCwgTlVMTCB9LFxcbjc4Njc6XFx0fTtcXG43ODY4OlxcdFxcbjc4Njk6XFx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbjc4NzA6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbjc4NzE6XFx0e1xcbjc4NzI6XFx0XFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbjc4NzM6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbjc4NzQ6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcXG43ODc1OlxcdFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG43ODc2OlxcdFxcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcXG43ODc3OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG43ODc4OlxcdFxcbjc4Nzk6XFx0XFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjA5LjE2NjYyNDExM1oiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjQ2MTk4MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBpZWNlIG9mIGNvZGUsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSG1tLCBpcyB0aGVyZSBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgaGlkaW5nIGFyb3VuZCBoZXJlP1wiIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgYW4gYCNpZmRlZmAgKG9yIG1heWJlIGV2ZW4gYCNpZm5kZWZgIG9yIHNpbWlsYXIgY29uZGl0aW9uYWwgY29tcGlsYXRpb24pIGlzIHBvdGVudGlhbGx5IGNvbnRyb2xsaW5nIHRoZSBpbmNsdXNpb24gb3IgZXhjbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBibG9jayBvZiBjb2RlLiBUaGF0J3MgYSBjbGFzc2ljIGdvdGNoYSwgYW5kIGl0J3MgYWx3YXlzIHRoZSBmaXJzdCB0aGluZyBJIGNoZWNrIHdoZW4gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBhY3R1YWwgYmVoYXZpb3Igb2YgdGhlIHN5c3RlbS4gSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBJJ20gbG9va2luZyBhdCBpcyB3aGF0J3MgKmFjdHVhbGx5KiBnb2luZyB0byBiZSBjb21waWxlZCBhbmQgZXhlY3V0ZWQuIEkgbmVlZCB0byBrbm93IHRoZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTAxNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MTEuODEyODI0NjY3WiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTU4ODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaWZkZWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xODEtXFxubW0vdm1zY2FuLmM6MTgyOiNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcXG5tbS92bXNjYW4uYy0xODMtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKVxcdFxcdFxcdFxcXFxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTE5OT1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xcbm1tL3Ztc2Nhbi5jLTIwMC1cXG5tbS92bXNjYW4uYzoyMDE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTIwMi1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjM0LVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3Ztc2Nhbi5jOjIzNTojaWZkZWYgQ09ORklHX0NHUk9VUF9XUklURUJBQ0tcXG5tbS92bXNjYW4uYy0yMzYtXFx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXFxuLS1cXG5tbS92bXNjYW4uYz04MjQ9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMC1cXG5tbS92bXNjYW4uYzo4MzE6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODMyLS8qXFxuLS1cXG5tbS92bXNjYW4uYz0xMDU1PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyODUtXFx0XFx0XFx0XFx0XFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XFxubW0vdm1zY2FuLmM6MTI4NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vdm1zY2FuLmMtMTI4Ny1cXHRcXHRcXHRcXHRpZiAobnJfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy0yNjI0LVxcbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtMjYyNi1cXG5tbS92bXNjYW4uYz0yNjI3PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKGxydV9zd2l0Y2gpO1xcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5tbS92bXNjYW4uYy0yNjI5LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjgwLVxcbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI2ODItXFx0aWYgKG1lbWNnKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0yODA5PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjgyOC1cXG5tbS92bXNjYW4uYzoyODI5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yODMwLVxcbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MzctXFxubW0vdm1zY2FuLmM6MjgzODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjgzOS1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yODcxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODc3LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI4Nzg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4NzktXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4OTg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MDYtXFxubW0vdm1zY2FuLmM6MjkwNzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkwOC1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMjkzMC1cXG5tbS92bXNjYW4uYzoyOTMxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yOTMyLVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzYtXFxubW0vdm1zY2FuLmM6MjkzNzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzOC12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzMDc9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00MzUyLVxcbm1tL3Ztc2Nhbi5jOjQzNTM6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQzNTQtXFxuLS1cXG5tbS92bXNjYW4uYz01NTE1PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NTI4LVxcbm1tL3Ztc2Nhbi5jOjU1Mjk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU1MzAtXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTc4MT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTgwMC1cXG5tbS92bXNjYW4uYzo1ODAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01ODAyLVxcbi0tXFxubW0vdm1zY2FuLmM9NjY3OT11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY3MjEtXFxubW0vdm1zY2FuLmM6NjcyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNjcyMy1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NDk9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzU1My1cXG5tbS92bXNjYW4uYzo3NTU0OiNpZmRlZiBDT05GSUdfSElCRVJOQVRJT05cXG5tbS92bXNjYW4uYy03NTU1LS8qXFxuLS1cXG5tbS92bXNjYW4uYz03NjM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2NDMtXFx0fSxcXG5tbS92bXNjYW4uYzo3NjQ0OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2NDUtXFx0e1xcbi0tXFxubW0vdm1zY2FuLmM9NzY2Nz1tb2R1bGVfaW5pdChrc3dhcGRfaW5pdClcXG5tbS92bXNjYW4uYy03NjY4LVxcbm1tL3Ztc2Nhbi5jOjc2Njk6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vdm1zY2FuLmMtNzY3MC0vKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMToxMS44ODQ0MTc4MzVaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3MjU0MTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBTY29wZSBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAqKlxuXG5Pa2F5LCBob2xkIG9uIGEgbWludXRlLiBJdCBsb29rcyBsaWtlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpc24ndCBhY3R1YWxseSBndWFyZGVkIGJ5IGAjaWZkZWYgQ09ORklHX01FTUNHYC4gVGhhdCdzIGEgY3J1Y2lhbCBhc3N1bXB0aW9uIEkgbmVlZCB0byB2ZXJpZnkuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIG5lZWRzIGltbWVkaWF0ZSBjb3JyZWN0aW9uLiBMZXQncyB0cmFjZSBiYWNrIHdoZXJlIHRoaXMgZnVuY3Rpb24sIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgaXMgYWN0dWFsbHkgZGVmaW5lZC4gSSd2ZSBnb3QgdG8gZW5zdXJlIHRoZSBsb2dpYyBmbG93cyBhcyBJIGV4cGVjdCBpdCB0by5cblxuQWxyaWdodCwgSSd2ZSBnb3QgdGhlIGxpbmUgbnVtYmVyOiA3ODY5LiBOb3csIHdoZXJlIGRvZXMgdGhlIGAjaWZkZWYgQ09ORklHX05VTUFgIGJsb2NrIGJlZ2luPyBMaW5lIDc2NjkuIEdvb2QsIHRoYXQncyB3aXRoaW4gYSBjb3VwbGUgb2YgaHVuZHJlZCBsaW5lcy4gVGhhdCdzIGNsb3NlIGVub3VnaCBmb3IgdGhlIGxpbmUgY291bnQgdG8gYmUgYWNjdXJhdGUsIGJ1dCBJIG5lZWQgdG8gZGVmaW5pdGl2ZWx5IGVzdGFibGlzaCB3aGV0aGVyIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZXNpZGVzICp3aXRoaW4qIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBwcm90ZWN0ZWQgYnkgYCNpZmRlZiBDT05GSUdfTlVNQWAuIEl0J3MgYSBzaW1wbGUgY2hlY2ssIGJ1dCBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHRoZSBzY29waW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzAxMSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjE1LjQ1Njk2Mjk2NVoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzY2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzY2NTpcXHR9XFxuNzY2NjpcXHRcXG43NjY3OlxcdG1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbjc2Njg6XFx0XFxuNzY2OTpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG43NjcwOlxcdC8qXFxuNzY3MTpcXHQgKiBOb2RlIHJlY2xhaW0gbW9kZVxcbjc2NzI6XFx0ICpcXG43NjczOlxcdCAqIElmIG5vbi16ZXJvIGNhbGwgbm9kZV9yZWNsYWltIHdoZW4gdGhlIG51bWJlciBvZiBmcmVlIHBhZ2VzIGZhbGxzIGJlbG93XFxuNzY3NDpcXHQgKiB0aGUgd2F0ZXJtYXJrcy5cXG43Njc1OlxcdCAqL1xcbjc2NzY6XFx0aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XFxuNzY3NzpcXHRcXG43Njc4OlxcdC8qXFxuNzY3OTpcXHQgKiBQcmlvcml0eSBmb3IgTk9ERV9SRUNMQUlNLiBUaGlzIGRldGVybWluZXMgdGhlIGZyYWN0aW9uIG9mIHBhZ2VzXFxuNzY4MDpcXHQgKiBvZiBhIG5vZGUgY29uc2lkZXJlZCBmb3IgZWFjaCB6b25lX3JlY2xhaW0uIDQgc2NhbnMgMS8xNnRoIG9mXFxuNzY4MTpcXHQgKiBhIHpvbmUuXFxuNzY4MjpcXHQgKi9cXG43NjgzOlxcdCNkZWZpbmUgTk9ERV9SRUNMQUlNX1BSSU9SSVRZIDRcXG43Njg0OlxcdFxcbjc2ODU6XFx0LypcXG43Njg2OlxcdCAqIFBlcmNlbnRhZ2Ugb2YgcGFnZXMgaW4gYSB6b25lIHRoYXQgbXVzdCBiZSB1bm1hcHBlZCBmb3Igbm9kZV9yZWNsYWltIHRvXFxuNzY4NzpcXHQgKiBvY2N1ci5cXG43Njg4OlxcdCAqL1xcbjc2ODk6XFx0aW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW8gPSAxO1xcbjc2OTA6XFx0XFxuNzY5MTpcXHQvKlxcbjc2OTI6XFx0ICogSWYgdGhlIG51bWJlciBvZiBzbGFiIHBhZ2VzIGluIGEgem9uZSBncm93cyBiZXlvbmQgdGhpcyBwZXJjZW50YWdlIHRoZW5cXG43NjkzOlxcdCAqIHNsYWIgcmVjbGFpbSBuZWVkcyB0byBvY2N1ci5cXG43Njk0OlxcdCAqL1xcbjc2OTU6XFx0aW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbyA9IDU7XFxuNzY5NjpcXHRcXG43Njk3OlxcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3VubWFwcGVkX2ZpbGVfcGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG43Njk4OlxcdHtcXG43Njk5OlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9tYXBwZWQgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0ZJTEVfTUFQUEVEKTtcXG43NzAwOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmlsZV9scnUgPSBub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lOQUNUSVZFX0ZJTEUpICtcXG43NzAxOlxcdFxcdFxcdG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfQUNUSVZFX0ZJTEUpO1xcbjc3MDI6XFx0XFxuNzcwMzpcXHRcXHQvKlxcbjc3MDQ6XFx0XFx0ICogSXQncyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUgbW9yZSBmaWxlIG1hcHBlZCBwYWdlcyB0aGFuXFxuNzcwNTpcXHRcXHQgKiBhY2NvdW50ZWQgZm9yIGJ5IHRoZSBwYWdlcyBvbiB0aGUgZmlsZSBMUlUgbGlzdHMgYmVjYXVzZVxcbjc3MDY6XFx0XFx0ICogdG1wZnMgcGFnZXMgYWNjb3VudGVkIGZvciBhcyBBTk9OIGNhbiBhbHNvIGJlIEZJTEVfTUFQUEVEXFxuNzcwNzpcXHRcXHQgKi9cXG43NzA4OlxcdFxcdHJldHVybiAoZmlsZV9scnUgXFx1MDAzZSBmaWxlX21hcHBlZCkgPyAoZmlsZV9scnUgLSBmaWxlX21hcHBlZCkgOiAwO1xcbjc3MDk6XFx0fVxcbjc3MTA6XFx0XFxuNzcxMTpcXHQvKiBXb3JrIG91dCBob3cgbWFueSBwYWdlIGNhY2hlIHBhZ2VzIHdlIGNhbiByZWNsYWltIGluIHRoaXMgcmVjbGFpbV9tb2RlICovXFxuNzcxMjpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbjc3MTM6XFx0e1xcbjc3MTQ6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlY2FjaGVfcmVjbGFpbWFibGU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjE1LjQ1NzI1NzE0NVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg4ODYwOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTlVNQSBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiB0aGlzIGAjaWZkZWYgQ09ORklHX05VTUFgIGJsb2NrLiBVbmRlcnN0YW5kaW5nIGV4YWN0bHkgd2hlcmUgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBlbmRzIGlzIGNydWNpYWwuIEkga25vdyB0aGlzIGNvZGUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBhbmQgcHJlY2lzZWx5IHJlLWVzdGFibGlzaCBteSBiZWFyaW5ncyB3aXRoaW4gdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24uIElzIHRoaXMgYSBsb2NhbCBzY29wZSBpc3N1ZSwgb3IgaXMgaXQgYSB0b3AtbGV2ZWwgYmxvY2s/IERldGVybWluaW5nIHRoZSBleHRlbnQgb2YgaXRzIGluZmx1ZW5jZSBpcyB0aGUgZmlyc3Qgc3RlcCB0b3dhcmQgdW5kZXJzdGFuZGluZyBpdHMgaW1wbGljYXRpb25zIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlIGFuZCBwZXJmb3JtYW5jZSBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIExldOKAmXMgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODExNywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MTguMjQ2MTIwODA2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzIwNTk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzQ9c3RydWN0IHNjYW5fY29udHJvbCB7XFxuLS1cXG5tbS92bXNjYW4uYy0xOTMtI2RlZmluZSBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oX2ZvbGlvLCBfYmFzZSwgX2ZpZWxkKSBkbyB7IH0gd2hpbGUgKDApXFxubW0vdm1zY2FuLmM6MTk0OiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTE5NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTIzMT1zdGF0aWMgYm9vbCB3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjM3LVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL3Ztc2Nhbi5jOjIzODojZW5kaWZcXG5tbS92bXNjYW4uYy0yMzktXFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubW0vdm1zY2FuLmM9MjY0PXN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY3LX1cXG5tbS92bXNjYW4uYzoyNjg6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjY5LVxcbi0tXFxubW0vdm1zY2FuLmM9ODU0PXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg1Ny19XFxubW0vdm1zY2FuLmM6ODU4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg1OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTEwNTU9c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMTI5MS1cXHRcXHRcXHRcXHR9XFxubW0vdm1zY2FuLmM6MTI5MjojZW5kaWZcXG5tbS92bXNjYW4uYy0xMjkzLVxcdFxcdFxcdFxcdGNvdW50X210aHBfc3RhdChvcmRlciwgTVRIUF9TVEFUX1NXUE9VVF9GQUxMQkFDSyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yNjMyPURFRklORV9TVEFUSUNfS0VZX0FSUkFZX0ZBTFNFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG5tbS92bXNjYW4uYy0yNjMzLSNkZWZpbmUgZ2V0X2NhcChjYXApXFx0c3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2bHJ1X2dlbl9jYXBzW2NhcF0pXFxubW0vdm1zY2FuLmM6MjYzNDojZW5kaWZcXG5tbS92bXNjYW4uYy0yNjM1LVxcbi0tXFxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjkwLVxcdH1cXG5tbS92bXNjYW4uYzoyNjkxOiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTI2OTItXFx0Vk1fV0FSTl9PTl9PTkNFKCFtZW1fY2dyb3VwX2Rpc2FibGVkKCkpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjgzMT1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg0MC1cXHRcXHRyZXR1cm4gXFx1MDAyNm1lbWNnLVxcdTAwM2VtbV9saXN0O1xcbm1tL3Ztc2Nhbi5jOjI4NDE6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjg0Mi1cXHRWTV9XQVJOX09OX09OQ0UoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODcxPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yODgwLVxcdG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnID0gbWVtY2c7XFxubW0vdm1zY2FuLmM6Mjg4MTojZW5kaWZcXG5tbS92bXNjYW4uYy0yODgyLVxcdHNwaW5fbG9jayhcXHUwMDI2bW1fbGlzdC1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTA4LVxcdG1lbWNnID0gbW0tXFx1MDAzZWxydV9nZW4ubWVtY2c7XFxubW0vdm1zY2FuLmM6MjkwOTojZW5kaWZcXG5tbS92bXNjYW4uYy0yOTEwLVxcdG1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTMzLVxcdG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnID0gTlVMTDtcXG5tbS92bXNjYW4uYzoyOTM0OiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTI5MzUtfVxcbi0tXFxubW0vdm1zY2FuLmM9MjkzOD12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjQtfVxcbm1tL3Ztc2Nhbi5jOjI5NjU6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjk2Ni1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Nzk9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTgzLVxcbm1tL3Ztc2Nhbi5jOjI5ODQ6I2VuZGlmXFxubW0vdm1zY2FuLmMtMjk4NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1NDU9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ1NjctXFxubW0vdm1zY2FuLmM6NDU2ODojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vdm1zY2FuLmMtNDU2OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU1MTU9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU1MzEtXFx0XFx0XFx0Y2dyb3VwX3BhdGgobWVtY2ctXFx1MDAzZWNzcy5jZ3JvdXAsIG0tXFx1MDAzZXByaXZhdGUsIFBBVEhfTUFYKTtcXG5tbS92bXNjYW4uYzo1NTMyOiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTU1MzMtXFx0XFx0c2VxX3ByaW50ZihtLCBcXFwibWVtY2cgJWxsdSAlc1xcXFxuXFxcIiwgbWVtX2Nncm91cF9pZChtZW1jZyksIHBhdGgpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTgxND12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy01ODQwLVxcbm1tL3Ztc2Nhbi5jOjU4NDE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Ztc2Nhbi5jLTU4NDItXFxuLS1cXG5tbS92bXNjYW4uYz01ODcyPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01ODc2LVxcbm1tL3Ztc2Nhbi5jOjU4Nzc6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTg3OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MDY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY4MTMtfVxcbm1tL3Ztc2Nhbi5jOjY4MTQ6I2VuZGlmXFxubW0vdm1zY2FuLmMtNjgxNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NjM9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NTkwLX1cXG5tbS92bXNjYW4uYzo3NTkxOiNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi9cXG5tbS92bXNjYW4uYy03NTkyLVxcbi0tXFxubW0vdm1zY2FuLmM9NzYzND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjUyLVxcdH1cXG5tbS92bXNjYW4uYzo3NjUzOiNlbmRpZlxcbm1tL3Ztc2Nhbi5jLTc2NTQtfTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NDk9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS92bXNjYW4uYy03ODU1LVxcbm1tL3Ztc2Nhbi5jOjc4NTY6I2VuZGlmXFxubW0vdm1zY2FuLmMtNzg1Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMjg9dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMzEtfVxcbm1tL3Ztc2Nhbi5jOjgwMzI6I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjE4LjMyOTMzMTEyNVoiLCJTZXEiOjYzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMyMjM2NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCBjb2RlIHNuaXBwZXQsIGRlbGl2ZXJlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVmVyaWZ5aW5nIE5VTUEgQ29uZmlndXJhdGlvbiBJbXBhY3QqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGxvY2F0ZWQgYXQgbGluZSA3ODY5LiBOb3csIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byBOVU1BIGNvbmZpZ3VyYXRpb24uIEFoLCBgI2lmZGVmIENPTkZJR19OVU1BYCBzdGFydHMgd2F5IGJhY2sgYXQgbGluZSA3NjY5LCBhbmQgaXQgZW5kcyBhdCA3ODU2ISBTbywgdGhhdCBtZWFucyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZmFsbHMgKm91dHNpZGUqIG9mIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBibG9jayBjb250cm9sbGVkIGJ5IGAjaWZkZWYgQ09ORklHX05VTUFgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSBhbmQgZWxpbWluYXRlIGFueSBwb3RlbnRpYWwgZm9yIGZ1dHVyZSBjb25mdXNpb24sIEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEdvdHRhIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIE5VTUEtcmVsYXRlZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQyMzowMToyMS40NjE1Njk2MTFaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3ODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4NTA6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuNzg1MTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNzg1MjpcXHR7XFxuNzg1MzpcXHRcXHRyZXR1cm4gMDtcXG43ODU0OlxcdH1cXG43ODU1OlxcdFxcbjc4NTY6XFx0I2VuZGlmXFxuNzg1NzpcXHRcXG43ODU4OlxcdGVudW0ge1xcbjc4NTk6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUyA9IDAsXFxuNzg2MDpcXHRcXHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCxcXG43ODYxOlxcdFxcdE1FTU9SWV9SRUNMQUlNX05VTEwsXFxuNzg2MjpcXHR9O1xcbjc4NjM6XFx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbjc4NjQ6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcXFwic3dhcHBpbmVzcz0lZFxcXCJ9LFxcbjc4NjU6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWCwgXFxcInN3YXBwaW5lc3M9bWF4XFxcIn0sXFxuNzg2NjpcXHRcXHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcXG43ODY3OlxcdH07XFxuNzg2ODpcXHRcXG43ODY5OlxcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MjEuNDYyMjkwODYxWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1OTkwNjE5MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgUmVjbGFtYXRpb24gaW4gYSBOVU1BIENvbnRleHQqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgdGhlIHJlbGV2YW50IHNlY3Rpb24gaXMgKm91dHNpZGUqIHRoZSBgI2lmZGVmIENPTkZJR19OVU1BYCBibG9jay4gVGhhdCdzIGEga2V5IHN0YXJ0aW5nIHBvaW50LCBtZWFuaW5nIHRoZSBsb2dpYyBJJ20gbG9va2luZyBhdCBpc24ndCBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgZm9yIE5VTUEgc3lzdGVtcywgYXQgbGVhc3Qgbm90IGRpcmVjdGx5LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgSSBhbmFseXplIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIGJlIGNhcmVmdWwgb2YgaG93IGl0IGludGVyYWN0cyBpbiBtb3JlIGdlbmVyYWwgc2NlbmFyaW9zLiBUaGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJlIHRoYXQgaXQgbWF5IG9yIG1heSBub3QgYmUgb3B0aW1pemVkIGZvciBOVU1BIGFyY2hpdGVjdHVyZXMuIEkgbXVzdCBhbmFseXplIGNhcmVmdWxseS5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCBgcmVjbGFpbV9zdG9yZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zIGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IHJldHJhY2UgbXkgc3RlcHMgc28gSSBoYXZlIGEgZnVsbCBwaWN0dXJlIGFuZCBkb24ndCBtYWtlIGFueSBhc3N1bXB0aW9ucy4gSG93IGRvZXMgdGhhdCBpbnRlcmFjdCB3aXRoIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQ/IFdoYXQncyBpdHMgcm9sZSBpbiwgZm9yIGluc3RhbmNlLCBwYWdlIHJlY2xhbWF0aW9uIG9yIHByb2Nlc3MgcGFnZSBmYXVsdHM/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoaXMgYW5kIGFueSBvdGhlciBtZW1vcnkgcmVjbGFtYXRpb24tcmVsYXRlZCBjb2RlLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgaXQgaXNuJ3Qgd2l0aGluIGEgTlVNQS1zcGVjaWZpYyBibG9jay4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgaG93IGByZWNsYWltX3N0b3JlYCBpcyB1c2VkLiBJIG11c3QgYW5hbHl6ZSB3aGVyZSB0aGlzIGlzIGludm9rZWQgYW5kIGhvdyB2YXJpYWJsZXMgYXJlIHBhc3NlZCBhcm91bmQuIFRoZSBuZXh0IGNvZGUgYmxvY2sgc2hvdWxkIGhpZ2hsaWdodCB0aGUgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA3ODksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjI1LjA2MTM1NTU2MVoiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzI2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODAwNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiODAwNTpcXHRcXHR9IGVsc2UgaWYgKHBnc2Nhbm5lZCkge1xcbjgwMDY6XFx0XFx0XFx0Y291bnRfdm1fZXZlbnRzKFVORVZJQ1RBQkxFX1BHU0NBTk5FRCwgcGdzY2FubmVkKTtcXG44MDA3OlxcdFxcdH1cXG44MDA4OlxcdH1cXG44MDA5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG44MDEwOlxcdFxcbjgwMTE6XFx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbjgwMTI6XFx0c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuODAxMzpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbjgwMTQ6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG44MDE1OlxcdHtcXG44MDE2OlxcdFxcdGludCByZXQsIG5pZCA9IGRldi1cXHUwMDNlaWQ7XFxuODAxNzpcXHRcXG44MDE4OlxcdFxcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcXG44MDE5OlxcdFxcdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XFxuODAyMDpcXHR9XFxuODAyMTpcXHRcXG44MDIyOlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZWNsYWltKTtcXG44MDIzOlxcdGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuODAyNDpcXHR7XFxuODAyNTpcXHRcXHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFxcdTAwMjZub2RlLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcXG44MDI2OlxcdH1cXG44MDI3OlxcdFxcbjgwMjg6XFx0dm9pZCByZWNsYWltX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG44MDI5OlxcdHtcXG44MDMwOlxcdFxcdHJldHVybiBkZXZpY2VfcmVtb3ZlX2ZpbGUoXFx1MDAyNm5vZGUtXFx1MDAzZWRldiwgXFx1MDAyNmRldl9hdHRyX3JlY2xhaW0pO1xcbjgwMzE6XFx0fVxcbjgwMzI6XFx0I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjI1LjA2MTYzMDk1MVoiLCJTZXEiOjY3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjAyMDU5MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvYWN0aXZlIE1lbW9yeSBSZWNsYWltIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSBtZWNoYW5pc20uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGNlbnRlcmVkIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhbmQgY2FsbCBjaGFpbnMuIEkgc2VlIHRoYXQgYHJlY2xhaW1fc3RvcmVgIHJlbGllcyBvbiBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpbGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZC4gVGhpcyBpcyBnb29kIGJlY2F1c2UgaXQgc3VnZ2VzdHMgc29tZSBmbGV4aWJpbGl0eSBpbiBob3cgaXQgY2FuIGJlIHRyaWdnZXJlZC5cblxuTm93LCB0aGUgaW1wb3J0YW50IGNvbm5lY3Rpb24gaXMgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdWx0aW1hdGVseSBjYWxsZWQgZnJvbSBgbWVtb3J5X3JlY2xhaW1gIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgb25seSBjb21waWxlZCBpZiBgQ09ORklHX01FTUNHYCBpcyBlbmFibGVkLCB3aGljaCBzdWdnZXN0cyB0aGUgcHJpbWFyeSB0cmlnZ2VyIGZvciB0aGlzIGlzIG5vdyBtZW1vcnkgY2dyb3VwcyB2MiB1c2luZyBgbWVtb3J5LnJlY2xhaW1gLlxuXG5TbywgdG8gc3VtbWFyaXplIGhvdyBpdCBhbGwgZml0cyB0b2dldGhlciwgcHJvYWN0aXZlIHJlY2xhaW0gY2FuIGJlIHRyaWdnZXJlZCBpbiB0d28gd2F5czpcbjEuICBUaHJvdWdoIGBDT05GSUdfTUVNQ0dgIChmb3IgY2dyb3VwIHYyJ3MgYG1lbW9yeS5yZWNsYWltYCkuXG4yLiAgVGhyb3VnaCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCAoZm9yIHRoZSBzeXNmcyBgcmVjbGFpbWAgbm9kZSkuXG5cbkdpdmVuIHRoYXQgYENPTkZJR19NRU1DR2AgaXMgZXNzZW50aWFsbHkgYSBzdGFuZGFyZCBmZWF0dXJlIG5vd2FkYXlzLCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gaW5jbHVkaW5nIHRoYXQgb25lLlxuXG5GdXJ0aGVybW9yZSwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhcmUgZW5hYmxlZCBiZWNhdXNlIHRoZSBwYXRjaGVkIGBzaG91bGRfYWJvcnRfc2NhbmAgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZW0gdmlhIGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBzdGF0ZW1lbnQuXG5cblNvLCB0aGUga2V5IGNvbmZpZ3MgZm9yIG15IHVuZGVyc3RhbmRpbmcgYXJlOlxuKiAgIGBMUlVfR0VOYFxuKiAgIGBMUlVfR0VOX0VOQUJMRURgXG4qICAgYE1FTUNHYFxuXG5Ob3csIGxldCdzIGhvbmUgaW4gb24gdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3c6IGBzaG91bGRfYWJvcnRfc2NhbmAsIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX21hbnlgLiBJIG5vdGljZSB0aGV5IGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucy4gTGV0J3MgZGlnIGRlZXBlciBhbmQgZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGluZyB0aGVtIHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZS4gSXQgbG9va3MgbGlrZSBgbHJ1X2dlbl9zaHJpbmtfbm9kZWAgY2FsbHMgYHNocmlua19tYW55YCwgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgY2FsbHMgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfb25lYCBjYWxscyBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLiBgc2hyaW5rX25vZGVgIGFsc28gY2FsbHMgYGxydV9nZW5fc2hyaW5rX25vZGVgLiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYWN0dWFsbHkgY2FsbHM/IERvZXMgaXQgY2FsbCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2Agb3IgZG9lcyBpdCBjYWxsIGBzaHJpbmtfbm9kZWA/IEkgbmVlZCB0byBjaGVjayBob3cgaXQgd29ya3MgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MzEuNjYzNjkzMTA4WiIsIlNlcSI6NjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Mzg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTIwOlxcdFxcdFxcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXFxuNzkyMTpcXHRcXHRcXHQgKi9cXG43OTIyOlxcdFxcdFxcdGlmICghbnJfcmV0cmllcylcXG43OTIzOlxcdFxcdFxcdFxcdGxydV9hZGRfZHJhaW5fYWxsKCk7XFxuNzkyNDpcXHRcXG43OTI1OlxcdFxcdFxcdGlmIChtZW1jZykge1xcbjc5MjY6XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucztcXG43OTI3OlxcdFxcbjc5Mjg6XFx0XFx0XFx0XFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCB8XFxuNzkyOTpcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xcbjc5MzA6XFx0XFx0XFx0XFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcXG43OTMxOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBiYXRjaF9zaXplLCBnZnBfbWFzayxcXG43OTMyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCByZWNsYWltX29wdGlvbnMsXFxuNzkzMzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcXHUwMDI2c3dhcHBpbmVzcyk7XFxuNzkzNDpcXHRcXHRcXHR9IGVsc2Uge1xcbjc5MzU6XFx0XFx0XFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHtcXG43OTM2OlxcdFxcdFxcdFxcdFxcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxcbjc5Mzc6XFx0XFx0XFx0XFx0XFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxcbjc5Mzg6XFx0XFx0XFx0XFx0XFx0LnByb2FjdGl2ZV9zd2FwcGluZXNzID0gc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcXHUwMDI2c3dhcHBpbmVzcyxcXG43OTM5OlxcdFxcdFxcdFxcdFxcdC5wcmlvcml0eSA9IERFRl9QUklPUklUWSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MzEuNjYzOTY4MDg4WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMjA0OTE1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlByb2JpbmcgdGhlIE1lbW9yeSBSZWNsYWltIExvZ2ljKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSB0cmlnZ2VyLiBNeSBtZW50YWwgbW9kZWwgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHNvbWUgYWN0aXZlIG1lbW9yeSByZWNsYW1hdGlvbiBlZmZvcnRzIGluaXRpYXRlZCBieSB0aGUgdXNlci4gSXQgY2FsbHMgZWl0aGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCAod2hpY2ggSSBrbm93IHRhcmdldHMgcGFnZXMgd2l0aGluIGEgc3BlY2lmaWMgY2dyb3VwKSBvciBgc2hyaW5rX25vZGVgICh3aGljaCBJIHVuZGVyc3RhbmQgdG8gYmUgYSBicm9hZGVyIG5vZGUtbGV2ZWwgcmVjbGFpbSkuIE5vdywgSSB3YW50IHRvIGRlbHZlIGludG8gd2hhdCBoYXBwZW5zIHdoZW4gbmVpdGhlciBvZiB0aG9zZSBjYWxscyBhcmUgYWN0dWFsbHkgZXhlY3V0ZWQsIGJlY2F1c2UgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBtb3JlIHN1YnRsZSBpc3N1ZXMgb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zIGxpZS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGBlbHNlYCBicmFuY2ggb2YgdGhlIGNvbmRpdGlvbmFsIGlzIGRvaW5nIGFuZCB3aGF0IGluZm9ybWF0aW9uIGl0IHByb3ZpZGVzLiBUaGF0J3Mgd2hlcmUgdGhlIG5leHQgaW50ZXJlc3RpbmcgaW5zaWdodHMgYXJlIGxpa2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5MzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjM0Ljc4NDQ2MjU2NVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzk0MDpcXHRcXHRcXHRcXHRcXHQubWF5X3dyaXRlcGFnZSA9IDEsXFxuNzk0MTpcXHRcXHRcXHRcXHRcXHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcXG43OTQyOlxcdFxcdFxcdFxcdFxcdC5tYXlfdW5tYXAgPSAxLFxcbjc5NDM6XFx0XFx0XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTQ0OlxcdFxcdFxcdFxcdFxcdC5wcm9hY3RpdmUgPSAxLFxcbjc5NDU6XFx0XFx0XFx0XFx0fTtcXG43OTQ2OlxcdFxcbjc5NDc6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcXG43OTQ4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk0OTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbjc5NTA6XFx0XFxuNzk1MTpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgZ2ZwX21hc2ssXFxuNzk1MjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBiYXRjaF9zaXplLCBcXHUwMDI2c2MpO1xcbjc5NTM6XFx0XFx0XFx0XFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuNzk1NDpcXHRcXHRcXHR9XFxuNzk1NTpcXHRcXG43OTU2OlxcdFxcdFxcdGlmICghcmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFucl9yZXRyaWVzLS0pXFxuNzk1NzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG43OTU4OlxcdFxcbjc5NTk6XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMjM6MDE6MzQuNzg0OTI3Mzc1WiIsIlNlcSI6NzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MzY2NzMyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb2FjdGl2ZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgYHNob3VsZF9hYm9ydF9zY2FuYCBmdW5jdGlvbiwgd2hpY2ggaXMgdGhlIGtleSBtb2RpZmljYXRpb24gaGVyZS4gSXQncyByZWFjaGVkIHRocm91Z2ggdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBwYXRoLCB3aGljaCB0aGVuIGNhbGxzIGBzaHJpbmtfbm9kZWAgb3IgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLiBUaG9zZSBwYXRocyBhcmUgaW50ZXJlc3RpbmcgdG9vLiBTcGVjaWZpY2FsbHksIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBjYWxscyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCB3aGljaCBsZWFkcyB0byBgc2hyaW5rX3pvbmVzYCBhbmQgZmluYWxseSBiYWNrIHRvIGBzaHJpbmtfbm9kZWAuXG5cbk15IHRob3VnaHQgcHJvY2VzcyBsZWQgbWUgdG8gcmVhbGl6ZSB0aGF0IGBzaHJpbmtfbm9kZWAgY2FsbHMgYGxydV9nZW5fc2hyaW5rX25vZGVgIGlmIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBpcyBlbmFibGVkLiBBbmQgYGxydV9nZW5fc2hyaW5rX25vZGVgIGNhbGxzIGBzaHJpbmtfbWFueWAsIHdoaWNoICpmaW5hbGx5KiBjYWxscyBgc2hvdWxkX2Fib3J0X3NjYW5gLiBTbywgeWVzLCB0aGUgcGF0Y2ggaXMgZGVmaW5pdGVseSByZWFjaGFibGUgd2l0aGluIHRoZSBNR0xSVSBjb2RlIHBhdGgsIGFzc3VtaW5nIHByb2FjdGl2ZSByZWNsYWltIGlzIHJlcXVlc3RlZCBieSB0aGUgdXNlci5cblxuV2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgaXMgdGhhdCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBhIGNvbmRpdGlvbiB3aGVyZSB0aGUgc2NhbiBpcyBhYm9ydGVkIGlmIGBzYy1cdTAwM2Vwcm9hY3RpdmVgIGlzIHRydWUgKGluZGljYXRpbmcgYSBwcm9hY3RpdmUgcmVjbGFpbSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UpIGFuZCBhIHNpZ25hbCBpcyBwZW5kaW5nIGZvciB0aGUgY3VycmVudCB0YXNrLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgZGVsaWJlcmF0ZSBtb2RpZmljYXRpb24gb2YgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdG8gYWxsb3cgdXNlcnNwYWNlLCBlc3NlbnRpYWxseSwgdG8gaW50ZXJydXB0IHRoZSByZWNsYWltIHByb2Nlc3MgYnkgc2VuZGluZyBhIHNpZ25hbCB0byB0aGUgcHJvY2VzcyB3cml0aW5nIHRvIGBtZW1vcnkucmVjbGFpbWAuIFRoaXMgc2VlbXMgbGlrZSBhIGdyZWF0IGFyZWEgdG8gZm9jdXMgZnV6emluZyBlZmZvcnRzLlxuXG5JJ3ZlIHZlcmlmaWVkIHRoYXQgYHNob3VsZF9hYm9ydF9zY2FuYCBpcyBvbmx5IGNvbXBpbGVkIGlmIE1HTFJVIGlzIGVuYWJsZWQgdGhyb3VnaCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBhbmQgdGhhdCBgTFJVX0dFTl9FTkFCTEVEYCBlbmFibGVzIE1HTFJVIGJ5IGRlZmF1bHQsIGFuZCBgTUVNQ0dgIGlzIG5lZWRlZCB0byBleHBvc2UgdGhlIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBJdCBpcyBnb29kIHRoYXQgSSd2ZSBlbnN1cmVkIHRoZXNlIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBNR0xSVSByZWNsYWltIHBhdGguIFRoZSBjaGFuZ2UgYWxsb3dzIHVzZXJzcGFjZSB0byBzaWduYWwgYSBsb25nLXJ1bm5pbmcsIHByb2FjdGl2ZSByZWNsYWltIHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAuIFNvIEknbSBub3cgZ29pbmcgdG8gZm9jdXMgb24gdGhlIGVkZ2UgY2FzZXMgYXJvdW5kIHNpZ25hbCBoYW5kbGluZywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgcmVzb3VyY2UgbGVha3MsIGFuZCBlbnN1cmluZyBjb25zaXN0ZW50IHN0YXRlcyBhZnRlciBpbnRlcnJ1cHRpb24uIEknbGwgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGVzZSBwYXRocyB0aG9yb3VnaGx5LiBJIGFtIG5vdyBnb2luZyB0byBmb2N1cyBvbiBmdXp6aW5nIHRoaXMsIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDk1LCJPdXRwdXRUb2tlbnMiOjIwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDIzOjAxOjQ0LjcyMTYwMzU1NVoiLCJTZXEiOjcyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNzM0OTk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvdWxkX2Fib3J0X3NjYW5cIixcbiAgICBcInRyeV90b19zaHJpbmtfbHJ1dmVjXCIsXG4gICAgXCJzaHJpbmtfbWFueVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBzaG91bGRfYWJvcnRfc2NhbmAgdG8gYWJvcnQgcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltIGlmIGEgc2lnbmFsIGlzIHBlbmRpbmcgZm9yIHRoZSBjdXJyZW50IHRhc2suIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gcGF0aCwgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGludGVycnVwdCBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBwcm9hY3RpdmUgcmVjbGFpbSBvcGVyYXRpb24gKHRyaWdnZXJlZCB2aWEgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgb3Igc3lzZnMpIGJ5IHNlbmRpbmcgYSBzaWduYWwuIFRoaXMgbG9naWMgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBpdCBjb3JyZWN0bHkgYWJvcnRzIHRoZSBzY2FuIHdpdGhvdXQgY2F1c2luZyByZXNvdXJjZSBsZWFrcyBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG91bGRfYWJvcnRfc2NhblwiLFxuICAgIFwidHJ5X3RvX3Nocmlua19scnV2ZWNcIixcbiAgICBcInNocmlua19tYW55XCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHNob3VsZF9hYm9ydF9zY2FuYCB0byBhYm9ydCBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gaWYgYSBzaWduYWwgaXMgcGVuZGluZyBmb3IgdGhlIGN1cnJlbnQgdGFzay4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcmVjbGFpbSBwYXRoLCBhbGxvd2luZyB1c2Vyc3BhY2UgdG8gaW50ZXJydXB0IGEgcG90ZW50aWFsbHkgbG9uZy1ydW5uaW5nIHByb2FjdGl2ZSByZWNsYWltIG9wZXJhdGlvbiAodHJpZ2dlcmVkIHZpYSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBvciBzeXNmcykgYnkgc2VuZGluZyBhIHNpZ25hbC4gVGhpcyBsb2dpYyBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGl0IGNvcnJlY3RseSBhYm9ydHMgdGhlIHNjYW4gd2l0aG91dCBjYXVzaW5nIHJlc291cmNlIGxlYWtzIG9yIGluY29uc2lzdGVudCBzdGF0ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowxhkz4[1] Phase: Succeeded StartedAt: 2026-07-09 23:01:57 +0000 UTC FinishedAt: 2026-07-09 23:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 23:01:57 +0000 UTC FinishedAt: 2026-07-09 23:01:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[2] Phase: Succeeded StartedAt: 2026-07-09 23:01:57 +0000 UTC FinishedAt: 2026-07-09 23:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-09 23:01:57 +0000 UTC FinishedAt: 2026-07-09 23:31:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 23:01:57 +0000 UTC FinishedAt: 2026-07-09 23:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 23:01:57 +0000 UTC FinishedAt: 2026-07-09 23:02:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowxhkz4/series-workflowxhkz4-convert-artifact-2818074249/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 23:02:07 +0000 UTC FinishedAt: 2026-07-09 23:31:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 23:02:07 +0000 UTC FinishedAt: 2026-07-09 23:31:49 +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:*330cbb68-2483-4f3d-b7e5-018ed1f9fe2d,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-workflowxhkz4/series-workflowxhkz4-convert-artifact-2818074249/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": "736ad14f-5e35-48f2-84fe-946417c0aa81", "success": false },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-workflowxhkz4/series-workflowxhkz4-build-action-2895191911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 23:02:07 +0000 UTC FinishedAt: 2026-07-09 23:31:39 +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:*330cbb68-2483-4f3d-b7e5-018ed1f9fe2d,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-workflowxhkz4/series-workflowxhkz4-convert-artifact-2818074249/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": "736ad14f-5e35-48f2-84fe-946417c0aa81", "success": false },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-workflowxhkz4/series-workflowxhkz4-build-action-2895191911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-07-09 23:31:49 +0000 UTC FinishedAt: 2026-07-09 23:31:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxhkz4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["should_abort_scan","try_to_shrink_lruvec","shrink_many","user_proactive_reclaim","try_to_free_mem_cgroup_pages"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"f278138808608775ad1ff2f3727829c6f840f16c","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"64441c0e-5980-4c92-bd97-edbcfbc8217d","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-07-09 23:31:49 +0000 UTC FinishedAt: 2026-07-09 23:31:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}