Name: series-workflowwxkbk Phase: Succeeded StartedAt: 2026-06-23 19:01:39 +0000 UTC FinishedAt: 2026-06-23 23:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[0] Phase: Succeeded StartedAt: 2026-06-23 19:01:39 +0000 UTC FinishedAt: 2026-06-23 19:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 19:01:39 +0000 UTC FinishedAt: 2026-06-23 19:18:30 +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": "3802a666f37255cc8ddc5647390e6c590b947065", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA" ], "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": "3802a666f37255cc8ddc5647390e6c590b947065", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA" ], "series_id": "4409bae4-b510-40e1-8cec-a42ee5c919c9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gather_surplus_pages", "allowed_mems_nr", "hugetlb_acct_memory", "policy_mbind_nodemask" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2F0aGVyX3N1cnBsdXNfcGFnZXMmIzM0OywKICAgICYjMzQ7YWxsb3dlZF9tZW1zX25yJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfYWNjdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7cG9saWN5X21iaW5kX25vZGVtYXNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTAyMWNlYzg2Y2NhMWQxMTFhMjEwNGZlMzgxZDcwYWI0ODMwMDdlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDE5OjE1OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmJkOTdmMGY0MzQxNWU3IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0yMjU1LDYgJiM0MzsyMjU1LDIzIEBAIHN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX3QgZ2ZwKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5vZGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yID0gMDtcbiYjNDM7XHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcbiYjNDM7XHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiYjNDM7XG4mIzQzO1x0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xuJiM0MztcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbiYjNDM7XHRcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxuJiM0MztcdFx0XHRuciAmIzQzOz0gYXJyYXlbbm9kZV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJbmNyZWFzZSB0aGUgaHVnZXRsYiBwb29sIHN1Y2ggdGhhdCBpdCBjYW4gYWNjb21tb2RhdGUgYSByZXNlcnZhdGlvblxuICAqIG9mIHNpemUgJiMzOTtkZWx0YSYjMzk7LlxuQEAgLTIyNzcsNyAmIzQzOzIyOTQsOCBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHRcdGFsbG9jX25vZGVtYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0bmVlZGVkID0gKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuJiM0MztcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbiYjNDM7XHRcdChsb25nKSAoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzYz0gMCkge1xuIFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOz0gZGVsdGE7XG4gXHRcdHJldHVybiAwO1xuQEAgLTIzMTEsOCAmIzQzOzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHQgKiBiZWNhdXNlIGVpdGhlciByZXN2X2h1Z2VfcGFnZXMgb3IgZnJlZV9odWdlX3BhZ2VzIG1heSBoYXZlIGNoYW5nZWQuXG4gXHQgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuLVx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpO1xuJiM0MztcdG5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxuJiM0MztcdFx0XHQobG9uZykgKChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuJiM0MztcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzZSAwKSB7XG4gXHRcdGlmIChhbGxvY19vaylcbiBcdFx0XHRnb3RvIHJldHJ5O1xuQEAgLTQ1MTMsMjMgJiM0Mzs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxuIH1cbiBfX3NldHVwKFwmIzM0O2h1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XCYjMzQ7LCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKTtcbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLXtcbi1cdGludCBub2RlO1xuLVx0dW5zaWduZWQgaW50IG5yID0gMDtcbi1cdG5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrO1xuLVx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4tXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbi1cbi1cdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbi1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbi1cdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4tXHRcdFx0bnIgJiM0Mzs9IGFycmF5W25vZGVdO1xuLVx0fVxuLVxuLVx0cmV0dXJuIG5yO1xuLX1cbi1cbiB2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBzb2Z0LWRpcnR5XG5AQCAtMjYwLDYgJiM0MzsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuJiM0MzskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWFcbiYjNDM7XG4gbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2hcbiBcdENDPVwmIzM0OyQoQ0MpXCYjMzQ7IENGTEFHUz1cJiMzNDskKENGTEFHUylcJiMzNDsgLi9jaGVja19jb25maWcuc2hcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE3N2IwMTY5MzUxODlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xuQEAgLTAsMCAmIzQzOzEsNDcyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXG4mIzQzOyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xuJiM0MzsgKiBkbyBub3QgY292ZXIgYWxsIGVkZ2UgY2FzZXMsIGJ1dCByYXRoZXIgZm9jdXMgb24gd2hhdCB0aGUga2VybmVsIGNhblxuJiM0MzsgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xuJiM0MzsgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKVxuJiM0MzsjZGVmaW5lIEhQU0laRV9LQiBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCkgXHUwMDNlXHUwMDNlIDEwXG4mIzQzOyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcJiMzNDtcbiYjNDM7I2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGJpdG1hc2sgKipub2RlbWFza3M7XG4mIzQzO2ludCAqbm9kZWlkcztcbiYjNDM7XG4mIzQzO3B0aHJlYWRfdCAqdGhyZWFkcztcbiYjNDM7c3RydWN0IHRocmVhZF9hcmdzIHtcbiYjNDM7XHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XG4mIzQzO1x0aW50IHRvX3Jlc2VydmU7XG4mIzQzO307XG4mIzQzO3N0cnVjdCB0aHJlYWRfYXJncyogcGVyX3RocmVhZF9hcmdzO1xuJiM0MztwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuJiM0MztwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztpbnQgd2FrZV9jb25kID0gMDtcbiYjNDM7XG4mIzQzO2NoYXIgKm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKmdfZnJlZV9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqZ19ucl9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqZ19yZXN2X2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4wX25yX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMV9mcmVlX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMV9ucl9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqbjFfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgZ19mcmVlX2h1Z2VwYWdlcywgZ19ucl9odWdlcGFnZXM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgZ19yZXN2X2h1Z2VwYWdlcywgZ19zdXJwbHVzX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBuMF9mcmVlX2h1Z2VwYWdlcywgbjBfbnJfaHVnZXBhZ2VzLCBuMF9zdXJwbHVzX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBpbnQgbjFfZnJlZV9odWdlcGFnZXMsIG4xX25yX2h1Z2VwYWdlcywgbjFfc3VycGx1c19odWdlcGFnZXM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgaW50IG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBpbnQgb3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcztcbiYjNDM7XG4mIzQzO1xuJiM0MzsvKiBzZXR1cF9wYXRoc1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN0cmluZ3MgZm9yIHRoZSB2YXJpb3VzIGh1Z2V0bGIgcGFnZSBzeXNmc1xuJiM0MzsgKiBwYXRocy4gVGhlIHN0cmluZ3MgYXJlIHVzZWQgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgc3lzZnMgZmlsZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9wYXRocyh2b2lkKSB7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCxcbiYjNDM7XHRcdFx0XCYjMzQ7L3Byb2Mvc3lzL3ZtL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtmcmVlX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2Z19ucl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2Z19yZXN2X2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7cmVzdl9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNmdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O2ZyZWVfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZuMF9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7c3VycGx1c19odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4xX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtzdXJwbHVzX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGdldF9odWdlcGFnZV9zdGF0c1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2ltcGx5IGdyYWIgYSBidW5jaCBvZiB0aGUgaHVnZXRsYiBwYWdlIG1ldHJpY3MgaW4gc3lzZnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7XG4mIzQzO1x0cmVhZF9zeXNmcyhnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfZnJlZV9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3NcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpc1xuJiM0MzsgKiB0ZXN0IHN1aXRlIGRvZXNuJiMzOTt0IGNsb2JiZXIgY29uZmlncyBuZWVkZWQgZm9yIG90aGVyIHRlc3RzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2F2ZV9odWdlcGFnZV9jb25maWdzKHZvaWQpIHtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX24wX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlnc1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0XG4mIzQzOyAqIHdhcyByYW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkge1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjFfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzZXRfaHVnZXBhZ2VzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLlxuJiM0MzsgKiBVc2VkIHRvIGdldCBiYWNrIHRvIGEgY2xlYXIgc3RhdGUgYmV0d2VlbiB0ZXN0cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKSB7XG4mIzQzO1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7XG4mIzQzO1x0d3JpdGVfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogY2FuX3J1blxuJiM0MzsgKlxuJiM0MzsgKiBEb2VzIHNhbml0eSBjaGVja2luZyBmaXJzdCB0byBtYWtlIHN1cmUgdGhlIHRlc3RzIGNhbiBldmVuIHJ1bi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKSB7XG4mIzQzOyAgICAgICAgaWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9leGl0X3NraXAoXCYjMzQ7UGxlYXNlIHJ1biB0aGUgdGVzdCBhcyByb290LlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1hX2F2YWlsYWJsZSgpID09IC0xKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TnVtYSBpcyB1bmF2YWlsYWJsZS5cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFx1MDAzYyAyKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Tm90IGVub3VnaCBub2RlcyB0byB0ZXN0LlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1hX251bV90YXNrX25vZGVzKCkgXHUwMDNjIDIpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtDdXJyZW50IG1lbXBvbGljeSBpcyB0b28gcmVzdHJpY3RpdmUuXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2xlYW51cChjaGFyKiBlcnJfbXNnKSB7XG4mIzQzO1x0ZnJlZShwZXJfdGhyZWFkX2FyZ3MpO1xuJiM0MztcdGZyZWUodGhyZWFkcyk7XG4mIzQzO1x0ZnJlZShub2RlaWRzKTtcbiYjNDM7XHRmcmVlKG5vZGVtYXNrcyk7XG4mIzQzO1x0ZnJlZShucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShnX25yX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfcmVzdl9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjBfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMF9ucl9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjFfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0aWYgKGVycl9tc2cpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coZXJyX21zZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNldHVwX25vZGVfaW5mb1xuJiM0MzsgKlxuJiM0MzsgKiBDcmVhdGVzIHRoZSBiaXRtYXNrcyB1c2VkIHRvIGlzb2xhdGUgdGVzdCBydW5uZXJzIGFuZCB0aGVpciBodWdldGxiIHBhZ2VcbiYjNDM7ICogcmVzZXJ2YXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfbm9kZV9pbmZvKHZvaWQpIHtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XHRpbnQgaXRoX25vZGVtYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0bm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7XG4mIzQzO1x0bm9kZW1hc2tzID0gY2FsbG9jKDIsIHNpemVvZihzdHJ1Y3QgYml0bWFzayAqKSk7XG4mIzQzO1xuJiM0MztcdGlmICghbm9kZW1hc2tzIHx8ICFub2RlaWRzKVxuJiM0MztcdFx0Y2xlYW51cChcJiMzNDtzZXR1cF9ub2RlX2luZm86IGNhbGxvYy5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcbiYjNDM7XHQgKiBpbmRleCBvZiB0aGUgZmlyc3Qgbm9kZSBhdmFpbGFibGUgdG8gdXMsIGFuZCB0aGUgc2Vjb25kIG9mIHRoZSBuZXh0XG4mIzQzO1x0ICogbm9kZSBhdmFpbGFibGUgdG8gdXMuICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtYV9udW1fdGFza19ub2RlcygpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG51bWFfYml0bWFza19pc2JpdHNldChudW1hX2dldF9tZW1zX2FsbG93ZWQoKSwgaSkpIHtcbiYjNDM7XHRcdFx0bm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTtcbiYjNDM7XHRcdFx0bm9kZW1hc2tzW2l0aF9ub2RlbWFzayYjNDM7JiM0MztdID0gbnVtYV9iaXRtYXNrX3NldGJpdChcbiYjNDM7XHRcdFx0XHRcdG51bWFfYWxsb2NhdGVfbm9kZW1hc2soKSwgaSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpdGhfbm9kZW1hc2sgIT0gMiB8fCAhbm9kZW1hc2tzWzBdIHx8ICFub2RlbWFza3NbMV0pXG4mIzQzO1x0XHRjbGVhbnVwKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLlwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNldHVwX3RocmVhZHNcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKSB7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzID0gY2FsbG9jKDIsIHNpemVvZihwZXJfdGhyZWFkX2FyZ3MpKTtcbiYjNDM7XHRpZiAoIXBlcl90aHJlYWRfYXJncylcbiYjNDM7XHRcdGNsZWFudXAoXCYjMzQ7Y2FsbG9jIHRocmVhZCBhcmdzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRocmVhZHMgPSBjYWxsb2MoMiwgc2l6ZW9mKHB0aHJlYWRfdCkpO1xuJiM0MztcdGlmICghdGhyZWFkcykge1xuJiM0MztcdFx0Y2xlYW51cChcJiMzNDtjYWxsb2MgdGhyZWFkcy5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzZXJ2ZV9odWdlcGFnZVxuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXJ2ZSBhIGh1Z2V0bGIgcGFnZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcqIHJlc2VydmVfaHVnZXBhZ2Uodm9pZCkge1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZyAqKSBtbWFwKE5VTEwsIEhQU0laRV9CWVRFUywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRocmVhZF93b3JrXG4mIzQzOyAqXG4mIzQzOyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKSB7XG4mIzQzO1x0c3RydWN0IHRocmVhZF9hcmdzKiB0X2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzKikgYXJnO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLVx1MDAzZXRvX3Jlc2VydmUsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovXG4mIzQzO1x0aWYgKHRfYXJncy1cdTAwM2VteV9ub2RlbWFzaylcbiYjNDM7XHRcdG51bWFfYmluZCh0X2FyZ3MtXHUwMDNlbXlfbm9kZW1hc2spO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xuJiM0MztcdFx0LyogVGVzdHMgbWF5IHB1cnBvc2VmdWxseSB0cnkgdG8gb3ZlcmFsbG9jYXRlLCBzbyBqdXN0XG4mIzQzO1x0XHQgKiBmYWxsIHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0Ki9cbiYjNDM7XHRcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0XHR0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZSA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHdoaWxlKCF3YWtlX2NvbmQpIHtcbiYjNDM7XHRcdHB0aHJlYWRfY29uZF93YWl0KFx1MDAyNmNvbmQsIFx1MDAyNm11dGV4KTtcbiYjNDM7XHR9XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKiBUcnkgdG8gZnJlZSB0aG9zZSBodWdldGxiIHBhZ2VzICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdF9hcmdzLVx1MDAzZXRvX3Jlc2VydmU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobXVubWFwKGh1Z2VwYWdlc1tpXSwgSFBTSVpFX0JZVEVTKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9wZXJyb3IoXCYjMzQ7bXVubWFwKCkgZmFpbGVkISBDaGVjayBmb3IgbGVha2VkIGh1Z2V0bGIgcGFnZXMhXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0ZnJlZShodWdlcGFnZXMpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB3YWtlX2NoaWxkcmVuXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byB3YWtlIGNoaWxkcmVuIHRocmVhZHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpIHtcbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHdha2VfY29uZCA9IDE7XG4mIzQzO1x0cHRocmVhZF9jb25kX2Jyb2FkY2FzdChcdTAwMjZjb25kKTtcbiYjNDM7XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZtdXRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRlc3QxXG4mIzQzOyAqXG4mIzQzOyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2UgYW55d2hlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0MSh2b2lkKSB7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IE5VTEw7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoKGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICgobjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8XG4mIzQzO1x0XHRcdCAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSxcbiYjNDM7XHRcdFx0IFwmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIGFueXdoZXJlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0MlxuJiM0MzsgKlxuJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGhcbiYjNDM7ICogYSBtZW1wb2xpY3kuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKSB7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLFxuJiM0MztcdFx0XHQgXCYjMzQ7UmVzZXJ2ZSAxIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTBcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHdha2VfY29uZCA9IDA7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRlc3QzXG4mIzQzOyAqXG4mIzQzOyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDModm9pZCkge1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDA7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0MztcbiYjNDM7XHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4mIzQzO1x0XHRcdCBcJiMzNDtTZXQgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0NFxuJiM0MzsgKlxuJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0NCh2b2lkKSB7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbiYjNDM7XHRcdFx0IFwmIzM0O1Jlc2VydmUgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0NVxuJiM0MzsgKlxuJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxIGFuZFxuJiM0MzsgKiBmYWlsIHRvIG92ZXIgYWxsb2NhdGUgYW5vdGhlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Q1KHZvaWQpIHtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7XG4mIzQzO1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDI7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxuJiM0MztcdFx0XHQgXCYjMzQ7SW50ZW50aW9uYWxseSBvdmVyYWxsb2NhdGUgYW5kIGZhaWwgZHVlIHRvIG5yX292ZXJjb21taXRfaHVnZXBhZ2VzIGxpbWl0LlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdha2VfY2hpbGRyZW4oKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuJiM0MztcdHdha2VfY29uZCA9IDA7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKSB7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDUpO1xuJiM0MztcbiYjNDM7XHRjaGVja19yZXF1aXJlbWVudHMoKTtcbiYjNDM7XHRzZXR1cF90aHJlYWRzKCk7XG4mIzQzO1x0c2V0dXBfbm9kZV9pbmZvKCk7XG4mIzQzO1x0c2V0dXBfcGF0aHMoKTtcbiYjNDM7XHRzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbiYjNDM7XG4mIzQzO1x0dGVzdDEoKTtcbiYjNDM7XHR0ZXN0MigpO1xuJiM0MztcdHRlc3QzKCk7XG4mIzQzO1x0dGVzdDQoKTtcbiYjNDM7XHR0ZXN0NSgpO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXBhZ2Utdm1lbW1hcFxuIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiLW1hZHZpc2VcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbiYjNDM7Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwmIzM0OyR7SEFWRV9IVUdFUEFHRVN9XCYjMzQ7ID0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4gXHRucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYXRoZXJfc3VycGx1c19wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvd2VkX21lbXNfbnImIzM0OywKICAgICYjMzQ7aHVnZXRsYl9hY2N0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtwb2xpY3lfbWJpbmRfbm9kZW1hc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyAoYGFsbG93ZWRfbWVtc19ucmApIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5lZWRlZCBzdXJwbHVzIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSByZXNlcnZlZCBhbmQgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IGluIHRoZSBwcmVzZW5jZSBvZiBOVU1BIG1lbW9yeSBwb2xpY2llcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwMjFjZWM4NmNjYTFkMTExYTIxMDRmZTM4MWQ3MGFiNDgzMDA3ZWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAxOToxNToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBmMjRiZjQ5YmUwNDdlMy4uYmQ5N2YwZjQzNDE1ZTcgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTIyNTUsNiAmIzQzOzIyNTUsMjMgQEAgc3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKQomIzQzO3sKJiM0MzsJaW50IG5vZGU7CiYjNDM7CXVuc2lnbmVkIGludCBuciA9IDA7CiYjNDM7CW5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrOwomIzQzOwl1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzX25vZGU7CiYjNDM7CWdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpOwomIzQzOwomIzQzOwltYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7CiYjNDM7CWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHsKJiM0MzsJCWlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKQomIzQzOwkJCW5yICYjNDM7PSBhcnJheVtub2RlXTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiYjNDM7fQomIzQzOwogLyoKICAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uCiAgKiBvZiBzaXplICYjMzk7ZGVsdGEmIzM5Oy4KQEAgLTIyNzcsNyAmIzQzOzIyOTQsOCBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiAJCWFsbG9jX25vZGVtYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2h1Z2V0bGJfbG9jayk7Ci0JbmVlZGVkID0gKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLSZndDtmcmVlX2h1Z2VfcGFnZXM7CiYjNDM7CW5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSwKJiM0MzsJCShsb25nKSAoKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLSZndDtmcmVlX2h1Z2VfcGFnZXMpKTsKIAlpZiAobmVlZGVkICZsdDs9IDApIHsKIAkJaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7PSBkZWx0YTsKIAkJcmV0dXJuIDA7CkBAIC0yMzExLDggJiM0MzsyMzI5LDkgQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKQogCSAqIGJlY2F1c2UgZWl0aGVyIHJlc3ZfaHVnZV9wYWdlcyBvciBmcmVlX2h1Z2VfcGFnZXMgbWF5IGhhdmUgY2hhbmdlZC4KIAkgKi8KIAlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQluZWVkZWQgPSAoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCi0JCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCk7CiYjNDM7CW5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCShsb25nKSAoKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLQomIzQzOwkJCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCkpKTsKIAlpZiAobmVlZGVkICZndDsgMCkgewogCQlpZiAoYWxsb2Nfb2spCiAJCQlnb3RvIHJldHJ5OwpAQCAtNDUxMywyMyAmIzQzOzQ1MzIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKGNoYXIgKnMpCiB9CiBfX3NldHVwKCYjMzQ7aHVnZXBhZ2VfYWxsb2NfdGhyZWFkcz0mIzM0OywgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpCi17Ci0JaW50IG5vZGU7Ci0JdW5zaWduZWQgaW50IG5yID0gMDsKLQlub2RlbWFza190ICptYmluZF9ub2RlbWFzazsKLQl1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzX25vZGU7Ci0JZ2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7Ci0KLQltYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7Ci0JZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkgewotCQlpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSkKLQkJCW5yICYjNDM7PSBhcnJheVtub2RlXTsKLQl9Ci0KLQlyZXR1cm4gbnI7Ci19Ci0KIHZvaWQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJc3RydWN0IGhzdGF0ZSAqaDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQpAQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9ucwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IG1lcmdlCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gcm1hcAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5CiAKIGlmbmVxICgkKEFSQ0gpLGFybTY0KQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHkKQEAgLTI2MCw2ICYjNDM7MjYxLDggQEAgJChPVVRQVVQpL21pZ3JhdGlvbjogTERMSUJTICYjNDM7PSAtbG51bWEKIAogJChPVVRQVVQpL3JtYXA6IExETElCUyAmIzQzOz0gLWxudW1hCiAKJiM0MzskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWEKJiM0MzsKIGxvY2FsX2NvbmZpZy5tayBsb2NhbF9jb25maWcuaDogY2hlY2tfY29uZmlnLnNoCiAJQ0M9JiMzNDskKENDKSYjMzQ7IENGTEFHUz0mIzM0OyQoQ0ZMQUdTKSYjMzQ7IC4vY2hlY2tfY29uZmlnLnNoCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE3N2IwMTY5MzUxODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMKQEAgLTAsMCAmIzQzOzEsNDcyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kKJiM0MzsgKgomIzQzOyAqIFJlc2VydmluZyBzdXJwbHVzIGh1Z2VwYWdlcyB3aXRoaW4gbWVtcG9saWNpZXMgaXMgcXVpdGUgdHJpY2t5IGR1ZSB0bwomIzQzOyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0cwomIzQzOyAqIGRvIG5vdCBjb3ZlciBhbGwgZWRnZSBjYXNlcywgYnV0IHJhdGhlciBmb2N1cyBvbiB3aGF0IHRoZSBrZXJuZWwgY2FuCiYjNDM7ICogY3VycmVudGx5IGRvIHRvIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZXMgaW4gdGhlIHByZXNlbmNlIG9mIGNwdXNldHMKJiM0MzsgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O251bWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKQomIzQzOyNkZWZpbmUgSFBTSVpFX0tCIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSAmZ3Q7Jmd0OyAxMAomIzQzOyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIICYjMzQ7L3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lcyYjMzQ7CiYjNDM7I2RlZmluZSBOT0RFX1NZU19IUF9QQVRIICYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUldS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgYml0bWFzayAqKm5vZGVtYXNrczsKJiM0MztpbnQgKm5vZGVpZHM7CiYjNDM7CiYjNDM7cHRocmVhZF90ICp0aHJlYWRzOwomIzQzO3N0cnVjdCB0aHJlYWRfYXJncyB7CiYjNDM7CXN0cnVjdCBiaXRtYXNrICpteV9ub2RlbWFzazsKJiM0MzsJaW50IHRvX3Jlc2VydmU7CiYjNDM7fTsKJiM0MztzdHJ1Y3QgdGhyZWFkX2FyZ3MqIHBlcl90aHJlYWRfYXJnczsKJiM0MztwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSOwomIzQzO3B0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiYjNDM7aW50IHdha2VfY29uZCA9IDA7CiYjNDM7CiYjNDM7Y2hhciAqbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpnX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19ucl9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqbjBfbnJfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqbjBfc3VycGx1c19odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMV9mcmVlX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4xX25yX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7CiYjNDM7dW5zaWduZWQgbG9uZyBnX2ZyZWVfaHVnZXBhZ2VzLCBnX25yX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIGdfcmVzdl9odWdlcGFnZXMsIGdfc3VycGx1c19odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBuMF9mcmVlX2h1Z2VwYWdlcywgbjBfbnJfaHVnZXBhZ2VzLCBuMF9zdXJwbHVzX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIGludCBuMV9mcmVlX2h1Z2VwYWdlcywgbjFfbnJfaHVnZXBhZ2VzLCBuMV9zdXJwbHVzX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIGludCBvcmlnX24wX25yX2h1Z2VwYWdlcywgb3JpZ19uMV9ucl9odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBpbnQgb3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlczsKJiM0MzsKJiM0MzsKJiM0MzsvKiBzZXR1cF9wYXRocwomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBzdHJpbmdzIGZvciB0aGUgdmFyaW91cyBodWdldGxiIHBhZ2Ugc3lzZnMKJiM0MzsgKiBwYXRocy4gVGhlIHN0cmluZ3MgYXJlIHVzZWQgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgc3lzZnMgZmlsZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfcGF0aHModm9pZCkgewomIzQzOwlhc3ByaW50ZigmYW1wO25yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsCiYjNDM7CQkJJiMzNDsvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O2ZyZWVfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfbnJfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtyZXN2X2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7c3VycGx1c19odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7ZnJlZV9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtzdXJwbHVzX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO24xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBnZXRfaHVnZXBhZ2Vfc3RhdHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmcwomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7CiYjNDM7CXJlYWRfc3lzZnMoZ19mcmVlX2h1Z2VwYWdlc19wYXRoLCAmYW1wO2dfZnJlZV9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsICZhbXA7Z19ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKGdfcmVzdl9odWdlcGFnZXNfcGF0aCwgJmFtcDtnX3Jlc3ZfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsICZhbXA7Z19zdXJwbHVzX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgJmFtcDtuMF9mcmVlX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjBfbnJfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24wX3N1cnBsdXNfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24xX2ZyZWVfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtuMV9ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjFfc3VycGx1c19odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzYXZlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBodWdlcGFnZSBjb25maWdzIHNvIHRoaXMKJiM0MzsgKiB0ZXN0IHN1aXRlIGRvZXNuJiMzOTt0IGNsb2JiZXIgY29uZmlncyBuZWVkZWQgZm9yIG90aGVyIHRlc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNhdmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKSB7CiYjNDM7CXJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsICZhbXA7b3JpZ19uMF9ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAmYW1wO29yaWdfbjFfbnJfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAmYW1wO29yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBodWdlcGFnZSBjb25maWdzIGJlZm9yZSB0aGlzIHRlc3QKJiM0MzsgKiB3YXMgcmFuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKSB7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiByZXNldF9odWdlcGFnZXMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLgomIzQzOyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKSB7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDApOwomIzQzOwl3cml0ZV9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCAwKTsKJiM0MzsJd3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDApOwomIzQzOwl3cml0ZV9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIGNhbl9ydW4KJiM0MzsgKgomIzQzOyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKSB7CiYjNDM7ICAgICAgICBpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGUgdGVzdCBhcyByb290LlxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAobnVtYV9hdmFpbGFibGUoKSA9PSAtMSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TnVtYSBpcyB1bmF2YWlsYWJsZS5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKSAmbHQ7IDIpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O05vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG51bWFfbnVtX3Rhc2tfbm9kZXMoKSAmbHQ7IDIpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0N1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2xlYW51cChjaGFyKiBlcnJfbXNnKSB7CiYjNDM7CWZyZWUocGVyX3RocmVhZF9hcmdzKTsKJiM0MzsJZnJlZSh0aHJlYWRzKTsKJiM0MzsJZnJlZShub2RlaWRzKTsKJiM0MzsJZnJlZShub2RlbWFza3MpOwomIzQzOwlmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9mcmVlX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWlmIChlcnJfbXNnKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKGVycl9tc2cpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzZXR1cF9ub2RlX2luZm8KJiM0MzsgKgomIzQzOyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZQomIzQzOyAqIHJlc2VydmF0aW9ucy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZCkgewomIzQzOwlpbnQgaTsKJiM0MzsJaW50IGl0aF9ub2RlbWFzayA9IDA7CiYjNDM7CiYjNDM7CW5vZGVpZHMgPSBjYWxsb2MoMiwgc2l6ZW9mKGludCkpOwomIzQzOwlub2RlbWFza3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCBiaXRtYXNrICopKTsKJiM0MzsKJiM0MzsJaWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpCiYjNDM7CQljbGVhbnVwKCYjMzQ7c2V0dXBfbm9kZV9pbmZvOiBjYWxsb2MuJiMzNDspOwomIzQzOwomIzQzOwkvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGUKJiM0MzsJICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dAomIzQzOwkgKiBub2RlIGF2YWlsYWJsZSB0byB1cy4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7CiYjNDM7CQkJbm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTsKJiM0MzsJCQlub2RlbWFza3NbaXRoX25vZGVtYXNrJiM0MzsmIzQzO10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KAomIzQzOwkJCQkJbnVtYV9hbGxvY2F0ZV9ub2RlbWFzaygpLCBpKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoaXRoX25vZGVtYXNrICE9IDIgfHwgIW5vZGVtYXNrc1swXSB8fCAhbm9kZW1hc2tzWzFdKQomIzQzOwkJY2xlYW51cCgmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyogc2V0dXBfdGhyZWFkcwomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX3RocmVhZHModm9pZCkgewomIzQzOwlwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHBlcl90aHJlYWRfYXJncykpOwomIzQzOwlpZiAoIXBlcl90aHJlYWRfYXJncykKJiM0MzsJCWNsZWFudXAoJiMzNDtjYWxsb2MgdGhyZWFkIGFyZ3MuJiMzNDspOwomIzQzOwomIzQzOwl0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTsKJiM0MzsJaWYgKCF0aHJlYWRzKSB7CiYjNDM7CQljbGVhbnVwKCYjMzQ7Y2FsbG9jIHRocmVhZHMuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIHJlc2VydmVfaHVnZXBhZ2UKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNlcnZlIGEgaHVnZXRsYiBwYWdlCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcqIHJlc2VydmVfaHVnZXBhZ2Uodm9pZCkgewomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQlNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiwgLTEsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiB0aHJlYWRfd29yawomIzQzOyAqCiYjNDM7ICogVGVzdCBydW5uZXJzLiBQZXJmb3JtcyB0aGUgd29yayBvZiByZXNlcnZpbmcgYW5kIGZyZWVpbmcgaHVnZXRsYiBwYWdlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKSB7CiYjNDM7CXN0cnVjdCB0aHJlYWRfYXJncyogdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyopIGFyZzsKJiM0MzsJdW5zaWduZWQgbG9uZyAqKmh1Z2VwYWdlczsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLSZndDt0b19yZXNlcnZlLAomIzQzOwkJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7CiYjNDM7CiYjNDM7CS8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovCiYjNDM7CWlmICh0X2FyZ3MtJmd0O215X25vZGVtYXNrKQomIzQzOwkJbnVtYV9iaW5kKHRfYXJncy0mZ3Q7bXlfbm9kZW1hc2spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdF9hcmdzLSZndDt0b19yZXNlcnZlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpOwomIzQzOwkJLyogVGVzdHMgbWF5IHB1cnBvc2VmdWxseSB0cnkgdG8gb3ZlcmFsbG9jYXRlLCBzbyBqdXN0CiYjNDM7CQkgKiBmYWxsIHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0Ki8KJiM0MzsJCWlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJCXRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZSA9IGk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi8KJiM0MzsJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwl3aGlsZSghd2FrZV9jb25kKSB7CiYjNDM7CQlwdGhyZWFkX2NvbmRfd2FpdCgmYW1wO2NvbmQsICZhbXA7bXV0ZXgpOwomIzQzOwl9CiYjNDM7CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwomIzQzOwkvKiBUcnkgdG8gZnJlZSB0aG9zZSBodWdldGxiIHBhZ2VzICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0X2FyZ3MtJmd0O3RvX3Jlc2VydmU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobXVubWFwKGh1Z2VwYWdlc1tpXSwgSFBTSVpFX0JZVEVTKSAmbHQ7IDApCiYjNDM7CQkJa3NmdF9wZXJyb3IoJiMzNDttdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwlmcmVlKGh1Z2VwYWdlcyk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiB3YWtlX2NoaWxkcmVuCiYjNDM7ICoKJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHdha2VfY2hpbGRyZW4odm9pZCkgewomIzQzOwlwdGhyZWFkX211dGV4X2xvY2soJmFtcDttdXRleCk7CiYjNDM7CXdha2VfY29uZCA9IDE7CiYjNDM7CXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJmFtcDtjb25kKTsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDttdXRleCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3QxCiYjNDM7ICoKJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIGFueXdoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QxKHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzBdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBnX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSAmYW1wOyZhbXA7CiYjNDM7CQkJICgobjBfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8CiYjNDM7CQkJIChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSkpLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIGFueXdoZXJlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDIKJiM0MzsgKgomIzQzOyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2Ugd2l0aAomIzQzOyAqIGEgbWVtcG9saWN5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QyKHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0MzsKJiM0MzsJZ2V0X2h1Z2VwYWdlX3N0YXRzKCk7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDMKJiM0MzsgKgomIzQzOyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwl3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAwOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1sxXSk7CiYjNDM7CiYjNDM7CXVzbGVlcCg1MDAwMDApOwomIzQzOwomIzQzOwlnZXRfaHVnZXBhZ2Vfc3RhdHMoKTsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX25yX2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsKJiM0MzsJCQkgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsCiYjNDM7CQkJICYjMzQ7U2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7CiYjNDM7CXdha2VfY29uZCA9IDA7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzO30KJiM0MzsKJiM0MzsvKiB0ZXN0NAomIzQzOyAqCiYjNDM7ICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Q0KHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwl3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1sxXSk7CiYjNDM7CiYjNDM7CXVzbGVlcCg1MDAwMDApOwomIzQzOwomIzQzOwlnZXRfaHVnZXBhZ2Vfc3RhdHMoKTsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX25yX2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsKJiM0MzsJCQkgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsCiYjNDM7CQkJICYjMzQ7UmVzZXJ2ZSAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxuJiMzNDspOwomIzQzOwomIzQzOwl3YWtlX2NoaWxkcmVuKCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDUKJiM0MzsgKgomIzQzOyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTEgYW5kCiYjNDM7ICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdDUodm9pZCkgewomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzFdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfbnJfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOwomIzQzOwkJCSBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSwKJiM0MzsJCQkgJiMzNDtJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7CiYjNDM7CXdha2VfY29uZCA9IDA7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKSB7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWtzZnRfc2V0X3BsYW4oNSk7CiYjNDM7CiYjNDM7CWNoZWNrX3JlcXVpcmVtZW50cygpOwomIzQzOwlzZXR1cF90aHJlYWRzKCk7CiYjNDM7CXNldHVwX25vZGVfaW5mbygpOwomIzQzOwlzZXR1cF9wYXRocygpOwomIzQzOwlzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTsKJiM0MzsKJiM0MzsJdGVzdDEoKTsKJiM0MzsJdGVzdDIoKTsKJiM0MzsJdGVzdDMoKTsKJiM0MzsJdGVzdDQoKTsKJiM0MzsJdGVzdDUoKTsKJiM0MzsKJiM0MzsJcmVzdG9yZV9odWdlcGFnZV9jb25maWdzKCk7CiYjNDM7CWtzZnRfZmluaXNoZWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IGMxN2IxMzNhODFkMjQ4Li5jZDM2OGNlNTkwYTc0YyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTI5Nyw2ICYjNDM7Mjk3LDcgQEAgQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXAKIENBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXBhZ2Utdm1lbW1hcAogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiLW1hZHZpc2UKIENBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW8KJiM0MztDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kKIAogaWYgWyAmIzM0OyR7SEFWRV9IVUdFUEFHRVN9JiMzNDsgPSAmIzM0OzEmIzM0OyBdOyB0aGVuCiAJbnJfaHVnZXBhZ2VzX3RtcD0kKGNhdCAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZVRMQiBTdXJwbHVzIFBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBmdW5jdGlvbiwgYW5kIGluY2x1ZGVzIGEgbmV3IHNlbGZ0ZXN0LCBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbmNvcnBvcmF0aW5nIGBhbGxvd2VkX21lbXNfbnIoaClgIGludG8gdGhlIGNhbGN1bGF0aW9uIG9mIG5lZWRlZCBodWdlIHBhZ2VzLiBUaGV5JiMzOTt2ZSBtb3ZlZCBpdHMgZGVmaW5pdGlvbiBoaWdoZXIgdXAgaW4gdGhlIGZpbGUsIGFuZCBhcmUgbm93IHVzaW5nIGl0IHdpdGhpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLgoKTGV0JiMzOTtzIHNlZSwgdGhlIGNoYW5nZXMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBpdHNlbGYgbW9kaWZ5IHRoZSBjYWxjdWxhdGlvbjoKCmBgYGMKLQluZWVkZWQgPSAoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtJmd0O2ZyZWVfaHVnZV9wYWdlczsKJiM0MzsJbmVlZGVkID0gbWF4KChsb25nKSAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLAomIzQzOwkJKGxvbmcpICgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtJmd0O2ZyZWVfaHVnZV9wYWdlcykpOwpgYGAKYW5kCmBgYGMKLQluZWVkZWQgPSAoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCi0JCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCk7CiYjNDM7CW5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCShsb25nKSAoKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLQomIzQzOwkJCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCkpKTsKYGBgCgpSaWdodCwgc28gdGhpcyBsb2dpYyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGhvdyB0aGUga2VybmVsIG1hbmFnZXMgc3VycGx1cyBodWdlIHBhZ2VzLCBhbmQgKmNydWNpYWxseSosIGl0JiMzOTtzIG5vdyBjb25zaWRlcmluZyB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKE5VTUEpLiBHaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgYW5kIHRoZSBpbnZvbHZlbWVudCBvZiBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIGludGVyYWN0aW9uIHdpdGggbWVtcG9saWNpZXMsIGluIHBhcnRpY3VsYXIsIGxvb2tzIGxpa2UgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0byBldmVuICpiZSogYWN0aXZlLiBPYnZpb3VzbHksIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgcHJpbWFyeSBvbmUsIHNpbmNlIHRoaXMgaXMgYWxsIGFib3V0IEh1Z2VUTEIgcGFnZXMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5Li4uIFllcCwgdGhhdCYjMzk7cyB0aGUgYmFzZSByZXF1aXJlbWVudC4gR29vZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yMjU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYi5jLTIyNzgtICovXG5tbS9odWdldGxiLmM6MjI3OTpzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtMjI4MC1cdF9fbXVzdF9ob2xkKFx1MDAyNmh1Z2V0bGJfbG9jaylcbi0tXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtNDY0NS1cdGlmIChkZWx0YSBcdTAwM2UgMCkge1xubW0vaHVnZXRsYi5jOjQ2NDY6XHRcdGlmIChnYXRoZXJfc3VycGx1c19wYWdlcyhoLCBkZWx0YSkgXHUwMDNjIDApXG5tbS9odWdldGxiLmMtNDY0Ny1cdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEludGVyYWN0aW9uIG9mIEh1Z2VUTEIgQWNjb3VudGluZyBhbmQgUGFnZSBSZXRyaWV2YWwqKgoKT2theSwgc28gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBpcyBjYWxsZWQgc3BlY2lmaWNhbGx5IGJ5IGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhhdCYjMzk7cyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbWlnaHQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yIHdpdGhpbiB0aGUgYG1tL2h1Z2V0bGIuY2AgY29udGV4dC4gR2l2ZW4gdGhhdCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGxpa2VseSBoYW5kbGVzIHRoZSByZXRyaWV2YWwgb2YgcGFnZXMsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZGVhbHMgd2l0aCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLCBJJiMzOTttIGV4cGVjdGluZyB0byBkZWx2ZSBpbnRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBpbmNvbnNpc3RlbmNpZXMuIEnigJlsbCBuZWVkIHRvIGV4cGxvcmUgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGljaCBwYWdlcyBhcmUgY29uc2lkZXJlZCAmIzM0O3N1cnBsdXMsJiMzNDsgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLCBhbmQgaG93IHRoZSBhY2NvdW50aW5nIGludGVyYWN0cyB3aXRoIHBhZ2UgcmVjbGFtYXRpb24gb3IgYWxsb2NhdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCBhcmUgd2hlcmUgdGhlIGtub2JzIGFyZSBsaWtlbHkgdG8gYmU7IEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc2V0dGluZ3MgcmVsYXRlZCB0byBwYWdlIHNpemUsIG1lbW9yeSBsaW1pdHMsIGFuZCBwZXJoYXBzIHBvbGljaWVzIGZvciBwYWdlIHJldGlyZW1lbnQgb3Igc3dhcHBpbmcgdGhhdCBpbXBhY3QgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVx0JiM0Mzs9IGRtYXBvb2wub1xubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICoqQW5hbHl6aW5nIFBvc3NpYmxlIERlcGVuZGVuY2llcyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKiouCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgQ09ORklHX0hVR0VUTEJGU2AgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0LCBJIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgaW50ZXJwbGF5IHdpdGggb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBgQ09ORklHX05VTUFgIGNhdGNoZXMgbXkgZXllLiBUaGUgbWVudGlvbnMgb2YgYGFsbG93ZWRfbWVtc19ucmAgYW5kIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIHdpdGhpbiB0aGUgTlVNQSBjb250ZXh0IGFyZSBtYWtpbmcgbWUgdGhpbmsgdGhpcyBtaWdodCBiZSBtb3JlIGludGVyY29ubmVjdGVkIHRoYW4gSSBpbml0aWFsbHkgYW50aWNpcGF0ZWQuIFRoZXNlIGZsYWdzIG9mdGVuIGludm9sdmUgdGhlIG1lbW9yeSBub2RlIGFuZCBiaW5kaW5nIHBvbGljaWVzLCBhIGNyaXRpY2FsIGFyZWEgd2hlbiBkZWFsaW5nIHdpdGggSHVnZVRMQi4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGFsbG93ZWRfbWVtc19ucmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvd2VkX21lbXNfbnImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIyNDE9c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXG4tLVxubW0vaHVnZXRsYi5jLTIyNTctXG5tbS9odWdldGxiLmM6MjI1ODpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTIyNTkte1xuLS1cbm1tL2h1Z2V0bGIuYz0yMjc5PXN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtMjI5Ni1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoyMjk3Olx0bmVlZGVkID0gbWF4KChsb25nKSAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxubW0vaHVnZXRsYi5jLTIyOTgtXHRcdChsb25nKSAoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG4tLVxubW0vaHVnZXRsYi5jLTIzMzEtXHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MjMzMjpcdG5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxubW0vaHVnZXRsYi5jLTIzMzMtXHRcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC1cbi0tXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtNDY0OC1cbm1tL2h1Z2V0bGIuYzo0NjQ5Olx0XHRpZiAoZGVsdGEgXHUwMDNlIGFsbG93ZWRfbWVtc19ucihoKSkge1xubW0vaHVnZXRsYi5jLTQ2NTAtXHRcdFx0cmV0dXJuX3VudXNlZF9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBmaWVsZDoKCioqQ2hlY2tpbmcgZm9yIE5VTUEgUG9saWN5IEJpbmRpbmdzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWwgcmVsYXRlZCB0byBOVU1BIGFuZCBpdHMgbWVtb3J5IGJpbmRpbmcgY2FwYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHBvbGljeV9tYmluZF9ub2RlbWFza2AgaXMgYWN0dWFsbHkgZGVmaW5lZC4gVGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgbWFuYWdpbmcgbWVtb3J5IGFmZmluaXR5IGFuZCBwbGFjZW1lbnQgb24gc3lzdGVtcyB3aXRoIE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVmaW5pdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBzaWduaWZpY2FudGx5IGltcGFjdHMgaG93IEkgYXBwcm9hY2ggbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgcG90ZW50aWFsbHkgaG93IEkgY29uZmlndXJlIHRoZSBrZXJuZWwgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGVjayBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIGZ1cnRoZXIgYW5hbHlzaXMgb3IgaW1wbGVtZW50YXRpb24gb2YgTlVNQS1hd2FyZSBjb2RlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZG9pbmcgaXQgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BvbGljeV9tYmluZF9ub2RlbWFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MjIxOD1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxubW0vaHVnZXRsYi5jLTIyNDAtXG5tbS9odWdldGxiLmM6MjI0MTpzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbm1tL2h1Z2V0bGIuYy0yMjQyLXtcbi0tXG5tbS9odWdldGxiLmM9MjI1OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjY1LVxubW0vaHVnZXRsYi5jOjIyNjY6XHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XG5tbS9odWdldGxiLmMtMjI2Ny1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbi0tXG5tbS9odWdldGxiLmM9MjI3OT1zdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4tLVxubW0vaHVnZXRsYi5jLTIyODktXG5tbS9odWdldGxiLmM6MjI5MDpcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGh0bGJfYWxsb2NfbWFzayhoKSk7XG5tbS9odWdldGxiLmMtMjI5MS1cdGlmIChtYmluZF9ub2RlbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkNoZWNraW5nIGZvciBOVU1BIENvbmZpZ3VyYXRpb24gaW4gUG9saWN5IEJpbmRpbmdzKioKCkFscmlnaHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgdXNlIG9mIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBOVU1BLiBGaXJzdCwgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbCBvbiBOVU1BIGJlaW5nIGVuYWJsZWQuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBgI2lmZGVmIENPTkZJR19OVU1BYCBjb250cm9scyBpdHMgYXZhaWxhYmlsaXR5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgaXQmIzM5O3MgcHJvYmFibHkgZ3VhcmRlZCBieSB0aGF0IG1hY3JvLiBJZiBzbywgdGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGNvcmUgc3lzdGVtIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmZWF0dXJlLiBJZiBub3QsIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjMwOlx0XHRcdH1cbjIyMzE6XHRcdH1cbjIyMzI6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjIzMzpcdFxuMjIzNDpcdFx0LyogV2UgY2Fubm90IGZhbGxiYWNrIHRvIG90aGVyIG5vZGVzLCBhcyB3ZSBjb3VsZCBicmVhayB0aGUgcGVyLW5vZGUgcG9vbC4gKi9cbjIyMzU6XHRcdGlmICghYWxsb3dfYWxsb2NfZmFsbGJhY2spXG4yMjM2Olx0XHRcdGdmcF9tYXNrIHw9IF9fR0ZQX1RISVNOT0RFO1xuMjIzNzpcdFxuMjIzODpcdFx0cmV0dXJuIGFsbG9jX21pZ3JhdGVfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgcHJlZmVycmVkX25pZCwgbm1hc2spO1xuMjIzOTpcdH1cbjIyNDA6XHRcbjIyNDE6XHRzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbjIyNDI6XHR7XG4yMjQzOlx0I2lmZGVmIENPTkZJR19OVU1BXG4yMjQ0Olx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuMjI0NTpcdFxuMjI0NjpcdFx0LypcbjIyNDc6XHRcdCAqIE9ubHkgZW5mb3JjZSBNUE9MX0JJTkQgcG9saWN5IHdoaWNoIG92ZXJsYXBzIHdpdGggY3B1c2V0IHBvbGljeVxuMjI0ODpcdFx0ICogKGZyb20gcG9saWN5X25vZGVtYXNrKSBzcGVjaWZpY2FsbHkgZm9yIGh1Z2V0bGIgY2FzZVxuMjI0OTpcdFx0ICovXG4yMjUwOlx0XHRpZiAobXBvbC1cdTAwM2Vtb2RlID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjZcbjIyNTE6XHRcdFx0KGFwcGx5X3BvbGljeV96b25lKG1wb2wsIGdmcF96b25lKGdmcCkpIFx1MDAyNlx1MDAyNlxuMjI1MjpcdFx0XHQgY3B1c2V0X25vZGVtYXNrX3ZhbGlkX21lbXNfYWxsb3dlZChcdTAwMjZtcG9sLVx1MDAzZW5vZGVzKSkpXG4yMjUzOlx0XHRcdHJldHVybiBcdTAwMjZtcG9sLVx1MDAzZW5vZGVzO1xuMjI1NDpcdCNlbmRpZlxuMjI1NTpcdFx0cmV0dXJuIE5VTEw7XG4yMjU2Olx0fVxuMjI1NzpcdFxuMjI1ODpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4yMjU5Olx0e1xuMjI2MDpcdFx0aW50IG5vZGU7XG4yMjYxOlx0XHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xuMjI2MjpcdFx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XG4yMjYzOlx0XHR1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcbjIyNjQ6XHRcdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuMjI2NTpcdFxuMjI2NjpcdFx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xuMjI2NzpcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xuMjI2ODpcdFx0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbjIyNjk6XHRcdFx0XHRuciAmIzQzOz0gYXJyYXlbbm9kZV07XG4yMjcwOlx0XHR9XG4yMjcxOlx0XG4yMjcyOlx0XHRyZXR1cm4gbnI7XG4yMjczOlx0fVxuMjI3NDpcdFxuMjI3NTpcdC8qXG4yMjc2Olx0ICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cbjIyNzc6XHQgKiBvZiBzaXplICYjMzk7ZGVsdGEmIzM5Oy5cbjIyNzg6XHQgKi9cbjIyNzk6XHRzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODkyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBQb3RlbnRpYWwgSW1wYWN0cyBvZiBhIFBhdGNoKioKClJpZ2h0LCBgQ09ORklHX05VTUFgIGlzIGRlZmluaXRlbHkgd29ydGggY29uc2lkZXJpbmc7IGl0JiMzOTtzIHByYWN0aWNhbGx5IHNjcmVhbWluZyByZWxldmFuY2UgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gY2hhbmdlcyB3aXRoaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVhbCBpbXBhY3QgaGluZ2VzIG9uIGhvdyBgaHVnZXRsYl9hY2N0X21lbW9yeWAgYmVoYXZlcyBhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGluIHJlbGF0aW9uIHRvIE5VTUEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBOVU1BIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgaW5mbHVlbmNlcyB0aGUgYmVoYXZpb3Igb2YgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBhcmUgZ29pbmcgdG8gY2hhbmdlIHRoZSBhY2NvdW50aW5nIHByb2NlZHVyZSB1bmRlciBOVU1BIGFyY2hpdGVjdHVyZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZnVuY3Rpb24gYW5kIGl0cyBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FjY3RfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTQ5PUFmdGVyIGNvbnN1bHRpbmcgdGhlIHJlc2VydmF0aW9uIG1hcCBhbmQgc3VicG9vbCwgdGhlIG51bWJlciBvZiBuZWVkZWQgbmV3XG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MDpyZXNlcnZhdGlvbnMgaXMga25vd24uICBUaGUgcm91dGluZSBodWdldGxiX2FjY3RfbWVtb3J5KCkgaXMgY2FsbGVkIHRvIGNoZWNrXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MTpmb3IgYW5kIHRha2UgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcmVzZXJ2YXRpb25zLiAgaHVnZXRsYl9hY2N0X21lbW9yeSgpXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1Mi1jYWxscyBpbnRvIHJvdXRpbmVzIHRoYXQgcG90ZW50aWFsbHkgYWxsb2NhdGUgYW5kIGFkanVzdCBzdXJwbHVzIHBhZ2UgY291bnRzLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MzEwPXRoZSBtaW5faHBhZ2VzIGZpZWxkIG9mIGEgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wuICBBdCBtb3VudCB0aW1lLFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozMTE6aHVnZXRsYl9hY2N0X21lbW9yeShtaW5faHBhZ2VzKSBpcyBjYWxsZWQgdG8gcmVzZXJ2ZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0zMTItaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NTU4PWludG8gYWNjb3VudC4gIFdoaWxlIGNwdXNldHMgYXJlIG5vdCBleGFjdGx5IHRoZSBzYW1lIGFzIG1lbW9yeSBwb2xpY3ksIHRoaXNcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NTU5OmNvbW1lbnQgaW4gaHVnZXRsYl9hY2N0X21lbW9yeSBzdW1zIHVwIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHJlc2VydmF0aW9uc1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01NjAtYW5kIGNwdXNldHMvbWVtb3J5IHBvbGljeTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjY65Zyo5ZKo6K+i5LqG6aKE55WZ5pig5bCE5ZKM5a2Q5rGg5LmL5ZCO77yM5bCx55+l6YGT5LqG6ZyA6KaB55qE5paw6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp5Ye95pWw6KKr6LCD55So5Lul5qOA5p+lXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjc65bm26I635Y+W5omA6KaB5rGC55qE6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp6LCD55So5Yiw5Y+v6IO95YiG6YWN5ZKM6LCD5pW05Ymp5L2Z6aG15pWw55qE5Ye95pWw44CC54S26ICM77yM5Zyo6L+ZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMjgt5Lqb5Ye95pWw5Lit77yM5Luj56CB5Y+q5piv5qOA5p+l5Lul56Gu5L+d5pyJ6Laz5aSf55qE56m66Zey55qE5beo6aG15p2l5a6557qz6aKE55WZ44CC5aaC5p6c5pyJ55qE6K+d77yM5YWo5bGA6aKE55WZ6K6h5pWwcmVzdl9odWdlX3BhZ2VzXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjI2PXBhZ2UtXHUwMDNlcHJpdmF0ZeWtl+auteaMh+WQkeS4juivpemhteebuOWFs+eahOS7u+S9leWtkOaxoOOAguWmguaenFBhZ2VQcml2YXRl5qCH5b+X6KKr6K6+572u77yM5a6D6KGo5piO5YWo5bGA6aKE55WZ6K6h5pWwXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ0LeWmguaenOaMh+WumuS6hui/meS4qumAiemhue+8jOS4jm1pbl9zaXpl55u45a+55bqU55qE5beo6aG155qE5pWw6YeP5bCG6KKr6aKE55WZ57uZ5paH5Lu257O757uf5L2/55So44CC6L+Z5Liq5pWw5a2X5Zyo57uT5p6E5L2TXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDU6aHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWVtb3J5KG1pbl9ocGFnZXMpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNDYt6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MzMxPXJlZ2lvbl9jb3VudCgp5Zyo6Kej6Zmk56eB5pyJ5beo6aG15pig5bCE5pe26KKr6LCD55So44CC5Zyo56eB5pyJ5pig5bCE5Lit77yM6aKE55WZ5pig5bCE5Lit5rKh5pyJ5p2h55uu6KGo5piO5a2Y5Zyo5LiA5Liq6aKE55WZ44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDEwLeWcqOS4gOauteaXtumXtOWQjuWKoOWFpeeahOOAguW9k+mihOeVmeiiq+a3u+WKoOaXtu+8jOayoeacieWwneivleWwhuWGheWtmOetlueVpeiAg+iZkeWcqOWGheOAguiZveeEtmNwdXNldHPkuI7lhoXlrZjnrZbnlaXkuI1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjQxMTrlrozlhajnm7jlkIzvvIzkvYZodWdldGxiX2FjY3RfbWVtb3J55Lit55qE6L+Z5Liq5rOo6YeK5oC757uT5LqG6aKE55WZ5ZKMY3B1c2V0cy/lhoXlrZjnrZbnlaXkuYvpl7TnmoTnm7jkupLkvZxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMi3nlKg6OlxuLS1cbm1tL2h1Z2V0bGIuYz0xMTQ9c3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9odWdldGxiLmMtMTE2LS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi9cbm1tL2h1Z2V0bGIuYzoxMTc6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpO1xubW0vaHVnZXRsYi5jLTExOC1zdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzY9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNDUtXHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxubW0vaHVnZXRsYi5jOjE0NjpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KHNwb29sLVx1MDAzZWhzdGF0ZSxcbm1tL2h1Z2V0bGIuYy0xNDctXHRcdFx0XHRcdFx0LXNwb29sLVx1MDAzZW1pbl9ocGFnZXMpO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNTI9c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbi0tXG5tbS9odWdldGxiLmMtMTY2LVxubW0vaHVnZXRsYi5jOjE2NzpcdGlmIChtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7XG5tbS9odWdldGxiLmMtMTY4LVx0XHRrZnJlZShzcG9vbCk7XG4tLVxubW0vaHVnZXRsYi5jPTk1OD12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxubW0vaHVnZXRsYi5jLTk2Ny1cbm1tL2h1Z2V0bGIuYzo5Njg6XHRcdGlmICghaHVnZXRsYl9hY2N0X21lbW9yeShoLCAxKSlcbm1tL2h1Z2V0bGIuYy05NjktXHRcdFx0cmVzZXJ2ZWQgPSB0cnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0yODkxPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAxNi1cdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jOjMwMTc6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG5tbS9odWdldGxiLmMtMzAxOC1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jLTMwNTItXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jOjMwNTM6XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy0zMDU0LVx0fVxuLS1cbm1tL2h1Z2V0bGIuYz00NjA0PXVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy00NjEzLVxubW0vaHVnZXRsYi5jOjQ2MTQ6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtNDYxNS17XG4tLVxubW0vaHVnZXRsYi5jPTQ3MDQ9c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNDcyOC1cdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmM6NDcyOTpcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xubW0vaHVnZXRsYi5jLTQ3MzAtXHR9XG4tLVxubW0vaHVnZXRsYi5jPTY1NTY9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjY0NC1cdCAqL1xubW0vaHVnZXRsYi5jOjY2NDU6XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy02NjQ2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5tbS9odWdldGxiLmMtNjY2My1cdFx0aWYgKHVubGlrZWx5KGFkZCBcdTAwM2MgMCkpIHtcbm1tL2h1Z2V0bGIuYzo2NjY0Olx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy02NjY1LVx0XHRcdGVyciA9IGFkZDtcbi0tXG5tbS9odWdldGxiLmMtNjY4Ni1cdFx0XHRcdFx0XHRcdFx0Y2hnIC0gYWRkKTtcbm1tL2h1Z2V0bGIuYzo2Njg3Olx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xubW0vaHVnZXRsYi5jLTY2ODgtXHRcdH0gZWxzZSBpZiAoaF9jZykge1xuLS1cbm1tL2h1Z2V0bGIuYy02NzA4LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo2NzA5Olx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG5tbS9odWdldGxiLmMtNjcxMC1cdH1cbi0tXG5tbS9odWdldGxiLmM9NjczNz1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02NzcyLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XG5tbS9odWdldGxiLmM6Njc3MzpcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy02Nzc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUwNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5YCBUZXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5YCB0ZXN0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHJlc2lkZXMuICBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgaHVnZXRsYl9hY2N0X21lbW9yeWAgaXMgcHJldHR5IGZ1bmRhbWVudGFsLCBjYWxsZWQgZnJvbSBhbGwgb3ZlciB0aGUgcGxhY2Ug4oCTIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgaHVnZXRsYl91bnJlc2VydmVfcGFnZXNgLCBhbmQgZXZlbiBpbiBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiByb3V0aW5lcyBsaWtlIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfdm1fb3BfY2xvc2VgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBzcGVjaWZpYyB0ZXN0LgoKU2luY2UgdGhlIHRlc3QgbGV2ZXJhZ2VzIGBudW1hLmhgIGFuZCBsaW5rcyB3aXRoIGAtbG51bWFgLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBgQ09ORklHX05VTUFgIGlzIGVzc2VudGlhbDsgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gIEl0JiMzOTtzIGFsc28gaGlnaGx5IHByb2JhYmxlIHRoYXQgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBIdWdlVExCIHN1cHBvcnQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZSwgdGhvdWdoLgoKVG8gYmUgZXh0cmEgdGhvcm91Z2gsIEkmIzM5O2xsIGNvbnN1bHQgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZWAgZGlyZWN0bHkuIEkgY2FuIHVzdWFsbHkgZ2xlYW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZnJvbSB0aGVyZSwgd2hpY2ggaXMgb2Z0ZW4gbW9yZSBkZWZpbml0aXZlIHRoYW4ganVzdCBndWVzc2luZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIG5lZWRlZCBjb25maWdzIGZvciB0aGlzIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTA4PVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjEwOTpURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMTEwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlPTI2Mj0kKE9VVFBVVCkvcm1hcDogTERMSUJTICYjNDM7PSAtbG51bWFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTI2My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjI2NDokKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTI2NS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMtMi0vKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jOjM6ICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jLTQtICpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0yOTk9Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaDozMDA6Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTMwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzODIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAgVGVzdCBmb3IgUm9idXN0bmVzcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGVzdCwgYGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lgLCB3aGljaCBpcyBhbGwgYWJvdXQgaG93IGh1Z2V0bGIgc3VycGx1cyBwYWdlcyBhbmQgbWVtcG9saWNpZXMgcGxheSB0b2dldGhlci4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBhcmVhIHdpdGggdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcywgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCBpbiB0aGlzIGFyZWEuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dCBhbmQgcmVxdWlyZSBhIGNsb3NlciBsb29rIGFyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLCBgYWxsb3dlZF9tZW1zX25yYCwgYW5kIGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhlc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBiZWhhdmlvciByZXNpZGVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHRoZSBtZW1wb2xpY3kgYXNwZWN0cyBkdXJpbmcgc3VycGx1cyBwYWdlIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBwcm9wb3NlZCBjb25maWd1cmF0aW9ucyBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrLiBXZSBoYXZlIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBOVU1BYCBsaXN0ZWQuIEl0IG1ha2VzIHNlbnNlLCBhcyBhbGwgdGhvc2Ugc2V0dGluZ3MgaGF2ZSBhIGNsZWFyIHJlbGF0aW9uc2hpcCB0byB0aGUgdG9waWMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3IgYWNjaWRlbnRhbGx5IGVuYWJsaW5nIHNvbWV0aGluZyB0aGF0IHNob3VsZG4mIzM5O3QgYmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbmZzL0tjb25maWctMjgyLVxuZnMvS2NvbmZpZzoyODM6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xuZnMvS2NvbmZpZy0yODQtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjU1LVxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY1Ny1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEZWVwIERpdmUgaW50byBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBodWdlIHBhZ2VzIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGBIVUdFVExCRlNgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBgSFVHRVRMQl9QQUdFYCBvcHRpb24gZGVmYXVsdHMgdG8gYEhVR0VUTEJGU2AgaWYgbm90IGV4cGxpY2l0bHkgc2V0IG90aGVyd2lzZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBnZW5lcmFsIHNldHVwLiBJIG5lZWQgdG8gbWFrZSBzdXJlIE5VTUEgaXMgcHJvcGVybHkgZW5hYmxlZCBhcyB3ZWxsLgoKVG8gcmVhbGx5IGNlbWVudCBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYCBmdW5jdGlvbnMgd2l0aGluIGBtbS9odWdldGxiLmNgLiBUaGVzZSBhcmUga2V5IHdoZW4geW91JiMzOTtyZSBtYW5hZ2luZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZW5zdXJpbmcgdGhlIGFwcHJvcHJpYXRlIE5VTUEgbm9kZXMgYXJlIGNvbnNpZGVyZWQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VycGx1cyBwYWdlcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBjbGFyaWZ5IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGZpbmVyIHBvaW50cyBvZiBodWdlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgdXRpbGl6YXRpb24sIHBhcnRpY3VsYXJseSBpbiByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIGFyb3VuZCBtZW1vcnkgbm9kZSBjb25zdHJhaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2F0aGVyX3N1cnBsdXNfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtMjI3OC0gKi9cbm1tL2h1Z2V0bGIuYzoyMjc5OnN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbm1tL2h1Z2V0bGIuYy0yMjgwLVx0X19tdXN0X2hvbGQoXHUwMDI2aHVnZXRsYl9sb2NrKVxuLS1cbm1tL2h1Z2V0bGIuYz00NjE0PXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy00NjQ1LVx0aWYgKGRlbHRhIFx1MDAzZSAwKSB7XG5tbS9odWdldGxiLmM6NDY0NjpcdFx0aWYgKGdhdGhlcl9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKSBcdTAwM2MgMClcbm1tL2h1Z2V0bGIuYy00NjQ3LVx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAzOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggc3VycGx1cyBwYWdlcywgYW5kIGl0JiMzOTtzIGFkZGluZyBhIG5ldyB2YXJpYWJsZSwgYGFsbG93ZWRfbWVtc19ucmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGFueXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBhbGxvY2F0aW9uIGFuZCBhY2NvdW50aW5nIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKTXkgYEZvY3VzU3ltYm9sc2AgYXJlIG5vdyBzZXQ6IGBnYXRoZXJfc3VycGx1c19wYWdlc2AsIGBhbGxvd2VkX21lbXNfbnJgLCBhbmQgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseSB0byBnZXQgYSBncmFzcCBvbiB0aGUgaW50ZW50IGFuZCBpbXBhY3Qgb2YgdGhpcyBjb2RlLiBQbHVzIEkgbmVlZCB0byBlbmFibGUgc29tZSBjb25maWd1cmF0aW9ucywgYEhVR0VUTEJGU2AgYW5kIGBOVU1BYCwgZm9yIHRoZSBmdXp6aW5nLgoKTm93LCBsZXQgbWUgY29uZmlybSB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBzeW1ib2xzLiBHb29kLCBgYWxsb3dlZF9tZW1zX25yYCwgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgYW5kIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhcmUgYWxsIHN0YXRpYy4gVGhpcyBnaXZlcyBtZSBhIHNsaWdodGx5IGJldHRlciBoYW5kbGUgb24gdGhlaXIgc2NvcGUsIHJlc3RyaWN0aW5nIGV4dGVybmFsIG1vZGlmaWNhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBBaGEhIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQmIzM5O3MgdXNlZCBieSBgYWxsb3dlZF9tZW1zX25yYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGFkZGl0aW9uIHRvIHRoZSBzZXQgYW5kIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwb2xpY3lfbWJpbmRfbm9kZW1hc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIyMTg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMjQwLVxubW0vaHVnZXRsYi5jOjIyNDE6c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXG5tbS9odWdldGxiLmMtMjI0Mi17XG4tLVxubW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtMjI2NS1cbm1tL2h1Z2V0bGIuYzoyMjY2Olx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xubW0vaHVnZXRsYi5jLTIyNjctXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4tLVxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjg5LVxubW0vaHVnZXRsYi5jOjIyOTA6XHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhodGxiX2FsbG9jX21hc2soaCkpO1xubW0vaHVnZXRsYi5jLTIyOTEtXHRpZiAobWJpbmRfbm9kZW1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODY1CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgQ2hhbmdlIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBhZGRpdGlvbiB0byB0aGUgbGFuZHNjYXBlIG9mIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE5VTUEgc3lzdGVtcy4gSXQgYWx0ZXJzIHRoZSBjb3JlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgZnVuY3Rpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gYmUgdmVyeSBmb2N1c2VkIG9uIGl0LiBUaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyBjb25zaWRlcnMgdGhlIGBhbGxvd2VkX21lbXNfbnJgIHBhcmFtZXRlciB3aGVuIGRldGVybWluaW5nIGhvdyBtYW55IHN1cnBsdXMgcGFnZXMgYXJlIG5lZWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGJlaGF2aW9yYWwgbW9kaWZpY2F0aW9uIOKAkyBpbiBob3cgaHVnZSBwYWdlcyBhcmUgYm90aCByZXNlcnZlZCBhbmQgdWx0aW1hdGVseSBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRob3JvdWdoIGV4YW1pbmF0aW9uLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCB3aGljaCBleHBsaWNpdGx5IGludm9sdmVzIG1lbW9yeSBub2RlcyBhbmQgcG90ZW50aWFsbHkgcmVzdHJpY3RpdmUgTlVNQSBwb2xpY2llcywgSSB0aGluayBpdCYjMzk7cyBzcG90IG9uIHRvIGFkZCBgcG9saWN5X21iaW5kX25vZGVtYXNrYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AuIEl0IHdpbGwgYmUgYSBrZXkgZmFjdG9yIGluIHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBuZXcgbG9naWMuIFRoZSBwYXRjaCBpcyB0aWVkIHRvIGhvdyB0aGUgc3lzdGVtICphY2NvdW50cyogZm9yIHRoZXNlIHBhZ2VzIGFuZCAqZ2F0aGVycyogdGhlbSwgd2hpY2ggbWFrZXMgdGhlc2Uga2V5IGZvY3VzIGFyZWFzLCBhbmQgY2xlYXJseSwgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGlzIGFsc28gY3JpdGljYWwuIFRoZXNlIGFyZSBhbGwgY29yZSBzeW1ib2xzIHdlJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUuCgpXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBIVUdFVExCRlNgIGFuZCBgTlVNQWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBvZiBjb3Vyc2UuCgpUaGUgZnV6emluZyBzdHJhdGVneSwgdGhlcmVmb3JlLCBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuIEkmIzM5O20gaW1hZ2luaW5nIHNjZW5hcmlvcyB3aXRoIGRpdmVyc2UgTlVNQSBjb25maWd1cmF0aW9ucywgdmFyaWVkIG1lbW9yeSBwb2xpY2llcyAoaW5jbHVkaW5nIHRob3NlIGVtcGxveWluZyBgbWJpbmRgKSwgYW5kIGhpZ2ggbG9hZHMgdG8gc3RyZXNzLXRlc3QgdGhlIG5ldyBsb2dpYyB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucy4gVGhlIGZ1enppbmcgdGFyZ2V0IHNob3VsZCBpbmNsdWRlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIGNoYW5nZXMgZWZmZWN0aXZlbHkuIEFsc28sIEkgd2lsbCBuZWVkIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgdGhlIHJlc3VsdHMgb2YgZWFjaCBmdXp6IHJ1biBlZmZlY3RpdmVseSwgbGV0JiMzOTtzIGNhbGwgdGhhdCBgc2V0LXJlc3VsdHNgLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBpcyBzZXQgdXAgdG8gcmVjb3JkIHJlc3VsdHMgdGhhdCBhcmUgdW5kZXJzdGFuZGFibGUgYW5kIGVhc2lseSBldmFsdWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7LAogICAgJiMzNDtodWdldGxiX2FjY3RfbWVtb3J5JiMzNDssCiAgICAmIzM0O3BvbGljeV9tYmluZF9ub2RlbWFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGFsbG93ZWQgbWVtb3J5IG5vZGVzIChgYWxsb3dlZF9tZW1zX25yYCkgd2hlbiBjYWxjdWxhdGluZyB0aGUgbmVlZGVkIHN1cnBsdXMgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIHJlc2VydmVkIGFuZCBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIHByZXNlbmNlIG9mIE5VTUEgbWVtb3J5IHBvbGljaWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgc3VycGx1cyBwYWdlIGdhdGhlcmluZyBhbmQgYWNjb3VudGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYXRoZXJfc3VycGx1c19wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvd2VkX21lbXNfbnImIzM0OywKICAgICYjMzQ7aHVnZXRsYl9hY2N0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtwb2xpY3lfbWJpbmRfbm9kZW1hc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyAoYGFsbG93ZWRfbWVtc19ucmApIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5lZWRlZCBzdXJwbHVzIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSByZXNlcnZlZCBhbmQgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IGluIHRoZSBwcmVzZW5jZSBvZiBOVU1BIG1lbW9yeSBwb2xpY2llcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNToyMi43ODI5NzU0MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk3NTAwMDU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiLFxuICAgIFwiYWxsb3dlZF9tZW1zX25yXCIsXG4gICAgXCJodWdldGxiX2FjY3RfbWVtb3J5XCIsXG4gICAgXCJwb2xpY3lfbWJpbmRfbm9kZW1hc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGFsbG93ZWQgbWVtb3J5IG5vZGVzIChgYWxsb3dlZF9tZW1zX25yYCkgd2hlbiBjYWxjdWxhdGluZyB0aGUgbmVlZGVkIHN1cnBsdXMgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIHJlc2VydmVkIGFuZCBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIHByZXNlbmNlIG9mIE5VTUEgbWVtb3J5IHBvbGljaWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgc3VycGx1cyBwYWdlIGdhdGhlcmluZyBhbmQgYWNjb3VudGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MjIuNzgyOTgyMzQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM0MDY0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MDIxY2VjODZjY2ExZDExMWEyMTA0ZmUzODFkNzBhYjQ4MzAwN2VmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDE5OjE1OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IGYyNGJmNDliZTA0N2UzLi5iZDk3ZjBmNDM0MTVlNyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMjI1NSw2ICsyMjU1LDIzIEBAIHN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX3QgZ2ZwKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4re1xcbitcXHRpbnQgbm9kZTtcXG4rXFx0dW5zaWduZWQgaW50IG5yID0gMDtcXG4rXFx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XFxuK1xcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcXG4rXFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuK1xcbitcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxuK1xcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcXG4rXFx0XFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXFxuK1xcdFxcdFxcdG5yICs9IGFycmF5W25vZGVdO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuK31cXG4rXFxuIC8qXFxuICAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uXFxuICAqIG9mIHNpemUgJ2RlbHRhJy5cXG5AQCAtMjI3Nyw3ICsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbiBcXHRcXHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdG5lZWRlZCA9IChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXM7XFxuK1xcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcXG4rXFx0XFx0KGxvbmcpICgoaC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC0gaC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XFxuIFxcdGlmIChuZWVkZWQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKz0gZGVsdGE7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0yMzExLDggKzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuIFxcdCAqIGJlY2F1c2UgZWl0aGVyIHJlc3ZfaHVnZV9wYWdlcyBvciBmcmVlX2h1Z2VfcGFnZXMgbWF5IGhhdmUgY2hhbmdlZC5cXG4gXFx0ICovXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdG5lZWRlZCA9IChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxcbi1cXHRcXHRcXHQoaC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKTtcXG4rXFx0bmVlZGVkID0gbWF4KChsb25nKSAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXFxuK1xcdFxcdFxcdChsb25nKSAoKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXFxuK1xcdFxcdFxcdFxcdChoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpKSk7XFxuIFxcdGlmIChuZWVkZWQgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdGlmIChhbGxvY19vaylcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG5AQCAtNDUxMywyMyArNDUzMiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXAoY2hhciAqcylcXG4gfVxcbiBfX3NldHVwKFxcXCJodWdlcGFnZV9hbGxvY190aHJlYWRzPVxcXCIsIGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXApO1xcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4te1xcbi1cXHRpbnQgbm9kZTtcXG4tXFx0dW5zaWduZWQgaW50IG5yID0gMDtcXG4tXFx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XFxuLVxcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcXG4tXFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuLVxcbi1cXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxuLVxcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcXG4tXFx0XFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXFxuLVxcdFxcdFxcdG5yICs9IGFycmF5W25vZGVdO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gbnI7XFxuLX1cXG4tXFxuIHZvaWQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIHtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGNkMjQ1OTZjZGQyN2VkLi40MGRlMDkzOGYzOTM3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTEwNiw2ICsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyArPSBndWFyZC1yZWdpb25zXFxuIFRFU1RfR0VOX0ZJTEVTICs9IG1lcmdlXFxuIFRFU1RfR0VOX0ZJTEVTICs9IHJtYXBcXG4gVEVTVF9HRU5fRklMRVMgKz0gZm9saW9fc3BsaXRfcmFjZV90ZXN0XFxuK1RFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcXG4gXFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxcbiBURVNUX0dFTl9GSUxFUyArPSBzb2Z0LWRpcnR5XFxuQEAgLTI2MCw2ICsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgKz0gLWxudW1hXFxuIFxcbiAkKE9VVFBVVCkvcm1hcDogTERMSUJTICs9IC1sbnVtYVxcbiBcXG4rJChPVVRQVVQpL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3k6IExETElCUyArPSAtbG51bWFcXG4rXFxuIGxvY2FsX2NvbmZpZy5tayBsb2NhbF9jb25maWcuaDogY2hlY2tfY29uZmlnLnNoXFxuIFxcdENDPVxcXCIkKENDKVxcXCIgQ0ZMQUdTPVxcXCIkKENGTEFHUylcXFwiIC4vY2hlY2tfY29uZmlnLnNoXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wYTc3YjAxNjkzNTE4OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcXG5AQCAtMCwwICsxLDQ3MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XFxuKyAqXFxuKyAqIFJlc2VydmluZyBzdXJwbHVzIGh1Z2VwYWdlcyB3aXRoaW4gbWVtcG9saWNpZXMgaXMgcXVpdGUgdHJpY2t5IGR1ZSB0b1xcbisgKiB0aGUgdHJhbnNpZW50IG5hdHVyZSBvZiBjcHVzZXRzIGFuZCBtZW1wb2xpY2llcy4gQXMgc3VjaCwgdGhlc2UgdGVzdHNcXG4rICogZG8gbm90IGNvdmVyIGFsbCBlZGdlIGNhc2VzLCBidXQgcmF0aGVyIGZvY3VzIG9uIHdoYXQgdGhlIGtlcm5lbCBjYW5cXG4rICogY3VycmVudGx5IGRvIHRvIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZXMgaW4gdGhlIHByZXNlbmNlIG9mIGNwdXNldHNcXG4rICogYW5kIG1lbXBvbGljaWVzIHRvIGhlbHAgY2hlY2sgZm9yIHJlZ3Jlc3Npb25zIGluIHRoaXMgYmVoYXZpb3IuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY251bWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbitcXG4rI2RlZmluZSBIUFNJWkVfQllURVMgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpXFxuKyNkZWZpbmUgSFBTSVpFX0tCIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSBcXHUwMDNlXFx1MDAzZSAxMFxcbisjZGVmaW5lIEdMT0JBTF9TWVNfSFBfUEFUSCBcXFwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1xcXCJcXG4rI2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFxcXCIvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSV1L2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcXFwiXFxuK1xcbitzdHJ1Y3QgYml0bWFzayAqKm5vZGVtYXNrcztcXG4raW50ICpub2RlaWRzO1xcbitcXG4rcHRocmVhZF90ICp0aHJlYWRzO1xcbitzdHJ1Y3QgdGhyZWFkX2FyZ3Mge1xcbitcXHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XFxuK1xcdGludCB0b19yZXNlcnZlO1xcbit9O1xcbitzdHJ1Y3QgdGhyZWFkX2FyZ3MqIHBlcl90aHJlYWRfYXJncztcXG4rcHRocmVhZF9jb25kX3QgY29uZCA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjtcXG4rcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcXG4raW50IHdha2VfY29uZCA9IDA7XFxuK1xcbitjaGFyICpucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpnX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKmdfbnJfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKmdfcmVzdl9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpuMF9mcmVlX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpuMF9ucl9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjBfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjFfZnJlZV9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjFfbnJfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XFxuK1xcbit1bnNpZ25lZCBsb25nIGdfZnJlZV9odWdlcGFnZXMsIGdfbnJfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIGdfcmVzdl9odWdlcGFnZXMsIGdfc3VycGx1c19odWdlcGFnZXM7XFxuK3Vuc2lnbmVkIGxvbmcgbjBfZnJlZV9odWdlcGFnZXMsIG4wX25yX2h1Z2VwYWdlcywgbjBfc3VycGx1c19odWdlcGFnZXM7XFxuK3Vuc2lnbmVkIGxvbmcgaW50IG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIGludCBvcmlnX24wX25yX2h1Z2VwYWdlcywgb3JpZ19uMV9ucl9odWdlcGFnZXM7XFxuK3Vuc2lnbmVkIGxvbmcgaW50IG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXM7XFxuK1xcbitcXG4rLyogc2V0dXBfcGF0aHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBzdHJpbmdzIGZvciB0aGUgdmFyaW91cyBodWdldGxiIHBhZ2Ugc3lzZnNcXG4rICogcGF0aHMuIFRoZSBzdHJpbmdzIGFyZSB1c2VkIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHN5c2ZzIGZpbGVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfcGF0aHModm9pZCkge1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCxcXG4rXFx0XFx0XFx0XFxcIi9wcm9jL3N5cy92bS9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZnX25yX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19yZXN2X2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcInJlc3ZfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwic3VycGx1c19odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMF9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJzdXJwbHVzX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwiZnJlZV9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4xX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcInN1cnBsdXNfaHVnZXBhZ2VzXFxcIik7XFxuK31cXG4rXFxuKy8qIGdldF9odWdlcGFnZV9zdGF0c1xcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2ltcGx5IGdyYWIgYSBidW5jaCBvZiB0aGUgaHVnZXRsYiBwYWdlIG1ldHJpY3MgaW4gc3lzZnNcXG4rICovXFxuK3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7XFxuK1xcdHJlYWRfc3lzZnMoZ19mcmVlX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2Z19mcmVlX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNmdfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjBfZnJlZV9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjBfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZuMV9mcmVlX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZuMV9ucl9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7XFxuK31cXG4rXFxuKy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlnc1xcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaHVnZXBhZ2UgY29uZmlncyBzbyB0aGlzXFxuKyAqIHRlc3Qgc3VpdGUgZG9lc24ndCBjbG9iYmVyIGNvbmZpZ3MgbmVlZGVkIGZvciBvdGhlciB0ZXN0cy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNhdmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKSB7XFxuK1xcdHJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZvcmlnX24wX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZvcmlnX24xX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xcbit9XFxuK1xcbisvKiByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3NcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGh1Z2VwYWdlIGNvbmZpZ3MgYmVmb3JlIHRoaXMgdGVzdFxcbisgKiB3YXMgcmFuLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmVzdG9yZV9odWdlcGFnZV9jb25maWdzKHZvaWQpIHtcXG4rXFx0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjFfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgb3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyk7XFxuK31cXG4rXFxuKy8qIHJlc2V0X2h1Z2VwYWdlc1xcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXQgc3RhdGljIGh1Z2V0bGIgcGFnZSByZXNlcnZhdGlvbnMgdG8gMC5cXG4rICogVXNlZCB0byBnZXQgYmFjayB0byBhIGNsZWFyIHN0YXRlIGJldHdlZW4gdGVzdHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByZXNldF9odWdlcGFnZXModm9pZCkge1xcbitcXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAwKTtcXG4rXFx0d3JpdGVfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgMCk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcXG4rXFx0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xcbit9XFxuK1xcbisvKiBjYW5fcnVuXFxuKyAqXFxuKyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpIHtcXG4rICAgICAgICBpZiAoZ2V0ZXVpZCgpICE9IDApXFxuKyAgICAgICAgICAgICAgICBrc2Z0X2V4aXRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGUgdGVzdCBhcyByb290LlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobnVtYV9hdmFpbGFibGUoKSA9PSAtMSlcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk51bWEgaXMgdW5hdmFpbGFibGUuXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChudW1hX251bV9jb25maWd1cmVkX25vZGVzKCkgXFx1MDAzYyAyKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTm90IGVub3VnaCBub2RlcyB0byB0ZXN0LlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobnVtYV9udW1fdGFza19ub2RlcygpIFxcdTAwM2MgMilcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkN1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXFxcblxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBjbGVhbnVwKGNoYXIqIGVycl9tc2cpIHtcXG4rXFx0ZnJlZShwZXJfdGhyZWFkX2FyZ3MpO1xcbitcXHRmcmVlKHRocmVhZHMpO1xcbitcXHRmcmVlKG5vZGVpZHMpO1xcbitcXHRmcmVlKG5vZGVtYXNrcyk7XFxuK1xcdGZyZWUobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUoZ19mcmVlX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShnX25yX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUobjBfZnJlZV9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUobjBfbnJfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4xX25yX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0aWYgKGVycl9tc2cpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhlcnJfbXNnKTtcXG4rfVxcbitcXG4rLyogc2V0dXBfbm9kZV9pbmZvXFxuKyAqXFxuKyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZVxcbisgKiByZXNlcnZhdGlvbnMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZCkge1xcbitcXHRpbnQgaTtcXG4rXFx0aW50IGl0aF9ub2RlbWFzayA9IDA7XFxuK1xcbitcXHRub2RlaWRzID0gY2FsbG9jKDIsIHNpemVvZihpbnQpKTtcXG4rXFx0bm9kZW1hc2tzID0gY2FsbG9jKDIsIHNpemVvZihzdHJ1Y3QgYml0bWFzayAqKSk7XFxuK1xcbitcXHRpZiAoIW5vZGVtYXNrcyB8fCAhbm9kZWlkcylcXG4rXFx0XFx0Y2xlYW51cChcXFwic2V0dXBfbm9kZV9pbmZvOiBjYWxsb2MuXFxcIik7XFxuK1xcbitcXHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcXG4rXFx0ICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dFxcbitcXHQgKiBub2RlIGF2YWlsYWJsZSB0byB1cy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7XFxuK1xcdFxcdFxcdG5vZGVpZHNbaXRoX25vZGVtYXNrXSA9IGk7XFxuK1xcdFxcdFxcdG5vZGVtYXNrc1tpdGhfbm9kZW1hc2srK10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KFxcbitcXHRcXHRcXHRcXHRcXHRudW1hX2FsbG9jYXRlX25vZGVtYXNrKCksIGkpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSlcXG4rXFx0XFx0Y2xlYW51cChcXFwiRmFpbGVkIHRvIGNyZWF0ZSBub2RlbWFza3MuXFxcIik7XFxuK31cXG4rXFxuKy8qIHNldHVwX3RocmVhZHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKSB7XFxuK1xcdHBlcl90aHJlYWRfYXJncyA9IGNhbGxvYygyLCBzaXplb2YocGVyX3RocmVhZF9hcmdzKSk7XFxuK1xcdGlmICghcGVyX3RocmVhZF9hcmdzKVxcbitcXHRcXHRjbGVhbnVwKFxcXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXFxcIik7XFxuK1xcbitcXHR0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTtcXG4rXFx0aWYgKCF0aHJlYWRzKSB7XFxuK1xcdFxcdGNsZWFudXAoXFxcImNhbGxvYyB0aHJlYWRzLlxcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIHJlc2VydmVfaHVnZXBhZ2VcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2VydmUgYSBodWdldGxiIHBhZ2VcXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nKiByZXNlcnZlX2h1Z2VwYWdlKHZvaWQpIHtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nICopIG1tYXAoTlVMTCwgSFBTSVpFX0JZVEVTLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiwgLTEsIDApO1xcbit9XFxuK1xcbisvKiB0aHJlYWRfd29ya1xcbisgKlxcbisgKiBUZXN0IHJ1bm5lcnMuIFBlcmZvcm1zIHRoZSB3b3JrIG9mIHJlc2VydmluZyBhbmQgZnJlZWluZyBodWdldGxiIHBhZ2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgKnRocmVhZF93b3JrKHZvaWQgKmFyZykge1xcbitcXHRzdHJ1Y3QgdGhyZWFkX2FyZ3MqIHRfYXJncyA9IChzdHJ1Y3QgdGhyZWFkX2FyZ3MqKSBhcmc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aHVnZXBhZ2VzID0gKHVuc2lnbmVkIGxvbmcgKiopIGNhbGxvYyh0X2FyZ3MtXFx1MDAzZXRvX3Jlc2VydmUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7XFxuK1xcbitcXHQvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqL1xcbitcXHRpZiAodF9hcmdzLVxcdTAwM2VteV9ub2RlbWFzaylcXG4rXFx0XFx0bnVtYV9iaW5kKHRfYXJncy1cXHUwMDNlbXlfbm9kZW1hc2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcXG4rXFx0XFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xcbitcXHRcXHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcXG4rXFx0XFx0ICogZmFsbCB0aHJvdWdoIHJhdGhlciB0aGFuIGVycm9yIG91dCovXFxuK1xcdFxcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRcXHR0X2FyZ3MtXFx1MDAzZXRvX3Jlc2VydmUgPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBHbyB0byBzbGVlcCB1bnRpbCBtYWluIHRocmVhZCB3YWtlcyB1cyB1cCAqL1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNm11dGV4KTtcXG4rXFx0d2hpbGUoIXdha2VfY29uZCkge1xcbitcXHRcXHRwdGhyZWFkX2NvbmRfd2FpdChcXHUwMDI2Y29uZCwgXFx1MDAyNm11dGV4KTtcXG4rXFx0fVxcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2bXV0ZXgpO1xcbitcXG4rXFx0LyogVHJ5IHRvIGZyZWUgdGhvc2UgaHVnZXRsYiBwYWdlcyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcXG4rXFx0XFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X3BlcnJvcihcXFwibXVubWFwKCkgZmFpbGVkISBDaGVjayBmb3IgbGVha2VkIGh1Z2V0bGIgcGFnZXMhXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXHRmcmVlKGh1Z2VwYWdlcyk7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKiB3YWtlX2NoaWxkcmVuXFxuKyAqXFxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byB3YWtlIGNoaWxkcmVuIHRocmVhZHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpIHtcXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuK1xcdHdha2VfY29uZCA9IDE7XFxuK1xcdHB0aHJlYWRfY29uZF9icm9hZGNhc3QoXFx1MDAyNmNvbmQpO1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2bXV0ZXgpO1xcbit9XFxuK1xcbisvKiB0ZXN0MVxcbisgKlxcbisgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIGFueXdoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDEodm9pZCkge1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdCgoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAoKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCkgfHxcXG4rXFx0XFx0XFx0IChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSxcXG4rXFx0XFx0XFx0IFxcXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK31cXG4rXFxuKy8qIHRlc3QyXFxuKyAqXFxuKyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2Ugd2l0aFxcbisgKiBhIG1lbXBvbGljeS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3QyKHZvaWQpIHtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK1xcbitcXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLFxcbitcXHRcXHRcXHQgXFxcIlJlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHdha2VfY2hpbGRyZW4oKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rfVxcbitcXG4rLyogdGVzdDNcXG4rICpcXG4rICogU2V0IGEgc3RhdGljIGh1Z2VwYWdlIGFuZCByZXNlcnZlIG9mZiBub2RlXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0Myh2b2lkKSB7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAwO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XFxuK1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rXFxuK1xcdGdldF9odWdlcGFnZV9zdGF0cygpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXFxuK1xcdFxcdFxcdCBcXFwiU2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHdha2VfY2hpbGRyZW4oKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7XFxuK1xcdHdha2VfY29uZCA9IDA7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbit9XFxuK1xcbisvKiB0ZXN0NFxcbisgKlxcbisgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0NCh2b2lkKSB7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XFxuK1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rXFxuK1xcdGdldF9odWdlcGFnZV9zdGF0cygpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXFxuK1xcdFxcdFxcdCBcXFwiUmVzZXJ2ZSAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rfVxcbitcXG4rLyogdGVzdDVcXG4rICpcXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMSBhbmRcXG4rICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0NSh2b2lkKSB7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMjtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XFxuK1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rXFxuK1xcdGdldF9odWdlcGFnZV9zdGF0cygpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXFxuK1xcdFxcdFxcdCBcXFwiSW50ZW50aW9uYWxseSBvdmVyYWxsb2NhdGUgYW5kIGZhaWwgZHVlIHRvIG5yX292ZXJjb21taXRfaHVnZXBhZ2VzIGxpbWl0LlxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK31cXG4rXFxuK2ludCBtYWluKHZvaWQpIHtcXG4rXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0a3NmdF9zZXRfcGxhbig1KTtcXG4rXFxuK1xcdGNoZWNrX3JlcXVpcmVtZW50cygpO1xcbitcXHRzZXR1cF90aHJlYWRzKCk7XFxuK1xcdHNldHVwX25vZGVfaW5mbygpO1xcbitcXHRzZXR1cF9wYXRocygpO1xcbitcXHRzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcXG4rXFxuK1xcdHRlc3QxKCk7XFxuK1xcdHRlc3QyKCk7XFxuK1xcdHRlc3QzKCk7XFxuK1xcdHRlc3Q0KCk7XFxuK1xcdHRlc3Q1KCk7XFxuK1xcbitcXHRyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcXG4rXFx0a3NmdF9maW5pc2hlZCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0yOTcsNiArMjk3LDcgQEAgQ0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXBhZ2UtbXJlbWFwXFxuIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLXZtZW1tYXBcXG4gQ0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYi1tYWR2aXNlXFxuIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvXFxuK0NBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcXG4gXFxuIGlmIFsgXFxcIiR7SEFWRV9IVUdFUEFHRVN9XFxcIiA9IFxcXCIxXFxcIiBdOyB0aGVuXFxuIFxcdG5yX2h1Z2VwYWdlc190bXA9JChjYXQgL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MjMuNjU3NTI2NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTAwNDM1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIixcbiAgICBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIixcbiAgICBcInBvbGljeV9tYmluZF9ub2RlbWFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwMjFjZWM4NmNjYTFkMTExYTIxMDRmZTM4MWQ3MGFiNDgzMDA3ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxOToxNToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmJkOTdmMGY0MzQxNWU3IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0yMjU1LDYgKzIyNTUsMjMgQEAgc3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbit7XG4rXHRpbnQgbm9kZTtcbitcdHVuc2lnbmVkIGludCBuciA9IDA7XG4rXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcbitcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xuK1x0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4rXG4rXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XG4rXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4rXHRcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxuK1x0XHRcdG5yICs9IGFycmF5W25vZGVdO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuK31cbitcbiAvKlxuICAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uXG4gICogb2Ygc2l6ZSAnZGVsdGEnLlxuQEAgLTIyNzcsNyArMjI5NCw4IEBAIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbiBcdFx0YWxsb2Nfbm9kZW1hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRuZWVkZWQgPSAoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbitcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbitcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xuIFx0aWYgKG5lZWRlZCBcdTAwM2M9IDApIHtcbiBcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKz0gZGVsdGE7XG4gXHRcdHJldHVybiAwO1xuQEAgLTIzMTEsOCArMjMyOSw5IEBAIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbiBcdCAqIGJlY2F1c2UgZWl0aGVyIHJlc3ZfaHVnZV9wYWdlcyBvciBmcmVlX2h1Z2VfcGFnZXMgbWF5IGhhdmUgY2hhbmdlZC5cbiBcdCAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0bmVlZGVkID0gKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbi1cdFx0XHQoaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpO1xuK1x0bmVlZGVkID0gbWF4KChsb25nKSAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXG4rXHRcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxuK1x0XHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKSkpO1xuIFx0aWYgKG5lZWRlZCBcdTAwM2UgMCkge1xuIFx0XHRpZiAoYWxsb2Nfb2spXG4gXHRcdFx0Z290byByZXRyeTtcbkBAIC00NTEzLDIzICs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxuIH1cbiBfX3NldHVwKFwiaHVnZXBhZ2VfYWxsb2NfdGhyZWFkcz1cIiwgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cCk7XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi17XG4tXHRpbnQgbm9kZTtcbi1cdHVuc2lnbmVkIGludCBuciA9IDA7XG4tXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcbi1cdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4tXG4tXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XG4tXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4tXHRcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxuLVx0XHRcdG5yICs9IGFycmF5W25vZGVdO1xuLVx0fVxuLVxuLVx0cmV0dXJuIG5yO1xuLX1cbi1cbiB2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA2LDYgKzEwNiw3IEBAIFRFU1RfR0VOX0ZJTEVTICs9IGd1YXJkLXJlZ2lvbnNcbiBURVNUX0dFTl9GSUxFUyArPSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICs9IHJtYXBcbiBURVNUX0dFTl9GSUxFUyArPSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbitURVNUX0dFTl9GSUxFUyArPSBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XG4gXG4gaWZuZXEgKCQoQVJDSCksYXJtNjQpXG4gVEVTVF9HRU5fRklMRVMgKz0gc29mdC1kaXJ0eVxuQEAgLTI2MCw2ICsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgKz0gLWxudW1hXG4gXG4gJChPVVRQVVQpL3JtYXA6IExETElCUyArPSAtbG51bWFcbiBcbiskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICs9IC1sbnVtYVxuK1xuIGxvY2FsX2NvbmZpZy5tayBsb2NhbF9jb25maWcuaDogY2hlY2tfY29uZmlnLnNoXG4gXHRDQz1cIiQoQ0MpXCIgQ0ZMQUdTPVwiJChDRkxBR1MpXCIgLi9jaGVja19jb25maWcuc2hcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE3N2IwMTY5MzUxODlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xuQEAgLTAsMCArMSw0NzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuKyAqXG4rICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXG4rICogdGhlIHRyYW5zaWVudCBuYXR1cmUgb2YgY3B1c2V0cyBhbmQgbWVtcG9saWNpZXMuIEFzIHN1Y2gsIHRoZXNlIHRlc3RzXG4rICogZG8gbm90IGNvdmVyIGFsbCBlZGdlIGNhc2VzLCBidXQgcmF0aGVyIGZvY3VzIG9uIHdoYXQgdGhlIGtlcm5lbCBjYW5cbisgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xuKyAqIGFuZCBtZW1wb2xpY2llcyB0byBoZWxwIGNoZWNrIGZvciByZWdyZXNzaW9ucyBpbiB0aGlzIGJlaGF2aW9yLlxuKyAqL1xuK1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4rXG4rI2RlZmluZSBIUFNJWkVfQllURVMgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpXG4rI2RlZmluZSBIUFNJWkVfS0IgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpIFx1MDAzZVx1MDAzZSAxMFxuKyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wiXG4rI2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUldS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzXCJcbitcbitzdHJ1Y3QgYml0bWFzayAqKm5vZGVtYXNrcztcbitpbnQgKm5vZGVpZHM7XG4rXG4rcHRocmVhZF90ICp0aHJlYWRzO1xuK3N0cnVjdCB0aHJlYWRfYXJncyB7XG4rXHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XG4rXHRpbnQgdG9fcmVzZXJ2ZTtcbit9O1xuK3N0cnVjdCB0aHJlYWRfYXJncyogcGVyX3RocmVhZF9hcmdzO1xuK3B0aHJlYWRfY29uZF90IGNvbmQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7XG4rcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbitpbnQgd2FrZV9jb25kID0gMDtcbitcbitjaGFyICpucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfcmVzdl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9ucl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfbnJfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbitcbit1bnNpZ25lZCBsb25nIGdfZnJlZV9odWdlcGFnZXMsIGdfbnJfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgZ19yZXN2X2h1Z2VwYWdlcywgZ19zdXJwbHVzX2h1Z2VwYWdlcztcbit1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgaW50IG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgaW50IG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcbit1bnNpZ25lZCBsb25nIGludCBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xuK1xuK1xuKy8qIHNldHVwX3BhdGhzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN0cmluZ3MgZm9yIHRoZSB2YXJpb3VzIGh1Z2V0bGIgcGFnZSBzeXNmc1xuKyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXR1cF9wYXRocyh2b2lkKSB7XG4rXHRhc3ByaW50ZihcdTAwMjZucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLFxuK1x0XHRcdFwiL3Byb2Mvc3lzL3ZtL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4rXHRcdFx0SFBTSVpFX0tCLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2Z19ucl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuK1x0XHRcdEhQU0laRV9LQiwgXCJucl9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbitcdFx0XHRIUFNJWkVfS0IsIFwicmVzdl9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbitcdFx0XHRIUFNJWkVfS0IsIFwic3VycGx1c19odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuK1x0XHRcdEhQU0laRV9LQiwgXCJmcmVlX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4wX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuK1x0XHRcdEhQU0laRV9LQiwgXCJucl9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuK1x0XHRcdEhQU0laRV9LQiwgXCJzdXJwbHVzX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjFfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcInN1cnBsdXNfaHVnZXBhZ2VzXCIpO1xuK31cbitcbisvKiBnZXRfaHVnZXBhZ2Vfc3RhdHNcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmc1xuKyAqL1xuK3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7XG4rXHRyZWFkX3N5c2ZzKGdfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19mcmVlX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfbnJfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfZnJlZV9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfbnJfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9mcmVlX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7XG4rfVxuK1xuKy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlnc1xuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpc1xuKyAqIHRlc3Qgc3VpdGUgZG9lc24ndCBjbG9iYmVyIGNvbmZpZ3MgbmVlZGVkIGZvciBvdGhlciB0ZXN0cy5cbisgKi9cbitzdGF0aWMgdm9pZCBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkge1xuK1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMF9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbit9XG4rXG4rLyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0XG4rICogd2FzIHJhbi5cbisgKi9cbitzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkge1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcbitcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7XG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbit9XG4rXG4rLyogcmVzZXRfaHVnZXBhZ2VzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXQgc3RhdGljIGh1Z2V0bGIgcGFnZSByZXNlcnZhdGlvbnMgdG8gMC5cbisgKiBVc2VkIHRvIGdldCBiYWNrIHRvIGEgY2xlYXIgc3RhdGUgYmV0d2VlbiB0ZXN0cy5cbisgKi9cbitzdGF0aWMgdm9pZCByZXNldF9odWdlcGFnZXModm9pZCkge1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7XG4rXHR3cml0ZV9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbitcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbitcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbit9XG4rXG4rLyogY2FuX3J1blxuKyAqXG4rICogRG9lcyBzYW5pdHkgY2hlY2tpbmcgZmlyc3QgdG8gbWFrZSBzdXJlIHRoZSB0ZXN0cyBjYW4gZXZlbiBydW4uXG4rICovXG4rc3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpIHtcbisgICAgICAgIGlmIChnZXRldWlkKCkgIT0gMClcbisgICAgICAgICAgICAgICAga3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoZSB0ZXN0IGFzIHJvb3QuXFxuXCIpO1xuK1xuK1x0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiTnVtYSBpcyB1bmF2YWlsYWJsZS5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIk5vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fdGFza19ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIkN1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXG5cIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNsZWFudXAoY2hhciogZXJyX21zZykge1xuK1x0ZnJlZShwZXJfdGhyZWFkX2FyZ3MpO1xuK1x0ZnJlZSh0aHJlYWRzKTtcbitcdGZyZWUobm9kZWlkcyk7XG4rXHRmcmVlKG5vZGVtYXNrcyk7XG4rXHRmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX25yX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjBfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0aWYgKGVycl9tc2cpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhlcnJfbXNnKTtcbit9XG4rXG4rLyogc2V0dXBfbm9kZV9pbmZvXG4rICpcbisgKiBDcmVhdGVzIHRoZSBiaXRtYXNrcyB1c2VkIHRvIGlzb2xhdGUgdGVzdCBydW5uZXJzIGFuZCB0aGVpciBodWdldGxiIHBhZ2VcbisgKiByZXNlcnZhdGlvbnMuXG4rICovXG4rc3RhdGljIHZvaWQgc2V0dXBfbm9kZV9pbmZvKHZvaWQpIHtcbitcdGludCBpO1xuK1x0aW50IGl0aF9ub2RlbWFzayA9IDA7XG4rXG4rXHRub2RlaWRzID0gY2FsbG9jKDIsIHNpemVvZihpbnQpKTtcbitcdG5vZGVtYXNrcyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IGJpdG1hc2sgKikpO1xuK1xuK1x0aWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpXG4rXHRcdGNsZWFudXAoXCJzZXR1cF9ub2RlX2luZm86IGNhbGxvYy5cIik7XG4rXG4rXHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcbitcdCAqIGluZGV4IG9mIHRoZSBmaXJzdCBub2RlIGF2YWlsYWJsZSB0byB1cywgYW5kIHRoZSBzZWNvbmQgb2YgdGhlIG5leHRcbitcdCAqIG5vZGUgYXZhaWxhYmxlIHRvIHVzLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtYV9udW1fdGFza19ub2RlcygpOyBpKyspIHtcbitcdFx0aWYgKG51bWFfYml0bWFza19pc2JpdHNldChudW1hX2dldF9tZW1zX2FsbG93ZWQoKSwgaSkpIHtcbitcdFx0XHRub2RlaWRzW2l0aF9ub2RlbWFza10gPSBpO1xuK1x0XHRcdG5vZGVtYXNrc1tpdGhfbm9kZW1hc2srK10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KFxuK1x0XHRcdFx0XHRudW1hX2FsbG9jYXRlX25vZGVtYXNrKCksIGkpO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoaXRoX25vZGVtYXNrICE9IDIgfHwgIW5vZGVtYXNrc1swXSB8fCAhbm9kZW1hc2tzWzFdKVxuK1x0XHRjbGVhbnVwKFwiRmFpbGVkIHRvIGNyZWF0ZSBub2RlbWFza3MuXCIpO1xuK31cbitcbisvKiBzZXR1cF90aHJlYWRzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0dXAgc3BhY2UgZm9yIHRocmVhZHMuXG4rICovXG4rc3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKSB7XG4rXHRwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHBlcl90aHJlYWRfYXJncykpO1xuK1x0aWYgKCFwZXJfdGhyZWFkX2FyZ3MpXG4rXHRcdGNsZWFudXAoXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXCIpO1xuK1xuK1x0dGhyZWFkcyA9IGNhbGxvYygyLCBzaXplb2YocHRocmVhZF90KSk7XG4rXHRpZiAoIXRocmVhZHMpIHtcbitcdFx0Y2xlYW51cChcImNhbGxvYyB0aHJlYWRzLlwiKTtcbitcdH1cbit9XG4rXG4rLyogcmVzZXJ2ZV9odWdlcGFnZVxuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2VydmUgYSBodWdldGxiIHBhZ2VcbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyogcmVzZXJ2ZV9odWdlcGFnZSh2b2lkKSB7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4rfVxuK1xuKy8qIHRocmVhZF93b3JrXG4rICpcbisgKiBUZXN0IHJ1bm5lcnMuIFBlcmZvcm1zIHRoZSB3b3JrIG9mIHJlc2VydmluZyBhbmQgZnJlZWluZyBodWdldGxiIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkICp0aHJlYWRfd29yayh2b2lkICphcmcpIHtcbitcdHN0cnVjdCB0aHJlYWRfYXJncyogdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyopIGFyZztcbitcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XG4rXHRpbnQgaTtcbitcbitcdGh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLVx1MDAzZXRvX3Jlc2VydmUsXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcgKiopKTtcbitcbitcdC8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovXG4rXHRpZiAodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKVxuK1x0XHRudW1hX2JpbmQodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xuK1x0XHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcbitcdFx0ICogZmFsbCB0aHJvdWdoIHJhdGhlciB0aGFuIGVycm9yIG91dCovXG4rXHRcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRcdHRfYXJncy1cdTAwM2V0b19yZXNlcnZlID0gaTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4rXHR3aGlsZSghd2FrZV9jb25kKSB7XG4rXHRcdHB0aHJlYWRfY29uZF93YWl0KFx1MDAyNmNvbmQsIFx1MDAyNm11dGV4KTtcbitcdH1cbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbitcbitcdC8qIFRyeSB0byBmcmVlIHRob3NlIGh1Z2V0bGIgcGFnZXMgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9wZXJyb3IoXCJtdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcXG5cIik7XG4rXHR9XG4rXHRmcmVlKGh1Z2VwYWdlcyk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyogd2FrZV9jaGlsZHJlblxuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHdha2UgY2hpbGRyZW4gdGhyZWFkcy5cbisgKi9cbitzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpIHtcbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4rXHR3YWtlX2NvbmQgPSAxO1xuK1x0cHRocmVhZF9jb25kX2Jyb2FkY2FzdChcdTAwMjZjb25kKTtcbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbit9XG4rXG4rLyogdGVzdDFcbisgKlxuKyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2UgYW55d2hlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdDEodm9pZCkge1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rXG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IE5VTEw7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgKChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8XG4rXHRcdFx0IChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDJcbisgKlxuKyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2Ugd2l0aFxuKyAqIGEgbWVtcG9saWN5LlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3QyKHZvaWQpIHtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMFxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDNcbisgKlxuKyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpIHtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDA7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xuK1xuK1x0dXNsZWVwKDUwMDAwMCk7XG4rXG4rXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbitcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxuK1x0XHRcdCBcIlNldCAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDRcbisgKlxuKyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTFcbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0NCh2b2lkKSB7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbitcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAxO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK31cbitcbisvKiB0ZXN0NVxuKyAqXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMSBhbmRcbisgKiBmYWlsIHRvIG92ZXIgYWxsb2NhdGUgYW5vdGhlci5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0NSh2b2lkKSB7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbitcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbitcdFx0XHQgXCJJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK31cbitcbitpbnQgbWFpbih2b2lkKSB7XG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0a3NmdF9zZXRfcGxhbig1KTtcbitcbitcdGNoZWNrX3JlcXVpcmVtZW50cygpO1xuK1x0c2V0dXBfdGhyZWFkcygpO1xuK1x0c2V0dXBfbm9kZV9pbmZvKCk7XG4rXHRzZXR1cF9wYXRocygpO1xuK1x0c2F2ZV9odWdlcGFnZV9jb25maWdzKCk7XG4rXG4rXHR0ZXN0MSgpO1xuK1x0dGVzdDIoKTtcbitcdHRlc3QzKCk7XG4rXHR0ZXN0NCgpO1xuK1x0dGVzdDUoKTtcbitcbitcdHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncygpO1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiArMjk3LDcgQEAgQ0FURUdPUlk9XCJodWdldGxiXCIgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLXZtZW1tYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbitDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwiJHtIQVZFX0hVR0VQQUdFU31cIiA9IFwiMVwiIF07IHRoZW5cbiBcdG5yX2h1Z2VwYWdlc190bXA9JChjYXQgL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE1OjIzLjY1NzUyOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyMTU1NTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgU3VycGx1cyBQYWdlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGZ1bmN0aW9uLCBhbmQgaW5jbHVkZXMgYSBuZXcgc2VsZnRlc3QsIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluY29ycG9yYXRpbmcgYGFsbG93ZWRfbWVtc19ucihoKWAgaW50byB0aGUgY2FsY3VsYXRpb24gb2YgbmVlZGVkIGh1Z2UgcGFnZXMuIFRoZXkndmUgbW92ZWQgaXRzIGRlZmluaXRpb24gaGlnaGVyIHVwIGluIHRoZSBmaWxlLCBhbmQgYXJlIG5vdyB1c2luZyBpdCB3aXRoaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYC5cblxuTGV0J3Mgc2VlLCB0aGUgY2hhbmdlcyBpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGl0c2VsZiBtb2RpZnkgdGhlIGNhbGN1bGF0aW9uOlxuXG5gYGBjXG4tXHRuZWVkZWQgPSAoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbitcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbitcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xuYGBgXG5hbmRcbmBgYGNcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXG4tXHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKTtcbitcdG5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxuK1x0XHRcdChsb25nKSAoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbitcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyArIGFsbG9jYXRlZCkpKTtcbmBgYFxuXG5SaWdodCwgc28gdGhpcyBsb2dpYyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGhvdyB0aGUga2VybmVsIG1hbmFnZXMgc3VycGx1cyBodWdlIHBhZ2VzLCBhbmQgKmNydWNpYWxseSosIGl0J3Mgbm93IGNvbnNpZGVyaW5nIHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyAoTlVNQSkuIEdpdmVuIHRoZSBmdW5jdGlvbmFsIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSBhbmQgdGhlIGludm9sdmVtZW50IG9mIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1wb2xpY2llcywgaW4gcGFydGljdWxhciwgbG9va3MgbGlrZSBhIGdvb2QgYXJlYSB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIHRoaXMgdG8gZXZlbiAqYmUqIGFjdGl2ZS4gT2J2aW91c2x5LCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgdGhlIHByaW1hcnkgb25lLCBzaW5jZSB0aGlzIGlzIGFsbCBhYm91dCBIdWdlVExCIHBhZ2VzLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseS4uLiBZZXAsIHRoYXQncyB0aGUgYmFzZSByZXF1aXJlbWVudC4gR29vZCB0byBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MzAuNjc5MDg3MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3ODIzMTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjI1OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIyNzgtICovXFxubW0vaHVnZXRsYi5jOjIyNzk6c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbm1tL2h1Z2V0bGIuYy0yMjgwLVxcdF9fbXVzdF9ob2xkKFxcdTAwMjZodWdldGxiX2xvY2spXFxuLS1cXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NjQ1LVxcdGlmIChkZWx0YSBcXHUwMDNlIDApIHtcXG5tbS9odWdldGxiLmM6NDY0NjpcXHRcXHRpZiAoZ2F0aGVyX3N1cnBsdXNfcGFnZXMoaCwgZGVsdGEpIFxcdTAwM2MgMClcXG5tbS9odWdldGxiLmMtNDY0Ny1cXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MzMuNDU3Mzc3ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY5Nzg2NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJhY3Rpb24gb2YgSHVnZVRMQiBBY2NvdW50aW5nIGFuZCBQYWdlIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRoYXQncyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbWlnaHQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yIHdpdGhpbiB0aGUgYG1tL2h1Z2V0bGIuY2AgY29udGV4dC4gR2l2ZW4gdGhhdCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGxpa2VseSBoYW5kbGVzIHRoZSByZXRyaWV2YWwgb2YgcGFnZXMsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZGVhbHMgd2l0aCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLCBJJ20gZXhwZWN0aW5nIHRvIGRlbHZlIGludG8gdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIGluY29uc2lzdGVuY2llcy4gSeKAmWxsIG5lZWQgdG8gZXhwbG9yZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoaWNoIHBhZ2VzIGFyZSBjb25zaWRlcmVkIFwic3VycGx1cyxcIiB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQsIGFuZCBob3cgdGhlIGFjY291bnRpbmcgaW50ZXJhY3RzIHdpdGggcGFnZSByZWNsYW1hdGlvbiBvciBhbGxvY2F0aW9uLiBUaGUgY29uZmlndXJhdGlvbnMgd2l0aGluIGBtbS9odWdldGxiLmNgIGFyZSB3aGVyZSB0aGUga25vYnMgYXJlIGxpa2VseSB0byBiZTsgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIHJlbGF0ZWQgdG8gcGFnZSBzaXplLCBtZW1vcnkgbGltaXRzLCBhbmQgcGVyaGFwcyBwb2xpY2llcyBmb3IgcGFnZSByZXRpcmVtZW50IG9yIHN3YXBwaW5nIHRoYXQgaW1wYWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlci4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE1OjQ0LjE1NTI0NDYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mzk1MTc0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYlxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6NDcuMDk0NzY4MjE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NjA1NzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICoqQW5hbHl6aW5nIFBvc3NpYmxlIERlcGVuZGVuY2llcyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKiouXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYENPTkZJR19IVUdFVExCRlNgIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGludGVycGxheSB3aXRoIG90aGVyIHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgYENPTkZJR19OVU1BYCBjYXRjaGVzIG15IGV5ZS4gVGhlIG1lbnRpb25zIG9mIGBhbGxvd2VkX21lbXNfbnJgIGFuZCBgcG9saWN5X21iaW5kX25vZGVtYXNrYCB3aXRoaW4gdGhlIE5VTUEgY29udGV4dCBhcmUgbWFraW5nIG1lIHRoaW5rIHRoaXMgbWlnaHQgYmUgbW9yZSBpbnRlcmNvbm5lY3RlZCB0aGFuIEkgaW5pdGlhbGx5IGFudGljaXBhdGVkLiBUaGVzZSBmbGFncyBvZnRlbiBpbnZvbHZlIHRoZSBtZW1vcnkgbm9kZSBhbmQgYmluZGluZyBwb2xpY2llcywgYSBjcml0aWNhbCBhcmVhIHdoZW4gZGVhbGluZyB3aXRoIEh1Z2VUTEIuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGFsbG93ZWRfbWVtc19ucmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNTo1MC40NDA4MzAxODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzYxNTA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvd2VkX21lbXNfbnJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNDE9c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuLS1cXG5tbS9odWdldGxiLmMtMjI1Ny1cXG5tbS9odWdldGxiLmM6MjI1ODpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0yMjU5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMjc5PXN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjk2LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjIyOTc6XFx0bmVlZGVkID0gbWF4KChsb25nKSAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxcbm1tL2h1Z2V0bGIuYy0yMjk4LVxcdFxcdChsb25nKSAoKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIzMzEtXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MjMzMjpcXHRuZWVkZWQgPSBtYXgoKGxvbmcpICgoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpIC0gYWxsb2NhdGVkKSxcXG5tbS9odWdldGxiLmMtMjMzMy1cXHRcXHRcXHQobG9uZykgKChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0OC1cXG5tbS9odWdldGxiLmM6NDY0OTpcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBhbGxvd2VkX21lbXNfbnIoaCkpIHtcXG5tbS9odWdldGxiLmMtNDY1MC1cXHRcXHRcXHRyZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoaCwgZGVsdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNTo1Mi45NjQ0NTAzMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE5ODU1OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOlxuXG4qKkNoZWNraW5nIGZvciBOVU1BIFBvbGljeSBCaW5kaW5ncyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbCByZWxhdGVkIHRvIE5VTUEgYW5kIGl0cyBtZW1vcnkgYmluZGluZyBjYXBhYmlsaXRpZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgcG9saWN5X21iaW5kX25vZGVtYXNrYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBtYW5hZ2luZyBtZW1vcnkgYWZmaW5pdHkgYW5kIHBsYWNlbWVudCBvbiBzeXN0ZW1zIHdpdGggTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcyBhcmNoaXRlY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBkZWZpbml0aW9uLCBvciBsYWNrIHRoZXJlb2YsIHNpZ25pZmljYW50bHkgaW1wYWN0cyBob3cgSSBhcHByb2FjaCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCBwb3RlbnRpYWxseSBob3cgSSBjb25maWd1cmUgdGhlIGtlcm5lbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgY2hlY2sgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBmdXJ0aGVyIGFuYWx5c2lzIG9yIGltcGxlbWVudGF0aW9uIG9mIE5VTUEtYXdhcmUgY29kZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGRvaW5nIGl0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE1OjU3LjM4NDMwODc2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2ODk3Nzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb2xpY3lfbWJpbmRfbm9kZW1hc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyMTg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIyNDAtXFxubW0vaHVnZXRsYi5jOjIyNDE6c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxubW0vaHVnZXRsYi5jLTIyNDIte1xcbi0tXFxubW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjY1LVxcbm1tL2h1Z2V0bGIuYzoyMjY2OlxcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG5tbS9odWdldGxiLmMtMjI2Ny1cXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MjI3OT1zdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtMjI4OS1cXG5tbS9odWdldGxiLmM6MjI5MDpcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhodGxiX2FsbG9jX21hc2soaCkpO1xcbm1tL2h1Z2V0bGIuYy0yMjkxLVxcdGlmIChtYmluZF9ub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6NTkuNzUzMjk4NzM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTU5NjQyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGZvciBOVU1BIENvbmZpZ3VyYXRpb24gaW4gUG9saWN5IEJpbmRpbmdzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSB1c2Ugb2YgYHBvbGljeV9tYmluZF9ub2RlbWFza2AgYW5kIGhvdyBpdCByZWxhdGVzIHRvIE5VTUEuIEZpcnN0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb21waWxhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIE5VTUEgYmVpbmcgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGAjaWZkZWYgQ09ORklHX05VTUFgIGNvbnRyb2xzIGl0cyBhdmFpbGFiaWxpdHkuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IGl0J3MgcHJvYmFibHkgZ3VhcmRlZCBieSB0aGF0IG1hY3JvLiBJZiBzbywgdGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGNvcmUgc3lzdGVtIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmZWF0dXJlLiBJZiBub3QsIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MDMuODA5MjY1NjE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzMDpcXHRcXHRcXHR9XFxuMjIzMTpcXHRcXHR9XFxuMjIzMjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjIzMzpcXHRcXG4yMjM0OlxcdFxcdC8qIFdlIGNhbm5vdCBmYWxsYmFjayB0byBvdGhlciBub2RlcywgYXMgd2UgY291bGQgYnJlYWsgdGhlIHBlci1ub2RlIHBvb2wuICovXFxuMjIzNTpcXHRcXHRpZiAoIWFsbG93X2FsbG9jX2ZhbGxiYWNrKVxcbjIyMzY6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfVEhJU05PREU7XFxuMjIzNzpcXHRcXG4yMjM4OlxcdFxcdHJldHVybiBhbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsIG5tYXNrKTtcXG4yMjM5OlxcdH1cXG4yMjQwOlxcdFxcbjIyNDE6XFx0c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuMjI0MjpcXHR7XFxuMjI0MzpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG4yMjQ0OlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuMjI0NTpcXHRcXG4yMjQ2OlxcdFxcdC8qXFxuMjI0NzpcXHRcXHQgKiBPbmx5IGVuZm9yY2UgTVBPTF9CSU5EIHBvbGljeSB3aGljaCBvdmVybGFwcyB3aXRoIGNwdXNldCBwb2xpY3lcXG4yMjQ4OlxcdFxcdCAqIChmcm9tIHBvbGljeV9ub2RlbWFzaykgc3BlY2lmaWNhbGx5IGZvciBodWdldGxiIGNhc2VcXG4yMjQ5OlxcdFxcdCAqL1xcbjIyNTA6XFx0XFx0aWYgKG1wb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9CSU5EIFxcdTAwMjZcXHUwMDI2XFxuMjI1MTpcXHRcXHRcXHQoYXBwbHlfcG9saWN5X3pvbmUobXBvbCwgZ2ZwX3pvbmUoZ2ZwKSkgXFx1MDAyNlxcdTAwMjZcXG4yMjUyOlxcdFxcdFxcdCBjcHVzZXRfbm9kZW1hc2tfdmFsaWRfbWVtc19hbGxvd2VkKFxcdTAwMjZtcG9sLVxcdTAwM2Vub2RlcykpKVxcbjIyNTM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZtcG9sLVxcdTAwM2Vub2RlcztcXG4yMjU0OlxcdCNlbmRpZlxcbjIyNTU6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjI1NjpcXHR9XFxuMjI1NzpcXHRcXG4yMjU4OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXFxuMjI1OTpcXHR7XFxuMjI2MDpcXHRcXHRpbnQgbm9kZTtcXG4yMjYxOlxcdFxcdHVuc2lnbmVkIGludCBuciA9IDA7XFxuMjI2MjpcXHRcXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcXG4yMjYzOlxcdFxcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcXG4yMjY0OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjIyNjU6XFx0XFxuMjI2NjpcXHRcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxuMjI2NzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XFxuMjI2ODpcXHRcXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG4yMjY5OlxcdFxcdFxcdFxcdG5yICs9IGFycmF5W25vZGVdO1xcbjIyNzA6XFx0XFx0fVxcbjIyNzE6XFx0XFxuMjI3MjpcXHRcXHRyZXR1cm4gbnI7XFxuMjI3MzpcXHR9XFxuMjI3NDpcXHRcXG4yMjc1OlxcdC8qXFxuMjI3NjpcXHQgKiBJbmNyZWFzZSB0aGUgaHVnZXRsYiBwb29sIHN1Y2ggdGhhdCBpdCBjYW4gYWNjb21tb2RhdGUgYSByZXNlcnZhdGlvblxcbjIyNzc6XFx0ICogb2Ygc2l6ZSAnZGVsdGEnLlxcbjIyNzg6XFx0ICovXFxuMjI3OTpcXHRzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjAzLjgwOTY3NDY5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg3OTc5MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbXBhY3RzIG9mIGEgUGF0Y2gqKlxuXG5SaWdodCwgYENPTkZJR19OVU1BYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nOyBpdCdzIHByYWN0aWNhbGx5IHNjcmVhbWluZyByZWxldmFuY2UgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gY2hhbmdlcyB3aXRoaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRoYXQncyB0aGUga2V5LiBMZXQncyBzZWUuLi4gdGhlIHJlYWwgaW1wYWN0IGhpbmdlcyBvbiBob3cgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGJlaGF2ZXMgYW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byBOVU1BLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgTlVNQSBjb25maWd1cmF0aW9uIGRpcmVjdGx5IGluZmx1ZW5jZXMgdGhlIGJlaGF2aW9yIG9mIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhbmQgaG93IHRoZSBtb2RpZmljYXRpb25zIGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYXJlIGdvaW5nIHRvIGNoYW5nZSB0aGUgYWNjb3VudGluZyBwcm9jZWR1cmUgdW5kZXIgTlVNQSBhcmNoaXRlY3R1cmVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZnVuY3Rpb24gYW5kIGl0cyBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MDcuMjk3NjU2MDEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0NjM4MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNDk9QWZ0ZXIgY29uc3VsdGluZyB0aGUgcmVzZXJ2YXRpb24gbWFwIGFuZCBzdWJwb29sLCB0aGUgbnVtYmVyIG9mIG5lZWRlZCBuZXdcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MDpyZXNlcnZhdGlvbnMgaXMga25vd24uICBUaGUgcm91dGluZSBodWdldGxiX2FjY3RfbWVtb3J5KCkgaXMgY2FsbGVkIHRvIGNoZWNrXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTE6Zm9yIGFuZCB0YWtlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHJlc2VydmF0aW9ucy4gIGh1Z2V0bGJfYWNjdF9tZW1vcnkoKVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUyLWNhbGxzIGludG8gcm91dGluZXMgdGhhdCBwb3RlbnRpYWxseSBhbGxvY2F0ZSBhbmQgYWRqdXN0IHN1cnBsdXMgcGFnZSBjb3VudHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMxMD10aGUgbWluX2hwYWdlcyBmaWVsZCBvZiBhIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sLiAgQXQgbW91bnQgdGltZSxcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjMxMTpodWdldGxiX2FjY3RfbWVtb3J5KG1pbl9ocGFnZXMpIGlzIGNhbGxlZCB0byByZXNlcnZlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0zMTItaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01NTg9aW50byBhY2NvdW50LiAgV2hpbGUgY3B1c2V0cyBhcmUgbm90IGV4YWN0bHkgdGhlIHNhbWUgYXMgbWVtb3J5IHBvbGljeSwgdGhpc1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NTU5OmNvbW1lbnQgaW4gaHVnZXRsYl9hY2N0X21lbW9yeSBzdW1zIHVwIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHJlc2VydmF0aW9uc1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTYwLWFuZCBjcHVzZXRzL21lbW9yeSBwb2xpY3k6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEyNS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjY65Zyo5ZKo6K+i5LqG6aKE55WZ5pig5bCE5ZKM5a2Q5rGg5LmL5ZCO77yM5bCx55+l6YGT5LqG6ZyA6KaB55qE5paw6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp5Ye95pWw6KKr6LCD55So5Lul5qOA5p+lXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTI3OuW5tuiOt+WPluaJgOimgeaxgueahOmihOeVmeaVsOmHj+OAgmh1Z2V0bGJfYWNjdF9tZW1vcnkoKeiwg+eUqOWIsOWPr+iDveWIhumFjeWSjOiwg+aVtOWJqeS9memhteaVsOeahOWHveaVsOOAgueEtuiAjO+8jOWcqOi/mVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEyOC3kupvlh73mlbDkuK3vvIzku6PnoIHlj6rmmK/mo4Dmn6Xku6Xnoa7kv53mnInotrPlpJ/nmoTnqbrpl7LnmoTlt6jpobXmnaXlrrnnurPpooTnlZnjgILlpoLmnpzmnInnmoTor53vvIzlhajlsYDpooTnlZnorqHmlbByZXN2X2h1Z2VfcGFnZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTIyNj1wYWdlLVxcdTAwM2Vwcml2YXRl5a2X5q615oyH5ZCR5LiO6K+l6aG155u45YWz55qE5Lu75L2V5a2Q5rGg44CC5aaC5p6cUGFnZVByaXZhdGXmoIflv5fooqvorr7nva7vvIzlroPooajmmI7lhajlsYDpooTnlZnorqHmlbBcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0NC3lpoLmnpzmjIflrprkuobov5nkuKrpgInpobnvvIzkuI5taW5fc2l6ZeebuOWvueW6lOeahOW3qOmhteeahOaVsOmHj+Wwhuiiq+mihOeVmee7meaWh+S7tuezu+e7n+S9v+eUqOOAgui/meS4quaVsOWtl+WcqOe7k+aehOS9k1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjI0NTpodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZW1vcnkobWluX2hwYWdlcylcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNDYt6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0zMzE9cmVnaW9uX2NvdW50KCnlnKjop6PpmaTnp4HmnInlt6jpobXmmKDlsITml7booqvosIPnlKjjgILlnKjnp4HmnInmmKDlsITkuK3vvIzpooTnlZnmmKDlsITkuK3msqHmnInmnaHnm67ooajmmI7lrZjlnKjkuIDkuKrpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMC3lnKjkuIDmrrXml7bpl7TlkI7liqDlhaXnmoTjgILlvZPpooTnlZnooqvmt7vliqDml7bvvIzmsqHmnInlsJ3or5XlsIblhoXlrZjnrZbnlaXogIPomZHlnKjlhoXjgILomb3nhLZjcHVzZXRz5LiO5YaF5a2Y562W55Wl5LiNXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NDExOuWujOWFqOebuOWQjO+8jOS9hmh1Z2V0bGJfYWNjdF9tZW1vcnnkuK3nmoTov5nkuKrms6jph4rmgLvnu5PkuobpooTnlZnlkoxjcHVzZXRzL+WGheWtmOetlueVpeS5i+mXtOeahOebuOS6kuS9nFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMi3nlKg6Olxcbi0tXFxubW0vaHVnZXRsYi5jPTExND1zdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vaHVnZXRsYi5jLTExNi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovXFxubW0vaHVnZXRsYi5jOjExNzpzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7XFxubW0vaHVnZXRsYi5jLTExOC1zdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzNj1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMTQ1LVxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcXG5tbS9odWdldGxiLmM6MTQ2OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXFx1MDAzZWhzdGF0ZSxcXG5tbS9odWdldGxiLmMtMTQ3LVxcdFxcdFxcdFxcdFxcdFxcdC1zcG9vbC1cXHUwMDNlbWluX2hwYWdlcyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTUyPXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXFxuLS1cXG5tbS9odWdldGxiLmMtMTY2LVxcbm1tL2h1Z2V0bGIuYzoxNjc6XFx0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xcbm1tL2h1Z2V0bGIuYy0xNjgtXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTk1OD12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5tbS9odWdldGxiLmMtOTY3LVxcbm1tL2h1Z2V0bGIuYzo5Njg6XFx0XFx0aWYgKCFodWdldGxiX2FjY3RfbWVtb3J5KGgsIDEpKVxcbm1tL2h1Z2V0bGIuYy05NjktXFx0XFx0XFx0cmVzZXJ2ZWQgPSB0cnVlO1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4OTE9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMwMTYtXFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmM6MzAxNzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG5tbS9odWdldGxiLmMtMzAxOC1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jLTMwNTItXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jOjMwNTM6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYy0zMDU0LVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYz00NjA0PXVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ2MTMtXFxubW0vaHVnZXRsYi5jOjQ2MTQ6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxubW0vaHVnZXRsYi5jLTQ2MTUte1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ3MDQ9c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NzI4LVxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHJlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYzo0NzI5OlxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNDczMC1cXHR9XFxuLS1cXG5tbS9odWdldGxiLmM9NjU1Nj1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY2NDQtXFx0ICovXFxubW0vaHVnZXRsYi5jOjY2NDU6XFx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTY2NDYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5tbS9odWdldGxiLmMtNjY2My1cXHRcXHRpZiAodW5saWtlbHkoYWRkIFxcdTAwM2MgMCkpIHtcXG5tbS9odWdldGxiLmM6NjY2NDpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTY2NjUtXFx0XFx0XFx0ZXJyID0gYWRkO1xcbi0tXFxubW0vaHVnZXRsYi5jLTY2ODYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG5tbS9odWdldGxiLmM6NjY4NzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG5tbS9odWdldGxiLmMtNjY4OC1cXHRcXHR9IGVsc2UgaWYgKGhfY2cpIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzA4LVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2NzA5OlxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcXG5tbS9odWdldGxiLmMtNjcxMC1cXHR9XFxuLS1cXG5tbS9odWdldGxiLmM9NjczNz1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3NzItXFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XFxubW0vaHVnZXRsYi5jOjY3NzM6XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYy02Nzc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNjowOS45NDIzMDM5NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMjQ3MjYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5YCBUZXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAgdGVzdC4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzLiAgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgY2FsbGVkIGZyb20gYWxsIG92ZXIgdGhlIHBsYWNlIOKAkyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYCwgYW5kIGV2ZW4gaW4gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMgbGlrZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX3ZtX29wX2Nsb3NlYC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0J3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHNwZWNpZmljIHRlc3QuXG5cblNpbmNlIHRoZSB0ZXN0IGxldmVyYWdlcyBgbnVtYS5oYCBhbmQgbGlua3Mgd2l0aCBgLWxudW1hYCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBgQ09ORklHX05VTUFgIGlzIGVzc2VudGlhbDsgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gIEl0J3MgYWxzbyBoaWdobHkgcHJvYmFibGUgdGhhdCBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIEh1Z2VUTEIgc3VwcG9ydCBpbiB0aGUgZmlyc3QgcGxhY2UuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UsIHRob3VnaC5cblxuVG8gYmUgZXh0cmEgdGhvcm91Z2gsIEknbGwgY29uc3VsdCB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlYCBkaXJlY3RseS4gSSBjYW4gdXN1YWxseSBnbGVhbiBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmcm9tIHRoZXJlLCB3aGljaCBpcyBvZnRlbiBtb3JlIGRlZmluaXRpdmUgdGhhbiBqdXN0IGd1ZXNzaW5nLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgbmVlZGVkIGNvbmZpZ3MgZm9yIHRoaXMgdGVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MTUuOTY0NzgwMjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU0NDgxOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTA4PVRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjEwOTpURVNUX0dFTl9GSUxFUyArPSBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMTEwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MjYyPSQoT1VUUFVUKS9ybWFwOiBMRExJQlMgKz0gLWxudW1hXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMjYzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjI2NDokKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICs9IC1sbnVtYVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTI2NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYy0yLS8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jOjM6ICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYy00LSAqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0yOTk9Q0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaDozMDA6Q0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTMwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MTguNjE5MjY3NTg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQ3OTcxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAgVGVzdCBmb3IgUm9idXN0bmVzcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB0ZXN0LCBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAsIHdoaWNoIGlzIGFsbCBhYm91dCBob3cgaHVnZXRsYiBzdXJwbHVzIHBhZ2VzIGFuZCBtZW1wb2xpY2llcyBwbGF5IHRvZ2V0aGVyLiBUaGF0J3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYXJlYSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgYW5kIGVkZ2UgY2FzZXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgaW4gdGhpcyBhcmVhLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dCBhbmQgcmVxdWlyZSBhIGNsb3NlciBsb29rIGFyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLCBgYWxsb3dlZF9tZW1zX25yYCwgYW5kIGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhlc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBiZWhhdmlvciByZXNpZGVzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhleSBoYW5kbGUgdGhlIG1lbXBvbGljeSBhc3BlY3RzIGR1cmluZyBzdXJwbHVzIHBhZ2UgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBwcm9wb3NlZCBjb25maWd1cmF0aW9ucyBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrLiBXZSBoYXZlIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBOVU1BYCBsaXN0ZWQuIEl0IG1ha2VzIHNlbnNlLCBhcyBhbGwgdGhvc2Ugc2V0dGluZ3MgaGF2ZSBhIGNsZWFyIHJlbGF0aW9uc2hpcCB0byB0aGUgdG9waWMsIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYSBjcml0aWNhbCBkZXBlbmRlbmN5IG9yIGFjY2lkZW50YWxseSBlbmFibGluZyBzb21ldGhpbmcgdGhhdCBzaG91bGRuJ3QgYmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzgyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjIyLjcwNDA2NzA5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMTIzNzczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5mcy9LY29uZmlnLTI4Mi1cXG5mcy9LY29uZmlnOjI4Mzpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuZnMvS2NvbmZpZy0yODQtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTUtXFxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02NTctXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNjoyNS4yMjUzMTE3NDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNjk1MDE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGVlcCBEaXZlIGludG8gSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGh1Z2UgcGFnZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEhVR0VUTEJGU2AgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIEknbSBub3RpbmcgdGhhdCB0aGUgYEhVR0VUTEJfUEFHRWAgb3B0aW9uIGRlZmF1bHRzIHRvIGBIVUdFVExCRlNgIGlmIG5vdCBleHBsaWNpdGx5IHNldCBvdGhlcndpc2UsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgZ2VuZXJhbCBzZXR1cC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBOVU1BIGlzIHByb3Blcmx5IGVuYWJsZWQgYXMgd2VsbC5cblxuVG8gcmVhbGx5IGNlbWVudCBteSB1bmRlcnN0YW5kaW5nLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYW5kIGBhbGxvd2VkX21lbXNfbnJgIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFRoZXNlIGFyZSBrZXkgd2hlbiB5b3UncmUgbWFuYWdpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGVuc3VyaW5nIHRoZSBhcHByb3ByaWF0ZSBOVU1BIG5vZGVzIGFyZSBjb25zaWRlcmVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1cnBsdXMgcGFnZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2xhcmlmeSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaW5lciBwb2ludHMgb2YgaHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIHV0aWxpemF0aW9uLCBwYXJ0aWN1bGFybHkgaW4gcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBhcm91bmQgbWVtb3J5IG5vZGUgY29uc3RyYWludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTEyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MjguODMyMjY0MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjUzODMyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2F0aGVyX3N1cnBsdXNfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjc4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyMjc5OnN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG5tbS9odWdldGxiLmMtMjI4MC1cXHRfX211c3RfaG9sZChcXHUwMDI2aHVnZXRsYl9sb2NrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0NS1cXHRpZiAoZGVsdGEgXFx1MDAzZSAwKSB7XFxubW0vaHVnZXRsYi5jOjQ2NDY6XFx0XFx0aWYgKGdhdGhlcl9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKSBcXHUwMDNjIDApXFxubW0vaHVnZXRsYi5jLTQ2NDctXFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjMxLjI1NzY1NDM0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU2NDc3NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgY2VudGVyZWQgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHN1cnBsdXMgcGFnZXMsIGFuZCBpdCdzIGFkZGluZyBhIG5ldyB2YXJpYWJsZSwgYGFsbG93ZWRfbWVtc19ucmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGFueXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBhbGxvY2F0aW9uIGFuZCBhY2NvdW50aW5nIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LlxuXG5NeSBgRm9jdXNTeW1ib2xzYCBhcmUgbm93IHNldDogYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgYGFsbG93ZWRfbWVtc19ucmAsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5IHRvIGdldCBhIGdyYXNwIG9uIHRoZSBpbnRlbnQgYW5kIGltcGFjdCBvZiB0aGlzIGNvZGUuIFBsdXMgSSBuZWVkIHRvIGVuYWJsZSBzb21lIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBhbmQgYE5VTUFgLCBmb3IgdGhlIGZ1enppbmcuXG5cbk5vdywgbGV0IG1lIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2Ugc3ltYm9scy4gR29vZCwgYGFsbG93ZWRfbWVtc19ucmAsIGBnYXRoZXJfc3VycGx1c19wYWdlc2AsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgYXJlIGFsbCBzdGF0aWMuIFRoaXMgZ2l2ZXMgbWUgYSBzbGlnaHRseSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIHNjb3BlLCByZXN0cmljdGluZyBleHRlcm5hbCBtb2RpZmljYXRpb24uXG5cbkkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBBaGEhIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQncyB1c2VkIGJ5IGBhbGxvd2VkX21lbXNfbnJgLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYWRkaXRpb24gdG8gdGhlIHNldCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGl0IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDM5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjM2LjMxNDE1MzY3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MTAwOTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb2xpY3lfbWJpbmRfbm9kZW1hc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyMTg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIyNDAtXFxubW0vaHVnZXRsYi5jOjIyNDE6c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxubW0vaHVnZXRsYi5jLTIyNDIte1xcbi0tXFxubW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjY1LVxcbm1tL2h1Z2V0bGIuYzoyMjY2OlxcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG5tbS9odWdldGxiLmMtMjI2Ny1cXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MjI3OT1zdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtMjI4OS1cXG5tbS9odWdldGxiLmM6MjI5MDpcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhodGxiX2FsbG9jX21hc2soaCkpO1xcbm1tL2h1Z2V0bGIuYy0yMjkxLVxcdGlmIChtYmluZF9ub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MzguODk1MTY4MDc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDYwMjMxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBhZGRpdGlvbiB0byB0aGUgbGFuZHNjYXBlIG9mIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE5VTUEgc3lzdGVtcy4gSXQgYWx0ZXJzIHRoZSBjb3JlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgZnVuY3Rpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gYmUgdmVyeSBmb2N1c2VkIG9uIGl0LiBUaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyBjb25zaWRlcnMgdGhlIGBhbGxvd2VkX21lbXNfbnJgIHBhcmFtZXRlciB3aGVuIGRldGVybWluaW5nIGhvdyBtYW55IHN1cnBsdXMgcGFnZXMgYXJlIG5lZWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGJlaGF2aW9yYWwgbW9kaWZpY2F0aW9uIOKAkyBpbiBob3cgaHVnZSBwYWdlcyBhcmUgYm90aCByZXNlcnZlZCBhbmQgdWx0aW1hdGVseSBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRob3JvdWdoIGV4YW1pbmF0aW9uLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIGV4cGxpY2l0bHkgaW52b2x2ZXMgbWVtb3J5IG5vZGVzIGFuZCBwb3RlbnRpYWxseSByZXN0cmljdGl2ZSBOVU1BIHBvbGljaWVzLCBJIHRoaW5rIGl0J3Mgc3BvdCBvbiB0byBhZGQgYHBvbGljeV9tYmluZF9ub2RlbWFza2AgdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBJdCB3aWxsIGJlIGEga2V5IGZhY3RvciBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgbmV3IGxvZ2ljLiBUaGUgcGF0Y2ggaXMgdGllZCB0byBob3cgdGhlIHN5c3RlbSAqYWNjb3VudHMqIGZvciB0aGVzZSBwYWdlcyBhbmQgKmdhdGhlcnMqIHRoZW0sIHdoaWNoIG1ha2VzIHRoZXNlIGtleSBmb2N1cyBhcmVhcywgYW5kIGNsZWFybHksIGBodWdldGxiX2FjY3RfbWVtb3J5YCBpcyBhbHNvIGNyaXRpY2FsLiBUaGVzZSBhcmUgYWxsIGNvcmUgc3ltYm9scyB3ZSdsbCBuZWVkIHRvIGV4YW1pbmUuXG5cbldlJ3JlIGRlYWxpbmcgd2l0aCBgSFVHRVRMQkZTYCBhbmQgYE5VTUFgIGFzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgb2YgY291cnNlLlxuXG5UaGUgZnV6emluZyBzdHJhdGVneSwgdGhlcmVmb3JlLCBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuIEknbSBpbWFnaW5pbmcgc2NlbmFyaW9zIHdpdGggZGl2ZXJzZSBOVU1BIGNvbmZpZ3VyYXRpb25zLCB2YXJpZWQgbWVtb3J5IHBvbGljaWVzIChpbmNsdWRpbmcgdGhvc2UgZW1wbG95aW5nIGBtYmluZGApLCBhbmQgaGlnaCBsb2FkcyB0byBzdHJlc3MtdGVzdCB0aGUgbmV3IGxvZ2ljIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLiBUaGUgZnV6emluZyB0YXJnZXQgc2hvdWxkIGluY2x1ZGUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyB0aGUgY2hhbmdlcyBlZmZlY3RpdmVseS4gQWxzbywgSSB3aWxsIG5lZWQgdG8gYmUgYWJsZSB0byBldmFsdWF0ZSB0aGUgcmVzdWx0cyBvZiBlYWNoIGZ1enogcnVuIGVmZmVjdGl2ZWx5LCBsZXQncyBjYWxsIHRoYXQgYHNldC1yZXN1bHRzYC4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgaXMgc2V0IHVwIHRvIHJlY29yZCByZXN1bHRzIHRoYXQgYXJlIHVuZGVyc3RhbmRhYmxlIGFuZCBlYXNpbHkgZXZhbHVhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg2NSwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6NDUuNjAxMTk0MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY3NjIzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIixcbiAgICBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIixcbiAgICBcInBvbGljeV9tYmluZF9ub2RlbWFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIixcbiAgICBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIixcbiAgICBcInBvbGljeV9tYmluZF9ub2RlbWFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 19:01:39 +0000 UTC FinishedAt: 2026-06-23 19:16: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": "3802a666f37255cc8ddc5647390e6c590b947065", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA" ], "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": "3802a666f37255cc8ddc5647390e6c590b947065", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "NUMA" ], "series_id": "4409bae4-b510-40e1-8cec-a42ee5c919c9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gather_surplus_pages", "allowed_mems_nr", "hugetlb_acct_memory", "policy_mbind_nodemask" ], "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+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2F0aGVyX3N1cnBsdXNfcGFnZXMmIzM0OywKICAgICYjMzQ7YWxsb3dlZF9tZW1zX25yJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfYWNjdF9tZW1vcnkmIzM0OywKICAgICYjMzQ7cG9saWN5X21iaW5kX25vZGVtYXNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTAyMWNlYzg2Y2NhMWQxMTFhMjEwNGZlMzgxZDcwYWI0ODMwMDdlZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDE5OjE1OjIxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmJkOTdmMGY0MzQxNWU3IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmNcbkBAIC0yMjU1LDYgJiM0MzsyMjU1LDIzIEBAIHN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX3QgZ2ZwKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG5vZGU7XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yID0gMDtcbiYjNDM7XHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcbiYjNDM7XHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbiYjNDM7XG4mIzQzO1x0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xuJiM0MztcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbiYjNDM7XHRcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxuJiM0MztcdFx0XHRuciAmIzQzOz0gYXJyYXlbbm9kZV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnI7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBJbmNyZWFzZSB0aGUgaHVnZXRsYiBwb29sIHN1Y2ggdGhhdCBpdCBjYW4gYWNjb21tb2RhdGUgYSByZXNlcnZhdGlvblxuICAqIG9mIHNpemUgJiMzOTtkZWx0YSYjMzk7LlxuQEAgLTIyNzcsNyAmIzQzOzIyOTQsOCBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHRcdGFsbG9jX25vZGVtYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0bmVlZGVkID0gKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzO1xuJiM0MztcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbiYjNDM7XHRcdChsb25nKSAoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzYz0gMCkge1xuIFx0XHRoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOz0gZGVsdGE7XG4gXHRcdHJldHVybiAwO1xuQEAgLTIzMTEsOCAmIzQzOzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4gXHQgKiBiZWNhdXNlIGVpdGhlciByZXN2X2h1Z2VfcGFnZXMgb3IgZnJlZV9odWdlX3BhZ2VzIG1heSBoYXZlIGNoYW5nZWQuXG4gXHQgKi9cbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuLVx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpO1xuJiM0MztcdG5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxuJiM0MztcdFx0XHQobG9uZykgKChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLVxuJiM0MztcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyAmIzQzOyBhbGxvY2F0ZWQpKSk7XG4gXHRpZiAobmVlZGVkIFx1MDAzZSAwKSB7XG4gXHRcdGlmIChhbGxvY19vaylcbiBcdFx0XHRnb3RvIHJldHJ5O1xuQEAgLTQ1MTMsMjMgJiM0Mzs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxuIH1cbiBfX3NldHVwKFwmIzM0O2h1Z2VwYWdlX2FsbG9jX3RocmVhZHM9XCYjMzQ7LCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKTtcbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLXtcbi1cdGludCBub2RlO1xuLVx0dW5zaWduZWQgaW50IG5yID0gMDtcbi1cdG5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrO1xuLVx0dW5zaWduZWQgaW50ICphcnJheSA9IGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzX25vZGU7XG4tXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKTtcbi1cbi1cdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcbi1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbi1cdFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXG4tXHRcdFx0bnIgJiM0Mzs9IGFycmF5W25vZGVdO1xuLVx0fVxuLVxuLVx0cmV0dXJuIG5yO1xuLX1cbi1cbiB2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9uc1xuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBybWFwXG4gVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxuJiM0MztURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuIFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxuIFRFU1RfR0VOX0ZJTEVTICYjNDM7PSBzb2Z0LWRpcnR5XG5AQCAtMjYwLDYgJiM0MzsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuICQoT1VUUFVUKS9ybWFwOiBMRExJQlMgJiM0Mzs9IC1sbnVtYVxuIFxuJiM0MzskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWFcbiYjNDM7XG4gbG9jYWxfY29uZmlnLm1rIGxvY2FsX2NvbmZpZy5oOiBjaGVja19jb25maWcuc2hcbiBcdENDPVwmIzM0OyQoQ0MpXCYjMzQ7IENGTEFHUz1cJiMzNDskKENGTEFHUylcJiMzNDsgLi9jaGVja19jb25maWcuc2hcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE3N2IwMTY5MzUxODlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xuQEAgLTAsMCAmIzQzOzEsNDcyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qXG4mIzQzOyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiYjNDM7ICpcbiYjNDM7ICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXG4mIzQzOyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0c1xuJiM0MzsgKiBkbyBub3QgY292ZXIgYWxsIGVkZ2UgY2FzZXMsIGJ1dCByYXRoZXIgZm9jdXMgb24gd2hhdCB0aGUga2VybmVsIGNhblxuJiM0MzsgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xuJiM0MzsgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3B0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt2bV91dGlsLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NlbGZ0ZXN0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKVxuJiM0MzsjZGVmaW5lIEhQU0laRV9LQiBkZWZhdWx0X2h1Z2VfcGFnZV9zaXplKCkgXHUwMDNlXHUwMDNlIDEwXG4mIzQzOyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMva2VybmVsL21tL2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcJiMzNDtcbiYjNDM7I2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFwmIzM0Oy9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlJXUvaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wmIzM0O1xuJiM0MztcbiYjNDM7c3RydWN0IGJpdG1hc2sgKipub2RlbWFza3M7XG4mIzQzO2ludCAqbm9kZWlkcztcbiYjNDM7XG4mIzQzO3B0aHJlYWRfdCAqdGhyZWFkcztcbiYjNDM7c3RydWN0IHRocmVhZF9hcmdzIHtcbiYjNDM7XHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XG4mIzQzO1x0aW50IHRvX3Jlc2VydmU7XG4mIzQzO307XG4mIzQzO3N0cnVjdCB0aHJlYWRfYXJncyogcGVyX3RocmVhZF9hcmdzO1xuJiM0MztwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuJiM0MztwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuJiM0MztpbnQgd2FrZV9jb25kID0gMDtcbiYjNDM7XG4mIzQzO2NoYXIgKm5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKmdfZnJlZV9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqZ19ucl9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqZ19yZXN2X2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4mIzQzO2NoYXIgKm4wX25yX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMV9mcmVlX2h1Z2VwYWdlc19wYXRoO1xuJiM0MztjaGFyICpuMV9ucl9odWdlcGFnZXNfcGF0aDtcbiYjNDM7Y2hhciAqbjFfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbiYjNDM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgZ19mcmVlX2h1Z2VwYWdlcywgZ19ucl9odWdlcGFnZXM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgZ19yZXN2X2h1Z2VwYWdlcywgZ19zdXJwbHVzX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBuMF9mcmVlX2h1Z2VwYWdlcywgbjBfbnJfaHVnZXBhZ2VzLCBuMF9zdXJwbHVzX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBpbnQgbjFfZnJlZV9odWdlcGFnZXMsIG4xX25yX2h1Z2VwYWdlcywgbjFfc3VycGx1c19odWdlcGFnZXM7XG4mIzQzO3Vuc2lnbmVkIGxvbmcgaW50IG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcbiYjNDM7dW5zaWduZWQgbG9uZyBpbnQgb3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcztcbiYjNDM7XG4mIzQzO1xuJiM0MzsvKiBzZXR1cF9wYXRoc1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN0cmluZ3MgZm9yIHRoZSB2YXJpb3VzIGh1Z2V0bGIgcGFnZSBzeXNmc1xuJiM0MzsgKiBwYXRocy4gVGhlIHN0cmluZ3MgYXJlIHVzZWQgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgc3lzZnMgZmlsZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9wYXRocyh2b2lkKSB7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCxcbiYjNDM7XHRcdFx0XCYjMzQ7L3Byb2Mvc3lzL3ZtL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtmcmVlX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2Z19ucl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2Z19yZXN2X2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7cmVzdl9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNmdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O2ZyZWVfaHVnZXBhZ2VzXCYjMzQ7KTtcbiYjNDM7XHRhc3ByaW50ZihcdTAwMjZuMF9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtucl9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7c3VycGx1c19odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4mIzQzO1x0XHRcdEhQU0laRV9LQiwgXCYjMzQ7ZnJlZV9odWdlcGFnZXNcJiMzNDspO1xuJiM0MztcdGFzcHJpbnRmKFx1MDAyNm4xX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxuJiM0MztcdFx0XHRIUFNJWkVfS0IsIFwmIzM0O25yX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO1x0YXNwcmludGYoXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcbiYjNDM7XHRcdFx0SFBTSVpFX0tCLCBcJiMzNDtzdXJwbHVzX2h1Z2VwYWdlc1wmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIGdldF9odWdlcGFnZV9zdGF0c1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2ltcGx5IGdyYWIgYSBidW5jaCBvZiB0aGUgaHVnZXRsYiBwYWdlIG1ldHJpY3MgaW4gc3lzZnNcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7XG4mIzQzO1x0cmVhZF9zeXNmcyhnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfZnJlZV9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19zdXJwbHVzX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4wX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzKTtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjFfc3VycGx1c19odWdlcGFnZXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3NcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpc1xuJiM0MzsgKiB0ZXN0IHN1aXRlIGRvZXNuJiMzOTt0IGNsb2JiZXIgY29uZmlncyBuZWVkZWQgZm9yIG90aGVyIHRlc3RzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2F2ZV9odWdlcGFnZV9jb25maWdzKHZvaWQpIHtcbiYjNDM7XHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX24wX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuJiM0MztcdHJlYWRfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlnc1xuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0XG4mIzQzOyAqIHdhcyByYW4uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkge1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjFfbnJfaHVnZXBhZ2VzKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzZXRfaHVnZXBhZ2VzXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLlxuJiM0MzsgKiBVc2VkIHRvIGdldCBiYWNrIHRvIGEgY2xlYXIgc3RhdGUgYmV0d2VlbiB0ZXN0cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKSB7XG4mIzQzO1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7XG4mIzQzO1x0d3JpdGVfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgMCk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogY2FuX3J1blxuJiM0MzsgKlxuJiM0MzsgKiBEb2VzIHNhbml0eSBjaGVja2luZyBmaXJzdCB0byBtYWtlIHN1cmUgdGhlIHRlc3RzIGNhbiBldmVuIHJ1bi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKSB7XG4mIzQzOyAgICAgICAgaWYgKGdldGV1aWQoKSAhPSAwKVxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9leGl0X3NraXAoXCYjMzQ7UGxlYXNlIHJ1biB0aGUgdGVzdCBhcyByb290LlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1hX2F2YWlsYWJsZSgpID09IC0xKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7TnVtYSBpcyB1bmF2YWlsYWJsZS5cXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFx1MDAzYyAyKVxuJiM0MztcdFx0a3NmdF9leGl0X3NraXAoXCYjMzQ7Tm90IGVub3VnaCBub2RlcyB0byB0ZXN0LlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChudW1hX251bV90YXNrX25vZGVzKCkgXHUwMDNjIDIpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfc2tpcChcJiMzNDtDdXJyZW50IG1lbXBvbGljeSBpcyB0b28gcmVzdHJpY3RpdmUuXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgY2xlYW51cChjaGFyKiBlcnJfbXNnKSB7XG4mIzQzO1x0ZnJlZShwZXJfdGhyZWFkX2FyZ3MpO1xuJiM0MztcdGZyZWUodGhyZWFkcyk7XG4mIzQzO1x0ZnJlZShub2RlaWRzKTtcbiYjNDM7XHRmcmVlKG5vZGVtYXNrcyk7XG4mIzQzO1x0ZnJlZShucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShnX25yX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKGdfcmVzdl9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjBfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMF9ucl9odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0ZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbiYjNDM7XHRmcmVlKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjFfbnJfaHVnZXBhZ2VzX3BhdGgpO1xuJiM0MztcdGZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4mIzQzO1x0aWYgKGVycl9tc2cpXG4mIzQzO1x0XHRrc2Z0X2V4aXRfZmFpbF9tc2coZXJyX21zZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNldHVwX25vZGVfaW5mb1xuJiM0MzsgKlxuJiM0MzsgKiBDcmVhdGVzIHRoZSBiaXRtYXNrcyB1c2VkIHRvIGlzb2xhdGUgdGVzdCBydW5uZXJzIGFuZCB0aGVpciBodWdldGxiIHBhZ2VcbiYjNDM7ICogcmVzZXJ2YXRpb25zLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfbm9kZV9pbmZvKHZvaWQpIHtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XHRpbnQgaXRoX25vZGVtYXNrID0gMDtcbiYjNDM7XG4mIzQzO1x0bm9kZWlkcyA9IGNhbGxvYygyLCBzaXplb2YoaW50KSk7XG4mIzQzO1x0bm9kZW1hc2tzID0gY2FsbG9jKDIsIHNpemVvZihzdHJ1Y3QgYml0bWFzayAqKSk7XG4mIzQzO1xuJiM0MztcdGlmICghbm9kZW1hc2tzIHx8ICFub2RlaWRzKVxuJiM0MztcdFx0Y2xlYW51cChcJiMzNDtzZXR1cF9ub2RlX2luZm86IGNhbGxvYy5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcbiYjNDM7XHQgKiBpbmRleCBvZiB0aGUgZmlyc3Qgbm9kZSBhdmFpbGFibGUgdG8gdXMsIGFuZCB0aGUgc2Vjb25kIG9mIHRoZSBuZXh0XG4mIzQzO1x0ICogbm9kZSBhdmFpbGFibGUgdG8gdXMuICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtYV9udW1fdGFza19ub2RlcygpOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKG51bWFfYml0bWFza19pc2JpdHNldChudW1hX2dldF9tZW1zX2FsbG93ZWQoKSwgaSkpIHtcbiYjNDM7XHRcdFx0bm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTtcbiYjNDM7XHRcdFx0bm9kZW1hc2tzW2l0aF9ub2RlbWFzayYjNDM7JiM0MztdID0gbnVtYV9iaXRtYXNrX3NldGJpdChcbiYjNDM7XHRcdFx0XHRcdG51bWFfYWxsb2NhdGVfbm9kZW1hc2soKSwgaSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdGlmIChpdGhfbm9kZW1hc2sgIT0gMiB8fCAhbm9kZW1hc2tzWzBdIHx8ICFub2RlbWFza3NbMV0pXG4mIzQzO1x0XHRjbGVhbnVwKFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLlwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHNldHVwX3RocmVhZHNcbiYjNDM7ICpcbiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKSB7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzID0gY2FsbG9jKDIsIHNpemVvZihwZXJfdGhyZWFkX2FyZ3MpKTtcbiYjNDM7XHRpZiAoIXBlcl90aHJlYWRfYXJncylcbiYjNDM7XHRcdGNsZWFudXAoXCYjMzQ7Y2FsbG9jIHRocmVhZCBhcmdzLlwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHRocmVhZHMgPSBjYWxsb2MoMiwgc2l6ZW9mKHB0aHJlYWRfdCkpO1xuJiM0MztcdGlmICghdGhyZWFkcykge1xuJiM0MztcdFx0Y2xlYW51cChcJiMzNDtjYWxsb2MgdGhyZWFkcy5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogcmVzZXJ2ZV9odWdlcGFnZVxuJiM0MzsgKlxuJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXJ2ZSBhIGh1Z2V0bGIgcGFnZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcqIHJlc2VydmVfaHVnZXBhZ2Uodm9pZCkge1xuJiM0MztcdHJldHVybiAodW5zaWduZWQgbG9uZyAqKSBtbWFwKE5VTEwsIEhQU0laRV9CWVRFUywgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiYjNDM7XHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRocmVhZF93b3JrXG4mIzQzOyAqXG4mIzQzOyAqIFRlc3QgcnVubmVycy4gUGVyZm9ybXMgdGhlIHdvcmsgb2YgcmVzZXJ2aW5nIGFuZCBmcmVlaW5nIGh1Z2V0bGIgcGFnZXMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKSB7XG4mIzQzO1x0c3RydWN0IHRocmVhZF9hcmdzKiB0X2FyZ3MgPSAoc3RydWN0IHRocmVhZF9hcmdzKikgYXJnO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLVx1MDAzZXRvX3Jlc2VydmUsXG4mIzQzO1x0XHRcdFx0XHRcdHNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7XG4mIzQzO1xuJiM0MztcdC8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovXG4mIzQzO1x0aWYgKHRfYXJncy1cdTAwM2VteV9ub2RlbWFzaylcbiYjNDM7XHRcdG51bWFfYmluZCh0X2FyZ3MtXHUwMDNlbXlfbm9kZW1hc2spO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xuJiM0MztcdFx0LyogVGVzdHMgbWF5IHB1cnBvc2VmdWxseSB0cnkgdG8gb3ZlcmFsbG9jYXRlLCBzbyBqdXN0XG4mIzQzO1x0XHQgKiBmYWxsIHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0Ki9cbiYjNDM7XHRcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xuJiM0MztcdFx0XHR0X2FyZ3MtXHUwMDNldG9fcmVzZXJ2ZSA9IGk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHdoaWxlKCF3YWtlX2NvbmQpIHtcbiYjNDM7XHRcdHB0aHJlYWRfY29uZF93YWl0KFx1MDAyNmNvbmQsIFx1MDAyNm11dGV4KTtcbiYjNDM7XHR9XG4mIzQzO1x0cHRocmVhZF9tdXRleF91bmxvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKiBUcnkgdG8gZnJlZSB0aG9zZSBodWdldGxiIHBhZ2VzICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdF9hcmdzLVx1MDAzZXRvX3Jlc2VydmU7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpZiAobXVubWFwKGh1Z2VwYWdlc1tpXSwgSFBTSVpFX0JZVEVTKSBcdTAwM2MgMClcbiYjNDM7XHRcdFx0a3NmdF9wZXJyb3IoXCYjMzQ7bXVubWFwKCkgZmFpbGVkISBDaGVjayBmb3IgbGVha2VkIGh1Z2V0bGIgcGFnZXMhXFxuXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0ZnJlZShodWdlcGFnZXMpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB3YWtlX2NoaWxkcmVuXG4mIzQzOyAqXG4mIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byB3YWtlIGNoaWxkcmVuIHRocmVhZHMuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpIHtcbiYjNDM7XHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuJiM0MztcdHdha2VfY29uZCA9IDE7XG4mIzQzO1x0cHRocmVhZF9jb25kX2Jyb2FkY2FzdChcdTAwMjZjb25kKTtcbiYjNDM7XHRwdGhyZWFkX211dGV4X3VubG9jayhcdTAwMjZtdXRleCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRlc3QxXG4mIzQzOyAqXG4mIzQzOyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2UgYW55d2hlcmUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0MSh2b2lkKSB7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IE5VTEw7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoKGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICgobjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8XG4mIzQzO1x0XHRcdCAobjBfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSxcbiYjNDM7XHRcdFx0IFwmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIGFueXdoZXJlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0d2FrZV9jaGlsZHJlbigpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0MlxuJiM0MzsgKlxuJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIHdpdGhcbiYjNDM7ICogYSBtZW1wb2xpY3kuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0Mih2b2lkKSB7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLFxuJiM0MztcdFx0XHQgXCYjMzQ7UmVzZXJ2ZSAxIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTBcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHdha2VfY29uZCA9IDA7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRlc3QzXG4mIzQzOyAqXG4mIzQzOyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgdGVzdDModm9pZCkge1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0MztcbiYjNDM7XHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDA7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4mIzQzO1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XG4mIzQzO1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0MztcbiYjNDM7XHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbiYjNDM7XHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXG4mIzQzO1x0XHRcdCBcJiMzNDtTZXQgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0NFxuJiM0MzsgKlxuJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCB0ZXN0NCh2b2lkKSB7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcbiYjNDM7XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbiYjNDM7XHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbiYjNDM7XG4mIzQzO1x0dXNsZWVwKDUwMDAwMCk7XG4mIzQzO1xuJiM0MztcdGdldF9odWdlcGFnZV9zdGF0cygpO1xuJiM0MztcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbiYjNDM7XHRcdFx0IFwmIzM0O1Jlc2VydmUgMSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlIDFcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3YWtlX2NoaWxkcmVuKCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuJiM0MztcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbiYjNDM7XHR3YWtlX2NvbmQgPSAwO1xuJiM0MztcdHJlc2V0X2h1Z2VwYWdlcygpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiB0ZXN0NVxuJiM0MzsgKlxuJiM0MzsgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxIGFuZFxuJiM0MzsgKiBmYWlsIHRvIG92ZXIgYWxsb2NhdGUgYW5vdGhlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHRlc3Q1KHZvaWQpIHtcbiYjNDM7XHRyZXNldF9odWdlcGFnZXMoKTtcbiYjNDM7XG4mIzQzO1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4mIzQzO1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuJiM0MztcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4mIzQzO1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuJiM0MztcdHBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTtcbiYjNDM7XHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDI7XG4mIzQzO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xuJiM0MztcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xuJiM0MztcbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7XG4mIzQzO1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4mIzQzO1x0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxuJiM0MztcdFx0XHQgXCYjMzQ7SW50ZW50aW9uYWxseSBvdmVyYWxsb2NhdGUgYW5kIGZhaWwgZHVlIHRvIG5yX292ZXJjb21taXRfaHVnZXBhZ2VzIGxpbWl0LlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHdha2VfY2hpbGRyZW4oKTtcbiYjNDM7XHRwdGhyZWFkX2pvaW4odGhyZWFkc1swXSwgTlVMTCk7XG4mIzQzO1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuJiM0MztcdHdha2VfY29uZCA9IDA7XG4mIzQzO1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4mIzQzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgbWFpbih2b2lkKSB7XG4mIzQzO1x0a3NmdF9wcmludF9oZWFkZXIoKTtcbiYjNDM7XHRrc2Z0X3NldF9wbGFuKDUpO1xuJiM0MztcbiYjNDM7XHRjaGVja19yZXF1aXJlbWVudHMoKTtcbiYjNDM7XHRzZXR1cF90aHJlYWRzKCk7XG4mIzQzO1x0c2V0dXBfbm9kZV9pbmZvKCk7XG4mIzQzO1x0c2V0dXBfcGF0aHMoKTtcbiYjNDM7XHRzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbiYjNDM7XG4mIzQzO1x0dGVzdDEoKTtcbiYjNDM7XHR0ZXN0MigpO1xuJiM0MztcdHRlc3QzKCk7XG4mIzQzO1x0dGVzdDQoKTtcbiYjNDM7XHR0ZXN0NSgpO1xuJiM0MztcbiYjNDM7XHRyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcbiYjNDM7XHRrc2Z0X2ZpbmlzaGVkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiAmIzQzOzI5Nyw3IEBAIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXBhZ2Utdm1lbW1hcFxuIENBVEVHT1JZPVwmIzM0O2h1Z2V0bGJcJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiLW1hZHZpc2VcbiBDQVRFR09SWT1cJiMzNDtodWdldGxiXCYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbiYjNDM7Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwmIzM0OyR7SEFWRV9IVUdFUEFHRVN9XCYjMzQ7ID0gXCYjMzQ7MVwmIzM0OyBdOyB0aGVuXG4gXHRucl9odWdlcGFnZXNfdG1wPSQoY2F0IC9wcm9jL3N5cy92bS9ucl9odWdlcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYXRoZXJfc3VycGx1c19wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvd2VkX21lbXNfbnImIzM0OywKICAgICYjMzQ7aHVnZXRsYl9hY2N0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtwb2xpY3lfbWJpbmRfbm9kZW1hc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyAoYGFsbG93ZWRfbWVtc19ucmApIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5lZWRlZCBzdXJwbHVzIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSByZXNlcnZlZCBhbmQgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IGluIHRoZSBwcmVzZW5jZSBvZiBOVU1BIG1lbW9yeSBwb2xpY2llcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDUwMjFjZWM4NmNjYTFkMTExYTIxMDRmZTM4MWQ3MGFiNDgzMDA3ZWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAyMyAxOToxNToyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCBmMjRiZjQ5YmUwNDdlMy4uYmQ5N2YwZjQzNDE1ZTcgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTIyNTUsNiAmIzQzOzIyNTUsMjMgQEAgc3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKQomIzQzO3sKJiM0MzsJaW50IG5vZGU7CiYjNDM7CXVuc2lnbmVkIGludCBuciA9IDA7CiYjNDM7CW5vZGVtYXNrX3QgKm1iaW5kX25vZGVtYXNrOwomIzQzOwl1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzX25vZGU7CiYjNDM7CWdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpOwomIzQzOwomIzQzOwltYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7CiYjNDM7CWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHsKJiM0MzsJCWlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKQomIzQzOwkJCW5yICYjNDM7PSBhcnJheVtub2RlXTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gbnI7CiYjNDM7fQomIzQzOwogLyoKICAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uCiAgKiBvZiBzaXplICYjMzk7ZGVsdGEmIzM5Oy4KQEAgLTIyNzcsNyAmIzQzOzIyOTQsOCBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpCiAJCWFsbG9jX25vZGVtYXNrID0gY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2h1Z2V0bGJfbG9jayk7Ci0JbmVlZGVkID0gKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLSZndDtmcmVlX2h1Z2VfcGFnZXM7CiYjNDM7CW5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSwKJiM0MzsJCShsb25nKSAoKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLSBoLSZndDtmcmVlX2h1Z2VfcGFnZXMpKTsKIAlpZiAobmVlZGVkICZsdDs9IDApIHsKIAkJaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7PSBkZWx0YTsKIAkJcmV0dXJuIDA7CkBAIC0yMzExLDggJiM0MzsyMzI5LDkgQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKQogCSAqIGJlY2F1c2UgZWl0aGVyIHJlc3ZfaHVnZV9wYWdlcyBvciBmcmVlX2h1Z2VfcGFnZXMgbWF5IGhhdmUgY2hhbmdlZC4KIAkgKi8KIAlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQluZWVkZWQgPSAoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCi0JCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCk7CiYjNDM7CW5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCShsb25nKSAoKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLQomIzQzOwkJCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCkpKTsKIAlpZiAobmVlZGVkICZndDsgMCkgewogCQlpZiAoYWxsb2Nfb2spCiAJCQlnb3RvIHJldHJ5OwpAQCAtNDUxMywyMyAmIzQzOzQ1MzIsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9hbGxvY190aHJlYWRzX3NldHVwKGNoYXIgKnMpCiB9CiBfX3NldHVwKCYjMzQ7aHVnZXBhZ2VfYWxsb2NfdGhyZWFkcz0mIzM0OywgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpCi17Ci0JaW50IG5vZGU7Ci0JdW5zaWduZWQgaW50IG5yID0gMDsKLQlub2RlbWFza190ICptYmluZF9ub2RlbWFzazsKLQl1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzX25vZGU7Ci0JZ2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7Ci0KLQltYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7Ci0JZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkgewotCQlpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSkKLQkJCW5yICYjNDM7PSBhcnJheVtub2RlXTsKLQl9Ci0KLQlyZXR1cm4gbnI7Ci19Ci0KIHZvaWQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJc3RydWN0IGhzdGF0ZSAqaDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUKaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZQpAQCAtMTA2LDYgJiM0MzsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyAmIzQzOz0gZ3VhcmQtcmVnaW9ucwogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IG1lcmdlCiBURVNUX0dFTl9GSUxFUyAmIzQzOz0gcm1hcAogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdAomIzQzO1RFU1RfR0VOX0ZJTEVTICYjNDM7PSBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5CiAKIGlmbmVxICgkKEFSQ0gpLGFybTY0KQogVEVTVF9HRU5fRklMRVMgJiM0Mzs9IHNvZnQtZGlydHkKQEAgLTI2MCw2ICYjNDM7MjYxLDggQEAgJChPVVRQVVQpL21pZ3JhdGlvbjogTERMSUJTICYjNDM7PSAtbG51bWEKIAogJChPVVRQVVQpL3JtYXA6IExETElCUyAmIzQzOz0gLWxudW1hCiAKJiM0MzskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWEKJiM0MzsKIGxvY2FsX2NvbmZpZy5tayBsb2NhbF9jb25maWcuaDogY2hlY2tfY29uZmlnLnNoCiAJQ0M9JiMzNDskKENDKSYjMzQ7IENGTEFHUz0mIzM0OyQoQ0ZMQUdTKSYjMzQ7IC4vY2hlY2tfY29uZmlnLnNoCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE3N2IwMTY5MzUxODkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMKQEAgLTAsMCAmIzQzOzEsNDcyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKgomIzQzOyAqIGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kKJiM0MzsgKgomIzQzOyAqIFJlc2VydmluZyBzdXJwbHVzIGh1Z2VwYWdlcyB3aXRoaW4gbWVtcG9saWNpZXMgaXMgcXVpdGUgdHJpY2t5IGR1ZSB0bwomIzQzOyAqIHRoZSB0cmFuc2llbnQgbmF0dXJlIG9mIGNwdXNldHMgYW5kIG1lbXBvbGljaWVzLiBBcyBzdWNoLCB0aGVzZSB0ZXN0cwomIzQzOyAqIGRvIG5vdCBjb3ZlciBhbGwgZWRnZSBjYXNlcywgYnV0IHJhdGhlciBmb2N1cyBvbiB3aGF0IHRoZSBrZXJuZWwgY2FuCiYjNDM7ICogY3VycmVudGx5IGRvIHRvIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZXMgaW4gdGhlIHByZXNlbmNlIG9mIGNwdXNldHMKJiM0MzsgKiBhbmQgbWVtcG9saWNpZXMgdG8gaGVscCBjaGVjayBmb3IgcmVncmVzc2lvbnMgaW4gdGhpcyBiZWhhdmlvci4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIF9HTlVfU09VUkNFCiYjNDM7I2luY2x1ZGUgJmx0O2Vycm5vLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O251bWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7cHRocmVhZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRsaWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7c3RkaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bV91dGlsLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgSFBTSVpFX0JZVEVTIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKQomIzQzOyNkZWZpbmUgSFBTSVpFX0tCIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSAmZ3Q7Jmd0OyAxMAomIzQzOyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIICYjMzQ7L3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lcyYjMzQ7CiYjNDM7I2RlZmluZSBOT0RFX1NZU19IUF9QQVRIICYjMzQ7L3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUldS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgYml0bWFzayAqKm5vZGVtYXNrczsKJiM0MztpbnQgKm5vZGVpZHM7CiYjNDM7CiYjNDM7cHRocmVhZF90ICp0aHJlYWRzOwomIzQzO3N0cnVjdCB0aHJlYWRfYXJncyB7CiYjNDM7CXN0cnVjdCBiaXRtYXNrICpteV9ub2RlbWFzazsKJiM0MzsJaW50IHRvX3Jlc2VydmU7CiYjNDM7fTsKJiM0MztzdHJ1Y3QgdGhyZWFkX2FyZ3MqIHBlcl90aHJlYWRfYXJnczsKJiM0MztwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSOwomIzQzO3B0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiYjNDM7aW50IHdha2VfY29uZCA9IDA7CiYjNDM7CiYjNDM7Y2hhciAqbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpnX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19ucl9odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqbjBfbnJfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7Y2hhciAqbjBfc3VycGx1c19odWdlcGFnZXNfcGF0aDsKJiM0MztjaGFyICpuMV9mcmVlX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4xX25yX2h1Z2VwYWdlc19wYXRoOwomIzQzO2NoYXIgKm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7CiYjNDM7CiYjNDM7dW5zaWduZWQgbG9uZyBnX2ZyZWVfaHVnZXBhZ2VzLCBnX25yX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIGdfcmVzdl9odWdlcGFnZXMsIGdfc3VycGx1c19odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBuMF9mcmVlX2h1Z2VwYWdlcywgbjBfbnJfaHVnZXBhZ2VzLCBuMF9zdXJwbHVzX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIGludCBuMV9mcmVlX2h1Z2VwYWdlcywgbjFfbnJfaHVnZXBhZ2VzLCBuMV9zdXJwbHVzX2h1Z2VwYWdlczsKJiM0Mzt1bnNpZ25lZCBsb25nIGludCBvcmlnX24wX25yX2h1Z2VwYWdlcywgb3JpZ19uMV9ucl9odWdlcGFnZXM7CiYjNDM7dW5zaWduZWQgbG9uZyBpbnQgb3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlczsKJiM0MzsKJiM0MzsKJiM0MzsvKiBzZXR1cF9wYXRocwomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBzdHJpbmdzIGZvciB0aGUgdmFyaW91cyBodWdldGxiIHBhZ2Ugc3lzZnMKJiM0MzsgKiBwYXRocy4gVGhlIHN0cmluZ3MgYXJlIHVzZWQgdG8gcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgc3lzZnMgZmlsZXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgc2V0dXBfcGF0aHModm9pZCkgewomIzQzOwlhc3ByaW50ZigmYW1wO25yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsCiYjNDM7CQkJJiMzNDsvcHJvYy9zeXMvdm0vbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O2ZyZWVfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfbnJfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO2dfcmVzdl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtyZXN2X2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7c3VycGx1c19odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7ZnJlZV9odWdlcGFnZXMmIzM0Oyk7CiYjNDM7CWFzcHJpbnRmKCZhbXA7bjBfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O25yX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtzdXJwbHVzX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLAomIzQzOwkJCUhQU0laRV9LQiwgJiMzNDtmcmVlX2h1Z2VwYWdlcyYjMzQ7KTsKJiM0MzsJYXNwcmludGYoJmFtcDtuMV9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSwKJiM0MzsJCQlIUFNJWkVfS0IsICYjMzQ7bnJfaHVnZXBhZ2VzJiMzNDspOwomIzQzOwlhc3ByaW50ZigmYW1wO24xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sCiYjNDM7CQkJSFBTSVpFX0tCLCAmIzM0O3N1cnBsdXNfaHVnZXBhZ2VzJiMzNDspOwomIzQzO30KJiM0MzsKJiM0MzsvKiBnZXRfaHVnZXBhZ2Vfc3RhdHMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmcwomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7CiYjNDM7CXJlYWRfc3lzZnMoZ19mcmVlX2h1Z2VwYWdlc19wYXRoLCAmYW1wO2dfZnJlZV9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsICZhbXA7Z19ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKGdfcmVzdl9odWdlcGFnZXNfcGF0aCwgJmFtcDtnX3Jlc3ZfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsICZhbXA7Z19zdXJwbHVzX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgJmFtcDtuMF9mcmVlX2h1Z2VwYWdlcyk7CiYjNDM7CXJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjBfbnJfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24wX3N1cnBsdXNfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCAmYW1wO24xX2ZyZWVfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgJmFtcDtuMV9ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsICZhbXA7bjFfc3VycGx1c19odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byBzYXZlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBodWdlcGFnZSBjb25maWdzIHNvIHRoaXMKJiM0MzsgKiB0ZXN0IHN1aXRlIGRvZXNuJiMzOTt0IGNsb2JiZXIgY29uZmlncyBuZWVkZWQgZm9yIG90aGVyIHRlc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNhdmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKSB7CiYjNDM7CXJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsICZhbXA7b3JpZ19uMF9ucl9odWdlcGFnZXMpOwomIzQzOwlyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAmYW1wO29yaWdfbjFfbnJfaHVnZXBhZ2VzKTsKJiM0MzsJcmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAmYW1wO29yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZiBodWdlcGFnZSBjb25maWdzIGJlZm9yZSB0aGlzIHRlc3QKJiM0MzsgKiB3YXMgcmFuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKSB7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24wX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKiByZXNldF9odWdlcGFnZXMKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNldCBzdGF0aWMgaHVnZXRsYiBwYWdlIHJlc2VydmF0aW9ucyB0byAwLgomIzQzOyAqIFVzZWQgdG8gZ2V0IGJhY2sgdG8gYSBjbGVhciBzdGF0ZSBiZXR3ZWVuIHRlc3RzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlc2V0X2h1Z2VwYWdlcyh2b2lkKSB7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDApOwomIzQzOwl3cml0ZV9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCAwKTsKJiM0MzsJd3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDApOwomIzQzOwl3cml0ZV9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgMCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIGNhbl9ydW4KJiM0MzsgKgomIzQzOyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNoZWNrX3JlcXVpcmVtZW50cyh2b2lkKSB7CiYjNDM7ICAgICAgICBpZiAoZ2V0ZXVpZCgpICE9IDApCiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXhpdF9za2lwKCYjMzQ7UGxlYXNlIHJ1biB0aGUgdGVzdCBhcyByb290LlxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAobnVtYV9hdmFpbGFibGUoKSA9PSAtMSkKJiM0MzsJCWtzZnRfZXhpdF9za2lwKCYjMzQ7TnVtYSBpcyB1bmF2YWlsYWJsZS5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKSAmbHQ7IDIpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O05vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJaWYgKG51bWFfbnVtX3Rhc2tfbm9kZXMoKSAmbHQ7IDIpCiYjNDM7CQlrc2Z0X2V4aXRfc2tpcCgmIzM0O0N1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY2xlYW51cChjaGFyKiBlcnJfbXNnKSB7CiYjNDM7CWZyZWUocGVyX3RocmVhZF9hcmdzKTsKJiM0MzsJZnJlZSh0aHJlYWRzKTsKJiM0MzsJZnJlZShub2RlaWRzKTsKJiM0MzsJZnJlZShub2RlbWFza3MpOwomIzQzOwlmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKGdfZnJlZV9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpOwomIzQzOwlmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9mcmVlX2h1Z2VwYWdlc19wYXRoKTsKJiM0MzsJZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWZyZWUobjFfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7CiYjNDM7CWlmIChlcnJfbXNnKQomIzQzOwkJa3NmdF9leGl0X2ZhaWxfbXNnKGVycl9tc2cpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzZXR1cF9ub2RlX2luZm8KJiM0MzsgKgomIzQzOyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZQomIzQzOyAqIHJlc2VydmF0aW9ucy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZCkgewomIzQzOwlpbnQgaTsKJiM0MzsJaW50IGl0aF9ub2RlbWFzayA9IDA7CiYjNDM7CiYjNDM7CW5vZGVpZHMgPSBjYWxsb2MoMiwgc2l6ZW9mKGludCkpOwomIzQzOwlub2RlbWFza3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCBiaXRtYXNrICopKTsKJiM0MzsKJiM0MzsJaWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpCiYjNDM7CQljbGVhbnVwKCYjMzQ7c2V0dXBfbm9kZV9pbmZvOiBjYWxsb2MuJiMzNDspOwomIzQzOwomIzQzOwkvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGUKJiM0MzsJICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dAomIzQzOwkgKiBub2RlIGF2YWlsYWJsZSB0byB1cy4gKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7CiYjNDM7CQkJbm9kZWlkc1tpdGhfbm9kZW1hc2tdID0gaTsKJiM0MzsJCQlub2RlbWFza3NbaXRoX25vZGVtYXNrJiM0MzsmIzQzO10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KAomIzQzOwkJCQkJbnVtYV9hbGxvY2F0ZV9ub2RlbWFzaygpLCBpKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpZiAoaXRoX25vZGVtYXNrICE9IDIgfHwgIW5vZGVtYXNrc1swXSB8fCAhbm9kZW1hc2tzWzFdKQomIzQzOwkJY2xlYW51cCgmIzM0O0ZhaWxlZCB0byBjcmVhdGUgbm9kZW1hc2tzLiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7Lyogc2V0dXBfdGhyZWFkcwomIzQzOyAqCiYjNDM7ICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHNldHVwX3RocmVhZHModm9pZCkgewomIzQzOwlwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHBlcl90aHJlYWRfYXJncykpOwomIzQzOwlpZiAoIXBlcl90aHJlYWRfYXJncykKJiM0MzsJCWNsZWFudXAoJiMzNDtjYWxsb2MgdGhyZWFkIGFyZ3MuJiMzNDspOwomIzQzOwomIzQzOwl0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTsKJiM0MzsJaWYgKCF0aHJlYWRzKSB7CiYjNDM7CQljbGVhbnVwKCYjMzQ7Y2FsbG9jIHRocmVhZHMuJiMzNDspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIHJlc2VydmVfaHVnZXBhZ2UKJiM0MzsgKgomIzQzOyAqIEhlbHBlciBmdW5jdGlvbiB0byByZXNlcnZlIGEgaHVnZXRsYiBwYWdlCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcqIHJlc2VydmVfaHVnZXBhZ2Uodm9pZCkgewomIzQzOwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCiYjNDM7CQlNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiwgLTEsIDApOwomIzQzO30KJiM0MzsKJiM0MzsvKiB0aHJlYWRfd29yawomIzQzOyAqCiYjNDM7ICogVGVzdCBydW5uZXJzLiBQZXJmb3JtcyB0aGUgd29yayBvZiByZXNlcnZpbmcgYW5kIGZyZWVpbmcgaHVnZXRsYiBwYWdlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCAqdGhyZWFkX3dvcmsodm9pZCAqYXJnKSB7CiYjNDM7CXN0cnVjdCB0aHJlYWRfYXJncyogdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyopIGFyZzsKJiM0MzsJdW5zaWduZWQgbG9uZyAqKmh1Z2VwYWdlczsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLSZndDt0b19yZXNlcnZlLAomIzQzOwkJCQkJCXNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7CiYjNDM7CiYjNDM7CS8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovCiYjNDM7CWlmICh0X2FyZ3MtJmd0O215X25vZGVtYXNrKQomIzQzOwkJbnVtYV9iaW5kKHRfYXJncy0mZ3Q7bXlfbm9kZW1hc2spOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdF9hcmdzLSZndDt0b19yZXNlcnZlOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpOwomIzQzOwkJLyogVGVzdHMgbWF5IHB1cnBvc2VmdWxseSB0cnkgdG8gb3ZlcmFsbG9jYXRlLCBzbyBqdXN0CiYjNDM7CQkgKiBmYWxsIHRocm91Z2ggcmF0aGVyIHRoYW4gZXJyb3Igb3V0Ki8KJiM0MzsJCWlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkgewomIzQzOwkJCXRfYXJncy0mZ3Q7dG9fcmVzZXJ2ZSA9IGk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi8KJiM0MzsJcHRocmVhZF9tdXRleF9sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwl3aGlsZSghd2FrZV9jb25kKSB7CiYjNDM7CQlwdGhyZWFkX2NvbmRfd2FpdCgmYW1wO2NvbmQsICZhbXA7bXV0ZXgpOwomIzQzOwl9CiYjNDM7CXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhbXA7bXV0ZXgpOwomIzQzOwomIzQzOwkvKiBUcnkgdG8gZnJlZSB0aG9zZSBodWdldGxiIHBhZ2VzICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0X2FyZ3MtJmd0O3RvX3Jlc2VydmU7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAobXVubWFwKGh1Z2VwYWdlc1tpXSwgSFBTSVpFX0JZVEVTKSAmbHQ7IDApCiYjNDM7CQkJa3NmdF9wZXJyb3IoJiMzNDttdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwlmcmVlKGh1Z2VwYWdlcyk7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MzsvKiB3YWtlX2NoaWxkcmVuCiYjNDM7ICoKJiM0MzsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gd2FrZSBjaGlsZHJlbiB0aHJlYWRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHdha2VfY2hpbGRyZW4odm9pZCkgewomIzQzOwlwdGhyZWFkX211dGV4X2xvY2soJmFtcDttdXRleCk7CiYjNDM7CXdha2VfY29uZCA9IDE7CiYjNDM7CXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJmFtcDtjb25kKTsKJiM0MzsJcHRocmVhZF9tdXRleF91bmxvY2soJmFtcDttdXRleCk7CiYjNDM7fQomIzQzOwomIzQzOy8qIHRlc3QxCiYjNDM7ICoKJiM0MzsgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIGFueXdoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QxKHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzBdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBnX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSAmYW1wOyZhbXA7CiYjNDM7CQkJICgobjBfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8CiYjNDM7CQkJIChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSkpLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIGFueXdoZXJlXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDIKJiM0MzsgKgomIzQzOyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2Ugd2l0aAomIzQzOyAqIGEgbWVtcG9saWN5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QyKHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwomIzQzOwl1c2xlZXAoNTAwMDAwKTsKJiM0MzsKJiM0MzsJZ2V0X2h1Z2VwYWdlX3N0YXRzKCk7CiYjNDM7CWtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIGdfcmVzdl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMF9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOyBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsKJiM0MzsJCQkgbjFfbnJfaHVnZXBhZ2VzID09IDAgJmFtcDsmYW1wOyBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLAomIzQzOwkJCSAmIzM0O1Jlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDMKJiM0MzsgKgomIzQzOyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwl3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAwOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1sxXSk7CiYjNDM7CiYjNDM7CXVzbGVlcCg1MDAwMDApOwomIzQzOwomIzQzOwlnZXRfaHVnZXBhZ2Vfc3RhdHMoKTsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX25yX2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsKJiM0MzsJCQkgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsCiYjNDM7CQkJICYjMzQ7U2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7CiYjNDM7CXdha2VfY29uZCA9IDA7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzO30KJiM0MzsKJiM0MzsvKiB0ZXN0NAomIzQzOyAqCiYjNDM7ICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMQomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHRlc3Q0KHZvaWQpIHsKJiM0MzsJcmVzZXRfaHVnZXBhZ2VzKCk7CiYjNDM7CiYjNDM7CXdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpOwomIzQzOwl3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTsKJiM0MzsKJiM0MzsJcHRocmVhZF9jcmVhdGUoJmFtcDt0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgJmFtcDtwZXJfdGhyZWFkX2FyZ3NbMF0pOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1sxXSk7CiYjNDM7CiYjNDM7CXVzbGVlcCg1MDAwMDApOwomIzQzOwomIzQzOwlnZXRfaHVnZXBhZ2Vfc3RhdHMoKTsKJiM0MzsJa3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX25yX2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsKJiM0MzsJCQkgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyICZhbXA7JmFtcDsgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4wX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsKJiM0MzsJCQkgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCAmYW1wOyZhbXA7IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMV9ucl9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsCiYjNDM7CQkJICYjMzQ7UmVzZXJ2ZSAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxuJiMzNDspOwomIzQzOwomIzQzOwl3YWtlX2NoaWxkcmVuKCk7CiYjNDM7CXB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpOwomIzQzOwl3YWtlX2NvbmQgPSAwOwomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdGVzdDUKJiM0MzsgKgomIzQzOyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTEgYW5kCiYjNDM7ICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgdGVzdDUodm9pZCkgewomIzQzOwlyZXNldF9odWdlcGFnZXMoKTsKJiM0MzsKJiM0MzsJd3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7CiYjNDM7CXdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTsKJiM0MzsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdOwomIzQzOwlwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7CiYjNDM7CXBlcl90aHJlYWRfYXJnc1sxXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1sxXTsKJiM0MzsJcGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyOwomIzQzOwomIzQzOwlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZHNbMF0sIE5VTEwsIHRocmVhZF93b3JrLCAmYW1wO3Blcl90aHJlYWRfYXJnc1swXSk7CiYjNDM7CXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkc1sxXSwgTlVMTCwgdGhyZWFkX3dvcmssICZhbXA7cGVyX3RocmVhZF9hcmdzWzFdKTsKJiM0MzsKJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7CiYjNDM7CWdldF9odWdlcGFnZV9zdGF0cygpOwomIzQzOwlrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiAmYW1wOyZhbXA7IGdfbnJfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOwomIzQzOwkJCSBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgJmFtcDsmYW1wOyBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjBfbnJfaHVnZXBhZ2VzID09IDEgJmFtcDsmYW1wOwomIzQzOwkJCSBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwICZhbXA7JmFtcDsgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSAmYW1wOyZhbXA7CiYjNDM7CQkJIG4xX25yX2h1Z2VwYWdlcyA9PSAxICZhbXA7JmFtcDsgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSwKJiM0MzsJCQkgJiMzNDtJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXG4mIzM0Oyk7CiYjNDM7CiYjNDM7CXdha2VfY2hpbGRyZW4oKTsKJiM0MzsJcHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpOwomIzQzOwlwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7CiYjNDM7CXdha2VfY29uZCA9IDA7CiYjNDM7CXJlc2V0X2h1Z2VwYWdlcygpOwomIzQzOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbWFpbih2b2lkKSB7CiYjNDM7CWtzZnRfcHJpbnRfaGVhZGVyKCk7CiYjNDM7CWtzZnRfc2V0X3BsYW4oNSk7CiYjNDM7CiYjNDM7CWNoZWNrX3JlcXVpcmVtZW50cygpOwomIzQzOwlzZXR1cF90aHJlYWRzKCk7CiYjNDM7CXNldHVwX25vZGVfaW5mbygpOwomIzQzOwlzZXR1cF9wYXRocygpOwomIzQzOwlzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTsKJiM0MzsKJiM0MzsJdGVzdDEoKTsKJiM0MzsJdGVzdDIoKTsKJiM0MzsJdGVzdDMoKTsKJiM0MzsJdGVzdDQoKTsKJiM0MzsJdGVzdDUoKTsKJiM0MzsKJiM0MzsJcmVzdG9yZV9odWdlcGFnZV9jb25maWdzKCk7CiYjNDM7CWtzZnRfZmluaXNoZWQoKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoCmluZGV4IGMxN2IxMzNhODFkMjQ4Li5jZDM2OGNlNTkwYTc0YyAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2gKQEAgLTI5Nyw2ICYjNDM7Mjk3LDcgQEAgQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXAKIENBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXBhZ2Utdm1lbW1hcAogQ0FURUdPUlk9JiMzNDtodWdldGxiJiMzNDsgcnVuX3Rlc3QgLi9odWdldGxiLW1hZHZpc2UKIENBVEVHT1JZPSYjMzQ7aHVnZXRsYiYjMzQ7IHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW8KJiM0MztDQVRFR09SWT0mIzM0O2h1Z2V0bGImIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kKIAogaWYgWyAmIzM0OyR7SEFWRV9IVUdFUEFHRVN9JiMzNDsgPSAmIzM0OzEmIzM0OyBdOyB0aGVuCiAJbnJfaHVnZXBhZ2VzX3RtcD0kKGNhdCAvcHJvYy9zeXMvdm0vbnJfaHVnZXBhZ2VzKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTQ3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZVRMQiBTdXJwbHVzIFBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBmdW5jdGlvbiwgYW5kIGluY2x1ZGVzIGEgbmV3IHNlbGZ0ZXN0LCBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbmNvcnBvcmF0aW5nIGBhbGxvd2VkX21lbXNfbnIoaClgIGludG8gdGhlIGNhbGN1bGF0aW9uIG9mIG5lZWRlZCBodWdlIHBhZ2VzLiBUaGV5JiMzOTt2ZSBtb3ZlZCBpdHMgZGVmaW5pdGlvbiBoaWdoZXIgdXAgaW4gdGhlIGZpbGUsIGFuZCBhcmUgbm93IHVzaW5nIGl0IHdpdGhpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLgoKTGV0JiMzOTtzIHNlZSwgdGhlIGNoYW5nZXMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBpdHNlbGYgbW9kaWZ5IHRoZSBjYWxjdWxhdGlvbjoKCmBgYGMKLQluZWVkZWQgPSAoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtJmd0O2ZyZWVfaHVnZV9wYWdlczsKJiM0MzsJbmVlZGVkID0gbWF4KChsb25nKSAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLAomIzQzOwkJKGxvbmcpICgoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtJmd0O2ZyZWVfaHVnZV9wYWdlcykpOwpgYGAKYW5kCmBgYGMKLQluZWVkZWQgPSAoaC0mZ3Q7cmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtCi0JCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCk7CiYjNDM7CW5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLAomIzQzOwkJCShsb25nKSAoKGgtJmd0O3Jlc3ZfaHVnZV9wYWdlcyAmIzQzOyBkZWx0YSkgLQomIzQzOwkJCQkoaC0mZ3Q7ZnJlZV9odWdlX3BhZ2VzICYjNDM7IGFsbG9jYXRlZCkpKTsKYGBgCgpSaWdodCwgc28gdGhpcyBsb2dpYyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGhvdyB0aGUga2VybmVsIG1hbmFnZXMgc3VycGx1cyBodWdlIHBhZ2VzLCBhbmQgKmNydWNpYWxseSosIGl0JiMzOTtzIG5vdyBjb25zaWRlcmluZyB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKE5VTUEpLiBHaXZlbiB0aGUgZnVuY3Rpb25hbCBuYXR1cmUgb2YgdGhpcyBjaGFuZ2UgYW5kIHRoZSBpbnZvbHZlbWVudCBvZiBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhlIGludGVyYWN0aW9uIHdpdGggbWVtcG9saWNpZXMsIGluIHBhcnRpY3VsYXIsIGxvb2tzIGxpa2UgYSBnb29kIGFyZWEgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcuCgpOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY29uZmlnIG9wdGlvbnMgYXJlIGVzc2VudGlhbCBmb3IgdGhpcyB0byBldmVuICpiZSogYWN0aXZlLiBPYnZpb3VzbHksIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgcHJpbWFyeSBvbmUsIHNpbmNlIHRoaXMgaXMgYWxsIGFib3V0IEh1Z2VUTEIgcGFnZXMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5Li4uIFllcCwgdGhhdCYjMzk7cyB0aGUgYmFzZSByZXF1aXJlbWVudC4gR29vZCB0byBrbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yMjU4PXN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4tLVxubW0vaHVnZXRsYi5jLTIyNzgtICovXG5tbS9odWdldGxiLmM6MjI3OTpzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtMjI4MC1cdF9fbXVzdF9ob2xkKFx1MDAyNmh1Z2V0bGJfbG9jaylcbi0tXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtNDY0NS1cdGlmIChkZWx0YSBcdTAwM2UgMCkge1xubW0vaHVnZXRsYi5jOjQ2NDY6XHRcdGlmIChnYXRoZXJfc3VycGx1c19wYWdlcyhoLCBkZWx0YSkgXHUwMDNjIDApXG5tbS9odWdldGxiLmMtNDY0Ny1cdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIzOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEludGVyYWN0aW9uIG9mIEh1Z2VUTEIgQWNjb3VudGluZyBhbmQgUGFnZSBSZXRyaWV2YWwqKgoKT2theSwgc28gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBpcyBjYWxsZWQgc3BlY2lmaWNhbGx5IGJ5IGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhhdCYjMzk7cyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbWlnaHQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yIHdpdGhpbiB0aGUgYG1tL2h1Z2V0bGIuY2AgY29udGV4dC4gR2l2ZW4gdGhhdCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGxpa2VseSBoYW5kbGVzIHRoZSByZXRyaWV2YWwgb2YgcGFnZXMsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZGVhbHMgd2l0aCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLCBJJiMzOTttIGV4cGVjdGluZyB0byBkZWx2ZSBpbnRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBpbmNvbnNpc3RlbmNpZXMuIEnigJlsbCBuZWVkIHRvIGV4cGxvcmUgaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB3aGljaCBwYWdlcyBhcmUgY29uc2lkZXJlZCAmIzM0O3N1cnBsdXMsJiMzNDsgdW5kZXIgd2hhdCBjb25kaXRpb25zIHRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLCBhbmQgaG93IHRoZSBhY2NvdW50aW5nIGludGVyYWN0cyB3aXRoIHBhZ2UgcmVjbGFtYXRpb24gb3IgYWxsb2NhdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb25zIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCBhcmUgd2hlcmUgdGhlIGtub2JzIGFyZSBsaWtlbHkgdG8gYmU7IEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgc2V0dGluZ3MgcmVsYXRlZCB0byBwYWdlIHNpemUsIG1lbW9yeSBsaW1pdHMsIGFuZCBwZXJoYXBzIHBvbGljaWVzIGZvciBwYWdlIHJldGlyZW1lbnQgb3Igc3dhcHBpbmcgdGhhdCBpbXBhY3QgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVx0JiM0Mzs9IGRtYXBvb2wub1xubW0vTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcdCYjNDM7PSBodWdldGxiLm8gaHVnZXRsYl9zeXNmcy5vIGh1Z2V0bGJfc3lzY3RsLm9cbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYzNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICoqQW5hbHl6aW5nIFBvc3NpYmxlIERlcGVuZGVuY2llcyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKiouCgpSaWdodCwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBgQ09ORklHX0hVR0VUTEJGU2AgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0LCBJIGFsc28gbmVlZCB0byBjb25zaWRlciB0aGUgaW50ZXJwbGF5IHdpdGggb3RoZXIgcG90ZW50aWFsbHkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gU3BlY2lmaWNhbGx5LCBgQ09ORklHX05VTUFgIGNhdGNoZXMgbXkgZXllLiBUaGUgbWVudGlvbnMgb2YgYGFsbG93ZWRfbWVtc19ucmAgYW5kIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIHdpdGhpbiB0aGUgTlVNQSBjb250ZXh0IGFyZSBtYWtpbmcgbWUgdGhpbmsgdGhpcyBtaWdodCBiZSBtb3JlIGludGVyY29ubmVjdGVkIHRoYW4gSSBpbml0aWFsbHkgYW50aWNpcGF0ZWQuIFRoZXNlIGZsYWdzIG9mdGVuIGludm9sdmUgdGhlIG1lbW9yeSBub2RlIGFuZCBiaW5kaW5nIHBvbGljaWVzLCBhIGNyaXRpY2FsIGFyZWEgd2hlbiBkZWFsaW5nIHdpdGggSHVnZVRMQi4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGFsbG93ZWRfbWVtc19ucmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvd2VkX21lbXNfbnImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIyNDE9c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXG4tLVxubW0vaHVnZXRsYi5jLTIyNTctXG5tbS9odWdldGxiLmM6MjI1ODpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxubW0vaHVnZXRsYi5jLTIyNTkte1xuLS1cbm1tL2h1Z2V0bGIuYz0yMjc5PXN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtMjI5Ni1cdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbm1tL2h1Z2V0bGIuYzoyMjk3Olx0bmVlZGVkID0gbWF4KChsb25nKSAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxubW0vaHVnZXRsYi5jLTIyOTgtXHRcdChsb25nKSAoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICYjNDM7IGRlbHRhKSAtIGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XG4tLVxubW0vaHVnZXRsYi5jLTIzMzEtXHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG5tbS9odWdldGxiLmM6MjMzMjpcdG5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxubW0vaHVnZXRsYi5jLTIzMzMtXHRcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgJiM0MzsgZGVsdGEpIC1cbi0tXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbi0tXG5tbS9odWdldGxiLmMtNDY0OC1cbm1tL2h1Z2V0bGIuYzo0NjQ5Olx0XHRpZiAoZGVsdGEgXHUwMDNlIGFsbG93ZWRfbWVtc19ucihoKSkge1xubW0vaHVnZXRsYi5jLTQ2NTAtXHRcdFx0cmV0dXJuX3VudXNlZF9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTM0MgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcGVyc3BlY3RpdmUgb2Ygc29tZW9uZSBrbm93bGVkZ2VhYmxlIGluIHRoZSBmaWVsZDoKCioqQ2hlY2tpbmcgZm9yIE5VTUEgUG9saWN5IEJpbmRpbmdzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgY3JpdGljYWwgcmVsYXRlZCB0byBOVU1BIGFuZCBpdHMgbWVtb3J5IGJpbmRpbmcgY2FwYWJpbGl0aWVzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYHBvbGljeV9tYmluZF9ub2RlbWFza2AgaXMgYWN0dWFsbHkgZGVmaW5lZC4gVGhpcyBpcyBhIGNydWNpYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgbWFuYWdpbmcgbWVtb3J5IGFmZmluaXR5IGFuZCBwbGFjZW1lbnQgb24gc3lzdGVtcyB3aXRoIE5vbi1Vbmlmb3JtIE1lbW9yeSBBY2Nlc3MgYXJjaGl0ZWN0dXJlLiBVbmRlcnN0YW5kaW5nIHRoaXMgZGVmaW5pdGlvbiwgb3IgbGFjayB0aGVyZW9mLCBzaWduaWZpY2FudGx5IGltcGFjdHMgaG93IEkgYXBwcm9hY2ggbWVtb3J5IGFsbG9jYXRpb24gc3RyYXRlZ2llcyBhbmQgcG90ZW50aWFsbHkgaG93IEkgY29uZmlndXJlIHRoZSBrZXJuZWwgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGVjayBiZWZvcmUgSSBjYW4gcHJvY2VlZCB3aXRoIGZ1cnRoZXIgYW5hbHlzaXMgb3IgaW1wbGVtZW50YXRpb24gb2YgTlVNQS1hd2FyZSBjb2RlLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgYW0gZG9pbmcgaXQgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BvbGljeV9tYmluZF9ub2RlbWFzayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MjIxOD1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG4tLVxubW0vaHVnZXRsYi5jLTIyNDAtXG5tbS9odWdldGxiLmM6MjI0MTpzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbm1tL2h1Z2V0bGIuYy0yMjQyLXtcbi0tXG5tbS9odWdldGxiLmM9MjI1OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjY1LVxubW0vaHVnZXRsYi5jOjIyNjY6XHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XG5tbS9odWdldGxiLmMtMjI2Ny1cdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcbi0tXG5tbS9odWdldGxiLmM9MjI3OT1zdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4tLVxubW0vaHVnZXRsYi5jLTIyODktXG5tbS9odWdldGxiLmM6MjI5MDpcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGh0bGJfYWxsb2NfbWFzayhoKSk7XG5tbS9odWdldGxiLmMtMjI5MS1cdGlmIChtYmluZF9ub2RlbWFzaylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5MDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSYjMzk7cyBob3cgSSYjMzk7ZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6CgoqKkNoZWNraW5nIGZvciBOVU1BIENvbmZpZ3VyYXRpb24gaW4gUG9saWN5IEJpbmRpbmdzKioKCkFscmlnaHQsIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgdXNlIG9mIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBOVU1BLiBGaXJzdCwgbXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNvbmZpcm0gd2hldGhlciB0aGUgY29tcGlsYXRpb24gb2YgdGhpcyBmdW5jdGlvbiBpcyBjb25kaXRpb25hbCBvbiBOVU1BIGJlaW5nIGVuYWJsZWQuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiBgI2lmZGVmIENPTkZJR19OVU1BYCBjb250cm9scyBpdHMgYXZhaWxhYmlsaXR5LiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50LiBJIHN1c3BlY3QgaXQmIzM5O3MgcHJvYmFibHkgZ3VhcmRlZCBieSB0aGF0IG1hY3JvLiBJZiBzbywgdGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGNvcmUgc3lzdGVtIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmZWF0dXJlLiBJZiBub3QsIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjMwOlx0XHRcdH1cbjIyMzE6XHRcdH1cbjIyMzI6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuMjIzMzpcdFxuMjIzNDpcdFx0LyogV2UgY2Fubm90IGZhbGxiYWNrIHRvIG90aGVyIG5vZGVzLCBhcyB3ZSBjb3VsZCBicmVhayB0aGUgcGVyLW5vZGUgcG9vbC4gKi9cbjIyMzU6XHRcdGlmICghYWxsb3dfYWxsb2NfZmFsbGJhY2spXG4yMjM2Olx0XHRcdGdmcF9tYXNrIHw9IF9fR0ZQX1RISVNOT0RFO1xuMjIzNzpcdFxuMjIzODpcdFx0cmV0dXJuIGFsbG9jX21pZ3JhdGVfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgcHJlZmVycmVkX25pZCwgbm1hc2spO1xuMjIzOTpcdH1cbjIyNDA6XHRcbjIyNDE6XHRzdGF0aWMgbm9kZW1hc2tfdCAqcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF90IGdmcClcbjIyNDI6XHR7XG4yMjQzOlx0I2lmZGVmIENPTkZJR19OVU1BXG4yMjQ0Olx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuMjI0NTpcdFxuMjI0NjpcdFx0LypcbjIyNDc6XHRcdCAqIE9ubHkgZW5mb3JjZSBNUE9MX0JJTkQgcG9saWN5IHdoaWNoIG92ZXJsYXBzIHdpdGggY3B1c2V0IHBvbGljeVxuMjI0ODpcdFx0ICogKGZyb20gcG9saWN5X25vZGVtYXNrKSBzcGVjaWZpY2FsbHkgZm9yIGh1Z2V0bGIgY2FzZVxuMjI0OTpcdFx0ICovXG4yMjUwOlx0XHRpZiAobXBvbC1cdTAwM2Vtb2RlID09IE1QT0xfQklORCBcdTAwMjZcdTAwMjZcbjIyNTE6XHRcdFx0KGFwcGx5X3BvbGljeV96b25lKG1wb2wsIGdmcF96b25lKGdmcCkpIFx1MDAyNlx1MDAyNlxuMjI1MjpcdFx0XHQgY3B1c2V0X25vZGVtYXNrX3ZhbGlkX21lbXNfYWxsb3dlZChcdTAwMjZtcG9sLVx1MDAzZW5vZGVzKSkpXG4yMjUzOlx0XHRcdHJldHVybiBcdTAwMjZtcG9sLVx1MDAzZW5vZGVzO1xuMjI1NDpcdCNlbmRpZlxuMjI1NTpcdFx0cmV0dXJuIE5VTEw7XG4yMjU2Olx0fVxuMjI1NzpcdFxuMjI1ODpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXG4yMjU5Olx0e1xuMjI2MDpcdFx0aW50IG5vZGU7XG4yMjYxOlx0XHR1bnNpZ25lZCBpbnQgbnIgPSAwO1xuMjI2MjpcdFx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XG4yMjYzOlx0XHR1bnNpZ25lZCBpbnQgKmFycmF5ID0gaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcbjIyNjQ6XHRcdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuMjI2NTpcdFxuMjI2NjpcdFx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xuMjI2NzpcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZCkge1xuMjI2ODpcdFx0XHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcbjIyNjk6XHRcdFx0XHRuciAmIzQzOz0gYXJyYXlbbm9kZV07XG4yMjcwOlx0XHR9XG4yMjcxOlx0XG4yMjcyOlx0XHRyZXR1cm4gbnI7XG4yMjczOlx0fVxuMjI3NDpcdFxuMjI3NTpcdC8qXG4yMjc2Olx0ICogSW5jcmVhc2UgdGhlIGh1Z2V0bGIgcG9vbCBzdWNoIHRoYXQgaXQgY2FuIGFjY29tbW9kYXRlIGEgcmVzZXJ2YXRpb25cbjIyNzc6XHQgKiBvZiBzaXplICYjMzk7ZGVsdGEmIzM5Oy5cbjIyNzg6XHQgKi9cbjIyNzk6XHRzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODkyCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBQb3RlbnRpYWwgSW1wYWN0cyBvZiBhIFBhdGNoKioKClJpZ2h0LCBgQ09ORklHX05VTUFgIGlzIGRlZmluaXRlbHkgd29ydGggY29uc2lkZXJpbmc7IGl0JiMzOTtzIHByYWN0aWNhbGx5IHNjcmVhbWluZyByZWxldmFuY2UgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gY2hhbmdlcyB3aXRoaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRoYXQmIzM5O3MgdGhlIGtleS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgcmVhbCBpbXBhY3QgaGluZ2VzIG9uIGhvdyBgaHVnZXRsYl9hY2N0X21lbW9yeWAgYmVoYXZlcyBhbmQgd2hlcmUgdGhhdCBmdW5jdGlvbiBpcyB1c2VkIGluIHJlbGF0aW9uIHRvIE5VTUEuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBOVU1BIGNvbmZpZ3VyYXRpb24gZGlyZWN0bHkgaW5mbHVlbmNlcyB0aGUgYmVoYXZpb3Igb2YgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGFuZCBob3cgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBhcmUgZ29pbmcgdG8gY2hhbmdlIHRoZSBhY2NvdW50aW5nIHByb2NlZHVyZSB1bmRlciBOVU1BIGFyY2hpdGVjdHVyZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZnVuY3Rpb24gYW5kIGl0cyBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2FjY3RfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTQ5PUFmdGVyIGNvbnN1bHRpbmcgdGhlIHJlc2VydmF0aW9uIG1hcCBhbmQgc3VicG9vbCwgdGhlIG51bWJlciBvZiBuZWVkZWQgbmV3XG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MDpyZXNlcnZhdGlvbnMgaXMga25vd24uICBUaGUgcm91dGluZSBodWdldGxiX2FjY3RfbWVtb3J5KCkgaXMgY2FsbGVkIHRvIGNoZWNrXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MTpmb3IgYW5kIHRha2UgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcmVzZXJ2YXRpb25zLiAgaHVnZXRsYl9hY2N0X21lbW9yeSgpXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1Mi1jYWxscyBpbnRvIHJvdXRpbmVzIHRoYXQgcG90ZW50aWFsbHkgYWxsb2NhdGUgYW5kIGFkanVzdCBzdXJwbHVzIHBhZ2UgY291bnRzLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MzEwPXRoZSBtaW5faHBhZ2VzIGZpZWxkIG9mIGEgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wuICBBdCBtb3VudCB0aW1lLFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDozMTE6aHVnZXRsYl9hY2N0X21lbW9yeShtaW5faHBhZ2VzKSBpcyBjYWxsZWQgdG8gcmVzZXJ2ZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZlxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0zMTItaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuLS1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9NTU4PWludG8gYWNjb3VudC4gIFdoaWxlIGNwdXNldHMgYXJlIG5vdCBleGFjdGx5IHRoZSBzYW1lIGFzIG1lbW9yeSBwb2xpY3ksIHRoaXNcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NTU5OmNvbW1lbnQgaW4gaHVnZXRsYl9hY2N0X21lbW9yeSBzdW1zIHVwIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHJlc2VydmF0aW9uc1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC01NjAtYW5kIGNwdXNldHMvbWVtb3J5IHBvbGljeTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjY65Zyo5ZKo6K+i5LqG6aKE55WZ5pig5bCE5ZKM5a2Q5rGg5LmL5ZCO77yM5bCx55+l6YGT5LqG6ZyA6KaB55qE5paw6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp5Ye95pWw6KKr6LCD55So5Lul5qOA5p+lXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjc65bm26I635Y+W5omA6KaB5rGC55qE6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp6LCD55So5Yiw5Y+v6IO95YiG6YWN5ZKM6LCD5pW05Ymp5L2Z6aG15pWw55qE5Ye95pWw44CC54S26ICM77yM5Zyo6L+ZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xMjgt5Lqb5Ye95pWw5Lit77yM5Luj56CB5Y+q5piv5qOA5p+l5Lul56Gu5L+d5pyJ6Laz5aSf55qE56m66Zey55qE5beo6aG15p2l5a6557qz6aKE55WZ44CC5aaC5p6c5pyJ55qE6K+d77yM5YWo5bGA6aKE55WZ6K6h5pWwcmVzdl9odWdlX3BhZ2VzXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MjI2PXBhZ2UtXHUwMDNlcHJpdmF0ZeWtl+auteaMh+WQkeS4juivpemhteebuOWFs+eahOS7u+S9leWtkOaxoOOAguWmguaenFBhZ2VQcml2YXRl5qCH5b+X6KKr6K6+572u77yM5a6D6KGo5piO5YWo5bGA6aKE55WZ6K6h5pWwXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ0LeWmguaenOaMh+WumuS6hui/meS4qumAiemhue+8jOS4jm1pbl9zaXpl55u45a+55bqU55qE5beo6aG155qE5pWw6YeP5bCG6KKr6aKE55WZ57uZ5paH5Lu257O757uf5L2/55So44CC6L+Z5Liq5pWw5a2X5Zyo57uT5p6E5L2TXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDU6aHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWVtb3J5KG1pbl9ocGFnZXMpXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNDYt6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MzMxPXJlZ2lvbl9jb3VudCgp5Zyo6Kej6Zmk56eB5pyJ5beo6aG15pig5bCE5pe26KKr6LCD55So44CC5Zyo56eB5pyJ5pig5bCE5Lit77yM6aKE55WZ5pig5bCE5Lit5rKh5pyJ5p2h55uu6KGo5piO5a2Y5Zyo5LiA5Liq6aKE55WZ44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNDEwLeWcqOS4gOauteaXtumXtOWQjuWKoOWFpeeahOOAguW9k+mihOeVmeiiq+a3u+WKoOaXtu+8jOayoeacieWwneivleWwhuWGheWtmOetlueVpeiAg+iZkeWcqOWGheOAguiZveeEtmNwdXNldHPkuI7lhoXlrZjnrZbnlaXkuI1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjQxMTrlrozlhajnm7jlkIzvvIzkvYZodWdldGxiX2FjY3RfbWVtb3J55Lit55qE6L+Z5Liq5rOo6YeK5oC757uT5LqG6aKE55WZ5ZKMY3B1c2V0cy/lhoXlrZjnrZbnlaXkuYvpl7TnmoTnm7jkupLkvZxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMi3nlKg6OlxuLS1cbm1tL2h1Z2V0bGIuYz0xMTQ9c3RydWN0IG11dGV4ICpodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlIF9fcm9fYWZ0ZXJfaW5pdDtcbi0tXG5tbS9odWdldGxiLmMtMTE2LS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi9cbm1tL2h1Z2V0bGIuYzoxMTc6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpO1xubW0vaHVnZXRsYi5jLTExOC1zdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuLS1cbm1tL2h1Z2V0bGIuYz0xMzY9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuLS1cbm1tL2h1Z2V0bGIuYy0xNDUtXHRcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxubW0vaHVnZXRsYi5jOjE0NjpcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KHNwb29sLVx1MDAzZWhzdGF0ZSxcbm1tL2h1Z2V0bGIuYy0xNDctXHRcdFx0XHRcdFx0LXNwb29sLVx1MDAzZW1pbl9ocGFnZXMpO1xuLS1cbm1tL2h1Z2V0bGIuYz0xNTI9c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKmh1Z2VwYWdlX25ld19zdWJwb29sKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgbWF4X2hwYWdlcyxcbi0tXG5tbS9odWdldGxiLmMtMTY2LVxubW0vaHVnZXRsYi5jOjE2NzpcdGlmIChtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBodWdldGxiX2FjY3RfbWVtb3J5KGgsIG1pbl9ocGFnZXMpKSB7XG5tbS9odWdldGxiLmMtMTY4LVx0XHRrZnJlZShzcG9vbCk7XG4tLVxubW0vaHVnZXRsYi5jPTk1OD12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxubW0vaHVnZXRsYi5jLTk2Ny1cbm1tL2h1Z2V0bGIuYzo5Njg6XHRcdGlmICghaHVnZXRsYl9hY2N0X21lbW9yeShoLCAxKSlcbm1tL2h1Z2V0bGIuYy05NjktXHRcdFx0cmVzZXJ2ZWQgPSB0cnVlO1xuLS1cbm1tL2h1Z2V0bGIuYz0yODkxPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAxNi1cdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jOjMwMTc6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG5tbS9odWdldGxiLmMtMzAxOC1cdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tLVxubW0vaHVnZXRsYi5jLTMwNTItXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jOjMwNTM6XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy0zMDU0LVx0fVxuLS1cbm1tL2h1Z2V0bGIuYz00NjA0PXVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy00NjEzLVxubW0vaHVnZXRsYi5jOjQ2MTQ6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXG5tbS9odWdldGxiLmMtNDYxNS17XG4tLVxubW0vaHVnZXRsYi5jPTQ3MDQ9c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNDcyOC1cdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmM6NDcyOTpcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xubW0vaHVnZXRsYi5jLTQ3MzAtXHR9XG4tLVxubW0vaHVnZXRsYi5jPTY1NTY9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjY0NC1cdCAqL1xubW0vaHVnZXRsYi5jOjY2NDU6XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy02NjQ2LVx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5tbS9odWdldGxiLmMtNjY2My1cdFx0aWYgKHVubGlrZWx5KGFkZCBcdTAwM2MgMCkpIHtcbm1tL2h1Z2V0bGIuYzo2NjY0Olx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy02NjY1LVx0XHRcdGVyciA9IGFkZDtcbi0tXG5tbS9odWdldGxiLmMtNjY4Ni1cdFx0XHRcdFx0XHRcdFx0Y2hnIC0gYWRkKTtcbm1tL2h1Z2V0bGIuYzo2Njg3Olx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xubW0vaHVnZXRsYi5jLTY2ODgtXHRcdH0gZWxzZSBpZiAoaF9jZykge1xuLS1cbm1tL2h1Z2V0bGIuYy02NzA4LVx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo2NzA5Olx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XG5tbS9odWdldGxiLmMtNjcxMC1cdH1cbi0tXG5tbS9odWdldGxiLmM9NjczNz1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxuLS1cbm1tL2h1Z2V0bGIuYy02NzcyLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XG5tbS9odWdldGxiLmM6Njc3MzpcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbm1tL2h1Z2V0bGIuYy02Nzc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUwNAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5YCBUZXN0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5YCB0ZXN0LiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHJlc2lkZXMuICBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgaHVnZXRsYl9hY2N0X21lbW9yeWAgaXMgcHJldHR5IGZ1bmRhbWVudGFsLCBjYWxsZWQgZnJvbSBhbGwgb3ZlciB0aGUgcGxhY2Ug4oCTIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgaHVnZXRsYl91bnJlc2VydmVfcGFnZXNgLCBhbmQgZXZlbiBpbiBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiByb3V0aW5lcyBsaWtlIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYGh1Z2V0bGJfdm1fb3BfY2xvc2VgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0JiMzOTtzIGZpZ3VyZSBvdXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBzcGVjaWZpYyB0ZXN0LgoKU2luY2UgdGhlIHRlc3QgbGV2ZXJhZ2VzIGBudW1hLmhgIGFuZCBsaW5rcyB3aXRoIGAtbG51bWFgLCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBgQ09ORklHX05VTUFgIGlzIGVzc2VudGlhbDsgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gIEl0JiMzOTtzIGFsc28gaGlnaGx5IHByb2JhYmxlIHRoYXQgYENPTkZJR19IVUdFVExCRlNgIGFuZCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgYXJlIHJlcXVpcmVkIHRvIGVuYWJsZSBIdWdlVExCIHN1cHBvcnQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aG9zZSwgdGhvdWdoLgoKVG8gYmUgZXh0cmEgdGhvcm91Z2gsIEkmIzM5O2xsIGNvbnN1bHQgdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZWAgZGlyZWN0bHkuIEkgY2FuIHVzdWFsbHkgZ2xlYW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZnJvbSB0aGVyZSwgd2hpY2ggaXMgb2Z0ZW4gbW9yZSBkZWZpbml0aXZlIHRoYW4ganVzdCBndWVzc2luZy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBsaXN0IG9mIG5lZWRlZCBjb25maWdzIGZvciB0aGlzIHRlc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7dG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTA4PVRFU1RfR0VOX0ZJTEVTICYjNDM7PSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjEwOTpURVNUX0dFTl9GSUxFUyAmIzQzOz0gaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMTEwLVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlPTI2Mj0kKE9VVFBVVCkvcm1hcDogTERMSUJTICYjNDM7PSAtbG51bWFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTI2My1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjI2NDokKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICYjNDM7PSAtbG51bWFcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTI2NS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMtMi0vKlxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jOjM6ICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jLTQtICpcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0yOTk9Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaDozMDA6Q0FURUdPUlk9XCYjMzQ7aHVnZXRsYlwmIzM0OyBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTMwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzODIKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAgVGVzdCBmb3IgUm9idXN0bmVzcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgdGVzdCwgYGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lgLCB3aGljaCBpcyBhbGwgYWJvdXQgaG93IGh1Z2V0bGIgc3VycGx1cyBwYWdlcyBhbmQgbWVtcG9saWNpZXMgcGxheSB0b2dldGhlci4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBhcmVhIHdpdGggdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGludGVyYWN0aW9ucyBhbmQgZWRnZSBjYXNlcywgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCBpbiB0aGlzIGFyZWEuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dCBhbmQgcmVxdWlyZSBhIGNsb3NlciBsb29rIGFyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLCBgYWxsb3dlZF9tZW1zX25yYCwgYW5kIGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhlc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBiZWhhdmlvciByZXNpZGVzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHRoZSBtZW1wb2xpY3kgYXNwZWN0cyBkdXJpbmcgc3VycGx1cyBwYWdlIG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBwcm9wb3NlZCBjb25maWd1cmF0aW9ucyBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrLiBXZSBoYXZlIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBOVU1BYCBsaXN0ZWQuIEl0IG1ha2VzIHNlbnNlLCBhcyBhbGwgdGhvc2Ugc2V0dGluZ3MgaGF2ZSBhIGNsZWFyIHJlbGF0aW9uc2hpcCB0byB0aGUgdG9waWMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3IgYWNjaWRlbnRhbGx5IGVuYWJsaW5nIHNvbWV0aGluZyB0aGF0IHNob3VsZG4mIzM5O3QgYmUgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xNTg9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjQ6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTE2NS1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNjctXG5hcmNoL3NoL21tL0tjb25maWc6MTY4OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzEtXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE3NC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE3Ni1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xODAtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuLS1cbmZzL0tjb25maWctMjgyLVxuZnMvS2NvbmZpZzoyODM6Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xuZnMvS2NvbmZpZy0yODQtXHRkZWZfYm9vbCBIVUdFVExCX1BBR0Vcbi0tXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjU1LVxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTY1Ny1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEZWVwIERpdmUgaW50byBIdWdlIFBhZ2VzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiBodWdlIHBhZ2VzIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGBIVUdFVExCRlNgIGlzIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLiBJJiMzOTttIG5vdGluZyB0aGF0IHRoZSBgSFVHRVRMQl9QQUdFYCBvcHRpb24gZGVmYXVsdHMgdG8gYEhVR0VUTEJGU2AgaWYgbm90IGV4cGxpY2l0bHkgc2V0IG90aGVyd2lzZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZm9yIHRoZSBnZW5lcmFsIHNldHVwLiBJIG5lZWQgdG8gbWFrZSBzdXJlIE5VTUEgaXMgcHJvcGVybHkgZW5hYmxlZCBhcyB3ZWxsLgoKVG8gcmVhbGx5IGNlbWVudCBteSB1bmRlcnN0YW5kaW5nLCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGFuZCBgYWxsb3dlZF9tZW1zX25yYCBmdW5jdGlvbnMgd2l0aGluIGBtbS9odWdldGxiLmNgLiBUaGVzZSBhcmUga2V5IHdoZW4geW91JiMzOTtyZSBtYW5hZ2luZyBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZW5zdXJpbmcgdGhlIGFwcHJvcHJpYXRlIE5VTUEgbm9kZXMgYXJlIGNvbnNpZGVyZWQsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3VycGx1cyBwYWdlcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBmdW5jdGlvbnMgd2lsbCBjbGFyaWZ5IGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGZpbmVyIHBvaW50cyBvZiBodWdlIHBhZ2UgYWxsb2NhdGlvbiBhbmQgdXRpbGl6YXRpb24sIHBhcnRpY3VsYXJseSBpbiByZXNvdXJjZS1jb25zdHJhaW5lZCBlbnZpcm9ubWVudHMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIGFyb3VuZCBtZW1vcnkgbm9kZSBjb25zdHJhaW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2F0aGVyX3N1cnBsdXNfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtMjI3OC0gKi9cbm1tL2h1Z2V0bGIuYzoyMjc5OnN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbm1tL2h1Z2V0bGIuYy0yMjgwLVx0X19tdXN0X2hvbGQoXHUwMDI2aHVnZXRsYl9sb2NrKVxuLS1cbm1tL2h1Z2V0bGIuYz00NjE0PXN0YXRpYyBpbnQgaHVnZXRsYl9hY2N0X21lbW9yeShzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy00NjQ1LVx0aWYgKGRlbHRhIFx1MDAzZSAwKSB7XG5tbS9odWdldGxiLmM6NDY0NjpcdFx0aWYgKGdhdGhlcl9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKSBcdTAwM2MgMClcbm1tL2h1Z2V0bGIuYy00NjQ3LVx0XHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAzOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBjZW50ZXJlZCBhcm91bmQgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggc3VycGx1cyBwYWdlcywgYW5kIGl0JiMzOTtzIGFkZGluZyBhIG5ldyB2YXJpYWJsZSwgYGFsbG93ZWRfbWVtc19ucmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGFueXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBhbGxvY2F0aW9uIGFuZCBhY2NvdW50aW5nIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LgoKTXkgYEZvY3VzU3ltYm9sc2AgYXJlIG5vdyBzZXQ6IGBnYXRoZXJfc3VycGx1c19wYWdlc2AsIGBhbGxvd2VkX21lbXNfbnJgLCBhbmQgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhvcm91Z2hseSB0byBnZXQgYSBncmFzcCBvbiB0aGUgaW50ZW50IGFuZCBpbXBhY3Qgb2YgdGhpcyBjb2RlLiBQbHVzIEkgbmVlZCB0byBlbmFibGUgc29tZSBjb25maWd1cmF0aW9ucywgYEhVR0VUTEJGU2AgYW5kIGBOVU1BYCwgZm9yIHRoZSBmdXp6aW5nLgoKTm93LCBsZXQgbWUgY29uZmlybSB0aGUgc3RhdGljIG5hdHVyZSBvZiB0aGVzZSBzeW1ib2xzLiBHb29kLCBgYWxsb3dlZF9tZW1zX25yYCwgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgYW5kIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhcmUgYWxsIHN0YXRpYy4gVGhpcyBnaXZlcyBtZSBhIHNsaWdodGx5IGJldHRlciBoYW5kbGUgb24gdGhlaXIgc2NvcGUsIHJlc3RyaWN0aW5nIGV4dGVybmFsIG1vZGlmaWNhdGlvbi4KCkkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBBaGEhIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQmIzM5O3MgdXNlZCBieSBgYWxsb3dlZF9tZW1zX25yYC4gVGhpcyBzZWVtcyBsaWtlIGEgcHJvbWlzaW5nIGFkZGl0aW9uIHRvIHRoZSBzZXQgYW5kIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpdCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwb2xpY3lfbWJpbmRfbm9kZW1hc2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTIyMTg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMjQwLVxubW0vaHVnZXRsYi5jOjIyNDE6c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXG5tbS9odWdldGxiLmMtMjI0Mi17XG4tLVxubW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi0tXG5tbS9odWdldGxiLmMtMjI2NS1cbm1tL2h1Z2V0bGIuYzoyMjY2Olx0bWJpbmRfbm9kZW1hc2sgPSBwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX21hc2spO1xubW0vaHVnZXRsYi5jLTIyNjctXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4tLVxubW0vaHVnZXRsYi5jPTIyNzk9c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYy0yMjg5LVxubW0vaHVnZXRsYi5jOjIyOTA6XHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhodGxiX2FsbG9jX21hc2soaCkpO1xubW0vaHVnZXRsYi5jLTIyOTEtXHRpZiAobWJpbmRfbm9kZW1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODY1CgkJCQkJCQlvdXRwdXQ6IDE2NQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHJvcG9zZWQgQ2hhbmdlIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBhZGRpdGlvbiB0byB0aGUgbGFuZHNjYXBlIG9mIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE5VTUEgc3lzdGVtcy4gSXQgYWx0ZXJzIHRoZSBjb3JlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgZnVuY3Rpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gYmUgdmVyeSBmb2N1c2VkIG9uIGl0LiBUaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyBjb25zaWRlcnMgdGhlIGBhbGxvd2VkX21lbXNfbnJgIHBhcmFtZXRlciB3aGVuIGRldGVybWluaW5nIGhvdyBtYW55IHN1cnBsdXMgcGFnZXMgYXJlIG5lZWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGJlaGF2aW9yYWwgbW9kaWZpY2F0aW9uIOKAkyBpbiBob3cgaHVnZSBwYWdlcyBhcmUgYm90aCByZXNlcnZlZCBhbmQgdWx0aW1hdGVseSBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRob3JvdWdoIGV4YW1pbmF0aW9uLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCB3aGljaCBleHBsaWNpdGx5IGludm9sdmVzIG1lbW9yeSBub2RlcyBhbmQgcG90ZW50aWFsbHkgcmVzdHJpY3RpdmUgTlVNQSBwb2xpY2llcywgSSB0aGluayBpdCYjMzk7cyBzcG90IG9uIHRvIGFkZCBgcG9saWN5X21iaW5kX25vZGVtYXNrYCB0byB0aGUgYEZvY3VzU3ltYm9sc2AuIEl0IHdpbGwgYmUgYSBrZXkgZmFjdG9yIGluIHVuZGVyc3RhbmRpbmcgdGhlIGludHJpY2FjaWVzIG9mIHRoZSBuZXcgbG9naWMuIFRoZSBwYXRjaCBpcyB0aWVkIHRvIGhvdyB0aGUgc3lzdGVtICphY2NvdW50cyogZm9yIHRoZXNlIHBhZ2VzIGFuZCAqZ2F0aGVycyogdGhlbSwgd2hpY2ggbWFrZXMgdGhlc2Uga2V5IGZvY3VzIGFyZWFzLCBhbmQgY2xlYXJseSwgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGlzIGFsc28gY3JpdGljYWwuIFRoZXNlIGFyZSBhbGwgY29yZSBzeW1ib2xzIHdlJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUuCgpXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBIVUdFVExCRlNgIGFuZCBgTlVNQWAgYXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLCBvZiBjb3Vyc2UuCgpUaGUgZnV6emluZyBzdHJhdGVneSwgdGhlcmVmb3JlLCBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuIEkmIzM5O20gaW1hZ2luaW5nIHNjZW5hcmlvcyB3aXRoIGRpdmVyc2UgTlVNQSBjb25maWd1cmF0aW9ucywgdmFyaWVkIG1lbW9yeSBwb2xpY2llcyAoaW5jbHVkaW5nIHRob3NlIGVtcGxveWluZyBgbWJpbmRgKSwgYW5kIGhpZ2ggbG9hZHMgdG8gc3RyZXNzLXRlc3QgdGhlIG5ldyBsb2dpYyB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucy4gVGhlIGZ1enppbmcgdGFyZ2V0IHNob3VsZCBpbmNsdWRlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYW5kIGFzc29jaWF0ZWQgZnVuY3Rpb25zIHRvIGVuc3VyZSB3ZSBhcmUgY292ZXJpbmcgdGhlIGNoYW5nZXMgZWZmZWN0aXZlbHkuIEFsc28sIEkgd2lsbCBuZWVkIHRvIGJlIGFibGUgdG8gZXZhbHVhdGUgdGhlIHJlc3VsdHMgb2YgZWFjaCBmdXp6IHJ1biBlZmZlY3RpdmVseSwgbGV0JiMzOTtzIGNhbGwgdGhhdCBgc2V0LXJlc3VsdHNgLiBJIHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBpcyBzZXQgdXAgdG8gcmVjb3JkIHJlc3VsdHMgdGhhdCBhcmUgdW5kZXJzdGFuZGFibGUgYW5kIGVhc2lseSBldmFsdWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhdGhlcl9zdXJwbHVzX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG93ZWRfbWVtc19uciYjMzQ7LAogICAgJiMzNDtodWdldGxiX2FjY3RfbWVtb3J5JiMzNDssCiAgICAmIzM0O3BvbGljeV9tYmluZF9ub2RlbWFzayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGFsbG93ZWQgbWVtb3J5IG5vZGVzIChgYWxsb3dlZF9tZW1zX25yYCkgd2hlbiBjYWxjdWxhdGluZyB0aGUgbmVlZGVkIHN1cnBsdXMgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIHJlc2VydmVkIGFuZCBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIHByZXNlbmNlIG9mIE5VTUEgbWVtb3J5IHBvbGljaWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgc3VycGx1cyBwYWdlIGdhdGhlcmluZyBhbmQgYWNjb3VudGluZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYXRoZXJfc3VycGx1c19wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvd2VkX21lbXNfbnImIzM0OywKICAgICYjMzQ7aHVnZXRsYl9hY2N0X21lbW9yeSYjMzQ7LAogICAgJiMzNDtwb2xpY3lfbWJpbmRfbm9kZW1hc2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgaHVnZXRsYiBsb2dpYyBpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyAoYGFsbG93ZWRfbWVtc19ucmApIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5lZWRlZCBzdXJwbHVzIHBhZ2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSByZXNlcnZlZCBhbmQgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IGluIHRoZSBwcmVzZW5jZSBvZiBOVU1BIG1lbW9yeSBwb2xpY2llcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNToyMi43ODI5NzU0MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mjk3NTAwMDU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiLFxuICAgIFwiYWxsb3dlZF9tZW1zX25yXCIsXG4gICAgXCJodWdldGxiX2FjY3RfbWVtb3J5XCIsXG4gICAgXCJwb2xpY3lfbWJpbmRfbm9kZW1hc2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBodWdldGxiIGxvZ2ljIGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIGFsbG93ZWQgbWVtb3J5IG5vZGVzIChgYWxsb3dlZF9tZW1zX25yYCkgd2hlbiBjYWxjdWxhdGluZyB0aGUgbmVlZGVkIHN1cnBsdXMgcGFnZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIHJlc2VydmVkIGFuZCBhbGxvY2F0ZWQsIGVzcGVjaWFsbHkgaW4gdGhlIHByZXNlbmNlIG9mIE5VTUEgbWVtb3J5IHBvbGljaWVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgc3VycGx1cyBwYWdlIGdhdGhlcmluZyBhbmQgYWNjb3VudGluZyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MjIuNzgyOTgyMzQ5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzM0MDY0NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1MDIxY2VjODZjY2ExZDExMWEyMTA0ZmUzODFkNzBhYjQ4MzAwN2VmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDIzIDE5OjE1OjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IGYyNGJmNDliZTA0N2UzLi5iZDk3ZjBmNDM0MTVlNyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiLmNcXG4rKysgYi9tbS9odWdldGxiLmNcXG5AQCAtMjI1NSw2ICsyMjU1LDIzIEBAIHN0YXRpYyBub2RlbWFza190ICpwb2xpY3lfbWJpbmRfbm9kZW1hc2soZ2ZwX3QgZ2ZwKVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4re1xcbitcXHRpbnQgbm9kZTtcXG4rXFx0dW5zaWduZWQgaW50IG5yID0gMDtcXG4rXFx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XFxuK1xcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcXG4rXFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuK1xcbitcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxuK1xcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcXG4rXFx0XFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXFxuK1xcdFxcdFxcdG5yICs9IGFycmF5W25vZGVdO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnI7XFxuK31cXG4rXFxuIC8qXFxuICAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uXFxuICAqIG9mIHNpemUgJ2RlbHRhJy5cXG5AQCAtMjI3Nyw3ICsyMjk0LDggQEAgc3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbiBcXHRcXHRhbGxvY19ub2RlbWFzayA9IGNwdXNldF9jdXJyZW50X21lbXNfYWxsb3dlZDtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdG5lZWRlZCA9IChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXM7XFxuK1xcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcXG4rXFx0XFx0KGxvbmcpICgoaC1cXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC0gaC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzKSk7XFxuIFxcdGlmIChuZWVkZWQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKz0gZGVsdGE7XFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0yMzExLDggKzIzMjksOSBAQCBzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuIFxcdCAqIGJlY2F1c2UgZWl0aGVyIHJlc3ZfaHVnZV9wYWdlcyBvciBmcmVlX2h1Z2VfcGFnZXMgbWF5IGhhdmUgY2hhbmdlZC5cXG4gXFx0ICovXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdG5lZWRlZCA9IChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxcbi1cXHRcXHRcXHQoaC1cXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKTtcXG4rXFx0bmVlZGVkID0gbWF4KChsb25nKSAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXFxuK1xcdFxcdFxcdChsb25nKSAoKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXFxuK1xcdFxcdFxcdFxcdChoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpKSk7XFxuIFxcdGlmIChuZWVkZWQgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdGlmIChhbGxvY19vaylcXG4gXFx0XFx0XFx0Z290byByZXRyeTtcXG5AQCAtNDUxMywyMyArNDUzMiw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXAoY2hhciAqcylcXG4gfVxcbiBfX3NldHVwKFxcXCJodWdlcGFnZV9hbGxvY190aHJlYWRzPVxcXCIsIGh1Z2VwYWdlX2FsbG9jX3RocmVhZHNfc2V0dXApO1xcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4te1xcbi1cXHRpbnQgbm9kZTtcXG4tXFx0dW5zaWduZWQgaW50IG5yID0gMDtcXG4tXFx0bm9kZW1hc2tfdCAqbWJpbmRfbm9kZW1hc2s7XFxuLVxcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcXG4tXFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XFxuLVxcbi1cXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxuLVxcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQpIHtcXG4tXFx0XFx0aWYgKCFtYmluZF9ub2RlbWFzayB8fCBub2RlX2lzc2V0KG5vZGUsICptYmluZF9ub2RlbWFzaykpXFxuLVxcdFxcdFxcdG5yICs9IGFycmF5W25vZGVdO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gbnI7XFxuLX1cXG4tXFxuIHZvaWQgaHVnZXRsYl9yZXBvcnRfbWVtaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIHtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbmluZGV4IGNkMjQ1OTZjZGQyN2VkLi40MGRlMDkzOGYzOTM3YyAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXFxuQEAgLTEwNiw2ICsxMDYsNyBAQCBURVNUX0dFTl9GSUxFUyArPSBndWFyZC1yZWdpb25zXFxuIFRFU1RfR0VOX0ZJTEVTICs9IG1lcmdlXFxuIFRFU1RfR0VOX0ZJTEVTICs9IHJtYXBcXG4gVEVTVF9HRU5fRklMRVMgKz0gZm9saW9fc3BsaXRfcmFjZV90ZXN0XFxuK1RFU1RfR0VOX0ZJTEVTICs9IGh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcXG4gXFxuIGlmbmVxICgkKEFSQ0gpLGFybTY0KVxcbiBURVNUX0dFTl9GSUxFUyArPSBzb2Z0LWRpcnR5XFxuQEAgLTI2MCw2ICsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgKz0gLWxudW1hXFxuIFxcbiAkKE9VVFBVVCkvcm1hcDogTERMSUJTICs9IC1sbnVtYVxcbiBcXG4rJChPVVRQVVQpL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3k6IExETElCUyArPSAtbG51bWFcXG4rXFxuIGxvY2FsX2NvbmZpZy5tayBsb2NhbF9jb25maWcuaDogY2hlY2tfY29uZmlnLnNoXFxuIFxcdENDPVxcXCIkKENDKVxcXCIgQ0ZMQUdTPVxcXCIkKENGTEFHUylcXFwiIC4vY2hlY2tfY29uZmlnLnNoXFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wYTc3YjAxNjkzNTE4OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcXG5AQCAtMCwwICsxLDQ3MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XFxuKyAqXFxuKyAqIFJlc2VydmluZyBzdXJwbHVzIGh1Z2VwYWdlcyB3aXRoaW4gbWVtcG9saWNpZXMgaXMgcXVpdGUgdHJpY2t5IGR1ZSB0b1xcbisgKiB0aGUgdHJhbnNpZW50IG5hdHVyZSBvZiBjcHVzZXRzIGFuZCBtZW1wb2xpY2llcy4gQXMgc3VjaCwgdGhlc2UgdGVzdHNcXG4rICogZG8gbm90IGNvdmVyIGFsbCBlZGdlIGNhc2VzLCBidXQgcmF0aGVyIGZvY3VzIG9uIHdoYXQgdGhlIGtlcm5lbCBjYW5cXG4rICogY3VycmVudGx5IGRvIHRvIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZXMgaW4gdGhlIHByZXNlbmNlIG9mIGNwdXNldHNcXG4rICogYW5kIG1lbXBvbGljaWVzIHRvIGhlbHAgY2hlY2sgZm9yIHJlZ3Jlc3Npb25zIGluIHRoaXMgYmVoYXZpb3IuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBfR05VX1NPVVJDRVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY251bWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3B0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGxpYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjc3RkaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInZtX3V0aWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbitcXG4rI2RlZmluZSBIUFNJWkVfQllURVMgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpXFxuKyNkZWZpbmUgSFBTSVpFX0tCIGRlZmF1bHRfaHVnZV9wYWdlX3NpemUoKSBcXHUwMDNlXFx1MDAzZSAxMFxcbisjZGVmaW5lIEdMT0JBTF9TWVNfSFBfUEFUSCBcXFwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1xcXCJcXG4rI2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFxcXCIvc3lzL2RldmljZXMvc3lzdGVtL25vZGUvbm9kZSV1L2h1Z2VwYWdlcy9odWdlcGFnZXMtJWx1a0IvJXNcXFwiXFxuK1xcbitzdHJ1Y3QgYml0bWFzayAqKm5vZGVtYXNrcztcXG4raW50ICpub2RlaWRzO1xcbitcXG4rcHRocmVhZF90ICp0aHJlYWRzO1xcbitzdHJ1Y3QgdGhyZWFkX2FyZ3Mge1xcbitcXHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XFxuK1xcdGludCB0b19yZXNlcnZlO1xcbit9O1xcbitzdHJ1Y3QgdGhyZWFkX2FyZ3MqIHBlcl90aHJlYWRfYXJncztcXG4rcHRocmVhZF9jb25kX3QgY29uZCA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjtcXG4rcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcXG4raW50IHdha2VfY29uZCA9IDA7XFxuK1xcbitjaGFyICpucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpnX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKmdfbnJfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKmdfcmVzdl9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpuMF9mcmVlX2h1Z2VwYWdlc19wYXRoO1xcbitjaGFyICpuMF9ucl9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjBfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjFfZnJlZV9odWdlcGFnZXNfcGF0aDtcXG4rY2hhciAqbjFfbnJfaHVnZXBhZ2VzX3BhdGg7XFxuK2NoYXIgKm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XFxuK1xcbit1bnNpZ25lZCBsb25nIGdfZnJlZV9odWdlcGFnZXMsIGdfbnJfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIGdfcmVzdl9odWdlcGFnZXMsIGdfc3VycGx1c19odWdlcGFnZXM7XFxuK3Vuc2lnbmVkIGxvbmcgbjBfZnJlZV9odWdlcGFnZXMsIG4wX25yX2h1Z2VwYWdlcywgbjBfc3VycGx1c19odWdlcGFnZXM7XFxuK3Vuc2lnbmVkIGxvbmcgaW50IG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xcbit1bnNpZ25lZCBsb25nIGludCBvcmlnX24wX25yX2h1Z2VwYWdlcywgb3JpZ19uMV9ucl9odWdlcGFnZXM7XFxuK3Vuc2lnbmVkIGxvbmcgaW50IG9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXM7XFxuK1xcbitcXG4rLyogc2V0dXBfcGF0aHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBzdHJpbmdzIGZvciB0aGUgdmFyaW91cyBodWdldGxiIHBhZ2Ugc3lzZnNcXG4rICogcGF0aHMuIFRoZSBzdHJpbmdzIGFyZSB1c2VkIHRvIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIHN5c2ZzIGZpbGVzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfcGF0aHModm9pZCkge1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCxcXG4rXFx0XFx0XFx0XFxcIi9wcm9jL3N5cy92bS9ucl9vdmVyY29tbWl0X2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZnX25yX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcIm5yX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2Z19yZXN2X2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcInJlc3ZfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwic3VycGx1c19odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4wX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMF0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcImZyZWVfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMF9ucl9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1swXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwibnJfaHVnZXBhZ2VzXFxcIik7XFxuK1xcdGFzcHJpbnRmKFxcdTAwMjZuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJzdXJwbHVzX2h1Z2VwYWdlc1xcXCIpO1xcbitcXHRhc3ByaW50ZihcXHUwMDI2bjFfZnJlZV9odWdlcGFnZXNfcGF0aCwgTk9ERV9TWVNfSFBfUEFUSCwgbm9kZWlkc1sxXSxcXG4rXFx0XFx0XFx0SFBTSVpFX0tCLCBcXFwiZnJlZV9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4xX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzFdLFxcbitcXHRcXHRcXHRIUFNJWkVfS0IsIFxcXCJucl9odWdlcGFnZXNcXFwiKTtcXG4rXFx0YXNwcmludGYoXFx1MDAyNm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXFxuK1xcdFxcdFxcdEhQU0laRV9LQiwgXFxcInN1cnBsdXNfaHVnZXBhZ2VzXFxcIik7XFxuK31cXG4rXFxuKy8qIGdldF9odWdlcGFnZV9zdGF0c1xcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2ltcGx5IGdyYWIgYSBidW5jaCBvZiB0aGUgaHVnZXRsYiBwYWdlIG1ldHJpY3MgaW4gc3lzZnNcXG4rICovXFxuK3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7XFxuK1xcdHJlYWRfc3lzZnMoZ19mcmVlX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2Z19mcmVlX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNmdfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjBfZnJlZV9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjBfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0cmVhZF9zeXNmcyhuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZuMV9mcmVlX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZuMV9ucl9odWdlcGFnZXMpO1xcbitcXHRyZWFkX3N5c2ZzKG4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7XFxuK31cXG4rXFxuKy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlnc1xcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgaHVnZXBhZ2UgY29uZmlncyBzbyB0aGlzXFxuKyAqIHRlc3Qgc3VpdGUgZG9lc24ndCBjbG9iYmVyIGNvbmZpZ3MgbmVlZGVkIGZvciBvdGhlciB0ZXN0cy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHNhdmVfaHVnZXBhZ2VfY29uZmlncyh2b2lkKSB7XFxuK1xcdHJlYWRfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZvcmlnX24wX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIFxcdTAwMjZvcmlnX24xX25yX2h1Z2VwYWdlcyk7XFxuK1xcdHJlYWRfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgXFx1MDAyNm9yaWdfbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMpO1xcbit9XFxuK1xcbisvKiByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3NcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mIGh1Z2VwYWdlIGNvbmZpZ3MgYmVmb3JlIHRoaXMgdGVzdFxcbisgKiB3YXMgcmFuLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmVzdG9yZV9odWdlcGFnZV9jb25maWdzKHZvaWQpIHtcXG4rXFx0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjFfbnJfaHVnZXBhZ2VzKTtcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgb3JpZ19ucl9vdmVyY29tbWl0X2h1Z2VwYWdlcyk7XFxuK31cXG4rXFxuKy8qIHJlc2V0X2h1Z2VwYWdlc1xcbisgKlxcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXQgc3RhdGljIGh1Z2V0bGIgcGFnZSByZXNlcnZhdGlvbnMgdG8gMC5cXG4rICogVXNlZCB0byBnZXQgYmFjayB0byBhIGNsZWFyIHN0YXRlIGJldHdlZW4gdGVzdHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByZXNldF9odWdlcGFnZXModm9pZCkge1xcbitcXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAwKTtcXG4rXFx0d3JpdGVfc3lzZnMoZ19ucl9odWdlcGFnZXNfcGF0aCwgMCk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcXG4rXFx0d3JpdGVfc3lzZnMobjFfbnJfaHVnZXBhZ2VzX3BhdGgsIDApO1xcbit9XFxuK1xcbisvKiBjYW5fcnVuXFxuKyAqXFxuKyAqIERvZXMgc2FuaXR5IGNoZWNraW5nIGZpcnN0IHRvIG1ha2Ugc3VyZSB0aGUgdGVzdHMgY2FuIGV2ZW4gcnVuLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpIHtcXG4rICAgICAgICBpZiAoZ2V0ZXVpZCgpICE9IDApXFxuKyAgICAgICAgICAgICAgICBrc2Z0X2V4aXRfc2tpcChcXFwiUGxlYXNlIHJ1biB0aGUgdGVzdCBhcyByb290LlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobnVtYV9hdmFpbGFibGUoKSA9PSAtMSlcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIk51bWEgaXMgdW5hdmFpbGFibGUuXFxcXG5cXFwiKTtcXG4rXFxuK1xcdGlmIChudW1hX251bV9jb25maWd1cmVkX25vZGVzKCkgXFx1MDAzYyAyKVxcbitcXHRcXHRrc2Z0X2V4aXRfc2tpcChcXFwiTm90IGVub3VnaCBub2RlcyB0byB0ZXN0LlxcXFxuXFxcIik7XFxuK1xcbitcXHRpZiAobnVtYV9udW1fdGFza19ub2RlcygpIFxcdTAwM2MgMilcXG4rXFx0XFx0a3NmdF9leGl0X3NraXAoXFxcIkN1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXFxcblxcXCIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBjbGVhbnVwKGNoYXIqIGVycl9tc2cpIHtcXG4rXFx0ZnJlZShwZXJfdGhyZWFkX2FyZ3MpO1xcbitcXHRmcmVlKHRocmVhZHMpO1xcbitcXHRmcmVlKG5vZGVpZHMpO1xcbitcXHRmcmVlKG5vZGVtYXNrcyk7XFxuK1xcdGZyZWUobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUoZ19mcmVlX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShnX25yX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKGdfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUobjBfZnJlZV9odWdlcGFnZXNfcGF0aCk7XFxuK1xcdGZyZWUobjBfbnJfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4wX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xcbitcXHRmcmVlKG4xX25yX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0ZnJlZShuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcXG4rXFx0aWYgKGVycl9tc2cpXFxuK1xcdFxcdGtzZnRfZXhpdF9mYWlsX21zZyhlcnJfbXNnKTtcXG4rfVxcbitcXG4rLyogc2V0dXBfbm9kZV9pbmZvXFxuKyAqXFxuKyAqIENyZWF0ZXMgdGhlIGJpdG1hc2tzIHVzZWQgdG8gaXNvbGF0ZSB0ZXN0IHJ1bm5lcnMgYW5kIHRoZWlyIGh1Z2V0bGIgcGFnZVxcbisgKiByZXNlcnZhdGlvbnMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBzZXR1cF9ub2RlX2luZm8odm9pZCkge1xcbitcXHRpbnQgaTtcXG4rXFx0aW50IGl0aF9ub2RlbWFzayA9IDA7XFxuK1xcbitcXHRub2RlaWRzID0gY2FsbG9jKDIsIHNpemVvZihpbnQpKTtcXG4rXFx0bm9kZW1hc2tzID0gY2FsbG9jKDIsIHNpemVvZihzdHJ1Y3QgYml0bWFzayAqKSk7XFxuK1xcbitcXHRpZiAoIW5vZGVtYXNrcyB8fCAhbm9kZWlkcylcXG4rXFx0XFx0Y2xlYW51cChcXFwic2V0dXBfbm9kZV9pbmZvOiBjYWxsb2MuXFxcIik7XFxuK1xcbitcXHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcXG4rXFx0ICogaW5kZXggb2YgdGhlIGZpcnN0IG5vZGUgYXZhaWxhYmxlIHRvIHVzLCBhbmQgdGhlIHNlY29uZCBvZiB0aGUgbmV4dFxcbitcXHQgKiBub2RlIGF2YWlsYWJsZSB0byB1cy4gKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bWFfbnVtX3Rhc2tfbm9kZXMoKTsgaSsrKSB7XFxuK1xcdFxcdGlmIChudW1hX2JpdG1hc2tfaXNiaXRzZXQobnVtYV9nZXRfbWVtc19hbGxvd2VkKCksIGkpKSB7XFxuK1xcdFxcdFxcdG5vZGVpZHNbaXRoX25vZGVtYXNrXSA9IGk7XFxuK1xcdFxcdFxcdG5vZGVtYXNrc1tpdGhfbm9kZW1hc2srK10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KFxcbitcXHRcXHRcXHRcXHRcXHRudW1hX2FsbG9jYXRlX25vZGVtYXNrKCksIGkpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0aWYgKGl0aF9ub2RlbWFzayAhPSAyIHx8ICFub2RlbWFza3NbMF0gfHwgIW5vZGVtYXNrc1sxXSlcXG4rXFx0XFx0Y2xlYW51cChcXFwiRmFpbGVkIHRvIGNyZWF0ZSBub2RlbWFza3MuXFxcIik7XFxuK31cXG4rXFxuKy8qIHNldHVwX3RocmVhZHNcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNldHVwIHNwYWNlIGZvciB0aHJlYWRzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKSB7XFxuK1xcdHBlcl90aHJlYWRfYXJncyA9IGNhbGxvYygyLCBzaXplb2YocGVyX3RocmVhZF9hcmdzKSk7XFxuK1xcdGlmICghcGVyX3RocmVhZF9hcmdzKVxcbitcXHRcXHRjbGVhbnVwKFxcXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXFxcIik7XFxuK1xcbitcXHR0aHJlYWRzID0gY2FsbG9jKDIsIHNpemVvZihwdGhyZWFkX3QpKTtcXG4rXFx0aWYgKCF0aHJlYWRzKSB7XFxuK1xcdFxcdGNsZWFudXAoXFxcImNhbGxvYyB0aHJlYWRzLlxcXCIpO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qIHJlc2VydmVfaHVnZXBhZ2VcXG4rICpcXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2VydmUgYSBodWdldGxiIHBhZ2VcXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nKiByZXNlcnZlX2h1Z2VwYWdlKHZvaWQpIHtcXG4rXFx0cmV0dXJuICh1bnNpZ25lZCBsb25nICopIG1tYXAoTlVMTCwgSFBTSVpFX0JZVEVTLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbitcXHRcXHRNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQiwgLTEsIDApO1xcbit9XFxuK1xcbisvKiB0aHJlYWRfd29ya1xcbisgKlxcbisgKiBUZXN0IHJ1bm5lcnMuIFBlcmZvcm1zIHRoZSB3b3JrIG9mIHJlc2VydmluZyBhbmQgZnJlZWluZyBodWdldGxiIHBhZ2VzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgKnRocmVhZF93b3JrKHZvaWQgKmFyZykge1xcbitcXHRzdHJ1Y3QgdGhyZWFkX2FyZ3MqIHRfYXJncyA9IChzdHJ1Y3QgdGhyZWFkX2FyZ3MqKSBhcmc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0aHVnZXBhZ2VzID0gKHVuc2lnbmVkIGxvbmcgKiopIGNhbGxvYyh0X2FyZ3MtXFx1MDAzZXRvX3Jlc2VydmUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdHNpemVvZih1bnNpZ25lZCBsb25nICoqKSk7XFxuK1xcbitcXHQvKiBSZXNlcnZlIGh1Z2V0bGIgcGFnZXMgb24gbXkgbm9kZSAqL1xcbitcXHRpZiAodF9hcmdzLVxcdTAwM2VteV9ub2RlbWFzaylcXG4rXFx0XFx0bnVtYV9iaW5kKHRfYXJncy1cXHUwMDNlbXlfbm9kZW1hc2spO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcXG4rXFx0XFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xcbitcXHRcXHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcXG4rXFx0XFx0ICogZmFsbCB0aHJvdWdoIHJhdGhlciB0aGFuIGVycm9yIG91dCovXFxuK1xcdFxcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xcbitcXHRcXHRcXHR0X2FyZ3MtXFx1MDAzZXRvX3Jlc2VydmUgPSBpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBHbyB0byBzbGVlcCB1bnRpbCBtYWluIHRocmVhZCB3YWtlcyB1cyB1cCAqL1xcbitcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNm11dGV4KTtcXG4rXFx0d2hpbGUoIXdha2VfY29uZCkge1xcbitcXHRcXHRwdGhyZWFkX2NvbmRfd2FpdChcXHUwMDI2Y29uZCwgXFx1MDAyNm11dGV4KTtcXG4rXFx0fVxcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2bXV0ZXgpO1xcbitcXG4rXFx0LyogVHJ5IHRvIGZyZWUgdGhvc2UgaHVnZXRsYiBwYWdlcyAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdF9hcmdzLVxcdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcXG4rXFx0XFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRrc2Z0X3BlcnJvcihcXFwibXVubWFwKCkgZmFpbGVkISBDaGVjayBmb3IgbGVha2VkIGh1Z2V0bGIgcGFnZXMhXFxcXG5cXFwiKTtcXG4rXFx0fVxcbitcXHRmcmVlKGh1Z2VwYWdlcyk7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKiB3YWtlX2NoaWxkcmVuXFxuKyAqXFxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byB3YWtlIGNoaWxkcmVuIHRocmVhZHMuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpIHtcXG4rXFx0cHRocmVhZF9tdXRleF9sb2NrKFxcdTAwMjZtdXRleCk7XFxuK1xcdHdha2VfY29uZCA9IDE7XFxuK1xcdHB0aHJlYWRfY29uZF9icm9hZGNhc3QoXFx1MDAyNmNvbmQpO1xcbitcXHRwdGhyZWFkX211dGV4X3VubG9jayhcXHUwMDI2bXV0ZXgpO1xcbit9XFxuK1xcbisvKiB0ZXN0MVxcbisgKlxcbisgKiBTYW5pdHkgY2hlY2tpbmcsIGF0dGVtcHQgdG8gcmVzZXJ2ZSBhIHN1cnBsdXMgaHVnZXRsYiBwYWdlIGFueXdoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgdGVzdDEodm9pZCkge1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK1xcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBOVUxMO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdCgoZ19mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAoKG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXFx1MDAyNlxcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCkgfHxcXG4rXFx0XFx0XFx0IChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSxcXG4rXFx0XFx0XFx0IFxcXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0d2FrZV9jb25kID0gMDtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK31cXG4rXFxuKy8qIHRlc3QyXFxuKyAqXFxuKyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2Ugd2l0aFxcbisgKiBhIG1lbXBvbGljeS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHRlc3QyKHZvaWQpIHtcXG4rXFx0cmVzZXRfaHVnZXBhZ2VzKCk7XFxuK1xcbitcXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XFxuK1xcbitcXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFxcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMF0pO1xcbitcXG4rXFx0dXNsZWVwKDUwMDAwMCk7XFxuK1xcbitcXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcXG4rXFx0a3NmdF90ZXN0X3Jlc3VsdChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcXHUwMDI2XFx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcXHUwMDI2XFx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwLFxcbitcXHRcXHRcXHQgXFxcIlJlc2VydmUgMSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUwXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHdha2VfY2hpbGRyZW4oKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rfVxcbitcXG4rLyogdGVzdDNcXG4rICpcXG4rICogU2V0IGEgc3RhdGljIGh1Z2VwYWdlIGFuZCByZXNlcnZlIG9mZiBub2RlXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0Myh2b2lkKSB7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAwO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XFxuK1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rXFxuK1xcdGdldF9odWdlcGFnZV9zdGF0cygpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXFxuK1xcdFxcdFxcdCBcXFwiU2V0IDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxcXG5cXFwiKTtcXG4rXFxuK1xcdHdha2VfY2hpbGRyZW4oKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xcbitcXHRwdGhyZWFkX2pvaW4odGhyZWFkc1sxXSwgTlVMTCk7XFxuK1xcdHdha2VfY29uZCA9IDA7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbit9XFxuK1xcbisvKiB0ZXN0NFxcbisgKlxcbisgKiBSZXNlcnZlIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUxXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0NCh2b2lkKSB7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMTtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XFxuK1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rXFxuK1xcdGdldF9odWdlcGFnZV9zdGF0cygpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXFxuK1xcdFxcdFxcdCBcXFwiUmVzZXJ2ZSAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rfVxcbitcXG4rLyogdGVzdDVcXG4rICpcXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMSBhbmRcXG4rICogZmFpbCB0byBvdmVyIGFsbG9jYXRlIGFub3RoZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCB0ZXN0NSh2b2lkKSB7XFxuK1xcdHJlc2V0X2h1Z2VwYWdlcygpO1xcbitcXG4rXFx0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XFxuK1xcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAxKTtcXG4rXFxuK1xcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IG5vZGVtYXNrc1swXTtcXG4rXFx0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xcbitcXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XFxuK1xcdHBlcl90aHJlYWRfYXJnc1sxXS50b19yZXNlcnZlID0gMjtcXG4rXFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XFxuK1xcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXFx1MDAyNnBlcl90aHJlYWRfYXJnc1sxXSk7XFxuK1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rXFxuK1xcdGdldF9odWdlcGFnZV9zdGF0cygpO1xcbitcXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcXHUwMDI2XFx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDIgXFx1MDAyNlxcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFxcdTAwMjZcXHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFxcdTAwMjZcXHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEsXFxuK1xcdFxcdFxcdCBcXFwiSW50ZW50aW9uYWxseSBvdmVyYWxsb2NhdGUgYW5kIGZhaWwgZHVlIHRvIG5yX292ZXJjb21taXRfaHVnZXBhZ2VzIGxpbWl0LlxcXFxuXFxcIik7XFxuK1xcbitcXHR3YWtlX2NoaWxkcmVuKCk7XFxuK1xcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcXG4rXFx0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xcbitcXHR3YWtlX2NvbmQgPSAwO1xcbitcXHRyZXNldF9odWdlcGFnZXMoKTtcXG4rXFxuK31cXG4rXFxuK2ludCBtYWluKHZvaWQpIHtcXG4rXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4rXFx0a3NmdF9zZXRfcGxhbig1KTtcXG4rXFxuK1xcdGNoZWNrX3JlcXVpcmVtZW50cygpO1xcbitcXHRzZXR1cF90aHJlYWRzKCk7XFxuK1xcdHNldHVwX25vZGVfaW5mbygpO1xcbitcXHRzZXR1cF9wYXRocygpO1xcbitcXHRzYXZlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcXG4rXFxuK1xcdHRlc3QxKCk7XFxuK1xcdHRlc3QyKCk7XFxuK1xcdHRlc3QzKCk7XFxuK1xcdHRlc3Q0KCk7XFxuK1xcdHRlc3Q1KCk7XFxuK1xcbitcXHRyZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3MoKTtcXG4rXFx0a3NmdF9maW5pc2hlZCgpO1xcbit9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxcbkBAIC0yOTcsNiArMjk3LDcgQEAgQ0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXBhZ2UtbXJlbWFwXFxuIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLXZtZW1tYXBcXG4gQ0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYi1tYWR2aXNlXFxuIENBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGJfZGlvXFxuK0NBVEVHT1JZPVxcXCJodWdldGxiXFxcIiBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcXG4gXFxuIGlmIFsgXFxcIiR7SEFWRV9IVUdFUEFHRVN9XFxcIiA9IFxcXCIxXFxcIiBdOyB0aGVuXFxuIFxcdG5yX2h1Z2VwYWdlc190bXA9JChjYXQgL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MjMuNjU3NTI2NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTAwNDM1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIixcbiAgICBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIixcbiAgICBcInBvbGljeV9tYmluZF9ub2RlbWFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUwMjFjZWM4NmNjYTFkMTExYTIxMDRmZTM4MWQ3MGFiNDgzMDA3ZWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxOToxNToyMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggZjI0YmY0OWJlMDQ3ZTMuLmJkOTdmMGY0MzQxNWU3IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0yMjU1LDYgKzIyNTUsMjMgQEAgc3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbit7XG4rXHRpbnQgbm9kZTtcbitcdHVuc2lnbmVkIGludCBuciA9IDA7XG4rXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcbitcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xuK1x0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4rXG4rXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XG4rXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4rXHRcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxuK1x0XHRcdG5yICs9IGFycmF5W25vZGVdO1xuK1x0fVxuK1xuK1x0cmV0dXJuIG5yO1xuK31cbitcbiAvKlxuICAqIEluY3JlYXNlIHRoZSBodWdldGxiIHBvb2wgc3VjaCB0aGF0IGl0IGNhbiBhY2NvbW1vZGF0ZSBhIHJlc2VydmF0aW9uXG4gICogb2Ygc2l6ZSAnZGVsdGEnLlxuQEAgLTIyNzcsNyArMjI5NCw4IEBAIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbiBcdFx0YWxsb2Nfbm9kZW1hc2sgPSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQ7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRuZWVkZWQgPSAoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbitcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbitcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xuIFx0aWYgKG5lZWRlZCBcdTAwM2M9IDApIHtcbiBcdFx0aC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKz0gZGVsdGE7XG4gXHRcdHJldHVybiAwO1xuQEAgLTIzMTEsOCArMjMyOSw5IEBAIHN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcbiBcdCAqIGJlY2F1c2UgZWl0aGVyIHJlc3ZfaHVnZV9wYWdlcyBvciBmcmVlX2h1Z2VfcGFnZXMgbWF5IGhhdmUgY2hhbmdlZC5cbiBcdCAqL1xuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0bmVlZGVkID0gKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbi1cdFx0XHQoaC1cdTAwM2VmcmVlX2h1Z2VfcGFnZXMgKyBhbGxvY2F0ZWQpO1xuK1x0bmVlZGVkID0gbWF4KChsb25nKSAoKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSAtIGFsbG9jYXRlZCksXG4rXHRcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxuK1x0XHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKSkpO1xuIFx0aWYgKG5lZWRlZCBcdTAwM2UgMCkge1xuIFx0XHRpZiAoYWxsb2Nfb2spXG4gXHRcdFx0Z290byByZXRyeTtcbkBAIC00NTEzLDIzICs0NTMyLDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cChjaGFyICpzKVxuIH1cbiBfX3NldHVwKFwiaHVnZXBhZ2VfYWxsb2NfdGhyZWFkcz1cIiwgaHVnZXBhZ2VfYWxsb2NfdGhyZWFkc19zZXR1cCk7XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcbi17XG4tXHRpbnQgbm9kZTtcbi1cdHVuc2lnbmVkIGludCBuciA9IDA7XG4tXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcbi1cdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlc19ub2RlO1xuLVx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCk7XG4tXG4tXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XG4tXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XG4tXHRcdGlmICghbWJpbmRfbm9kZW1hc2sgfHwgbm9kZV9pc3NldChub2RlLCAqbWJpbmRfbm9kZW1hc2spKVxuLVx0XHRcdG5yICs9IGFycmF5W25vZGVdO1xuLVx0fVxuLVxuLVx0cmV0dXJuIG5yO1xuLX1cbi1cbiB2b2lkIGh1Z2V0bGJfcmVwb3J0X21lbWluZm8oc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiBcdHN0cnVjdCBoc3RhdGUgKmg7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9NYWtlZmlsZVxuaW5kZXggY2QyNDU5NmNkZDI3ZWQuLjQwZGUwOTM4ZjM5MzdjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGVcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlXG5AQCAtMTA2LDYgKzEwNiw3IEBAIFRFU1RfR0VOX0ZJTEVTICs9IGd1YXJkLXJlZ2lvbnNcbiBURVNUX0dFTl9GSUxFUyArPSBtZXJnZVxuIFRFU1RfR0VOX0ZJTEVTICs9IHJtYXBcbiBURVNUX0dFTl9GSUxFUyArPSBmb2xpb19zcGxpdF9yYWNlX3Rlc3RcbitURVNUX0dFTl9GSUxFUyArPSBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XG4gXG4gaWZuZXEgKCQoQVJDSCksYXJtNjQpXG4gVEVTVF9HRU5fRklMRVMgKz0gc29mdC1kaXJ0eVxuQEAgLTI2MCw2ICsyNjEsOCBAQCAkKE9VVFBVVCkvbWlncmF0aW9uOiBMRExJQlMgKz0gLWxudW1hXG4gXG4gJChPVVRQVVQpL3JtYXA6IExETElCUyArPSAtbG51bWFcbiBcbiskKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICs9IC1sbnVtYVxuK1xuIGxvY2FsX2NvbmZpZy5tayBsb2NhbF9jb25maWcuaDogY2hlY2tfY29uZmlnLnNoXG4gXHRDQz1cIiQoQ0MpXCIgQ0ZMQUdTPVwiJChDRkxBR1MpXCIgLi9jaGVja19jb25maWcuc2hcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9odWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGE3N2IwMTY5MzUxODlcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuY1xuQEAgLTAsMCArMSw0NzIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxuKyAqXG4rICogUmVzZXJ2aW5nIHN1cnBsdXMgaHVnZXBhZ2VzIHdpdGhpbiBtZW1wb2xpY2llcyBpcyBxdWl0ZSB0cmlja3kgZHVlIHRvXG4rICogdGhlIHRyYW5zaWVudCBuYXR1cmUgb2YgY3B1c2V0cyBhbmQgbWVtcG9saWNpZXMuIEFzIHN1Y2gsIHRoZXNlIHRlc3RzXG4rICogZG8gbm90IGNvdmVyIGFsbCBlZGdlIGNhc2VzLCBidXQgcmF0aGVyIGZvY3VzIG9uIHdoYXQgdGhlIGtlcm5lbCBjYW5cbisgKiBjdXJyZW50bHkgZG8gdG8gcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlcyBpbiB0aGUgcHJlc2VuY2Ugb2YgY3B1c2V0c1xuKyAqIGFuZCBtZW1wb2xpY2llcyB0byBoZWxwIGNoZWNrIGZvciByZWdyZXNzaW9ucyBpbiB0aGlzIGJlaGF2aW9yLlxuKyAqL1xuK1xuKyNkZWZpbmUgX0dOVV9TT1VSQ0VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbnVtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjcHRocmVhZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RkbGliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInZtX3V0aWwuaFwiXG4rI2luY2x1ZGUgXCJrc2VsZnRlc3QuaFwiXG4rXG4rI2RlZmluZSBIUFNJWkVfQllURVMgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpXG4rI2RlZmluZSBIUFNJWkVfS0IgZGVmYXVsdF9odWdlX3BhZ2Vfc2l6ZSgpIFx1MDAzZVx1MDAzZSAxMFxuKyNkZWZpbmUgR0xPQkFMX1NZU19IUF9QQVRIIFwiL3N5cy9rZXJuZWwvbW0vaHVnZXBhZ2VzL2h1Z2VwYWdlcy0lbHVrQi8lc1wiXG4rI2RlZmluZSBOT0RFX1NZU19IUF9QQVRIIFwiL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGUldS9odWdlcGFnZXMvaHVnZXBhZ2VzLSVsdWtCLyVzXCJcbitcbitzdHJ1Y3QgYml0bWFzayAqKm5vZGVtYXNrcztcbitpbnQgKm5vZGVpZHM7XG4rXG4rcHRocmVhZF90ICp0aHJlYWRzO1xuK3N0cnVjdCB0aHJlYWRfYXJncyB7XG4rXHRzdHJ1Y3QgYml0bWFzayAqbXlfbm9kZW1hc2s7XG4rXHRpbnQgdG9fcmVzZXJ2ZTtcbit9O1xuK3N0cnVjdCB0aHJlYWRfYXJncyogcGVyX3RocmVhZF9hcmdzO1xuK3B0aHJlYWRfY29uZF90IGNvbmQgPSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVI7XG4rcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbitpbnQgd2FrZV9jb25kID0gMDtcbitcbitjaGFyICpucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX25yX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKmdfcmVzdl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjBfZnJlZV9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9ucl9odWdlcGFnZXNfcGF0aDtcbitjaGFyICpuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoO1xuK2NoYXIgKm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfbnJfaHVnZXBhZ2VzX3BhdGg7XG4rY2hhciAqbjFfc3VycGx1c19odWdlcGFnZXNfcGF0aDtcbitcbit1bnNpZ25lZCBsb25nIGdfZnJlZV9odWdlcGFnZXMsIGdfbnJfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgZ19yZXN2X2h1Z2VwYWdlcywgZ19zdXJwbHVzX2h1Z2VwYWdlcztcbit1bnNpZ25lZCBsb25nIG4wX2ZyZWVfaHVnZXBhZ2VzLCBuMF9ucl9odWdlcGFnZXMsIG4wX3N1cnBsdXNfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgaW50IG4xX2ZyZWVfaHVnZXBhZ2VzLCBuMV9ucl9odWdlcGFnZXMsIG4xX3N1cnBsdXNfaHVnZXBhZ2VzO1xuK3Vuc2lnbmVkIGxvbmcgaW50IG9yaWdfbjBfbnJfaHVnZXBhZ2VzLCBvcmlnX24xX25yX2h1Z2VwYWdlcztcbit1bnNpZ25lZCBsb25nIGludCBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzO1xuK1xuK1xuKy8qIHNldHVwX3BhdGhzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIHN0cmluZ3MgZm9yIHRoZSB2YXJpb3VzIGh1Z2V0bGIgcGFnZSBzeXNmc1xuKyAqIHBhdGhzLiBUaGUgc3RyaW5ncyBhcmUgdXNlZCB0byByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBzeXNmcyBmaWxlcy5cbisgKi9cbitzdGF0aWMgdm9pZCBzZXR1cF9wYXRocyh2b2lkKSB7XG4rXHRhc3ByaW50ZihcdTAwMjZucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLFxuK1x0XHRcdFwiL3Byb2Mvc3lzL3ZtL25yX292ZXJjb21taXRfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2Z19mcmVlX2h1Z2VwYWdlc19wYXRoLCBHTE9CQUxfU1lTX0hQX1BBVEgsXG4rXHRcdFx0SFBTSVpFX0tCLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2Z19ucl9odWdlcGFnZXNfcGF0aCwgR0xPQkFMX1NZU19IUF9QQVRILFxuK1x0XHRcdEhQU0laRV9LQiwgXCJucl9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbitcdFx0XHRIUFNJWkVfS0IsIFwicmVzdl9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIEdMT0JBTF9TWVNfSFBfUEFUSCxcbitcdFx0XHRIUFNJWkVfS0IsIFwic3VycGx1c19odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZuMF9mcmVlX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuK1x0XHRcdEhQU0laRV9LQiwgXCJmcmVlX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4wX25yX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuK1x0XHRcdEhQU0laRV9LQiwgXCJucl9odWdlcGFnZXNcIik7XG4rXHRhc3ByaW50ZihcdTAwMjZuMF9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBOT0RFX1NZU19IUF9QQVRILCBub2RlaWRzWzBdLFxuK1x0XHRcdEhQU0laRV9LQiwgXCJzdXJwbHVzX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcImZyZWVfaHVnZXBhZ2VzXCIpO1xuK1x0YXNwcmludGYoXHUwMDI2bjFfbnJfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcIm5yX2h1Z2VwYWdlc1wiKTtcbitcdGFzcHJpbnRmKFx1MDAyNm4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgsIE5PREVfU1lTX0hQX1BBVEgsIG5vZGVpZHNbMV0sXG4rXHRcdFx0SFBTSVpFX0tCLCBcInN1cnBsdXNfaHVnZXBhZ2VzXCIpO1xuK31cbitcbisvKiBnZXRfaHVnZXBhZ2Vfc3RhdHNcbisgKlxuKyAqIEhlbHBlciBmdW5jdGlvbiB0byBzaW1wbHkgZ3JhYiBhIGJ1bmNoIG9mIHRoZSBodWdldGxiIHBhZ2UgbWV0cmljcyBpbiBzeXNmc1xuKyAqL1xuK3N0YXRpYyB2b2lkIGdldF9odWdlcGFnZV9zdGF0cyh2b2lkKSB7XG4rXHRyZWFkX3N5c2ZzKGdfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2Z19mcmVlX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKGdfbnJfaHVnZXBhZ2VzX3BhdGgsIFx1MDAyNmdfbnJfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMoZ19yZXN2X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3Jlc3ZfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZnX3N1cnBsdXNfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjBfZnJlZV9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfZnJlZV9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfbnJfaHVnZXBhZ2VzKTtcbitcdHJlYWRfc3lzZnMobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCwgXHUwMDI2bjBfc3VycGx1c19odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9mcmVlX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9mcmVlX2h1Z2VwYWdlcyk7XG4rXHRyZWFkX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9zdXJwbHVzX2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZuMV9zdXJwbHVzX2h1Z2VwYWdlcyk7XG4rfVxuK1xuKy8qIHNhdmVfaHVnZXBhZ2VfY29uZmlnc1xuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHNhdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGh1Z2VwYWdlIGNvbmZpZ3Mgc28gdGhpc1xuKyAqIHRlc3Qgc3VpdGUgZG9lc24ndCBjbG9iYmVyIGNvbmZpZ3MgbmVlZGVkIGZvciBvdGhlciB0ZXN0cy5cbisgKi9cbitzdGF0aWMgdm9pZCBzYXZlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkge1xuK1x0cmVhZF9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMF9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhuMV9ucl9odWdlcGFnZXNfcGF0aCwgXHUwMDI2b3JpZ19uMV9ucl9odWdlcGFnZXMpO1xuK1x0cmVhZF9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBcdTAwMjZvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbit9XG4rXG4rLyogcmVzdG9yZV9odWdlcGFnZV9jb25maWdzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2YgaHVnZXBhZ2UgY29uZmlncyBiZWZvcmUgdGhpcyB0ZXN0XG4rICogd2FzIHJhbi5cbisgKi9cbitzdGF0aWMgdm9pZCByZXN0b3JlX2h1Z2VwYWdlX2NvbmZpZ3Modm9pZCkge1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIG9yaWdfbjBfbnJfaHVnZXBhZ2VzKTtcbitcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCBvcmlnX24xX25yX2h1Z2VwYWdlcyk7XG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCBvcmlnX25yX292ZXJjb21taXRfaHVnZXBhZ2VzKTtcbit9XG4rXG4rLyogcmVzZXRfaHVnZXBhZ2VzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVzZXQgc3RhdGljIGh1Z2V0bGIgcGFnZSByZXNlcnZhdGlvbnMgdG8gMC5cbisgKiBVc2VkIHRvIGdldCBiYWNrIHRvIGEgY2xlYXIgc3RhdGUgYmV0d2VlbiB0ZXN0cy5cbisgKi9cbitzdGF0aWMgdm9pZCByZXNldF9odWdlcGFnZXModm9pZCkge1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMCk7XG4rXHR3cml0ZV9zeXNmcyhnX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbitcdHdyaXRlX3N5c2ZzKG4wX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbitcdHdyaXRlX3N5c2ZzKG4xX25yX2h1Z2VwYWdlc19wYXRoLCAwKTtcbit9XG4rXG4rLyogY2FuX3J1blxuKyAqXG4rICogRG9lcyBzYW5pdHkgY2hlY2tpbmcgZmlyc3QgdG8gbWFrZSBzdXJlIHRoZSB0ZXN0cyBjYW4gZXZlbiBydW4uXG4rICovXG4rc3RhdGljIHZvaWQgY2hlY2tfcmVxdWlyZW1lbnRzKHZvaWQpIHtcbisgICAgICAgIGlmIChnZXRldWlkKCkgIT0gMClcbisgICAgICAgICAgICAgICAga3NmdF9leGl0X3NraXAoXCJQbGVhc2UgcnVuIHRoZSB0ZXN0IGFzIHJvb3QuXFxuXCIpO1xuK1xuK1x0aWYgKG51bWFfYXZhaWxhYmxlKCkgPT0gLTEpXG4rXHRcdGtzZnRfZXhpdF9za2lwKFwiTnVtYSBpcyB1bmF2YWlsYWJsZS5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fY29uZmlndXJlZF9ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIk5vdCBlbm91Z2ggbm9kZXMgdG8gdGVzdC5cXG5cIik7XG4rXG4rXHRpZiAobnVtYV9udW1fdGFza19ub2RlcygpIFx1MDAzYyAyKVxuK1x0XHRrc2Z0X2V4aXRfc2tpcChcIkN1cnJlbnQgbWVtcG9saWN5IGlzIHRvbyByZXN0cmljdGl2ZS5cXG5cIik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNsZWFudXAoY2hhciogZXJyX21zZykge1xuK1x0ZnJlZShwZXJfdGhyZWFkX2FyZ3MpO1xuK1x0ZnJlZSh0aHJlYWRzKTtcbitcdGZyZWUobm9kZWlkcyk7XG4rXHRmcmVlKG5vZGVtYXNrcyk7XG4rXHRmcmVlKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShnX25yX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUoZ19yZXN2X2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUoZ19zdXJwbHVzX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjBfZnJlZV9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4wX25yX2h1Z2VwYWdlc19wYXRoKTtcbitcdGZyZWUobjBfc3VycGx1c19odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4xX2ZyZWVfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0ZnJlZShuMV9ucl9odWdlcGFnZXNfcGF0aCk7XG4rXHRmcmVlKG4xX3N1cnBsdXNfaHVnZXBhZ2VzX3BhdGgpO1xuK1x0aWYgKGVycl9tc2cpXG4rXHRcdGtzZnRfZXhpdF9mYWlsX21zZyhlcnJfbXNnKTtcbit9XG4rXG4rLyogc2V0dXBfbm9kZV9pbmZvXG4rICpcbisgKiBDcmVhdGVzIHRoZSBiaXRtYXNrcyB1c2VkIHRvIGlzb2xhdGUgdGVzdCBydW5uZXJzIGFuZCB0aGVpciBodWdldGxiIHBhZ2VcbisgKiByZXNlcnZhdGlvbnMuXG4rICovXG4rc3RhdGljIHZvaWQgc2V0dXBfbm9kZV9pbmZvKHZvaWQpIHtcbitcdGludCBpO1xuK1x0aW50IGl0aF9ub2RlbWFzayA9IDA7XG4rXG4rXHRub2RlaWRzID0gY2FsbG9jKDIsIHNpemVvZihpbnQpKTtcbitcdG5vZGVtYXNrcyA9IGNhbGxvYygyLCBzaXplb2Yoc3RydWN0IGJpdG1hc2sgKikpO1xuK1xuK1x0aWYgKCFub2RlbWFza3MgfHwgIW5vZGVpZHMpXG4rXHRcdGNsZWFudXAoXCJzZXR1cF9ub2RlX2luZm86IGNhbGxvYy5cIik7XG4rXG4rXHQvKiBXYWxrIHRoZSBub2RlcyBhdmFpbGFibGUgdG8gdXMuIENyZWF0ZSB0d28gYml0bWFza3MsIG9uZSBvZiB0aGVcbitcdCAqIGluZGV4IG9mIHRoZSBmaXJzdCBub2RlIGF2YWlsYWJsZSB0byB1cywgYW5kIHRoZSBzZWNvbmQgb2YgdGhlIG5leHRcbitcdCAqIG5vZGUgYXZhaWxhYmxlIHRvIHVzLiAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtYV9udW1fdGFza19ub2RlcygpOyBpKyspIHtcbitcdFx0aWYgKG51bWFfYml0bWFza19pc2JpdHNldChudW1hX2dldF9tZW1zX2FsbG93ZWQoKSwgaSkpIHtcbitcdFx0XHRub2RlaWRzW2l0aF9ub2RlbWFza10gPSBpO1xuK1x0XHRcdG5vZGVtYXNrc1tpdGhfbm9kZW1hc2srK10gPSBudW1hX2JpdG1hc2tfc2V0Yml0KFxuK1x0XHRcdFx0XHRudW1hX2FsbG9jYXRlX25vZGVtYXNrKCksIGkpO1xuK1x0XHR9XG4rXHR9XG4rXHRpZiAoaXRoX25vZGVtYXNrICE9IDIgfHwgIW5vZGVtYXNrc1swXSB8fCAhbm9kZW1hc2tzWzFdKVxuK1x0XHRjbGVhbnVwKFwiRmFpbGVkIHRvIGNyZWF0ZSBub2RlbWFza3MuXCIpO1xuK31cbitcbisvKiBzZXR1cF90aHJlYWRzXG4rICpcbisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0dXAgc3BhY2UgZm9yIHRocmVhZHMuXG4rICovXG4rc3RhdGljIHZvaWQgc2V0dXBfdGhyZWFkcyh2b2lkKSB7XG4rXHRwZXJfdGhyZWFkX2FyZ3MgPSBjYWxsb2MoMiwgc2l6ZW9mKHBlcl90aHJlYWRfYXJncykpO1xuK1x0aWYgKCFwZXJfdGhyZWFkX2FyZ3MpXG4rXHRcdGNsZWFudXAoXCJjYWxsb2MgdGhyZWFkIGFyZ3MuXCIpO1xuK1xuK1x0dGhyZWFkcyA9IGNhbGxvYygyLCBzaXplb2YocHRocmVhZF90KSk7XG4rXHRpZiAoIXRocmVhZHMpIHtcbitcdFx0Y2xlYW51cChcImNhbGxvYyB0aHJlYWRzLlwiKTtcbitcdH1cbit9XG4rXG4rLyogcmVzZXJ2ZV9odWdlcGFnZVxuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc2VydmUgYSBodWdldGxiIHBhZ2VcbisgKi9cbitzdGF0aWMgdW5zaWduZWQgbG9uZyogcmVzZXJ2ZV9odWdlcGFnZSh2b2lkKSB7XG4rXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcgKikgbW1hcChOVUxMLCBIUFNJWkVfQllURVMsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4rXHRcdE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9IVUdFVExCLCAtMSwgMCk7XG4rfVxuK1xuKy8qIHRocmVhZF93b3JrXG4rICpcbisgKiBUZXN0IHJ1bm5lcnMuIFBlcmZvcm1zIHRoZSB3b3JrIG9mIHJlc2VydmluZyBhbmQgZnJlZWluZyBodWdldGxiIHBhZ2VzLlxuKyAqL1xuK3N0YXRpYyB2b2lkICp0aHJlYWRfd29yayh2b2lkICphcmcpIHtcbitcdHN0cnVjdCB0aHJlYWRfYXJncyogdF9hcmdzID0gKHN0cnVjdCB0aHJlYWRfYXJncyopIGFyZztcbitcdHVuc2lnbmVkIGxvbmcgKipodWdlcGFnZXM7XG4rXHRpbnQgaTtcbitcbitcdGh1Z2VwYWdlcyA9ICh1bnNpZ25lZCBsb25nICoqKSBjYWxsb2ModF9hcmdzLVx1MDAzZXRvX3Jlc2VydmUsXG4rXHRcdFx0XHRcdFx0c2l6ZW9mKHVuc2lnbmVkIGxvbmcgKiopKTtcbitcbitcdC8qIFJlc2VydmUgaHVnZXRsYiBwYWdlcyBvbiBteSBub2RlICovXG4rXHRpZiAodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKVxuK1x0XHRudW1hX2JpbmQodF9hcmdzLVx1MDAzZW15X25vZGVtYXNrKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aHVnZXBhZ2VzW2ldID0gcmVzZXJ2ZV9odWdlcGFnZSgpO1xuK1x0XHQvKiBUZXN0cyBtYXkgcHVycG9zZWZ1bGx5IHRyeSB0byBvdmVyYWxsb2NhdGUsIHNvIGp1c3RcbitcdFx0ICogZmFsbCB0aHJvdWdoIHJhdGhlciB0aGFuIGVycm9yIG91dCovXG4rXHRcdGlmIChodWdlcGFnZXNbaV0gPT0gTUFQX0ZBSUxFRCkge1xuK1x0XHRcdHRfYXJncy1cdTAwM2V0b19yZXNlcnZlID0gaTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0fVxuK1xuK1x0LyogR28gdG8gc2xlZXAgdW50aWwgbWFpbiB0aHJlYWQgd2FrZXMgdXMgdXAgKi9cbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4rXHR3aGlsZSghd2FrZV9jb25kKSB7XG4rXHRcdHB0aHJlYWRfY29uZF93YWl0KFx1MDAyNmNvbmQsIFx1MDAyNm11dGV4KTtcbitcdH1cbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbitcbitcdC8qIFRyeSB0byBmcmVlIHRob3NlIGh1Z2V0bGIgcGFnZXMgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRfYXJncy1cdTAwM2V0b19yZXNlcnZlOyBpKyspIHtcbitcdFx0aWYgKG11bm1hcChodWdlcGFnZXNbaV0sIEhQU0laRV9CWVRFUykgXHUwMDNjIDApXG4rXHRcdFx0a3NmdF9wZXJyb3IoXCJtdW5tYXAoKSBmYWlsZWQhIENoZWNrIGZvciBsZWFrZWQgaHVnZXRsYiBwYWdlcyFcXG5cIik7XG4rXHR9XG4rXHRmcmVlKGh1Z2VwYWdlcyk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyogd2FrZV9jaGlsZHJlblxuKyAqXG4rICogSGVscGVyIGZ1bmN0aW9uIHRvIHdha2UgY2hpbGRyZW4gdGhyZWFkcy5cbisgKi9cbitzdGF0aWMgdm9pZCB3YWtlX2NoaWxkcmVuKHZvaWQpIHtcbitcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4rXHR3YWtlX2NvbmQgPSAxO1xuK1x0cHRocmVhZF9jb25kX2Jyb2FkY2FzdChcdTAwMjZjb25kKTtcbitcdHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFx1MDAyNm11dGV4KTtcbit9XG4rXG4rLyogdGVzdDFcbisgKlxuKyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2UgYW55d2hlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgdGVzdDEodm9pZCkge1xuK1x0cmVzZXRfaHVnZXBhZ2VzKCk7XG4rXG4rXHR3cml0ZV9zeXNmcyhucl9vdmVyY29tbWl0X2h1Z2VwYWdlc19wYXRoLCAxKTtcbitcdHBlcl90aHJlYWRfYXJnc1swXS5teV9ub2RlbWFzayA9IE5VTEw7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KChnX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IGdfcmVzdl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgKChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDApIHx8XG4rXHRcdFx0IChuMF9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMF9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfc3VycGx1c19odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjFfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4xX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEpKSxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBhbnl3aGVyZVxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDJcbisgKlxuKyAqIFNhbml0eSBjaGVja2luZywgYXR0ZW1wdCB0byByZXNlcnZlIGEgc3VycGx1cyBodWdldGxiIHBhZ2Ugd2l0aFxuKyAqIGEgbWVtcG9saWN5LlxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3QyKHZvaWQpIHtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMCBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMCxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMFxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDNcbisgKlxuKyAqIFNldCBhIHN0YXRpYyBodWdlcGFnZSBhbmQgcmVzZXJ2ZSBvZmYgbm9kZVxuKyAqL1xuK3N0YXRpYyB2b2lkIHRlc3QzKHZvaWQpIHtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK1x0d3JpdGVfc3lzZnMobnJfb3ZlcmNvbW1pdF9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXHR3cml0ZV9zeXNmcyhuMF9ucl9odWdlcGFnZXNfcGF0aCwgMSk7XG4rXG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMF07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMF0udG9fcmVzZXJ2ZSA9IDA7XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMV0ubXlfbm9kZW1hc2sgPSBub2RlbWFza3NbMV07XG4rXHRwZXJfdGhyZWFkX2FyZ3NbMV0udG9fcmVzZXJ2ZSA9IDE7XG4rXG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzBdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzBdKTtcbitcdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRocmVhZHNbMV0sIE5VTEwsIHRocmVhZF93b3JrLCBcdTAwMjZwZXJfdGhyZWFkX2FyZ3NbMV0pO1xuK1xuK1x0dXNsZWVwKDUwMDAwMCk7XG4rXG4rXHRnZXRfaHVnZXBhZ2Vfc3RhdHMoKTtcbitcdGtzZnRfdGVzdF9yZXN1bHQoZ19mcmVlX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX25yX2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBnX3Jlc3ZfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IGdfc3VycGx1c19odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgbjBfZnJlZV9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjBfbnJfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX3N1cnBsdXNfaHVnZXBhZ2VzID09IDAgXHUwMDI2XHUwMDI2IG4xX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4xX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNiBuMV9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAxLFxuK1x0XHRcdCBcIlNldCAxIHN0YXRpYyBodWdlcGFnZSBvbiBub2RlMCwgcmVzZXJ2ZSBzdXJwbHVzIGh1Z2VwYWdlIG9uIG5vZGUgMVxcblwiKTtcbitcbitcdHdha2VfY2hpbGRyZW4oKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzBdLCBOVUxMKTtcbitcdHB0aHJlYWRfam9pbih0aHJlYWRzWzFdLCBOVUxMKTtcbitcdHdha2VfY29uZCA9IDA7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbit9XG4rXG4rLyogdGVzdDRcbisgKlxuKyAqIFJlc2VydmUgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZTFcbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0NCh2b2lkKSB7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbitcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAxO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbitcdFx0XHQgXCJSZXNlcnZlIDEgc3RhdGljIGh1Z2VwYWdlIG9uIG5vZGUwLCByZXNlcnZlIHN1cnBsdXMgaHVnZXBhZ2Ugb24gbm9kZSAxXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK31cbitcbisvKiB0ZXN0NVxuKyAqXG4rICogUmVzZXJ2ZSBzdGF0aWMgaHVnZXBhZ2Ugb24gbm9kZTAsIHJlc2VydmUgc3VycGx1cyBodWdlcGFnZSBvbiBub2RlMSBhbmRcbisgKiBmYWlsIHRvIG92ZXIgYWxsb2NhdGUgYW5vdGhlci5cbisgKi9cbitzdGF0aWMgdm9pZCB0ZXN0NSh2b2lkKSB7XG4rXHRyZXNldF9odWdlcGFnZXMoKTtcbitcbitcdHdyaXRlX3N5c2ZzKG5yX292ZXJjb21taXRfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1x0d3JpdGVfc3lzZnMobjBfbnJfaHVnZXBhZ2VzX3BhdGgsIDEpO1xuK1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzBdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzBdLnRvX3Jlc2VydmUgPSAxO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLm15X25vZGVtYXNrID0gbm9kZW1hc2tzWzFdO1xuK1x0cGVyX3RocmVhZF9hcmdzWzFdLnRvX3Jlc2VydmUgPSAyO1xuK1xuK1x0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyZWFkc1swXSwgTlVMTCwgdGhyZWFkX3dvcmssIFx1MDAyNnBlcl90aHJlYWRfYXJnc1swXSk7XG4rXHRwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHJlYWRzWzFdLCBOVUxMLCB0aHJlYWRfd29yaywgXHUwMDI2cGVyX3RocmVhZF9hcmdzWzFdKTtcbitcbitcdHVzbGVlcCg1MDAwMDApO1xuK1xuK1x0Z2V0X2h1Z2VwYWdlX3N0YXRzKCk7XG4rXHRrc2Z0X3Rlc3RfcmVzdWx0KGdfZnJlZV9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjYgZ19ucl9odWdlcGFnZXMgPT0gMiBcdTAwMjZcdTAwMjZcbitcdFx0XHQgZ19yZXN2X2h1Z2VwYWdlcyA9PSAyIFx1MDAyNlx1MDAyNiBnX3N1cnBsdXNfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0IG4wX2ZyZWVfaHVnZXBhZ2VzID09IDEgXHUwMDI2XHUwMDI2IG4wX25yX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMF9zdXJwbHVzX2h1Z2VwYWdlcyA9PSAwIFx1MDAyNlx1MDAyNiBuMV9mcmVlX2h1Z2VwYWdlcyA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCBuMV9ucl9odWdlcGFnZXMgPT0gMSBcdTAwMjZcdTAwMjYgbjFfc3VycGx1c19odWdlcGFnZXMgPT0gMSxcbitcdFx0XHQgXCJJbnRlbnRpb25hbGx5IG92ZXJhbGxvY2F0ZSBhbmQgZmFpbCBkdWUgdG8gbnJfb3ZlcmNvbW1pdF9odWdlcGFnZXMgbGltaXQuXFxuXCIpO1xuK1xuK1x0d2FrZV9jaGlsZHJlbigpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMF0sIE5VTEwpO1xuK1x0cHRocmVhZF9qb2luKHRocmVhZHNbMV0sIE5VTEwpO1xuK1x0d2FrZV9jb25kID0gMDtcbitcdHJlc2V0X2h1Z2VwYWdlcygpO1xuK1xuK31cbitcbitpbnQgbWFpbih2b2lkKSB7XG4rXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuK1x0a3NmdF9zZXRfcGxhbig1KTtcbitcbitcdGNoZWNrX3JlcXVpcmVtZW50cygpO1xuK1x0c2V0dXBfdGhyZWFkcygpO1xuK1x0c2V0dXBfbm9kZV9pbmZvKCk7XG4rXHRzZXR1cF9wYXRocygpO1xuK1x0c2F2ZV9odWdlcGFnZV9jb25maWdzKCk7XG4rXG4rXHR0ZXN0MSgpO1xuK1x0dGVzdDIoKTtcbitcdHRlc3QzKCk7XG4rXHR0ZXN0NCgpO1xuK1x0dGVzdDUoKTtcbitcbitcdHJlc3RvcmVfaHVnZXBhZ2VfY29uZmlncygpO1xuK1x0a3NmdF9maW5pc2hlZCgpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoXG5pbmRleCBjMTdiMTMzYTgxZDI0OC4uY2QzNjhjZTU5MGE3NGMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcnVuX3ZtdGVzdHMuc2hcbkBAIC0yOTcsNiArMjk3LDcgQEAgQ0FURUdPUlk9XCJodWdldGxiXCIgcnVuX3Rlc3QgLi9odWdlcGFnZS1tcmVtYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2VwYWdlLXZtZW1tYXBcbiBDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGItbWFkdmlzZVxuIENBVEVHT1JZPVwiaHVnZXRsYlwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cbitDQVRFR09SWT1cImh1Z2V0bGJcIiBydW5fdGVzdCAuL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcbiBcbiBpZiBbIFwiJHtIQVZFX0hVR0VQQUdFU31cIiA9IFwiMVwiIF07IHRoZW5cbiBcdG5yX2h1Z2VwYWdlc190bXA9JChjYXQgL3Byb2Mvc3lzL3ZtL25yX2h1Z2VwYWdlcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE1OjIzLjY1NzUyOTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAyMTU1NTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEh1Z2VUTEIgU3VycGx1cyBQYWdlIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vaHVnZXRsYi5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGZ1bmN0aW9uLCBhbmQgaW5jbHVkZXMgYSBuZXcgc2VsZnRlc3QsIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluY29ycG9yYXRpbmcgYGFsbG93ZWRfbWVtc19ucihoKWAgaW50byB0aGUgY2FsY3VsYXRpb24gb2YgbmVlZGVkIGh1Z2UgcGFnZXMuIFRoZXkndmUgbW92ZWQgaXRzIGRlZmluaXRpb24gaGlnaGVyIHVwIGluIHRoZSBmaWxlLCBhbmQgYXJlIG5vdyB1c2luZyBpdCB3aXRoaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYC5cblxuTGV0J3Mgc2VlLCB0aGUgY2hhbmdlcyBpbiBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGl0c2VsZiBtb2RpZnkgdGhlIGNhbGN1bGF0aW9uOlxuXG5gYGBjXG4tXHRuZWVkZWQgPSAoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcztcbitcdG5lZWRlZCA9IG1heCgobG9uZykgKGRlbHRhIC0gYWxsb3dlZF9tZW1zX25yKGgpKSxcbitcdFx0KGxvbmcpICgoaC1cdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLSBoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xuYGBgXG5hbmRcbmBgYGNcbi1cdG5lZWRlZCA9IChoLVx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtXG4tXHRcdFx0KGgtXHUwMDNlZnJlZV9odWdlX3BhZ2VzICsgYWxsb2NhdGVkKTtcbitcdG5lZWRlZCA9IG1heCgobG9uZykgKChkZWx0YSAtIGFsbG93ZWRfbWVtc19ucihoKSkgLSBhbGxvY2F0ZWQpLFxuK1x0XHRcdChsb25nKSAoKGgtXHUwMDNlcmVzdl9odWdlX3BhZ2VzICsgZGVsdGEpIC1cbitcdFx0XHRcdChoLVx1MDAzZWZyZWVfaHVnZV9wYWdlcyArIGFsbG9jYXRlZCkpKTtcbmBgYFxuXG5SaWdodCwgc28gdGhpcyBsb2dpYyBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IGhvdyB0aGUga2VybmVsIG1hbmFnZXMgc3VycGx1cyBodWdlIHBhZ2VzLCBhbmQgKmNydWNpYWxseSosIGl0J3Mgbm93IGNvbnNpZGVyaW5nIHRoZSBhbGxvd2VkIG1lbW9yeSBub2RlcyAoTlVNQSkuIEdpdmVuIHRoZSBmdW5jdGlvbmFsIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSBhbmQgdGhlIGludm9sdmVtZW50IG9mIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgd2FycmFudHMgYSB0aG9yb3VnaCBmdXp6aW5nIGNhbXBhaWduLiBUaGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1wb2xpY2llcywgaW4gcGFydGljdWxhciwgbG9va3MgbGlrZSBhIGdvb2QgYXJlYSB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZy5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBlc3NlbnRpYWwgZm9yIHRoaXMgdG8gZXZlbiAqYmUqIGFjdGl2ZS4gT2J2aW91c2x5LCBgQ09ORklHX0hVR0VUTEJfUEFHRWAgaXMgdGhlIHByaW1hcnkgb25lLCBzaW5jZSB0aGlzIGlzIGFsbCBhYm91dCBIdWdlVExCIHBhZ2VzLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseS4uLiBZZXAsIHRoYXQncyB0aGUgYmFzZSByZXF1aXJlbWVudC4gR29vZCB0byBrbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ3LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MzAuNjc5MDg3MTlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc3ODIzMTc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnYXRoZXJfc3VycGx1c19wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjI1OD1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIyNzgtICovXFxubW0vaHVnZXRsYi5jOjIyNzk6c3RhdGljIGludCBnYXRoZXJfc3VycGx1c19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIGRlbHRhKVxcbm1tL2h1Z2V0bGIuYy0yMjgwLVxcdF9fbXVzdF9ob2xkKFxcdTAwMjZodWdldGxiX2xvY2spXFxuLS1cXG5tbS9odWdldGxiLmM9NDYxND1zdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NjQ1LVxcdGlmIChkZWx0YSBcXHUwMDNlIDApIHtcXG5tbS9odWdldGxiLmM6NDY0NjpcXHRcXHRpZiAoZ2F0aGVyX3N1cnBsdXNfcGFnZXMoaCwgZGVsdGEpIFxcdTAwM2MgMClcXG5tbS9odWdldGxiLmMtNDY0Ny1cXHRcXHRcXHRnb3RvIG91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6MzMuNDU3Mzc3ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDY5Nzg2NDM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgSW50ZXJhY3Rpb24gb2YgSHVnZVRMQiBBY2NvdW50aW5nIGFuZCBQYWdlIFJldHJpZXZhbCoqXG5cbk9rYXksIHNvIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRoYXQncyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCBhbmQgd2hhdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgbWlnaHQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yIHdpdGhpbiB0aGUgYG1tL2h1Z2V0bGIuY2AgY29udGV4dC4gR2l2ZW4gdGhhdCBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgIGxpa2VseSBoYW5kbGVzIHRoZSByZXRyaWV2YWwgb2YgcGFnZXMsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZGVhbHMgd2l0aCBtZW1vcnkgYWNjb3VudGluZyB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLCBJJ20gZXhwZWN0aW5nIHRvIGRlbHZlIGludG8gdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIGluY29uc2lzdGVuY2llcy4gSeKAmWxsIG5lZWQgdG8gZXhwbG9yZSBob3cgdGhlIHN5c3RlbSBkZXRlcm1pbmVzIHdoaWNoIHBhZ2VzIGFyZSBjb25zaWRlcmVkIFwic3VycGx1cyxcIiB1bmRlciB3aGF0IGNvbmRpdGlvbnMgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQsIGFuZCBob3cgdGhlIGFjY291bnRpbmcgaW50ZXJhY3RzIHdpdGggcGFnZSByZWNsYW1hdGlvbiBvciBhbGxvY2F0aW9uLiBUaGUgY29uZmlndXJhdGlvbnMgd2l0aGluIGBtbS9odWdldGxiLmNgIGFyZSB3aGVyZSB0aGUga25vYnMgYXJlIGxpa2VseSB0byBiZTsgSSdtIGV4cGVjdGluZyB0byBmaW5kIHNldHRpbmdzIHJlbGF0ZWQgdG8gcGFnZSBzaXplLCBtZW1vcnkgbGltaXRzLCBhbmQgcGVyaGFwcyBwb2xpY2llcyBmb3IgcGFnZSByZXRpcmVtZW50IG9yIHN3YXBwaW5nIHRoYXQgaW1wYWN0IGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlci4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDIzOSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE1OjQ0LjE1NTI0NDYzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5Mzk1MTc0ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYlxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcXHQrPSBkbWFwb29sLm9cXG5tbS9NYWtlZmlsZTo4MTpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGIubyBodWdldGxiX3N5c2ZzLm8gaHVnZXRsYl9zeXNjdGwub1xcbm1tL01ha2VmaWxlLTgyLWlmZGVmIENPTkZJR19DTUFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6NDcuMDk0NzY4MjE3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NjA1NzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXM6ICoqQW5hbHl6aW5nIFBvc3NpYmxlIERlcGVuZGVuY2llcyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKiouXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gYENPTkZJR19IVUdFVExCRlNgIGZvciB0aGlzIGNvbmZpZ3VyYXRpb24uIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCwgSSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgdGhlIGludGVycGxheSB3aXRoIG90aGVyIHBvdGVudGlhbGx5IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIFNwZWNpZmljYWxseSwgYENPTkZJR19OVU1BYCBjYXRjaGVzIG15IGV5ZS4gVGhlIG1lbnRpb25zIG9mIGBhbGxvd2VkX21lbXNfbnJgIGFuZCBgcG9saWN5X21iaW5kX25vZGVtYXNrYCB3aXRoaW4gdGhlIE5VTUEgY29udGV4dCBhcmUgbWFraW5nIG1lIHRoaW5rIHRoaXMgbWlnaHQgYmUgbW9yZSBpbnRlcmNvbm5lY3RlZCB0aGFuIEkgaW5pdGlhbGx5IGFudGljaXBhdGVkLiBUaGVzZSBmbGFncyBvZnRlbiBpbnZvbHZlIHRoZSBtZW1vcnkgbm9kZSBhbmQgYmluZGluZyBwb2xpY2llcywgYSBjcml0aWNhbCBhcmVhIHdoZW4gZGVhbGluZyB3aXRoIEh1Z2VUTEIuXG5cblRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgZGVlcGVyIGludG8gYGFsbG93ZWRfbWVtc19ucmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MzYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNTo1MC40NDA4MzAxODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMzYxNTA3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvd2VkX21lbXNfbnJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNDE9c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuLS1cXG5tbS9odWdldGxiLmMtMjI1Ny1cXG5tbS9odWdldGxiLmM6MjI1ODpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93ZWRfbWVtc19ucihzdHJ1Y3QgaHN0YXRlICpoKVxcbm1tL2h1Z2V0bGIuYy0yMjU5LXtcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMjc5PXN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjk2LVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxubW0vaHVnZXRsYi5jOjIyOTc6XFx0bmVlZGVkID0gbWF4KChsb25nKSAoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpLFxcbm1tL2h1Z2V0bGIuYy0yMjk4LVxcdFxcdChsb25nKSAoKGgtXFx1MDAzZXJlc3ZfaHVnZV9wYWdlcyArIGRlbHRhKSAtIGgtXFx1MDAzZWZyZWVfaHVnZV9wYWdlcykpO1xcbi0tXFxubW0vaHVnZXRsYi5jLTIzMzEtXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG5tbS9odWdldGxiLmM6MjMzMjpcXHRuZWVkZWQgPSBtYXgoKGxvbmcpICgoZGVsdGEgLSBhbGxvd2VkX21lbXNfbnIoaCkpIC0gYWxsb2NhdGVkKSxcXG5tbS9odWdldGxiLmMtMjMzMy1cXHRcXHRcXHQobG9uZykgKChoLVxcdTAwM2VyZXN2X2h1Z2VfcGFnZXMgKyBkZWx0YSkgLVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0OC1cXG5tbS9odWdldGxiLmM6NDY0OTpcXHRcXHRpZiAoZGVsdGEgXFx1MDAzZSBhbGxvd2VkX21lbXNfbnIoaCkpIHtcXG5tbS9odWdldGxiLmMtNDY1MC1cXHRcXHRcXHRyZXR1cm5fdW51c2VkX3N1cnBsdXNfcGFnZXMoaCwgZGVsdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNTo1Mi45NjQ0NTAzMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDE5ODU1OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gdGhlIGZpZWxkOlxuXG4qKkNoZWNraW5nIGZvciBOVU1BIFBvbGljeSBCaW5kaW5ncyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBjcml0aWNhbCByZWxhdGVkIHRvIE5VTUEgYW5kIGl0cyBtZW1vcnkgYmluZGluZyBjYXBhYmlsaXRpZXMuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgcG9saWN5X21iaW5kX25vZGVtYXNrYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBUaGlzIGlzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBtYW5hZ2luZyBtZW1vcnkgYWZmaW5pdHkgYW5kIHBsYWNlbWVudCBvbiBzeXN0ZW1zIHdpdGggTm9uLVVuaWZvcm0gTWVtb3J5IEFjY2VzcyBhcmNoaXRlY3R1cmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBkZWZpbml0aW9uLCBvciBsYWNrIHRoZXJlb2YsIHNpZ25pZmljYW50bHkgaW1wYWN0cyBob3cgSSBhcHByb2FjaCBtZW1vcnkgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGFuZCBwb3RlbnRpYWxseSBob3cgSSBjb25maWd1cmUgdGhlIGtlcm5lbCBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgY2hlY2sgYmVmb3JlIEkgY2FuIHByb2NlZWQgd2l0aCBmdXJ0aGVyIGFuYWx5c2lzIG9yIGltcGxlbWVudGF0aW9uIG9mIE5VTUEtYXdhcmUgY29kZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGRvaW5nIGl0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM0MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE1OjU3LjM4NDMwODc2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM2ODk3Nzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb2xpY3lfbWJpbmRfbm9kZW1hc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyMTg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIyNDAtXFxubW0vaHVnZXRsYi5jOjIyNDE6c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxubW0vaHVnZXRsYi5jLTIyNDIte1xcbi0tXFxubW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjY1LVxcbm1tL2h1Z2V0bGIuYzoyMjY2OlxcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG5tbS9odWdldGxiLmMtMjI2Ny1cXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MjI3OT1zdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtMjI4OS1cXG5tbS9odWdldGxiLmM6MjI5MDpcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhodGxiX2FsbG9jX21hc2soaCkpO1xcbm1tL2h1Z2V0bGIuYy0yMjkxLVxcdGlmIChtYmluZF9ub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTU6NTkuNzUzMjk4NzM1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTU5NjQyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIGZvciBOVU1BIENvbmZpZ3VyYXRpb24gaW4gUG9saWN5IEJpbmRpbmdzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoZSB1c2Ugb2YgYHBvbGljeV9tYmluZF9ub2RlbWFza2AgYW5kIGhvdyBpdCByZWxhdGVzIHRvIE5VTUEuIEZpcnN0LCBteSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY29uZmlybSB3aGV0aGVyIHRoZSBjb21waWxhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGNvbmRpdGlvbmFsIG9uIE5VTUEgYmVpbmcgZW5hYmxlZC4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIGAjaWZkZWYgQ09ORklHX05VTUFgIGNvbnRyb2xzIGl0cyBhdmFpbGFiaWxpdHkuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IGl0J3MgcHJvYmFibHkgZ3VhcmRlZCBieSB0aGF0IG1hY3JvLiBJZiBzbywgdGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSBzb21ldGhpbmcgYWJvdXQgdGhlIGNvcmUgc3lzdGVtIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBmZWF0dXJlLiBJZiBub3QsIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGZ1cnRoZXIgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTA0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MDMuODA5MjY1NjE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIzMDpcXHRcXHRcXHR9XFxuMjIzMTpcXHRcXHR9XFxuMjIzMjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMjIzMzpcXHRcXG4yMjM0OlxcdFxcdC8qIFdlIGNhbm5vdCBmYWxsYmFjayB0byBvdGhlciBub2RlcywgYXMgd2UgY291bGQgYnJlYWsgdGhlIHBlci1ub2RlIHBvb2wuICovXFxuMjIzNTpcXHRcXHRpZiAoIWFsbG93X2FsbG9jX2ZhbGxiYWNrKVxcbjIyMzY6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfVEhJU05PREU7XFxuMjIzNzpcXHRcXG4yMjM4OlxcdFxcdHJldHVybiBhbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIHByZWZlcnJlZF9uaWQsIG5tYXNrKTtcXG4yMjM5OlxcdH1cXG4yMjQwOlxcdFxcbjIyNDE6XFx0c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxuMjI0MjpcXHR7XFxuMjI0MzpcXHQjaWZkZWYgQ09ORklHX05VTUFcXG4yMjQ0OlxcdFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuMjI0NTpcXHRcXG4yMjQ2OlxcdFxcdC8qXFxuMjI0NzpcXHRcXHQgKiBPbmx5IGVuZm9yY2UgTVBPTF9CSU5EIHBvbGljeSB3aGljaCBvdmVybGFwcyB3aXRoIGNwdXNldCBwb2xpY3lcXG4yMjQ4OlxcdFxcdCAqIChmcm9tIHBvbGljeV9ub2RlbWFzaykgc3BlY2lmaWNhbGx5IGZvciBodWdldGxiIGNhc2VcXG4yMjQ5OlxcdFxcdCAqL1xcbjIyNTA6XFx0XFx0aWYgKG1wb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9CSU5EIFxcdTAwMjZcXHUwMDI2XFxuMjI1MTpcXHRcXHRcXHQoYXBwbHlfcG9saWN5X3pvbmUobXBvbCwgZ2ZwX3pvbmUoZ2ZwKSkgXFx1MDAyNlxcdTAwMjZcXG4yMjUyOlxcdFxcdFxcdCBjcHVzZXRfbm9kZW1hc2tfdmFsaWRfbWVtc19hbGxvd2VkKFxcdTAwMjZtcG9sLVxcdTAwM2Vub2RlcykpKVxcbjIyNTM6XFx0XFx0XFx0cmV0dXJuIFxcdTAwMjZtcG9sLVxcdTAwM2Vub2RlcztcXG4yMjU0OlxcdCNlbmRpZlxcbjIyNTU6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjI1NjpcXHR9XFxuMjI1NzpcXHRcXG4yMjU4OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgpXFxuMjI1OTpcXHR7XFxuMjI2MDpcXHRcXHRpbnQgbm9kZTtcXG4yMjYxOlxcdFxcdHVuc2lnbmVkIGludCBuciA9IDA7XFxuMjI2MjpcXHRcXHRub2RlbWFza190ICptYmluZF9ub2RlbWFzaztcXG4yMjYzOlxcdFxcdHVuc2lnbmVkIGludCAqYXJyYXkgPSBoLVxcdTAwM2VmcmVlX2h1Z2VfcGFnZXNfbm9kZTtcXG4yMjY0OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjIyNjU6XFx0XFxuMjI2NjpcXHRcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfbWFzayk7XFxuMjI2NzpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XFxuMjI2ODpcXHRcXHRcXHRpZiAoIW1iaW5kX25vZGVtYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm1iaW5kX25vZGVtYXNrKSlcXG4yMjY5OlxcdFxcdFxcdFxcdG5yICs9IGFycmF5W25vZGVdO1xcbjIyNzA6XFx0XFx0fVxcbjIyNzE6XFx0XFxuMjI3MjpcXHRcXHRyZXR1cm4gbnI7XFxuMjI3MzpcXHR9XFxuMjI3NDpcXHRcXG4yMjc1OlxcdC8qXFxuMjI3NjpcXHQgKiBJbmNyZWFzZSB0aGUgaHVnZXRsYiBwb29sIHN1Y2ggdGhhdCBpdCBjYW4gYWNjb21tb2RhdGUgYSByZXNlcnZhdGlvblxcbjIyNzc6XFx0ICogb2Ygc2l6ZSAnZGVsdGEnLlxcbjIyNzg6XFx0ICovXFxuMjI3OTpcXHRzdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjAzLjgwOTY3NDY5OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDg3OTc5MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbXBhY3RzIG9mIGEgUGF0Y2gqKlxuXG5SaWdodCwgYENPTkZJR19OVU1BYCBpcyBkZWZpbml0ZWx5IHdvcnRoIGNvbnNpZGVyaW5nOyBpdCdzIHByYWN0aWNhbGx5IHNjcmVhbWluZyByZWxldmFuY2UgaGVyZS4gVGhlIHBhdGNoIGZvY3VzZXMgb24gY2hhbmdlcyB3aXRoaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgd2hpY2gsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgY2FsbGVkIHNwZWNpZmljYWxseSBieSBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRoYXQncyB0aGUga2V5LiBMZXQncyBzZWUuLi4gdGhlIHJlYWwgaW1wYWN0IGhpbmdlcyBvbiBob3cgYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGJlaGF2ZXMgYW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgdXNlZCBpbiByZWxhdGlvbiB0byBOVU1BLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgTlVNQSBjb25maWd1cmF0aW9uIGRpcmVjdGx5IGluZmx1ZW5jZXMgdGhlIGJlaGF2aW9yIG9mIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhbmQgaG93IHRoZSBtb2RpZmljYXRpb25zIGluIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYXJlIGdvaW5nIHRvIGNoYW5nZSB0aGUgYWNjb3VudGluZyBwcm9jZWR1cmUgdW5kZXIgTlVNQSBhcmNoaXRlY3R1cmVzLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhhdCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgZnVuY3Rpb24gYW5kIGl0cyBjYWxsIGdyYXBoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjg5MiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MDcuMjk3NjU2MDEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjQ0NjM4MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xNDk9QWZ0ZXIgY29uc3VsdGluZyB0aGUgcmVzZXJ2YXRpb24gbWFwIGFuZCBzdWJwb29sLCB0aGUgbnVtYmVyIG9mIG5lZWRlZCBuZXdcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MDpyZXNlcnZhdGlvbnMgaXMga25vd24uICBUaGUgcm91dGluZSBodWdldGxiX2FjY3RfbWVtb3J5KCkgaXMgY2FsbGVkIHRvIGNoZWNrXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTE6Zm9yIGFuZCB0YWtlIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIHJlc2VydmF0aW9ucy4gIGh1Z2V0bGJfYWNjdF9tZW1vcnkoKVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUyLWNhbGxzIGludG8gcm91dGluZXMgdGhhdCBwb3RlbnRpYWxseSBhbGxvY2F0ZSBhbmQgYWRqdXN0IHN1cnBsdXMgcGFnZSBjb3VudHMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTMxMD10aGUgbWluX2hwYWdlcyBmaWVsZCBvZiBhIHN0cnVjdCBodWdlcGFnZV9zdWJwb29sLiAgQXQgbW91bnQgdGltZSxcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjMxMTpodWdldGxiX2FjY3RfbWVtb3J5KG1pbl9ocGFnZXMpIGlzIGNhbGxlZCB0byByZXNlcnZlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0zMTItaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD01NTg9aW50byBhY2NvdW50LiAgV2hpbGUgY3B1c2V0cyBhcmUgbm90IGV4YWN0bHkgdGhlIHNhbWUgYXMgbWVtb3J5IHBvbGljeSwgdGhpc1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NTU5OmNvbW1lbnQgaW4gaHVnZXRsYl9hY2N0X21lbW9yeSBzdW1zIHVwIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHJlc2VydmF0aW9uc1xcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtNTYwLWFuZCBjcHVzZXRzL21lbW9yeSBwb2xpY3k6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEyNS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxMjY65Zyo5ZKo6K+i5LqG6aKE55WZ5pig5bCE5ZKM5a2Q5rGg5LmL5ZCO77yM5bCx55+l6YGT5LqG6ZyA6KaB55qE5paw6aKE55WZ5pWw6YeP44CCaHVnZXRsYl9hY2N0X21lbW9yeSgp5Ye95pWw6KKr6LCD55So5Lul5qOA5p+lXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTI3OuW5tuiOt+WPluaJgOimgeaxgueahOmihOeVmeaVsOmHj+OAgmh1Z2V0bGJfYWNjdF9tZW1vcnkoKeiwg+eUqOWIsOWPr+iDveWIhumFjeWSjOiwg+aVtOWJqeS9memhteaVsOeahOWHveaVsOOAgueEtuiAjO+8jOWcqOi/mVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTEyOC3kupvlh73mlbDkuK3vvIzku6PnoIHlj6rmmK/mo4Dmn6Xku6Xnoa7kv53mnInotrPlpJ/nmoTnqbrpl7LnmoTlt6jpobXmnaXlrrnnurPpooTnlZnjgILlpoLmnpzmnInnmoTor53vvIzlhajlsYDpooTnlZnorqHmlbByZXN2X2h1Z2VfcGFnZXNcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTIyNj1wYWdlLVxcdTAwM2Vwcml2YXRl5a2X5q615oyH5ZCR5LiO6K+l6aG155u45YWz55qE5Lu75L2V5a2Q5rGg44CC5aaC5p6cUGFnZVByaXZhdGXmoIflv5fooqvorr7nva7vvIzlroPooajmmI7lhajlsYDpooTnlZnorqHmlbBcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0NC3lpoLmnpzmjIflrprkuobov5nkuKrpgInpobnvvIzkuI5taW5fc2l6ZeebuOWvueW6lOeahOW3qOmhteeahOaVsOmHj+Wwhuiiq+mihOeVmee7meaWh+S7tuezu+e7n+S9v+eUqOOAgui/meS4quaVsOWtl+WcqOe7k+aehOS9k1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjI0NTpodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZW1vcnkobWluX2hwYWdlcylcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yNDYt6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0zMzE9cmVnaW9uX2NvdW50KCnlnKjop6PpmaTnp4HmnInlt6jpobXmmKDlsITml7booqvosIPnlKjjgILlnKjnp4HmnInmmKDlsITkuK3vvIzpooTnlZnmmKDlsITkuK3msqHmnInmnaHnm67ooajmmI7lrZjlnKjkuIDkuKrpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMC3lnKjkuIDmrrXml7bpl7TlkI7liqDlhaXnmoTjgILlvZPpooTnlZnooqvmt7vliqDml7bvvIzmsqHmnInlsJ3or5XlsIblhoXlrZjnrZbnlaXogIPomZHlnKjlhoXjgILomb3nhLZjcHVzZXRz5LiO5YaF5a2Y562W55Wl5LiNXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6NDExOuWujOWFqOebuOWQjO+8jOS9hmh1Z2V0bGJfYWNjdF9tZW1vcnnkuK3nmoTov5nkuKrms6jph4rmgLvnu5PkuobpooTnlZnlkoxjcHVzZXRzL+WGheWtmOetlueVpeS5i+mXtOeahOebuOS6kuS9nFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTQxMi3nlKg6Olxcbi0tXFxubW0vaHVnZXRsYi5jPTExND1zdHJ1Y3QgbXV0ZXggKmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGUgX19yb19hZnRlcl9pbml0O1xcbi0tXFxubW0vaHVnZXRsYi5jLTExNi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovXFxubW0vaHVnZXRsYi5jOjExNzpzdGF0aWMgaW50IGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSk7XFxubW0vaHVnZXRsYi5jLTExOC1zdGF0aWMgdm9pZCBodWdldGxiX3ZtYV9sb2NrX2ZyZWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzNj1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMTQ1LVxcdFxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcXG5tbS9odWdldGxiLmM6MTQ2OlxcdFxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoc3Bvb2wtXFx1MDAzZWhzdGF0ZSxcXG5tbS9odWdldGxiLmMtMTQ3LVxcdFxcdFxcdFxcdFxcdFxcdC1zcG9vbC1cXHUwMDNlbWluX2hwYWdlcyk7XFxuLS1cXG5tbS9odWdldGxiLmM9MTUyPXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpodWdlcGFnZV9uZXdfc3VicG9vbChzdHJ1Y3QgaHN0YXRlICpoLCBsb25nIG1heF9ocGFnZXMsXFxuLS1cXG5tbS9odWdldGxiLmMtMTY2LVxcbm1tL2h1Z2V0bGIuYzoxNjc6XFx0aWYgKG1pbl9ocGFnZXMgIT0gLTEgXFx1MDAyNlxcdTAwMjYgaHVnZXRsYl9hY2N0X21lbW9yeShoLCBtaW5faHBhZ2VzKSkge1xcbm1tL2h1Z2V0bGIuYy0xNjgtXFx0XFx0a2ZyZWUoc3Bvb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTk1OD12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5tbS9odWdldGxiLmMtOTY3LVxcbm1tL2h1Z2V0bGIuYzo5Njg6XFx0XFx0aWYgKCFodWdldGxiX2FjY3RfbWVtb3J5KGgsIDEpKVxcbm1tL2h1Z2V0bGIuYy05NjktXFx0XFx0XFx0cmVzZXJ2ZWQgPSB0cnVlO1xcbi0tXFxubW0vaHVnZXRsYi5jPTI4OTE9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTMwMTYtXFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmM6MzAxNzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG5tbS9odWdldGxiLmMtMzAxOC1cXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbi0tXFxubW0vaHVnZXRsYi5jLTMwNTItXFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jOjMwNTM6XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYy0zMDU0LVxcdH1cXG4tLVxcbm1tL2h1Z2V0bGIuYz00NjA0PXVuc2lnbmVkIGxvbmcgaHVnZXRsYl90b3RhbF9wYWdlcyh2b2lkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ2MTMtXFxubW0vaHVnZXRsYi5jOjQ2MTQ6c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxubW0vaHVnZXRsYi5jLTQ2MTUte1xcbi0tXFxubW0vaHVnZXRsYi5jPTQ3MDQ9c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy00NzI4LVxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHJlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYzo0NzI5OlxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcXG5tbS9odWdldGxiLmMtNDczMC1cXHR9XFxuLS1cXG5tbS9odWdldGxiLmM9NjU1Nj1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY2NDQtXFx0ICovXFxubW0vaHVnZXRsYi5jOjY2NDU6XFx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTY2NDYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5tbS9odWdldGxiLmMtNjY2My1cXHRcXHRpZiAodW5saWtlbHkoYWRkIFxcdTAwM2MgMCkpIHtcXG5tbS9odWdldGxiLmM6NjY2NDpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTY2NjUtXFx0XFx0XFx0ZXJyID0gYWRkO1xcbi0tXFxubW0vaHVnZXRsYi5jLTY2ODYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG5tbS9odWdldGxiLmM6NjY4NzpcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG5tbS9odWdldGxiLmMtNjY4OC1cXHRcXHR9IGVsc2UgaWYgKGhfY2cpIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzA4LVxcdFxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2NzA5OlxcdFxcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcXG5tbS9odWdldGxiLmMtNjcxMC1cXHR9XFxuLS1cXG5tbS9odWdldGxiLmM9NjczNz1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY3NzItXFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XFxubW0vaHVnZXRsYi5jOjY3NzM6XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbm1tL2h1Z2V0bGIuYy02Nzc0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNjowOS45NDIzMDM5NTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMjQ3MjYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5YCBUZXN0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAgdGVzdC4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSByZXNpZGVzLiAgSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYGh1Z2V0bGJfYWNjdF9tZW1vcnlgIGlzIHByZXR0eSBmdW5kYW1lbnRhbCwgY2FsbGVkIGZyb20gYWxsIG92ZXIgdGhlIHBsYWNlIOKAkyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzYCwgYW5kIGV2ZW4gaW4gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMgbGlrZSBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX3ZtX29wX2Nsb3NlYC4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUuIE5vdywgbGV0J3MgZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzIHNwZWNpZmljIHRlc3QuXG5cblNpbmNlIHRoZSB0ZXN0IGxldmVyYWdlcyBgbnVtYS5oYCBhbmQgbGlua3Mgd2l0aCBgLWxudW1hYCwgSSdtIHByZXR0eSBjb25maWRlbnQgdGhhdCBgQ09ORklHX05VTUFgIGlzIGVzc2VudGlhbDsgbm8gcXVlc3Rpb24gYWJvdXQgdGhhdC4gIEl0J3MgYWxzbyBoaWdobHkgcHJvYmFibGUgdGhhdCBgQ09ORklHX0hVR0VUTEJGU2AgYW5kIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBhcmUgcmVxdWlyZWQgdG8gZW5hYmxlIEh1Z2VUTEIgc3VwcG9ydCBpbiB0aGUgZmlyc3QgcGxhY2UuIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UsIHRob3VnaC5cblxuVG8gYmUgZXh0cmEgdGhvcm91Z2gsIEknbGwgY29uc3VsdCB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlYCBkaXJlY3RseS4gSSBjYW4gdXN1YWxseSBnbGVhbiBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmcm9tIHRoZXJlLCB3aGljaCBpcyBvZnRlbiBtb3JlIGRlZmluaXRpdmUgdGhhbiBqdXN0IGd1ZXNzaW5nLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgbmVlZGVkIGNvbmZpZ3MgZm9yIHRoaXMgdGVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MDQsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MTUuOTY0NzgwMjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU0NDgxOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3lcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwidG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MTA4PVRFU1RfR0VOX0ZJTEVTICs9IGZvbGlvX3NwbGl0X3JhY2VfdGVzdFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjEwOTpURVNUX0dFTl9GSUxFUyArPSBodWdldGxiX3N1cnBsdXNfbWVtcG9saWN5XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMTEwLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGU9MjYyPSQoT1VUUFVUKS9ybWFwOiBMRExJQlMgKz0gLWxudW1hXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vTWFrZWZpbGUtMjYzLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlOjI2NDokKE9VVFBVVCkvaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeTogTERMSUJTICs9IC1sbnVtYVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL01ha2VmaWxlLTI2NS1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYy0yLS8qXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeS5jOjM6ICogaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2h1Z2V0bGJfc3VycGx1c19tZW1wb2xpY3kuYy00LSAqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaD0yOTk9Q0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9kaW9cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9ydW5fdm10ZXN0cy5zaDozMDA6Q0FURUdPUlk9XFxcImh1Z2V0bGJcXFwiIHJ1bl90ZXN0IC4vaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3J1bl92bXRlc3RzLnNoLTMwMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MTguNjE5MjY3NTg5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODQ3OTcxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAgVGVzdCBmb3IgUm9idXN0bmVzcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyB0ZXN0LCBgaHVnZXRsYl9zdXJwbHVzX21lbXBvbGljeWAsIHdoaWNoIGlzIGFsbCBhYm91dCBob3cgaHVnZXRsYiBzdXJwbHVzIHBhZ2VzIGFuZCBtZW1wb2xpY2llcyBwbGF5IHRvZ2V0aGVyLiBUaGF0J3MgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYXJlYSB3aXRoIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgYW5kIGVkZ2UgY2FzZXMsIG1ha2luZyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgaW4gdGhpcyBhcmVhLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCB0aGUga2V5IHN5bWJvbHMgdGhhdCBpbW1lZGlhdGVseSBqdW1wIG91dCBhbmQgcmVxdWlyZSBhIGNsb3NlciBsb29rIGFyZSBgZ2F0aGVyX3N1cnBsdXNfcGFnZXNgLCBgYWxsb3dlZF9tZW1zX25yYCwgYW5kIGBodWdldGxiX2FjY3RfbWVtb3J5YC4gVGhlc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGlzIG5ldyBiZWhhdmlvciByZXNpZGVzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBob3cgdGhleSBoYW5kbGUgdGhlIG1lbXBvbGljeSBhc3BlY3RzIGR1cmluZyBzdXJwbHVzIHBhZ2UgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IHRoZSBwcm9wb3NlZCBjb25maWd1cmF0aW9ucyBhcmUgb24gdGhlIHJpZ2h0IHRyYWNrLiBXZSBoYXZlIGBIVUdFVExCRlNgLCBgSFVHRVRMQl9QQUdFYCwgYW5kIGBOVU1BYCBsaXN0ZWQuIEl0IG1ha2VzIHNlbnNlLCBhcyBhbGwgdGhvc2Ugc2V0dGluZ3MgaGF2ZSBhIGNsZWFyIHJlbGF0aW9uc2hpcCB0byB0aGUgdG9waWMsIGJ1dCBpdCdzIGFsd2F5cyB3b3J0aCBhIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYSBjcml0aWNhbCBkZXBlbmRlbmN5IG9yIGFjY2lkZW50YWxseSBlbmFibGluZyBzb21ldGhpbmcgdGhhdCBzaG91bGRuJ3QgYmUgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MzgyLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjIyLjcwNDA2NzA5MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUyMTIzNzczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTU4PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE2My1cXG5hcmNoL3NoL21tL0tjb25maWc6MTY0OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTY1LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTY3LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNjg6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTY5LVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3MS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTcyOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTczLVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTc0LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNzYtXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE3OC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTc5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4MC1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNDc9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI0OS1cXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xcbmZzL0tjb25maWctMjUxLVxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjYyPWlmIEhVR0VUTEJGU1xcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuZnMvS2NvbmZpZy0yNjQtXFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4tLVxcbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzItXFxuZnMvS2NvbmZpZzoyNzM6Y29uZmlnIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWctMjc0LVxcdGRlZl9ib29sIEhVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNzYtXFxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuZnMvS2NvbmZpZy0yNzgtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5mcy9LY29uZmlnLTI4Mi1cXG5mcy9LY29uZmlnOjI4Mzpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuZnMvS2NvbmZpZy0yODQtXFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuLS1cXG5tbS9LY29uZmlnPTY1Mz1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTUtXFxubW0vS2NvbmZpZzo2NTY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02NTctXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxOToxNjoyNS4yMjUzMTE3NDdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNjk1MDE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqRGVlcCBEaXZlIGludG8gSHVnZSBQYWdlcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGh1Z2UgcGFnZXMgaGVyZSwgYW5kIGl0IGxvb2tzIGxpa2UgYEhVR0VUTEJGU2AgaXMgdGhlIGNlbnRyYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuIEknbSBub3RpbmcgdGhhdCB0aGUgYEhVR0VUTEJfUEFHRWAgb3B0aW9uIGRlZmF1bHRzIHRvIGBIVUdFVExCRlNgIGlmIG5vdCBleHBsaWNpdGx5IHNldCBvdGhlcndpc2UsIHdoaWNoIG1ha2VzIHNlbnNlIGZvciB0aGUgZ2VuZXJhbCBzZXR1cC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBOVU1BIGlzIHByb3Blcmx5IGVuYWJsZWQgYXMgd2VsbC5cblxuVG8gcmVhbGx5IGNlbWVudCBteSB1bmRlcnN0YW5kaW5nLCBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBnYXRoZXJfc3VycGx1c19wYWdlc2AgYW5kIGBhbGxvd2VkX21lbXNfbnJgIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIFRoZXNlIGFyZSBrZXkgd2hlbiB5b3UncmUgbWFuYWdpbmcgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGVuc3VyaW5nIHRoZSBhcHByb3ByaWF0ZSBOVU1BIG5vZGVzIGFyZSBjb25zaWRlcmVkLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1cnBsdXMgcGFnZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgY2xhcmlmeSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBmaW5lciBwb2ludHMgb2YgaHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIHV0aWxpemF0aW9uLCBwYXJ0aWN1bGFybHkgaW4gcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgbnVhbmNlcyBhcm91bmQgbWVtb3J5IG5vZGUgY29uc3RyYWludHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTEyLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MjguODMyMjY0MzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MjUzODMyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2F0aGVyX3N1cnBsdXNfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjc4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyMjc5OnN0YXRpYyBpbnQgZ2F0aGVyX3N1cnBsdXNfcGFnZXMoc3RydWN0IGhzdGF0ZSAqaCwgbG9uZyBkZWx0YSlcXG5tbS9odWdldGxiLmMtMjI4MC1cXHRfX211c3RfaG9sZChcXHUwMDI2aHVnZXRsYl9sb2NrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ2MTQ9c3RhdGljIGludCBodWdldGxiX2FjY3RfbWVtb3J5KHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtNDY0NS1cXHRpZiAoZGVsdGEgXFx1MDAzZSAwKSB7XFxubW0vaHVnZXRsYi5jOjQ2NDY6XFx0XFx0aWYgKGdhdGhlcl9zdXJwbHVzX3BhZ2VzKGgsIGRlbHRhKSBcXHUwMDNjIDApXFxubW0vaHVnZXRsYi5jLTQ2NDctXFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjMxLjI1NzY1NDM0OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU2NDc3NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgY2VudGVyZWQgYXJvdW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIHN1cnBsdXMgcGFnZXMsIGFuZCBpdCdzIGFkZGluZyBhIG5ldyB2YXJpYWJsZSwgYGFsbG93ZWRfbWVtc19ucmAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWA7IGFueXRoaW5nIHJlbGF0ZWQgdG8gcGFnZSBhbGxvY2F0aW9uIGFuZCBhY2NvdW50aW5nIHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LlxuXG5NeSBgRm9jdXNTeW1ib2xzYCBhcmUgbm93IHNldDogYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCwgYGFsbG93ZWRfbWVtc19ucmAsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAuIFRob3NlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aG9yb3VnaGx5IHRvIGdldCBhIGdyYXNwIG9uIHRoZSBpbnRlbnQgYW5kIGltcGFjdCBvZiB0aGlzIGNvZGUuIFBsdXMgSSBuZWVkIHRvIGVuYWJsZSBzb21lIGNvbmZpZ3VyYXRpb25zLCBgSFVHRVRMQkZTYCBhbmQgYE5VTUFgLCBmb3IgdGhlIGZ1enppbmcuXG5cbk5vdywgbGV0IG1lIGNvbmZpcm0gdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2Ugc3ltYm9scy4gR29vZCwgYGFsbG93ZWRfbWVtc19ucmAsIGBnYXRoZXJfc3VycGx1c19wYWdlc2AsIGFuZCBgaHVnZXRsYl9hY2N0X21lbW9yeWAgYXJlIGFsbCBzdGF0aWMuIFRoaXMgZ2l2ZXMgbWUgYSBzbGlnaHRseSBiZXR0ZXIgaGFuZGxlIG9uIHRoZWlyIHNjb3BlLCByZXN0cmljdGluZyBleHRlcm5hbCBtb2RpZmljYXRpb24uXG5cbkkgYWxzbyBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLiBBaGEhIGBwb2xpY3lfbWJpbmRfbm9kZW1hc2tgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQncyB1c2VkIGJ5IGBhbGxvd2VkX21lbXNfbnJgLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgYWRkaXRpb24gdG8gdGhlIHNldCBhbmQgSSBuZWVkIHRvIGludmVzdGlnYXRlIGl0IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDM5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDE5OjE2OjM2LjMxNDE1MzY3OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4MTAwOTM5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb2xpY3lfbWJpbmRfbm9kZW1hc2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTIyMTg9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIyNDAtXFxubW0vaHVnZXRsYi5jOjIyNDE6c3RhdGljIG5vZGVtYXNrX3QgKnBvbGljeV9tYmluZF9ub2RlbWFzayhnZnBfdCBnZnApXFxubW0vaHVnZXRsYi5jLTIyNDIte1xcbi0tXFxubW0vaHVnZXRsYi5jPTIyNTg9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvd2VkX21lbXNfbnIoc3RydWN0IGhzdGF0ZSAqaClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yMjY1LVxcbm1tL2h1Z2V0bGIuYzoyMjY2OlxcdG1iaW5kX25vZGVtYXNrID0gcG9saWN5X21iaW5kX25vZGVtYXNrKGdmcF9tYXNrKTtcXG5tbS9odWdldGxiLmMtMjI2Ny1cXHRmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MjI3OT1zdGF0aWMgaW50IGdhdGhlcl9zdXJwbHVzX3BhZ2VzKHN0cnVjdCBoc3RhdGUgKmgsIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmMtMjI4OS1cXG5tbS9odWdldGxiLmM6MjI5MDpcXHRtYmluZF9ub2RlbWFzayA9IHBvbGljeV9tYmluZF9ub2RlbWFzayhodGxiX2FsbG9jX21hc2soaCkpO1xcbm1tL2h1Z2V0bGIuYy0yMjkxLVxcdGlmIChtYmluZF9ub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6MzguODk1MTY4MDc0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDYwMjMxNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBkZWZpbml0ZSBhZGRpdGlvbiB0byB0aGUgbGFuZHNjYXBlIG9mIGh1Z2UgcGFnZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIE5VTUEgc3lzdGVtcy4gSXQgYWx0ZXJzIHRoZSBjb3JlIGBnYXRoZXJfc3VycGx1c19wYWdlc2AgZnVuY3Rpb24sIGFuZCB0aGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlIG5lZWQgdG8gYmUgdmVyeSBmb2N1c2VkIG9uIGl0LiBUaGUga2V5IGlzIHRoYXQgdGhlIHBhdGNoIG5vdyBjb25zaWRlcnMgdGhlIGBhbGxvd2VkX21lbXNfbnJgIHBhcmFtZXRlciB3aGVuIGRldGVybWluaW5nIGhvdyBtYW55IHN1cnBsdXMgcGFnZXMgYXJlIG5lZWRlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIOKAkyBhIGJlaGF2aW9yYWwgbW9kaWZpY2F0aW9uIOKAkyBpbiBob3cgaHVnZSBwYWdlcyBhcmUgYm90aCByZXNlcnZlZCBhbmQgdWx0aW1hdGVseSBhbGxvY2F0ZWQuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRob3JvdWdoIGV4YW1pbmF0aW9uLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UsIHdoaWNoIGV4cGxpY2l0bHkgaW52b2x2ZXMgbWVtb3J5IG5vZGVzIGFuZCBwb3RlbnRpYWxseSByZXN0cmljdGl2ZSBOVU1BIHBvbGljaWVzLCBJIHRoaW5rIGl0J3Mgc3BvdCBvbiB0byBhZGQgYHBvbGljeV9tYmluZF9ub2RlbWFza2AgdG8gdGhlIGBGb2N1c1N5bWJvbHNgLiBJdCB3aWxsIGJlIGEga2V5IGZhY3RvciBpbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgbmV3IGxvZ2ljLiBUaGUgcGF0Y2ggaXMgdGllZCB0byBob3cgdGhlIHN5c3RlbSAqYWNjb3VudHMqIGZvciB0aGVzZSBwYWdlcyBhbmQgKmdhdGhlcnMqIHRoZW0sIHdoaWNoIG1ha2VzIHRoZXNlIGtleSBmb2N1cyBhcmVhcywgYW5kIGNsZWFybHksIGBodWdldGxiX2FjY3RfbWVtb3J5YCBpcyBhbHNvIGNyaXRpY2FsLiBUaGVzZSBhcmUgYWxsIGNvcmUgc3ltYm9scyB3ZSdsbCBuZWVkIHRvIGV4YW1pbmUuXG5cbldlJ3JlIGRlYWxpbmcgd2l0aCBgSFVHRVRMQkZTYCBhbmQgYE5VTUFgIGFzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucywgb2YgY291cnNlLlxuXG5UaGUgZnV6emluZyBzdHJhdGVneSwgdGhlcmVmb3JlLCBzaG91bGQgY29uY2VudHJhdGUgb24gdGhlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHN1cnBsdXMgcGFnZSBnYXRoZXJpbmcgYW5kIGFjY291bnRpbmcgbG9naWMuIEknbSBpbWFnaW5pbmcgc2NlbmFyaW9zIHdpdGggZGl2ZXJzZSBOVU1BIGNvbmZpZ3VyYXRpb25zLCB2YXJpZWQgbWVtb3J5IHBvbGljaWVzIChpbmNsdWRpbmcgdGhvc2UgZW1wbG95aW5nIGBtYmluZGApLCBhbmQgaGlnaCBsb2FkcyB0byBzdHJlc3MtdGVzdCB0aGUgbmV3IGxvZ2ljIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLiBUaGUgZnV6emluZyB0YXJnZXQgc2hvdWxkIGluY2x1ZGUgYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgdG8gZW5zdXJlIHdlIGFyZSBjb3ZlcmluZyB0aGUgY2hhbmdlcyBlZmZlY3RpdmVseS4gQWxzbywgSSB3aWxsIG5lZWQgdG8gYmUgYWJsZSB0byBldmFsdWF0ZSB0aGUgcmVzdWx0cyBvZiBlYWNoIGZ1enogcnVuIGVmZmVjdGl2ZWx5LCBsZXQncyBjYWxsIHRoYXQgYHNldC1yZXN1bHRzYC4gSSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgaXMgc2V0IHVwIHRvIHJlY29yZCByZXN1bHRzIHRoYXQgYXJlIHVuZGVyc3RhbmRhYmxlIGFuZCBlYXNpbHkgZXZhbHVhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg2NSwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTk6MTY6NDUuNjAxMTk0MzJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY3NjIzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIixcbiAgICBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIixcbiAgICBcInBvbGljeV9tYmluZF9ub2RlbWFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhdGhlcl9zdXJwbHVzX3BhZ2VzXCIsXG4gICAgXCJhbGxvd2VkX21lbXNfbnJcIixcbiAgICBcImh1Z2V0bGJfYWNjdF9tZW1vcnlcIixcbiAgICBcInBvbGljeV9tYmluZF9ub2RlbWFza1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGh1Z2V0bGIgbG9naWMgaW4gYGdhdGhlcl9zdXJwbHVzX3BhZ2VzYCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgYWxsb3dlZCBtZW1vcnkgbm9kZXMgKGBhbGxvd2VkX21lbXNfbnJgKSB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZWVkZWQgc3VycGx1cyBwYWdlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgcmVzZXJ2ZWQgYW5kIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgcHJlc2VuY2Ugb2YgTlVNQSBtZW1vcnkgcG9saWNpZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBzdXJwbHVzIHBhZ2UgZ2F0aGVyaW5nIGFuZCBhY2NvdW50aW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[1] Phase: Succeeded StartedAt: 2026-06-23 19:18:30 +0000 UTC FinishedAt: 2026-06-23 19:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 19:18:30 +0000 UTC FinishedAt: 2026-06-23 19:18:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2] Phase: Succeeded StartedAt: 2026-06-23 19:18:30 +0000 UTC FinishedAt: 2026-06-23 23:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-23 19:18:30 +0000 UTC FinishedAt: 2026-06-23 23:22:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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-06-23 19:18:30 +0000 UTC FinishedAt: 2026-06-23 19:19:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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-06-23 19:18:30 +0000 UTC FinishedAt: 2026-06-23 19:19:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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-workflowwxkbk/series-workflowwxkbk-convert-artifact-2344628232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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-06-23 19:19:07 +0000 UTC FinishedAt: 2026-06-23 19:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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-06-23 19:19:07 +0000 UTC FinishedAt: 2026-06-23 19:44:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c768b4ce-d64b-45c0-b969-039bfaad75e2,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-workflowwxkbk/series-workflowwxkbk-convert-artifact-2344628232/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": "7ccc51ed-f943-4092-b9a6-192f07820e35", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-808061566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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-06-23 19:19:07 +0000 UTC FinishedAt: 2026-06-23 19:44:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c768b4ce-d64b-45c0-b969-039bfaad75e2,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-workflowwxkbk/series-workflowwxkbk-convert-artifact-2344628232/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": "7ccc51ed-f943-4092-b9a6-192f07820e35", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-808061566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 19:44:42 +0000 UTC FinishedAt: 2026-06-23 19:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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: Skipped StartedAt: 2026-06-23 19:44:42 +0000 UTC FinishedAt: 2026-06-23 19:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 19:44:42 +0000 UTC FinishedAt: 2026-06-23 19:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 19:44:42 +0000 UTC FinishedAt: 2026-06-23 19:44:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","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-workflowwxkbk/series-workflowwxkbk-convert-artifact-1313948911/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 19:44:52 +0000 UTC FinishedAt: 2026-06-23 19:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 19:44:52 +0000 UTC FinishedAt: 2026-06-23 19:46:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ccc51ed-f943-4092-b9a6-192f07820e35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-808061566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 19:46:53 +0000 UTC FinishedAt: 2026-06-23 19:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 19:46:53 +0000 UTC FinishedAt: 2026-06-23 19:46:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 19:46:53 +0000 UTC FinishedAt: 2026-06-23 20:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 19:46:53 +0000 UTC FinishedAt: 2026-06-23 20:14:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c768b4ce-d64b-45c0-b969-039bfaad75e2,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-workflowwxkbk/series-workflowwxkbk-convert-artifact-1313948911/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": "6fb069a4-b924-4952-9685-f9914c70dc5c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-2607855747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 19:46:53 +0000 UTC FinishedAt: 2026-06-23 20:14:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c768b4ce-d64b-45c0-b969-039bfaad75e2,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-workflowwxkbk/series-workflowwxkbk-convert-artifact-1313948911/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": "6fb069a4-b924-4952-9685-f9914c70dc5c", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-2607855747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 20:14:21 +0000 UTC FinishedAt: 2026-06-23 20:16:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6fb069a4-b924-4952-9685-f9914c70dc5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-2607855747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-23 20:16:33 +0000 UTC FinishedAt: 2026-06-23 23:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 20:16:33 +0000 UTC FinishedAt: 2026-06-23 23:22:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*7ccc51ed-f943-4092-b9a6-192f07820e35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6fb069a4-b924-4952-9685-f9914c70dc5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-808061566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-2607855747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 20:16:33 +0000 UTC FinishedAt: 2026-06-23 20:16:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 20:16:33 +0000 UTC FinishedAt: 2026-06-23 20:16:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},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-workflowwxkbk/series-workflowwxkbk-convert-artifact-1278196392/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-23 20:16:33 +0000 UTC FinishedAt: 2026-06-23 20:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 20:16:33 +0000 UTC FinishedAt: 2026-06-23 20:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 20:16:33 +0000 UTC FinishedAt: 2026-06-23 20:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 20:16:43 +0000 UTC FinishedAt: 2026-06-23 23:22:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwxkbk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"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":["gather_surplus_pages","allowed_mems_nr","hugetlb_acct_memory","policy_mbind_nodemask"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3802a666f37255cc8ddc5647390e6c590b947065","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","NUMA"],"series_id":"4409bae4-b510-40e1-8cec-a42ee5c919c9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 20:16:43 +0000 UTC FinishedAt: 2026-06-23 23:22:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ccc51ed-f943-4092-b9a6-192f07820e35,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6fb069a4-b924-4952-9685-f9914c70dc5c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-808061566/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-build-action-2607855747/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwxkbk/series-workflowwxkbk-convert-artifact-1278196392/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}