Name: series-workflow5vwl6 Phase: Succeeded StartedAt: 2026-08-05 02:08:41 +0000 UTC FinishedAt: 2026-08-05 06:29:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[0] Phase: Succeeded StartedAt: 2026-08-05 02:08:41 +0000 UTC FinishedAt: 2026-08-05 02:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 02:08:41 +0000 UTC FinishedAt: 2026-08-05 02:49:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "cifs_fileattr_set", "cifs_fileattr_get" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDI6NDg6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuYyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmNcbmluZGV4IDY2YjkxMDRlN2NhMjAuLjYwM2IxNzdmMWIwOTUgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXG5AQCAtMTE5NCw4ICYjNDM7MTE5NCw4IEBAIGludCBjaWZzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSlcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHR1MzIgYXR0cnM7XG4gXG4tXHQvKiBQcmVzZXJ2ZSBGU19DT01QUl9GTCBwcmV2aW91c2x5IHJlcG9ydGVkIGJ5IGNpZnNfaW9jdGwoKS4gKi9cbi1cdGlmIChDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyBcdTAwMjYgQVRUUl9DT01QUkVTU0VEKVxuJiM0MztcdC8qIFJlcG9ydCB0aGUgY2FjaGVkIFNNQiBjb21wcmVzc2VkIGF0dHJpYnV0ZSBhcyBGU19DT01QUl9GTC4gKi9cbiYjNDM7XHRpZiAoUkVBRF9PTkNFKENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzKSBcdTAwMjYgQVRUUl9DT01QUkVTU0VEKVxuIFx0XHRmYS1cdTAwM2VmbGFncyB8PSBGU19DT01QUl9GTDtcbiBcbiBcdC8qXG5AQCAtMTI1Niw2ICYjNDM7MTI1Niw3IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHtcbiBcdC5nZXRfYWNsID0gY2lmc19nZXRfYWNsLFxuIFx0LnNldF9hY2wgPSBjaWZzX3NldF9hY2wsXG4gXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG4mIzQzO1x0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbkBAIC0xMjY3LDYgJiM0MzsxMjY4LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbiBcdC5nZXRfYWNsID0gY2lmc19nZXRfYWNsLFxuIFx0LnNldF9hY2wgPSBjaWZzX3NldF9hY2wsXG4gXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG4mIzQzO1x0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxuIH07XG4gXG4gY29uc3QgY2hhciAqY2lmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbmluZGV4IDg1NGU2NzJhNGUzN2EuLjEwZGNmNTEzNzhkMzEgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5oXG5AQCAtOTEsNiAmIzQzOzkxLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfbmFtZXNwYWNlX2lub2RlX29wZXJhdGlvbnM7XG4gXG4gc3RydWN0IGZpbGVfa2F0dHI7XG4gaW50IGNpZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiYjNDM7aW50IGNpZnNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFxuIFxuIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGZpbGVzIGFuZCBkaXJlY3RvcmllcyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvaW9jdGwuYyBiL2ZzL3NtYi9jbGllbnQvaW9jdGwuY1xuaW5kZXggOWZhNzQzYmUzNjUyYS4uMTI3OWUyMTVlY2QyMCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9pb2N0bC5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVhdHRyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuQEAgLTY3LDExICYjNDM7NjgsMTEgQEAgc3RhdGljIGxvbmcgY2lmc19pb2N0bF9xdWVyeV9pbmZvKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiYjNDM7c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbiBcdFx0XHRcdFx0X191MTYgY29tcHJlc3Npb25fc3RhdGUpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IHRjb24tXHUwMDNlc2VzLVx1MDAzZXNlcnZlcjtcbiBcdHN0cnVjdCBjaWZzX29wZW5fcGFybXMgb3Bhcm1zO1xuQEAgLTkyLDExICYjNDM7OTMsMTEgQEAgc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdCAgICBjaWZzX3NiLVx1MDAzZW1udF9jaWZzX3NlcnZlcmlub19hdXRvZGlzYWJsZWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChkX3VuaGFzaGVkKGZpbGVwLVx1MDAzZWZfcGF0aC5kZW50cnkpKVxuJiM0MztcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldHVybiAtRVNUQUxFO1xuIFxuIFx0cGFnZSA9IGFsbG9jX2RlbnRyeV9wYXRoKCk7XG4tXHRmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGVwLVx1MDAzZWZfcGF0aC5kZW50cnksIHBhZ2UpO1xuJiM0MztcdGZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5LCBwYWdlKTtcbiBcdGlmIChJU19FUlIoZnVsbF9wYXRoKSkge1xuIFx0XHRmcmVlX2RlbnRyeV9wYXRoKHBhZ2UpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihmdWxsX3BhdGgpO1xuQEAgLTEyMyw2ICYjNDM7MTI0LDEwIEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRcdGdvdG8gY2xvc2U7XG4gXG4gXHR1bmlxdWVpZCA9IGxlNjRfdG9fY3B1KGRhdGEuZmkuSW5kZXhOdW1iZXIpO1xuJiM0MztcdGlmICghdW5pcXVlaWQpIHtcbiYjNDM7XHRcdHJjID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIGNsb3NlO1xuJiM0MztcdH1cbiBcdGlmICh1bmlxdWVpZCAhPSBDSUZTX0koaW5vZGUpLVx1MDAzZXVuaXF1ZWlkKSB7XG4gXHRcdHJjID0gLUVTVEFMRTtcbiBcdFx0Z290byBjbG9zZTtcbkBAIC0xNDEsMTQgJiM0MzsxNDYsMTQgQEAgc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBjaWZzX2lvY3RsX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUsXG4tXHRcdFx0XHQgICAgICBfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcbiYjNDM7c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSxcbiYjNDM7XHRcdFx0XHRfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgY2lmc0ZpbGVJbmZvICp3ZmlsZTtcbiBcdHN0cnVjdCBjaWZzX3Rjb24gKnd0Y29uO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHRpbnQgcmM7XG4gXG4gXHRpZiAoIXRjb24tXHUwMDNlc2VzLVx1MDAzZXNlcnZlci1cdTAwM2VvcHMtXHUwMDNlc2V0X2NvbXByZXNzaW9uKVxuQEAgLTE3MywxMCAmIzQzOzE3OCw2OCBAQCBzdGF0aWMgaW50IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBmaWxlcCwgdGNvbixcbiYjNDM7XHRyZXR1cm4gY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh4aWQsIGRlbnRyeSwgdGNvbixcbiBcdFx0XHRcdFx0ICAgIGNvbXByZXNzaW9uX3N0YXRlKTtcbiB9XG4gXG4mIzQzO2ludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiYjNDM7XHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgZmlsZV9rYXR0ciBjdXJyZW50X2ZhID0ge307XG4mIzQzO1x0c3RydWN0IHRjb25fbGluayAqdGxpbms7XG4mIzQzO1x0c3RydWN0IGNpZnNfdGNvbiAqdGNvbjtcbiYjNDM7XHRfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZTtcbiYjNDM7XHRib29sIGVuYWJsZV9jb21wcmVzc2lvbjtcbiYjNDM7XHR1MzIgYWxsb3dlZCA9IEZTX0NPTVBSX0ZMO1xuJiM0MztcdHVuc2lnbmVkIGludCB4aWQ7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZhLVx1MDAzZWZsYWdzX3ZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNoYXR0ciB3cml0ZXMgYmFjayBhbGwgZmxhZ3MgcmV0dXJuZWQgYnkgZmlsZWF0dHJfZ2V0KCkuIEFjY2VwdFxuJiM0MztcdCAqIEZTX0NBU0VGT0xEX0ZMIG9ubHkgd2hlbiBpdCByZWZsZWN0cyB0aGUgc2hhcmUmIzM5O3MgY2FzZWZvbGQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZhLVx1MDAzZWZsYWdzIFx1MDAyNiBGU19DQVNFRk9MRF9GTCkge1xuJiM0MztcdFx0cmMgPSBjaWZzX2ZpbGVhdHRyX2dldChkZW50cnksIFx1MDAyNmN1cnJlbnRfZmEpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRpZiAoY3VycmVudF9mYS5mbGFncyBcdTAwMjYgRlNfQ0FTRUZPTERfRkwpXG4mIzQzO1x0XHRcdGFsbG93ZWQgfD0gRlNfQ0FTRUZPTERfRkw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmYS1cdTAwM2VmbGFncyBcdTAwMjYgfmFsbG93ZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGVuYWJsZV9jb21wcmVzc2lvbiA9IGZhLVx1MDAzZWZsYWdzIFx1MDAyNiBGU19DT01QUl9GTDtcbiYjNDM7XHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcbiYjNDM7XHRcdFx0XHRcdFx0IENPTVBSRVNTSU9OX0ZPUk1BVF9OT05FO1xuJiM0MztcbiYjNDM7XHR0bGluayA9IGNpZnNfc2JfdGxpbmsoY2lmc19zYik7XG4mIzQzO1x0aWYgKElTX0VSUih0bGluaykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih0bGluayk7XG4mIzQzO1x0dGNvbiA9IHRsaW5rX3Rjb24odGxpbmspO1xuJiM0MztcbiYjNDM7XHR4aWQgPSBnZXRfeGlkKCk7XG4mIzQzO1x0cmMgPSBjaWZzX3NldF9jb21wcmVzc2lvbih4aWQsIGRlbnRyeSwgdGNvbiwgTlVMTCwgY29tcHJlc3Npb25fc3RhdGUpO1xuJiM0MztcdGZyZWVfeGlkKHhpZCk7XG4mIzQzO1x0Y2lmc19wdXRfdGxpbmsodGxpbmspO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJjKSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRcdGlmIChlbmFibGVfY29tcHJlc3Npb24pXG4mIzQzO1x0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIHw9IEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIFx1MDAyNj0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2lmc19kYmcoRllJLCBcJiMzNDtzZXQgY29tcHJlc3MgZmxhZyByYyAlZFxcblwmIzM0OywgcmMpO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX2NvcHljaHVuayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzcmNmZClcbiB7XG5AQCAtNDY1LDE0ICYjNDM7NTI4LDYgQEAgbG9uZyBjaWZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbjtcbiBcdHN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rO1xuIFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjtcbi1cdF9fdTY0XHRFeHRBdHRyQml0cyA9IDA7XG4tXHRib29sIGVuYWJsZV9jb21wcmVzc2lvbjtcbi1cdF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlO1xuLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWFxuLSNpZmRlZiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbi1cdF9fdTY0ICAgY2Fwcztcbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXG4tI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovXG4gXG4gXHR4aWQgPSBnZXRfeGlkKCk7XG4gXG5AQCAtNDgzLDgwICYjNDM7NTM4LDYgQEAgbG9uZyBjaWZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHR0cmFjZV9zbWIzX2lvY3RsKHhpZCwgcFNNQkZpbGUtXHUwMDNlZmlkLnBlcnNpc3RlbnRfZmlkLCBjb21tYW5kKTtcbiBcbiBcdHN3aXRjaCAoY29tbWFuZCkge1xuLVx0XHRjYXNlIEZTX0lPQ19HRVRGTEFHUzpcbi1cdFx0XHRpZiAocFNNQkZpbGUgPT0gTlVMTClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdHRjb24gPSB0bGlua190Y29uKHBTTUJGaWxlLVx1MDAzZXRsaW5rKTtcbi0jaWZkZWYgQ09ORklHX0NJRlNfUE9TSVhcbi0jaWZkZWYgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXG4tXHRcdFx0Y2FwcyA9IGxlNjRfdG9fY3B1KHRjb24tXHUwMDNlZnNVbml4SW5mby5DYXBhYmlsaXR5KTtcbi1cdFx0XHRpZiAoQ0lGU19VTklYX0VYVEFUVFJfQ0FQIFx1MDAyNiBjYXBzKSB7XG4tXHRcdFx0XHRfX3U2NFx0RXh0QXR0ck1hc2sgPSAwO1xuLVx0XHRcdFx0cmMgPSBDSUZTR2V0RXh0QXR0cih4aWQsIHRjb24sXG4tXHRcdFx0XHRcdFx0ICAgIHBTTUJGaWxlLVx1MDAzZWZpZC5uZXRmaWQsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNkV4dEF0dHJCaXRzLCBcdTAwMjZFeHRBdHRyTWFzayk7XG4tXHRcdFx0XHRpZiAocmMgPT0gMClcbi1cdFx0XHRcdFx0cmMgPSBwdXRfdXNlcihFeHRBdHRyQml0cyBcdTAwMjZcbi1cdFx0XHRcdFx0XHRGU19GTF9VU0VSX1ZJU0lCTEUsXG4tXHRcdFx0XHRcdFx0KGludCBfX3VzZXIgKilhcmcpO1xuLVx0XHRcdFx0aWYgKHJjICE9IC1FT1BOT1RTVVBQKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tI2VuZGlmIC8qIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWSAqL1xuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqL1xuLVx0XHRcdGlmIChDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyBcdTAwMjYgRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRClcbi1cdFx0XHRcdEV4dEF0dHJCaXRzIHw9IEZTX0NPTVBSX0ZMO1xuLVxuLVx0XHRcdHJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgXHUwMDI2IEZTX0ZMX1VTRVJfVklTSUJMRSxcbi1cdFx0XHRcdCAgICAgIChpbnQgX191c2VyICopYXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBGU19JT0NfU0VURkxBR1M6XG4tXHRcdFx0aWYgKHBTTUJGaWxlID09IE5VTEwpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR0Y29uID0gdGxpbmtfdGNvbihwU01CRmlsZS1cdTAwM2V0bGluayk7XG4tXHRcdFx0LyogY2FwcyA9IGxlNjRfdG9fY3B1KHRjb24tXHUwMDNlZnNVbml4SW5mby5DYXBhYmlsaXR5KTsgKi9cbi1cbi1cdFx0XHRpZiAoZ2V0X3VzZXIoRXh0QXR0ckJpdHMsIChpbnQgX191c2VyICopYXJnKSkge1xuLVx0XHRcdFx0cmMgPSAtRUZBVUxUO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogaWYgKENJRlNfVU5JWF9FWFRBVFRSX0NBUCBcdTAwMjYgY2Fwcylcbi1cdFx0XHQgKlx0cmMgPSBDSUZTU2V0RXh0QXR0cih4aWQsIHRjb24sXG4tXHRcdFx0ICpcdFx0ICAgICAgIHBTTUJGaWxlLVx1MDAzZWZpZC5uZXRmaWQsXG4tXHRcdFx0ICpcdFx0ICAgICAgIGV4dEF0dHJCaXRzLFxuLVx0XHRcdCAqXHRcdCAgICAgICBcdTAwMjZFeHRBdHRyTWFzayk7XG4tXHRcdFx0ICogaWYgKHJjICE9IC1FT1BOT1RTVVBQKVxuLVx0XHRcdCAqXHRicmVhaztcbi1cdFx0XHQgKi9cbi1cbi1cdFx0XHQvKiBDdXJyZW50bHkgb25seSBmbGFnIHdlIGNhbiBzZXQgb3IgY2xlYXIgaXMgY29tcHJlc3NlZC4gKi9cbi1cdFx0XHRpZiAoRXh0QXR0ckJpdHMgXHUwMDI2IH5GU19DT01QUl9GTCkge1xuLVx0XHRcdFx0cmMgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRlbmFibGVfY29tcHJlc3Npb24gPSBFeHRBdHRyQml0cyBcdTAwMjYgRlNfQ09NUFJfRkw7XG4tXHRcdFx0Y29tcHJlc3Npb25fc3RhdGUgPSBlbmFibGVfY29tcHJlc3Npb24gP1xuLVx0XHRcdFx0Q09NUFJFU1NJT05fRk9STUFUX0RFRkFVTFQgOlxuLVx0XHRcdFx0Q09NUFJFU1NJT05fRk9STUFUX05PTkU7XG4tXG4tXHRcdFx0cmMgPSBjaWZzX2lvY3RsX3NldF9jb21wcmVzc2lvbih4aWQsIGZpbGVwLCB0Y29uLFxuLVx0XHRcdFx0XHRcdHBTTUJGaWxlLFxuLVx0XHRcdFx0XHRcdGNvbXByZXNzaW9uX3N0YXRlKTtcbi1cdFx0XHRpZiAocmMgPT0gMCkge1xuLVx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRcdFx0XHRpZiAoZW5hYmxlX2NvbXByZXNzaW9uKVxuLVx0XHRcdFx0XHRDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyB8PVxuLVx0XHRcdFx0XHRcdEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4tXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIFx1MDAyNj1cbi1cdFx0XHRcdFx0XHR+RklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRcdFx0fVxuLVx0XHRcdGNpZnNfZGJnKEZZSSwgXCYjMzQ7c2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXG5cJiMzNDssIHJjKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBDSUZTX0lPQ19DT1BZQ0hVTktfRklMRTpcbiBcdFx0XHRyYyA9IGNpZnNfaW9jdGxfY29weWNodW5rKHhpZCwgZmlsZXAsIGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDI6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDI6NDg6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuYwppbmRleCA2NmI5MTA0ZTdjYTIwLi42MDNiMTc3ZjFiMDk1IDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmMKQEAgLTExOTQsOCAmIzQzOzExOTQsOCBAQCBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpCiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTsKIAl1MzIgYXR0cnM7CiAKLQkvKiBQcmVzZXJ2ZSBGU19DT01QUl9GTCBwcmV2aW91c2x5IHJlcG9ydGVkIGJ5IGNpZnNfaW9jdGwoKS4gKi8KLQlpZiAoQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzICZhbXA7IEFUVFJfQ09NUFJFU1NFRCkKJiM0MzsJLyogUmVwb3J0IHRoZSBjYWNoZWQgU01CIGNvbXByZXNzZWQgYXR0cmlidXRlIGFzIEZTX0NPTVBSX0ZMLiAqLwomIzQzOwlpZiAoUkVBRF9PTkNFKENJRlNfSShpbm9kZSktJmd0O2NpZnNBdHRycykgJmFtcDsgQVRUUl9DT01QUkVTU0VEKQogCQlmYS0mZ3Q7ZmxhZ3MgfD0gRlNfQ09NUFJfRkw7CiAKIAkvKgpAQCAtMTI1Niw2ICYjNDM7MTI1Niw3IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHsKIAkuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCwKIAkuc2V0X2FjbCA9IGNpZnNfc2V0X2FjbCwKIAkuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsCiYjNDM7CS5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCwKIH07CiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9pbm9kZV9vcHMgPSB7CkBAIC0xMjY3LDYgJiM0MzsxMjY4LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHsKIAkuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCwKIAkuc2V0X2FjbCA9IGNpZnNfc2V0X2FjbCwKIAkuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsCiYjNDM7CS5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCwKIH07CiAKIGNvbnN0IGNoYXIgKmNpZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLApkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmgKaW5kZXggODU0ZTY3MmE0ZTM3YS4uMTBkY2Y1MTM3OGQzMSAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5oCkBAIC05MSw2ICYjNDM7OTEsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19uYW1lc3BhY2VfaW5vZGVfb3BlcmF0aW9uczsKIAogc3RydWN0IGZpbGVfa2F0dHI7CiBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwomIzQzO2ludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi8KZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvaW9jdGwuYyBiL2ZzL3NtYi9jbGllbnQvaW9jdGwuYwppbmRleCA5ZmE3NDNiZTM2NTJhLi4xMjc5ZTIxNWVjZDIwIDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9pb2N0bC5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKQEAgLTY3LDExICYjNDM7NjgsMTEgQEAgc3RhdGljIGxvbmcgY2lmc19pb2N0bF9xdWVyeV9pbmZvKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCwKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiYjNDM7c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkJc3RydWN0IGNpZnNfdGNvbiAqdGNvbiwKIAkJCQkJX191MTYgY29tcHJlc3Npb25fc3RhdGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLSZndDtpX3NiKTsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSB0Y29uLSZndDtzZXMtJmd0O3NlcnZlcjsKIAlzdHJ1Y3QgY2lmc19vcGVuX3Bhcm1zIG9wYXJtczsKQEAgLTkyLDExICYjNDM7OTMsMTEgQEAgc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkgICAgY2lmc19zYi0mZ3Q7bW50X2NpZnNfc2VydmVyaW5vX2F1dG9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKGRfdW5oYXNoZWQoZmlsZXAtJmd0O2ZfcGF0aC5kZW50cnkpKQomIzQzOwlpZiAoZF91bmhhc2hlZChkZW50cnkpKQogCQlyZXR1cm4gLUVTVEFMRTsKIAogCXBhZ2UgPSBhbGxvY19kZW50cnlfcGF0aCgpOwotCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZXAtJmd0O2ZfcGF0aC5kZW50cnksIHBhZ2UpOwomIzQzOwlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRlbnRyeSwgcGFnZSk7CiAJaWYgKElTX0VSUihmdWxsX3BhdGgpKSB7CiAJCWZyZWVfZGVudHJ5X3BhdGgocGFnZSk7CiAJCXJldHVybiBQVFJfRVJSKGZ1bGxfcGF0aCk7CkBAIC0xMjMsNiAmIzQzOzEyNCwxMCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLAogCQlnb3RvIGNsb3NlOwogCiAJdW5pcXVlaWQgPSBsZTY0X3RvX2NwdShkYXRhLmZpLkluZGV4TnVtYmVyKTsKJiM0MzsJaWYgKCF1bmlxdWVpZCkgewomIzQzOwkJcmMgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gY2xvc2U7CiYjNDM7CX0KIAlpZiAodW5pcXVlaWQgIT0gQ0lGU19JKGlub2RlKS0mZ3Q7dW5pcXVlaWQpIHsKIAkJcmMgPSAtRVNUQUxFOwogCQlnb3RvIGNsb3NlOwpAQCAtMTQxLDE0ICYjNDM7MTQ2LDE0IEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLAotCQkJCSAgICAgIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLAotCQkJCSAgICAgIF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlKQomIzQzO3N0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQlzdHJ1Y3QgY2lmc190Y29uICp0Y29uLAomIzQzOwkJCQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSwKJiM0MzsJCQkJX191MTYgY29tcHJlc3Npb25fc3RhdGUpCiB7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqd2ZpbGU7CiAJc3RydWN0IGNpZnNfdGNvbiAqd3Rjb247Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwogCWludCByYzsKIAogCWlmICghdGNvbi0mZ3Q7c2VzLSZndDtzZXJ2ZXItJmd0O29wcy0mZ3Q7c2V0X2NvbXByZXNzaW9uKQpAQCAtMTczLDEwICYjNDM7MTc4LDY4IEBAIHN0YXRpYyBpbnQgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBmaWxlcCwgdGNvbiwKJiM0MzsJcmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBkZW50cnksIHRjb24sCiAJCQkJCSAgICBjb21wcmVzc2lvbl9zdGF0ZSk7CiB9CiAKJiM0MztpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCSAgICAgIHN0cnVjdCBmaWxlX2thdHRyICpmYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CiYjNDM7CXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IGZpbGVfa2F0dHIgY3VycmVudF9mYSA9IHt9OwomIzQzOwlzdHJ1Y3QgdGNvbl9saW5rICp0bGluazsKJiM0MzsJc3RydWN0IGNpZnNfdGNvbiAqdGNvbjsKJiM0MzsJX191MTYgY29tcHJlc3Npb25fc3RhdGU7CiYjNDM7CWJvb2wgZW5hYmxlX2NvbXByZXNzaW9uOwomIzQzOwl1MzIgYWxsb3dlZCA9IEZTX0NPTVBSX0ZMOwomIzQzOwl1bnNpZ25lZCBpbnQgeGlkOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmICghZmEtJmd0O2ZsYWdzX3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBjaGF0dHIgd3JpdGVzIGJhY2sgYWxsIGZsYWdzIHJldHVybmVkIGJ5IGZpbGVhdHRyX2dldCgpLiBBY2NlcHQKJiM0MzsJICogRlNfQ0FTRUZPTERfRkwgb25seSB3aGVuIGl0IHJlZmxlY3RzIHRoZSBzaGFyZSYjMzk7cyBjYXNlZm9sZCBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CWlmIChmYS0mZ3Q7ZmxhZ3MgJmFtcDsgRlNfQ0FTRUZPTERfRkwpIHsKJiM0MzsJCXJjID0gY2lmc19maWxlYXR0cl9nZXQoZGVudHJ5LCAmYW1wO2N1cnJlbnRfZmEpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCWlmIChjdXJyZW50X2ZhLmZsYWdzICZhbXA7IEZTX0NBU0VGT0xEX0ZMKQomIzQzOwkJCWFsbG93ZWQgfD0gRlNfQ0FTRUZPTERfRkw7CiYjNDM7CX0KJiM0MzsJaWYgKGZhLSZndDtmbGFncyAmYW1wOyB+YWxsb3dlZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZW5hYmxlX2NvbXByZXNzaW9uID0gZmEtJmd0O2ZsYWdzICZhbXA7IEZTX0NPTVBSX0ZMOwomIzQzOwljb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDoKJiM0MzsJCQkJCQkgQ09NUFJFU1NJT05fRk9STUFUX05PTkU7CiYjNDM7CiYjNDM7CXRsaW5rID0gY2lmc19zYl90bGluayhjaWZzX3NiKTsKJiM0MzsJaWYgKElTX0VSUih0bGluaykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0bGluayk7CiYjNDM7CXRjb24gPSB0bGlua190Y29uKHRsaW5rKTsKJiM0MzsKJiM0MzsJeGlkID0gZ2V0X3hpZCgpOwomIzQzOwlyYyA9IGNpZnNfc2V0X2NvbXByZXNzaW9uKHhpZCwgZGVudHJ5LCB0Y29uLCBOVUxMLCBjb21wcmVzc2lvbl9zdGF0ZSk7CiYjNDM7CWZyZWVfeGlkKHhpZCk7CiYjNDM7CWNpZnNfcHV0X3RsaW5rKHRsaW5rKTsKJiM0MzsKJiM0MzsJaWYgKCFyYykgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQlpZiAoZW5hYmxlX2NvbXByZXNzaW9uKQomIzQzOwkJCUNJRlNfSShpbm9kZSktJmd0O2NpZnNBdHRycyB8PSBGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEOwomIzQzOwkJZWxzZQomIzQzOwkJCUNJRlNfSShpbm9kZSktJmd0O2NpZnNBdHRycyAmYW1wOz0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNpZnNfZGJnKEZZSSwgJiMzNDtzZXQgY29tcHJlc3MgZmxhZyByYyAlZFxuJiMzNDssIHJjKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyBsb25nIGNpZnNfaW9jdGxfY29weWNodW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSwKIAkJCXVuc2lnbmVkIGxvbmcgc3JjZmQpCiB7CkBAIC00NjUsMTQgJiM0Mzs1MjgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJc3RydWN0IGNpZnNfdGNvbiAqdGNvbjsKIAlzdHJ1Y3QgdGNvbl9saW5rICp0bGluazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCV9fdTY0CUV4dEF0dHJCaXRzID0gMDsKLQlib29sIGVuYWJsZV9jb21wcmVzc2lvbjsKLQlfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZTsKLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAotI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWQotCV9fdTY0ICAgY2FwczsKLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi8KLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqLwogCiAJeGlkID0gZ2V0X3hpZCgpOwogCkBAIC00ODMsODAgJiM0Mzs1MzgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXRyYWNlX3NtYjNfaW9jdGwoeGlkLCBwU01CRmlsZS0mZ3Q7ZmlkLnBlcnNpc3RlbnRfZmlkLCBjb21tYW5kKTsKIAogCXN3aXRjaCAoY29tbWFuZCkgewotCQljYXNlIEZTX0lPQ19HRVRGTEFHUzoKLQkJCWlmIChwU01CRmlsZSA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQkJdGNvbiA9IHRsaW5rX3Rjb24ocFNNQkZpbGUtJmd0O3RsaW5rKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAotI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWQotCQkJY2FwcyA9IGxlNjRfdG9fY3B1KHRjb24tJmd0O2ZzVW5peEluZm8uQ2FwYWJpbGl0eSk7Ci0JCQlpZiAoQ0lGU19VTklYX0VYVEFUVFJfQ0FQICZhbXA7IGNhcHMpIHsKLQkJCQlfX3U2NAlFeHRBdHRyTWFzayA9IDA7Ci0JCQkJcmMgPSBDSUZTR2V0RXh0QXR0cih4aWQsIHRjb24sCi0JCQkJCQkgICAgcFNNQkZpbGUtJmd0O2ZpZC5uZXRmaWQsCi0JCQkJCQkgICAgJmFtcDtFeHRBdHRyQml0cywgJmFtcDtFeHRBdHRyTWFzayk7Ci0JCQkJaWYgKHJjID09IDApCi0JCQkJCXJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgJmFtcDsKLQkJCQkJCUZTX0ZMX1VTRVJfVklTSUJMRSwKLQkJCQkJCShpbnQgX191c2VyICopYXJnKTsKLQkJCQlpZiAocmMgIT0gLUVPUE5PVFNVUFApCi0JCQkJCWJyZWFrOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWSAqLwotI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovCi0JCQlpZiAoQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzICZhbXA7IEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQpCi0JCQkJRXh0QXR0ckJpdHMgfD0gRlNfQ09NUFJfRkw7Ci0KLQkJCXJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgJmFtcDsgRlNfRkxfVVNFUl9WSVNJQkxFLAotCQkJCSAgICAgIChpbnQgX191c2VyICopYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEZTX0lPQ19TRVRGTEFHUzoKLQkJCWlmIChwU01CRmlsZSA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQkJdGNvbiA9IHRsaW5rX3Rjb24ocFNNQkZpbGUtJmd0O3RsaW5rKTsKLQkJCS8qIGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLSZndDtmc1VuaXhJbmZvLkNhcGFiaWxpdHkpOyAqLwotCi0JCQlpZiAoZ2V0X3VzZXIoRXh0QXR0ckJpdHMsIChpbnQgX191c2VyICopYXJnKSkgewotCQkJCXJjID0gLUVGQVVMVDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIGlmIChDSUZTX1VOSVhfRVhUQVRUUl9DQVAgJmFtcDsgY2FwcykKLQkJCSAqCXJjID0gQ0lGU1NldEV4dEF0dHIoeGlkLCB0Y29uLAotCQkJICoJCSAgICAgICBwU01CRmlsZS0mZ3Q7ZmlkLm5ldGZpZCwKLQkJCSAqCQkgICAgICAgZXh0QXR0ckJpdHMsCi0JCQkgKgkJICAgICAgICZhbXA7RXh0QXR0ck1hc2spOwotCQkJICogaWYgKHJjICE9IC1FT1BOT1RTVVBQKQotCQkJICoJYnJlYWs7Ci0JCQkgKi8KLQotCQkJLyogQ3VycmVudGx5IG9ubHkgZmxhZyB3ZSBjYW4gc2V0IG9yIGNsZWFyIGlzIGNvbXByZXNzZWQuICovCi0JCQlpZiAoRXh0QXR0ckJpdHMgJmFtcDsgfkZTX0NPTVBSX0ZMKSB7Ci0JCQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJZW5hYmxlX2NvbXByZXNzaW9uID0gRXh0QXR0ckJpdHMgJmFtcDsgRlNfQ09NUFJfRkw7Ci0JCQljb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/Ci0JCQkJQ09NUFJFU1NJT05fRk9STUFUX0RFRkFVTFQgOgotCQkJCUNPTVBSRVNTSU9OX0ZPUk1BVF9OT05FOwotCi0JCQlyYyA9IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHhpZCwgZmlsZXAsIHRjb24sCi0JCQkJCQlwU01CRmlsZSwKLQkJCQkJCWNvbXByZXNzaW9uX3N0YXRlKTsKLQkJCWlmIChyYyA9PSAwKSB7Ci0JCQkJc3Bpbl9sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7Ci0JCQkJaWYgKGVuYWJsZV9jb21wcmVzc2lvbikKLQkJCQkJQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzIHw9Ci0JCQkJCQlGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEOwotCQkJCWVsc2UKLQkJCQkJQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzICZhbXA7PQotCQkJCQkJfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7Ci0JCQkJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKLQkJCX0KLQkJCWNpZnNfZGJnKEZZSSwgJiMzNDtzZXQgY29tcHJlc3MgZmxhZyByYyAlZFxuJiMzNDssIHJjKTsKLQkJCWJyZWFrOwogCQljYXNlIENJRlNfSU9DX0NPUFlDSFVOS19GSUxFOgogCQkJcmMgPSBjaWZzX2lvY3RsX2NvcHljaHVuayh4aWQsIGZpbGVwLCBhcmcpOwogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDSUZTIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQ0lGUyBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgaG93IHdlIGhhbmRsZSBgRlNfSU9DX1NFVEZMQUdTYCBhbmQgYEZTX0lPQ19HRVRGTEFHU2AgZm9yIHRoZSBDSUZTIGZpbGVzeXN0ZW0uICBJbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIGBjaWZzX2lvY3RsYCBwYXRoLCB3aGljaCBpcyB3aGF0IHdlIHVzZWQgdG8gZG8sIGl0JiMzOTtzIG1pZ3JhdGluZyB0aGUgbG9naWMgdG8gYGNpZnNfZmlsZWF0dHJfc2V0YCBhbmQgYGNpZnNfZmlsZWF0dHJfZ2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFscmVhZHkgZXhpc3RlZCBmb3Igb3RoZXIgb3BlcmF0aW9ucywgYnV0IG5vdyBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHNwZWNpZmljYWxseSBiZWluZyBhZGRlZCwgYW5kIHdpdGggdGhpcyBwYXRjaCwgd2lsbCBiZSB1c2VkLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBjaWZzZnMuY2AsIGBjaWZzZnMuaGAsIGFuZCBgaW9jdGwuY2AuCgpBIGtleSBjaGFuZ2UgaXMgdGhhdCBgY2lmc19maWxlYXR0cl9zZXRgIGlzIGEgKm5ldyogZnVuY3Rpb24uICBJdCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb25hbCBzaGlmdCDigJMgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBpb2N0bHMsIHdlJiMzOTtyZSBub3cgbGV2ZXJhZ2luZyB0aGUgVkZTIGBmaWxlYXR0cl9zZXRgIGlub2RlIG9wZXJhdGlvbi4gIEkgc2VlIGl0JiMzOTtzIGNhbGxpbmcgYGNpZnNfc2V0X2NvbXByZXNzaW9uYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBmdW5jdGlvbiB1c2VkIHRvIGJlIGNhbGxlZCBgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb25gLiAgQWgsIGFuZCBgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYSBgZGVudHJ5YCBpbnN0ZWFkIG9mIGBmaWxlcGAuICBUaGF0JiMzOTtzIGEgZ29vZCBjaGFuZ2UsIG1vcmUgaW4gbGluZSB3aXRoIHRoZSBWRlMgZGVzaWduLgoKU28sIGZyb20gdGhlIHVzZXImIzM5O3MgcGVyc3BlY3RpdmUsIHRoaXMgbWVhbnMgYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIHdpbGwgbm93IHJvdXRlIHRocm91Z2ggdGhlIFZGUyB0byB0aGlzIG5ldyBgZmlsZWF0dHJfc2V0YCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBpdCwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgcGF0Y2guICBUaGlzIGlzIGEgcHJldHR5IGNsZWFuIG1vdmUsIGNlbnRyYWxpemluZyBmaWxlIGF0dHJpYnV0ZSBjb250cm9sIHdpdGhpbiB0aGUgVkZTIHN0cnVjdHVyZS4KCk5vdywgdGhlIG5leHQgdGhpbmcgSSYjMzk7bSB0aGlua2luZyBhYm91dDogaXMgdGhpcyBmdXp6YWJsZT8gIEFuZCBvZiBjb3Vyc2UsIGl0IGlzLiBTeXprYWxsZXIgaGFzIHNvbWUgQ0lGUy9TTUIgc3VwcG9ydCBhbHJlYWR5LCBJJiMzOTt2ZSBzZWVuIGl0IG1vdW50IGFuZCBkbyBvcGVyYXRpb25zLiAgSSBuZWVkIHRvIGNoZWNrLCB0aG91Z2gsIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gIGBDT05GSUdfQ0lGU2AgaXMgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIChvciBpcyBpdCBgQ09ORklHX1NNQl9GU2AgdGhlc2UgZGF5cz8gSSYjMzk7bGwgY2hlY2spLiBMZXQmIzM5O3MgZG8gYSBzZWFyY2ggZm9yIGBjaWZzX2ZpbGVhdHRyX3NldGAgd2l0aGluIHRoZSBjb2RlYmFzZSwgYW5kIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lmc19maWxlYXR0cl9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xMjQwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNTgtXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyNTk6XHQuZmlsZWF0dHJfc2V0ID0gY2lmc19maWxlYXR0cl9zZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNjAtfTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyNjI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNzAtXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyNzE6XHQuZmlsZWF0dHJfc2V0ID0gY2lmc19maWxlYXR0cl9zZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNzItfTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oPTkzPWludCBjaWZzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjk0OmludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvc21iL2NsaWVudC9jaWZzZnMuaC05NS1cdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbi0tXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM9MTQ5PXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvaW9jdGwuYy0xODQtXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM6MTg1OmludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE4Ni1cdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNJRlMgS2NvbmZpZyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIENJRlMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZy4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgdXN1YWwgZ290Y2hhcy4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vZHVsYXJpemF0aW9uLiBJcyBpdCBidWlsdCBhcyBhIG1vZHVsZSwgb3Igc3RhdGljYWxseSBsaW5rZWQ/IFdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgZGlmZmVyZW50IENJRlMgdmVyc2lvbnMsIHRoZSBkaWFsZWN0cywgYW5kIHRoZSBzZWN1cml0eSBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZWZhdWx0IHZhbHVlcyB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljIGluIHNwZWNpZmljIGVudmlyb25tZW50cz8gRm9yIGluc3RhbmNlLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSByZWNlbnQga2VybmVsIHVwZGF0ZXMgaGF2ZSBhbHRlcmVkIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mLCBzYXksIFNNQiBzaWduaW5nIG9yIGVuY3J5cHRpb24sIGFuZCBpZiBzbywgaG93IHRob3NlIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byB0aGUgVkZTIGFuZCBuZXR3b3JrIHN0YWNrPyBMZXQmIzM5O3MgdmVyaWZ5IHRoZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgbmV0d29ya2luZyBzdXBwb3J0IGFuZCBjcnlwdG8gbGlicmFyaWVzIGFyZSBjb3JyZWN0bHkgZGVjbGFyZWQuIFRoaXMgS2NvbmZpZyBjYW4gYmUgYSBsYWJ5cmludGgsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHBvdGVudGlhbCBzZWN1cml0eS1yZWxhdGVkIGZsYWdzLCBtYWtpbmcgc3VyZSB0aGF0IGl0JiMzOTtzIGFsaWduZWQgd2l0aCB0aGUgZXhwZWN0ZWQgc2VjdXJpdHkgcG9zdHVyZSBmb3IgdGhpcyBzeXN0ZW0uIFRoZW4gSSB3aWxsIGNvbXBhcmUgdGhlIGJ1aWxkIHdpdGggd2hhdCBJIGV4cGVjdC4gQW55IHJlZCBmbGFncyBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0lGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ0lGUyBDb25maWd1cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgQ0lGU2AuIFJpZ2h0LCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L2NpZnNmcy5jYCBhbmQgYGZzL3NtYi9jbGllbnQvaW9jdGwuY2AuIE15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBgY2lmc19maWxlYXR0cl9zZXRgLCBgY2lmc19zZXRfY29tcHJlc3Npb25gLCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDSUZTYCBpcyBlbmFibGVkLiBJdCYjMzk7cyB1c2VkIGluIGJvdGggYGlvY3RsLmNgIGFuZCBgY2lmc2ZzLmNgLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9zbWIvY2xpZW50L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvY3RsLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvTWFrZWZpbGU9OD1jaWZzLXkgOj0gdHJhY2UubyBjaWZzZnMubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBcXFxuLS1cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTAtXHQgIGNhY2hlZF9kaXIubyBjaWZzX3VuaWNvZGUubyBjaWZzZW5jcnlwdC5vIFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjExOlx0ICByZWFkZGlyLm8gaW9jdGwubyBzZXNzLm8gZXhwb3J0Lm8gdW5jLm8gd2ludWNhc2UubyBcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0xMi1cdCAgc21iMm9wcy5vIHNtYjJtYXBlcnJvci5vIHNtYjJ0cmFuc3BvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTEKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQ0lGUyBGaWxlIEF0dHJpYnV0ZSBDb21wcmVzc2lvbiBGbGFnKioKCk9rYXksIHNvIEkmIzM5O3ZlIGR1ZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0lGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZpbGUgYXR0cmlidXRlIGhhbmRsaW5nIGFuZCBjb21wcmVzc2lvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlvY3RsLm9gIGlzIGluZGVlZCBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGNpZnNfZmlsZWF0dHJfc2V0YCB0byBtYW5hZ2UgdGhlIHNldHRpbmcgb2YgdGhlIGNvbXByZXNzaW9uIGZsYWcuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIG9uIENJRlMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgoKR2l2ZW4gdGhhdCB0aGlzIHJlcHJlc2VudHMgYSBkaXJlY3QgY2hhbmdlIHRvIGhvdyBmaWxlIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBjb21wcmVzc2lvbiwgYXJlIHNldCB3aXRoaW4gdGhlIENJRlMgc3lzdGVtLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSB2YWxpZCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuCgpUaGUga2V5IGZ1bmN0aW9ucyB0aGF0IEkmIzM5O3ZlIGlkZW50aWZpZWQgYXMgYmVpbmcgcmVsZXZhbnQgYXJlOgoKKiAgIGBjaWZzX2ZpbGVhdHRyX3NldGAgKFRoaXMgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQpLgoqICAgYGNpZnNfZmlsZWF0dHJfZ2V0YCAoTWlub3IgY2hhbmdlcykKKiAgIGBjaWZzX3NldF9jb21wcmVzc2lvbmAgKFN0YXRpYywgYnV0IHBvdGVudGlhbGx5IHJlbGV2YW50KQoqICAgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIChTdGF0aWMsIGJ1dCBwb3RlbnRpYWxseSByZWxldmFudCkKClRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGlzIGBDSUZTYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENJRlNgIGlzIHRoZSByaWdodCBjb25maWcgb3B0aW9uIGZvciBlbmFibGluZyBDSUZTIGFuZCBTTUIzIHN1cHBvcnQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKSW5pdGlhbGx5LCBJIG5vdGVkIHNvbWUgcmVtb3ZlZCBjb2RlIGZyb20gYGNpZnNfaW9jdGxgIHJlbGF0ZWQgdG8gYENPTkZJR19DSUZTX1BPU0lYYCBhbmQgYENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWWAsIHNwZWNpZmljYWxseSBoYW5kbGluZyBgRlNfSU9DX0dFVEZMQUdTYCBhbmQgYEZTX0lPQ19TRVRGTEFHU2AuIEJ1dCwgdGhvc2UgYXJlIGhhbmRsZWQgbm93IGJ5IGBjaWZzX2ZpbGVhdHRyX2dldGAgYW5kIGBjaWZzX2ZpbGVhdHRyX3NldGAsIHNvIHRoZXkgYXJlbiYjMzk7dCByZWxldmFudCB0byBteSBmdXp6aW5nIHNjb3BlLgoKSSBuZWVkIHRvIGZvY3VzIG9uIGBjaWZzX2ZpbGVhdHRyX3NldGAgYW5kIGBjaWZzX2ZpbGVhdHRyX2dldGAsIGFzIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gYGNpZnNfc2V0X2NvbXByZXNzaW9uYCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIGFyZSBzdGF0aWMsIGFuZCBhbHRob3VnaCBsYXJnZSwgYW5kIHRodXMgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZCwgdGhlIGluc3RydWN0aW9ucyBpbmRpY2F0ZSB0aGF0IGl0JiMzOTtzIHByZWZlcmFibGUgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGNpZnNfZmlsZWF0dHJfc2V0YCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQsIGJ1dCBJJiMzOTtsbCBhbHNvIGluY2x1ZGUgYGNpZnNfZmlsZWF0dHJfZ2V0YCwgYXMgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIG1pZ2h0IHJldmVhbCBpbnRlcmVzdGluZyBjb2RlIHBhdGhzLgoKVG8gcmVpdGVyYXRlLCB0aGlzIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBgRlNfSU9DX1NFVEZMQUdTYCBmcm9tIGBjaWZzX2lvY3RsYCB0byBgY2lmc19maWxlYXR0cl9zZXRgLiBUaGlzIHNoaWZ0IHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2lmc19maWxlYXR0cl9zZXQmIzM0OywKICAgICYjMzQ7Y2lmc19maWxlYXR0cl9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGZpbGUgYXR0cmlidXRlcyAoc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBmbGFnKSBmcm9tIHRoZSBDSUZTIGlvY3RsIGhhbmRsZXIgdG8gdGhlIFZGUyBmaWxlYXR0cl9zZXQgaW5vZGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGZpbGUgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCByZXRyaWV2ZWQgaW4gdGhlIENJRlMgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGwoRlNfSU9DX1NFVEZMQUdTKSBhbmQgaW9jdGwoRlNfSU9DX0dFVEZMQUdTKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NpZnNfZmlsZWF0dHJfc2V0JiMzNDssCiAgICAmIzM0O2NpZnNfZmlsZWF0dHJfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBmaWxlIGF0dHJpYnV0ZXMgKHNwZWNpZmljYWxseSB0aGUgY29tcHJlc3Npb24gZmxhZykgZnJvbSB0aGUgQ0lGUyBpb2N0bCBoYW5kbGVyIHRvIHRoZSBWRlMgZmlsZWF0dHJfc2V0IGlub2RlIG9wZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBmaWxlIGF0dHJpYnV0ZXMgYXJlIHNldCBhbmQgcmV0cmlldmVkIGluIHRoZSBDSUZTIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3RsKEZTX0lPQ19TRVRGTEFHUykgYW5kIGlvY3RsKEZTX0lPQ19HRVRGTEFHUykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMjo0ODo0My42MTIwMzAwMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIwNTQ0MjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2lmc19maWxlYXR0cl9zZXRcIixcbiAgICBcImNpZnNfZmlsZWF0dHJfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGZpbGUgYXR0cmlidXRlcyAoc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBmbGFnKSBmcm9tIHRoZSBDSUZTIGlvY3RsIGhhbmRsZXIgdG8gdGhlIFZGUyBmaWxlYXR0cl9zZXQgaW5vZGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGZpbGUgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCByZXRyaWV2ZWQgaW4gdGhlIENJRlMgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGwoRlNfSU9DX1NFVEZMQUdTKSBhbmQgaW9jdGwoRlNfSU9DX0dFVEZMQUdTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDI6NDg6NDMuNjEyMDM1Mjc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3NzY5MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDAyOjQ4OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmMgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXFxuaW5kZXggNjZiOTEwNGU3Y2EyMC4uNjAzYjE3N2YxYjA5NSAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXFxuKysrIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuY1xcbkBAIC0xMTk0LDggKzExOTQsOCBAQCBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuIFxcdHUzMiBhdHRycztcXG4gXFxuLVxcdC8qIFByZXNlcnZlIEZTX0NPTVBSX0ZMIHByZXZpb3VzbHkgcmVwb3J0ZWQgYnkgY2lmc19pb2N0bCgpLiAqL1xcbi1cXHRpZiAoQ0lGU19JKGlub2RlKS1cXHUwMDNlY2lmc0F0dHJzIFxcdTAwMjYgQVRUUl9DT01QUkVTU0VEKVxcbitcXHQvKiBSZXBvcnQgdGhlIGNhY2hlZCBTTUIgY29tcHJlc3NlZCBhdHRyaWJ1dGUgYXMgRlNfQ09NUFJfRkwuICovXFxuK1xcdGlmIChSRUFEX09OQ0UoQ0lGU19JKGlub2RlKS1cXHUwMDNlY2lmc0F0dHJzKSBcXHUwMDI2IEFUVFJfQ09NUFJFU1NFRClcXG4gXFx0XFx0ZmEtXFx1MDAzZWZsYWdzIHw9IEZTX0NPTVBSX0ZMO1xcbiBcXG4gXFx0LypcXG5AQCAtMTI1Niw2ICsxMjU2LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kaXJfaW5vZGVfb3BzID0ge1xcbiBcXHQuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCxcXG4gXFx0LnNldF9hY2wgPSBjaWZzX3NldF9hY2wsXFxuIFxcdC5maWxlYXR0cl9nZXQgPSBjaWZzX2ZpbGVhdHRyX2dldCxcXG4rXFx0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxcbiB9O1xcbiBcXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcXG5AQCAtMTI2Nyw2ICsxMjY4LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcXG4gXFx0LmdldF9hY2wgPSBjaWZzX2dldF9hY2wsXFxuIFxcdC5zZXRfYWNsID0gY2lmc19zZXRfYWNsLFxcbiBcXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXFxuK1xcdC5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCxcXG4gfTtcXG4gXFxuIGNvbnN0IGNoYXIgKmNpZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxcbmluZGV4IDg1NGU2NzJhNGUzN2EuLjEwZGNmNTEzNzhkMzEgMTAwNjQ0XFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxcbisrKyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcXG5AQCAtOTEsNiArOTEsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19uYW1lc3BhY2VfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFxuIHN0cnVjdCBmaWxlX2thdHRyO1xcbiBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbitpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFxuIFxcbiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9pb2N0bC5jIGIvZnMvc21iL2NsaWVudC9pb2N0bC5jXFxuaW5kZXggOWZhNzQzYmUzNjUyYS4uMTI3OWUyMTVlY2QyMCAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2lvY3RsLmNcXG4rKysgYi9mcy9zbWIvY2xpZW50L2lvY3RsLmNcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlYXR0ci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW91bnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuQEAgLTY3LDExICs2OCwxMSBAQCBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX3F1ZXJ5X2luZm8odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuK3N0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuIFxcdFxcdFxcdFxcdFxcdF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSB0Y29uLVxcdTAwM2VzZXMtXFx1MDAzZXNlcnZlcjtcXG4gXFx0c3RydWN0IGNpZnNfb3Blbl9wYXJtcyBvcGFybXM7XFxuQEAgLTkyLDExICs5MywxMSBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHQgICAgY2lmc19zYi1cXHUwMDNlbW50X2NpZnNfc2VydmVyaW5vX2F1dG9kaXNhYmxlZClcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKGRfdW5oYXNoZWQoZmlsZXAtXFx1MDAzZWZfcGF0aC5kZW50cnkpKVxcbitcXHRpZiAoZF91bmhhc2hlZChkZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gLUVTVEFMRTtcXG4gXFxuIFxcdHBhZ2UgPSBhbGxvY19kZW50cnlfcGF0aCgpO1xcbi1cXHRmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGVwLVxcdTAwM2VmX3BhdGguZGVudHJ5LCBwYWdlKTtcXG4rXFx0ZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkZW50cnksIHBhZ2UpO1xcbiBcXHRpZiAoSVNfRVJSKGZ1bGxfcGF0aCkpIHtcXG4gXFx0XFx0ZnJlZV9kZW50cnlfcGF0aChwYWdlKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZnVsbF9wYXRoKTtcXG5AQCAtMTIzLDYgKzEyNCwxMCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRcXHRnb3RvIGNsb3NlO1xcbiBcXG4gXFx0dW5pcXVlaWQgPSBsZTY0X3RvX2NwdShkYXRhLmZpLkluZGV4TnVtYmVyKTtcXG4rXFx0aWYgKCF1bmlxdWVpZCkge1xcbitcXHRcXHRyYyA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIGNsb3NlO1xcbitcXHR9XFxuIFxcdGlmICh1bmlxdWVpZCAhPSBDSUZTX0koaW5vZGUpLVxcdTAwM2V1bmlxdWVpZCkge1xcbiBcXHRcXHRyYyA9IC1FU1RBTEU7XFxuIFxcdFxcdGdvdG8gY2xvc2U7XFxuQEAgLTE0MSwxNCArMTQ2LDE0IEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBjaWZzX2lvY3RsX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLFxcbi1cXHRcXHRcXHRcXHQgICAgICBfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcXG4rc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLFxcbitcXHRcXHRcXHRcXHRfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgY2lmc0ZpbGVJbmZvICp3ZmlsZTtcXG4gXFx0c3RydWN0IGNpZnNfdGNvbiAqd3Rjb247XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0aW50IHJjO1xcbiBcXG4gXFx0aWYgKCF0Y29uLVxcdTAwM2VzZXMtXFx1MDAzZXNlcnZlci1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfY29tcHJlc3Npb24pXFxuQEAgLTE3MywxMCArMTc4LDY4IEBAIHN0YXRpYyBpbnQgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHhpZCwgZmlsZXAsIHRjb24sXFxuK1xcdHJldHVybiBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHhpZCwgZGVudHJ5LCB0Y29uLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY29tcHJlc3Npb25fc3RhdGUpO1xcbiB9XFxuIFxcbitpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuK1xcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0c3RydWN0IGZpbGVfa2F0dHIgY3VycmVudF9mYSA9IHt9O1xcbitcXHRzdHJ1Y3QgdGNvbl9saW5rICp0bGluaztcXG4rXFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbjtcXG4rXFx0X191MTYgY29tcHJlc3Npb25fc3RhdGU7XFxuK1xcdGJvb2wgZW5hYmxlX2NvbXByZXNzaW9uO1xcbitcXHR1MzIgYWxsb3dlZCA9IEZTX0NPTVBSX0ZMO1xcbitcXHR1bnNpZ25lZCBpbnQgeGlkO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWZhLVxcdTAwM2VmbGFnc192YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogY2hhdHRyIHdyaXRlcyBiYWNrIGFsbCBmbGFncyByZXR1cm5lZCBieSBmaWxlYXR0cl9nZXQoKS4gQWNjZXB0XFxuK1xcdCAqIEZTX0NBU0VGT0xEX0ZMIG9ubHkgd2hlbiBpdCByZWZsZWN0cyB0aGUgc2hhcmUncyBjYXNlZm9sZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdGlmIChmYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGU19DQVNFRk9MRF9GTCkge1xcbitcXHRcXHRyYyA9IGNpZnNfZmlsZWF0dHJfZ2V0KGRlbnRyeSwgXFx1MDAyNmN1cnJlbnRfZmEpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0aWYgKGN1cnJlbnRfZmEuZmxhZ3MgXFx1MDAyNiBGU19DQVNFRk9MRF9GTClcXG4rXFx0XFx0XFx0YWxsb3dlZCB8PSBGU19DQVNFRk9MRF9GTDtcXG4rXFx0fVxcbitcXHRpZiAoZmEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfmFsbG93ZWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGVuYWJsZV9jb21wcmVzc2lvbiA9IGZhLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZTX0NPTVBSX0ZMO1xcbitcXHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IENPTVBSRVNTSU9OX0ZPUk1BVF9OT05FO1xcbitcXG4rXFx0dGxpbmsgPSBjaWZzX3NiX3RsaW5rKGNpZnNfc2IpO1xcbitcXHRpZiAoSVNfRVJSKHRsaW5rKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIodGxpbmspO1xcbitcXHR0Y29uID0gdGxpbmtfdGNvbih0bGluayk7XFxuK1xcbitcXHR4aWQgPSBnZXRfeGlkKCk7XFxuK1xcdHJjID0gY2lmc19zZXRfY29tcHJlc3Npb24oeGlkLCBkZW50cnksIHRjb24sIE5VTEwsIGNvbXByZXNzaW9uX3N0YXRlKTtcXG4rXFx0ZnJlZV94aWQoeGlkKTtcXG4rXFx0Y2lmc19wdXRfdGxpbmsodGxpbmspO1xcbitcXG4rXFx0aWYgKCFyYykge1xcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRcXHRpZiAoZW5hYmxlX2NvbXByZXNzaW9uKVxcbitcXHRcXHRcXHRDSUZTX0koaW5vZGUpLVxcdTAwM2VjaWZzQXR0cnMgfD0gRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRDSUZTX0koaW5vZGUpLVxcdTAwM2VjaWZzQXR0cnMgXFx1MDAyNj0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0Y2lmc19kYmcoRllJLCBcXFwic2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX2NvcHljaHVuayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjZmQpXFxuIHtcXG5AQCAtNDY1LDE0ICs1MjgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdHN0cnVjdCBjaWZzX3Rjb24gKnRjb247XFxuIFxcdHN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rO1xcbiBcXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiO1xcbi1cXHRfX3U2NFxcdEV4dEF0dHJCaXRzID0gMDtcXG4tXFx0Ym9vbCBlbmFibGVfY29tcHJlc3Npb247XFxuLVxcdF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlO1xcbi0jaWZkZWYgQ09ORklHX0NJRlNfUE9TSVhcXG4tI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbi1cXHRfX3U2NCAgIGNhcHM7XFxuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi9cXG4tI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovXFxuIFxcbiBcXHR4aWQgPSBnZXRfeGlkKCk7XFxuIFxcbkBAIC00ODMsODAgKzUzOCw2IEBAIGxvbmcgY2lmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjb21tYW5kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0dHJhY2Vfc21iM19pb2N0bCh4aWQsIHBTTUJGaWxlLVxcdTAwM2VmaWQucGVyc2lzdGVudF9maWQsIGNvbW1hbmQpO1xcbiBcXG4gXFx0c3dpdGNoIChjb21tYW5kKSB7XFxuLVxcdFxcdGNhc2UgRlNfSU9DX0dFVEZMQUdTOlxcbi1cXHRcXHRcXHRpZiAocFNNQkZpbGUgPT0gTlVMTClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdHRjb24gPSB0bGlua190Y29uKHBTTUJGaWxlLVxcdTAwM2V0bGluayk7XFxuLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWFxcbi0jaWZkZWYgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXFxuLVxcdFxcdFxcdGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLVxcdTAwM2Vmc1VuaXhJbmZvLkNhcGFiaWxpdHkpO1xcbi1cXHRcXHRcXHRpZiAoQ0lGU19VTklYX0VYVEFUVFJfQ0FQIFxcdTAwMjYgY2Fwcykge1xcbi1cXHRcXHRcXHRcXHRfX3U2NFxcdEV4dEF0dHJNYXNrID0gMDtcXG4tXFx0XFx0XFx0XFx0cmMgPSBDSUZTR2V0RXh0QXR0cih4aWQsIHRjb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBwU01CRmlsZS1cXHUwMDNlZmlkLm5ldGZpZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZFeHRBdHRyQml0cywgXFx1MDAyNkV4dEF0dHJNYXNrKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJjID09IDApXFxuLVxcdFxcdFxcdFxcdFxcdHJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgXFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHRcXHRGU19GTF9VU0VSX1ZJU0lCTEUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdChpbnQgX191c2VyICopYXJnKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJjICE9IC1FT1BOT1RTVVBQKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXFxuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqL1xcbi1cXHRcXHRcXHRpZiAoQ0lGU19JKGlub2RlKS1cXHUwMDNlY2lmc0F0dHJzIFxcdTAwMjYgRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRClcXG4tXFx0XFx0XFx0XFx0RXh0QXR0ckJpdHMgfD0gRlNfQ09NUFJfRkw7XFxuLVxcbi1cXHRcXHRcXHRyYyA9IHB1dF91c2VyKEV4dEF0dHJCaXRzIFxcdTAwMjYgRlNfRkxfVVNFUl9WSVNJQkxFLFxcbi1cXHRcXHRcXHRcXHQgICAgICAoaW50IF9fdXNlciAqKWFyZyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEZTX0lPQ19TRVRGTEFHUzpcXG4tXFx0XFx0XFx0aWYgKHBTTUJGaWxlID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR0Y29uID0gdGxpbmtfdGNvbihwU01CRmlsZS1cXHUwMDNldGxpbmspO1xcbi1cXHRcXHRcXHQvKiBjYXBzID0gbGU2NF90b19jcHUodGNvbi1cXHUwMDNlZnNVbml4SW5mby5DYXBhYmlsaXR5KTsgKi9cXG4tXFxuLVxcdFxcdFxcdGlmIChnZXRfdXNlcihFeHRBdHRyQml0cywgKGludCBfX3VzZXIgKilhcmcpKSB7XFxuLVxcdFxcdFxcdFxcdHJjID0gLUVGQVVMVDtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIGlmIChDSUZTX1VOSVhfRVhUQVRUUl9DQVAgXFx1MDAyNiBjYXBzKVxcbi1cXHRcXHRcXHQgKlxcdHJjID0gQ0lGU1NldEV4dEF0dHIoeGlkLCB0Y29uLFxcbi1cXHRcXHRcXHQgKlxcdFxcdCAgICAgICBwU01CRmlsZS1cXHUwMDNlZmlkLm5ldGZpZCxcXG4tXFx0XFx0XFx0ICpcXHRcXHQgICAgICAgZXh0QXR0ckJpdHMsXFxuLVxcdFxcdFxcdCAqXFx0XFx0ICAgICAgIFxcdTAwMjZFeHRBdHRyTWFzayk7XFxuLVxcdFxcdFxcdCAqIGlmIChyYyAhPSAtRU9QTk9UU1VQUClcXG4tXFx0XFx0XFx0ICpcXHRicmVhaztcXG4tXFx0XFx0XFx0ICovXFxuLVxcbi1cXHRcXHRcXHQvKiBDdXJyZW50bHkgb25seSBmbGFnIHdlIGNhbiBzZXQgb3IgY2xlYXIgaXMgY29tcHJlc3NlZC4gKi9cXG4tXFx0XFx0XFx0aWYgKEV4dEF0dHJCaXRzIFxcdTAwMjYgfkZTX0NPTVBSX0ZMKSB7XFxuLVxcdFxcdFxcdFxcdHJjID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRlbmFibGVfY29tcHJlc3Npb24gPSBFeHRBdHRyQml0cyBcXHUwMDI2IEZTX0NPTVBSX0ZMO1xcbi1cXHRcXHRcXHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/XFxuLVxcdFxcdFxcdFxcdENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcXG4tXFx0XFx0XFx0XFx0Q09NUFJFU1NJT05fRk9STUFUX05PTkU7XFxuLVxcbi1cXHRcXHRcXHRyYyA9IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHhpZCwgZmlsZXAsIHRjb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHBTTUJGaWxlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb21wcmVzc2lvbl9zdGF0ZSk7XFxuLVxcdFxcdFxcdGlmIChyYyA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLVxcdFxcdFxcdFxcdGlmIChlbmFibGVfY29tcHJlc3Npb24pXFxuLVxcdFxcdFxcdFxcdFxcdENJRlNfSShpbm9kZSktXFx1MDAzZWNpZnNBdHRycyB8PVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEO1xcbi1cXHRcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdFxcdENJRlNfSShpbm9kZSktXFx1MDAzZWNpZnNBdHRycyBcXHUwMDI2PVxcbi1cXHRcXHRcXHRcXHRcXHRcXHR+RklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcXG4tXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNpZnNfZGJnKEZZSSwgXFxcInNldCBjb21wcmVzcyBmbGFnIHJjICVkXFxcXG5cXFwiLCByYyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIENJRlNfSU9DX0NPUFlDSFVOS19GSUxFOlxcbiBcXHRcXHRcXHRyYyA9IGNpZnNfaW9jdGxfY29weWNodW5rKHhpZCwgZmlsZXAsIGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMjo0ODo0NC45OTA1NDUyOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTgyNjkxODM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2lmc19maWxlYXR0cl9zZXRcIixcbiAgICBcImNpZnNfZmlsZWF0dHJfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGZpbGUgYXR0cmlidXRlcyAoc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBmbGFnKSBmcm9tIHRoZSBDSUZTIGlvY3RsIGhhbmRsZXIgdG8gdGhlIFZGUyBmaWxlYXR0cl9zZXQgaW5vZGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGZpbGUgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCByZXRyaWV2ZWQgaW4gdGhlIENJRlMgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGwoRlNfSU9DX1NFVEZMQUdTKSBhbmQgaW9jdGwoRlNfSU9DX0dFVEZMQUdTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDI6NDg6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuY1xuaW5kZXggNjZiOTEwNGU3Y2EyMC4uNjAzYjE3N2YxYjA5NSAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmNcbkBAIC0xMTk0LDggKzExOTQsOCBAQCBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0dTMyIGF0dHJzO1xuIFxuLVx0LyogUHJlc2VydmUgRlNfQ09NUFJfRkwgcHJldmlvdXNseSByZXBvcnRlZCBieSBjaWZzX2lvY3RsKCkuICovXG4tXHRpZiAoQ0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgXHUwMDI2IEFUVFJfQ09NUFJFU1NFRClcbitcdC8qIFJlcG9ydCB0aGUgY2FjaGVkIFNNQiBjb21wcmVzc2VkIGF0dHJpYnV0ZSBhcyBGU19DT01QUl9GTC4gKi9cbitcdGlmIChSRUFEX09OQ0UoQ0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMpIFx1MDAyNiBBVFRSX0NPTVBSRVNTRUQpXG4gXHRcdGZhLVx1MDAzZWZsYWdzIHw9IEZTX0NPTVBSX0ZMO1xuIFxuIFx0LypcbkBAIC0xMjU2LDYgKzEyNTYsNyBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHMgPSB7XG4gXHQuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCxcbiBcdC5zZXRfYWNsID0gY2lmc19zZXRfYWNsLFxuIFx0LmZpbGVhdHRyX2dldCA9IGNpZnNfZmlsZWF0dHJfZ2V0LFxuK1x0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbkBAIC0xMjY3LDYgKzEyNjgsNyBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2ZpbGVfaW5vZGVfb3BzID0ge1xuIFx0LmdldF9hY2wgPSBjaWZzX2dldF9hY2wsXG4gXHQuc2V0X2FjbCA9IGNpZnNfc2V0X2FjbCxcbiBcdC5maWxlYXR0cl9nZXQgPSBjaWZzX2ZpbGVhdHRyX2dldCxcbitcdC5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCxcbiB9O1xuIFxuIGNvbnN0IGNoYXIgKmNpZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmggYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5oXG5pbmRleCA4NTRlNjcyYTRlMzdhLi4xMGRjZjUxMzc4ZDMxIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuKysrIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuQEAgLTkxLDYgKzkxLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfbmFtZXNwYWNlX2lub2RlX29wZXJhdGlvbnM7XG4gXG4gc3RydWN0IGZpbGVfa2F0dHI7XG4gaW50IGNpZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbitpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcbiBcbiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi9cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2lvY3RsLmMgYi9mcy9zbWIvY2xpZW50L2lvY3RsLmNcbmluZGV4IDlmYTc0M2JlMzY1MmEuLjEyNzllMjE1ZWNkMjAgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2lvY3RsLmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvaW9jdGwuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWF0dHIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG5AQCAtNjcsMTEgKzY4LDExIEBAIHN0YXRpYyBsb25nIGNpZnNfaW9jdGxfcXVlcnlfaW5mbyh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4rc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbiBcdFx0XHRcdFx0X191MTYgY29tcHJlc3Npb25fc3RhdGUpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiBcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gdGNvbi1cdTAwM2VzZXMtXHUwMDNlc2VydmVyO1xuIFx0c3RydWN0IGNpZnNfb3Blbl9wYXJtcyBvcGFybXM7XG5AQCAtOTIsMTEgKzkzLDExIEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHQgICAgY2lmc19zYi1cdTAwM2VtbnRfY2lmc19zZXJ2ZXJpbm9fYXV0b2Rpc2FibGVkKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoZF91bmhhc2hlZChmaWxlcC1cdTAwM2VmX3BhdGguZGVudHJ5KSlcbitcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldHVybiAtRVNUQUxFO1xuIFxuIFx0cGFnZSA9IGFsbG9jX2RlbnRyeV9wYXRoKCk7XG4tXHRmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGVwLVx1MDAzZWZfcGF0aC5kZW50cnksIHBhZ2UpO1xuK1x0ZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkZW50cnksIHBhZ2UpO1xuIFx0aWYgKElTX0VSUihmdWxsX3BhdGgpKSB7XG4gXHRcdGZyZWVfZGVudHJ5X3BhdGgocGFnZSk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGZ1bGxfcGF0aCk7XG5AQCAtMTIzLDYgKzEyNCwxMCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxuIFx0XHRnb3RvIGNsb3NlO1xuIFxuIFx0dW5pcXVlaWQgPSBsZTY0X3RvX2NwdShkYXRhLmZpLkluZGV4TnVtYmVyKTtcbitcdGlmICghdW5pcXVlaWQpIHtcbitcdFx0cmMgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBjbG9zZTtcbitcdH1cbiBcdGlmICh1bmlxdWVpZCAhPSBDSUZTX0koaW5vZGUpLVx1MDAzZXVuaXF1ZWlkKSB7XG4gXHRcdHJjID0gLUVTVEFMRTtcbiBcdFx0Z290byBjbG9zZTtcbkBAIC0xNDEsMTQgKzE0NiwxNCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSxcbi1cdFx0XHRcdCAgICAgIF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlKVxuK3N0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbitcdFx0XHRcdHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLFxuK1x0XHRcdFx0X191MTYgY29tcHJlc3Npb25fc3RhdGUpXG4ge1xuIFx0c3RydWN0IGNpZnNGaWxlSW5mbyAqd2ZpbGU7XG4gXHRzdHJ1Y3QgY2lmc190Y29uICp3dGNvbjtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHRpbnQgcmM7XG4gXG4gXHRpZiAoIXRjb24tXHUwMDNlc2VzLVx1MDAzZXNlcnZlci1cdTAwM2VvcHMtXHUwMDNlc2V0X2NvbXByZXNzaW9uKVxuQEAgLTE3MywxMCArMTc4LDY4IEBAIHN0YXRpYyBpbnQgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4tXHRyZXR1cm4gY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh4aWQsIGZpbGVwLCB0Y29uLFxuK1x0cmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBkZW50cnksIHRjb24sXG4gXHRcdFx0XHRcdCAgICBjb21wcmVzc2lvbl9zdGF0ZSk7XG4gfVxuIFxuK2ludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHQgICAgICBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbitcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IGZpbGVfa2F0dHIgY3VycmVudF9mYSA9IHt9O1xuK1x0c3RydWN0IHRjb25fbGluayAqdGxpbms7XG4rXHRzdHJ1Y3QgY2lmc190Y29uICp0Y29uO1xuK1x0X191MTYgY29tcHJlc3Npb25fc3RhdGU7XG4rXHRib29sIGVuYWJsZV9jb21wcmVzc2lvbjtcbitcdHUzMiBhbGxvd2VkID0gRlNfQ09NUFJfRkw7XG4rXHR1bnNpZ25lZCBpbnQgeGlkO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKCFmYS1cdTAwM2VmbGFnc192YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LypcbitcdCAqIGNoYXR0ciB3cml0ZXMgYmFjayBhbGwgZmxhZ3MgcmV0dXJuZWQgYnkgZmlsZWF0dHJfZ2V0KCkuIEFjY2VwdFxuK1x0ICogRlNfQ0FTRUZPTERfRkwgb25seSB3aGVuIGl0IHJlZmxlY3RzIHRoZSBzaGFyZSdzIGNhc2Vmb2xkIHN0YXRlLlxuK1x0ICovXG4rXHRpZiAoZmEtXHUwMDNlZmxhZ3MgXHUwMDI2IEZTX0NBU0VGT0xEX0ZMKSB7XG4rXHRcdHJjID0gY2lmc19maWxlYXR0cl9nZXQoZGVudHJ5LCBcdTAwMjZjdXJyZW50X2ZhKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0aWYgKGN1cnJlbnRfZmEuZmxhZ3MgXHUwMDI2IEZTX0NBU0VGT0xEX0ZMKVxuK1x0XHRcdGFsbG93ZWQgfD0gRlNfQ0FTRUZPTERfRkw7XG4rXHR9XG4rXHRpZiAoZmEtXHUwMDNlZmxhZ3MgXHUwMDI2IH5hbGxvd2VkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRlbmFibGVfY29tcHJlc3Npb24gPSBmYS1cdTAwM2VmbGFncyBcdTAwMjYgRlNfQ09NUFJfRkw7XG4rXHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcbitcdFx0XHRcdFx0XHQgQ09NUFJFU1NJT05fRk9STUFUX05PTkU7XG4rXG4rXHR0bGluayA9IGNpZnNfc2JfdGxpbmsoY2lmc19zYik7XG4rXHRpZiAoSVNfRVJSKHRsaW5rKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIodGxpbmspO1xuK1x0dGNvbiA9IHRsaW5rX3Rjb24odGxpbmspO1xuK1xuK1x0eGlkID0gZ2V0X3hpZCgpO1xuK1x0cmMgPSBjaWZzX3NldF9jb21wcmVzc2lvbih4aWQsIGRlbnRyeSwgdGNvbiwgTlVMTCwgY29tcHJlc3Npb25fc3RhdGUpO1xuK1x0ZnJlZV94aWQoeGlkKTtcbitcdGNpZnNfcHV0X3RsaW5rKHRsaW5rKTtcbitcbitcdGlmICghcmMpIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRcdGlmIChlbmFibGVfY29tcHJlc3Npb24pXG4rXHRcdFx0Q0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgfD0gRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcbitcdFx0ZWxzZVxuK1x0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIFx1MDAyNj0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHR9XG4rXG4rXHRjaWZzX2RiZyhGWUksIFwic2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXG5cIiwgcmMpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbiBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX2NvcHljaHVuayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzcmNmZClcbiB7XG5AQCAtNDY1LDE0ICs1MjgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRzdHJ1Y3QgY2lmc190Y29uICp0Y29uO1xuIFx0c3RydWN0IHRjb25fbGluayAqdGxpbms7XG4gXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiO1xuLVx0X191NjRcdEV4dEF0dHJCaXRzID0gMDtcbi1cdGJvb2wgZW5hYmxlX2NvbXByZXNzaW9uO1xuLVx0X191MTYgY29tcHJlc3Npb25fc3RhdGU7XG4tI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYXG4tI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxuLVx0X191NjQgICBjYXBzO1xuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi9cbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi9cbiBcbiBcdHhpZCA9IGdldF94aWQoKTtcbiBcbkBAIC00ODMsODAgKzUzOCw2IEBAIGxvbmcgY2lmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjb21tYW5kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0dHJhY2Vfc21iM19pb2N0bCh4aWQsIHBTTUJGaWxlLVx1MDAzZWZpZC5wZXJzaXN0ZW50X2ZpZCwgY29tbWFuZCk7XG4gXG4gXHRzd2l0Y2ggKGNvbW1hbmQpIHtcbi1cdFx0Y2FzZSBGU19JT0NfR0VURkxBR1M6XG4tXHRcdFx0aWYgKHBTTUJGaWxlID09IE5VTEwpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR0Y29uID0gdGxpbmtfdGNvbihwU01CRmlsZS1cdTAwM2V0bGluayk7XG4tI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYXG4tI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxuLVx0XHRcdGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLVx1MDAzZWZzVW5peEluZm8uQ2FwYWJpbGl0eSk7XG4tXHRcdFx0aWYgKENJRlNfVU5JWF9FWFRBVFRSX0NBUCBcdTAwMjYgY2Fwcykge1xuLVx0XHRcdFx0X191NjRcdEV4dEF0dHJNYXNrID0gMDtcbi1cdFx0XHRcdHJjID0gQ0lGU0dldEV4dEF0dHIoeGlkLCB0Y29uLFxuLVx0XHRcdFx0XHRcdCAgICBwU01CRmlsZS1cdTAwM2VmaWQubmV0ZmlkLFxuLVx0XHRcdFx0XHRcdCAgICBcdTAwMjZFeHRBdHRyQml0cywgXHUwMDI2RXh0QXR0ck1hc2spO1xuLVx0XHRcdFx0aWYgKHJjID09IDApXG4tXHRcdFx0XHRcdHJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgXHUwMDI2XG4tXHRcdFx0XHRcdFx0RlNfRkxfVVNFUl9WSVNJQkxFLFxuLVx0XHRcdFx0XHRcdChpbnQgX191c2VyICopYXJnKTtcbi1cdFx0XHRcdGlmIChyYyAhPSAtRU9QTk9UU1VQUClcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi9cbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi9cbi1cdFx0XHRpZiAoQ0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgXHUwMDI2IEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQpXG4tXHRcdFx0XHRFeHRBdHRyQml0cyB8PSBGU19DT01QUl9GTDtcbi1cbi1cdFx0XHRyYyA9IHB1dF91c2VyKEV4dEF0dHJCaXRzIFx1MDAyNiBGU19GTF9VU0VSX1ZJU0lCTEUsXG4tXHRcdFx0XHQgICAgICAoaW50IF9fdXNlciAqKWFyZyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgRlNfSU9DX1NFVEZMQUdTOlxuLVx0XHRcdGlmIChwU01CRmlsZSA9PSBOVUxMKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0dGNvbiA9IHRsaW5rX3Rjb24ocFNNQkZpbGUtXHUwMDNldGxpbmspO1xuLVx0XHRcdC8qIGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLVx1MDAzZWZzVW5peEluZm8uQ2FwYWJpbGl0eSk7ICovXG4tXG4tXHRcdFx0aWYgKGdldF91c2VyKEV4dEF0dHJCaXRzLCAoaW50IF9fdXNlciAqKWFyZykpIHtcbi1cdFx0XHRcdHJjID0gLUVGQVVMVDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGlmIChDSUZTX1VOSVhfRVhUQVRUUl9DQVAgXHUwMDI2IGNhcHMpXG4tXHRcdFx0ICpcdHJjID0gQ0lGU1NldEV4dEF0dHIoeGlkLCB0Y29uLFxuLVx0XHRcdCAqXHRcdCAgICAgICBwU01CRmlsZS1cdTAwM2VmaWQubmV0ZmlkLFxuLVx0XHRcdCAqXHRcdCAgICAgICBleHRBdHRyQml0cyxcbi1cdFx0XHQgKlx0XHQgICAgICAgXHUwMDI2RXh0QXR0ck1hc2spO1xuLVx0XHRcdCAqIGlmIChyYyAhPSAtRU9QTk9UU1VQUClcbi1cdFx0XHQgKlx0YnJlYWs7XG4tXHRcdFx0ICovXG4tXG4tXHRcdFx0LyogQ3VycmVudGx5IG9ubHkgZmxhZyB3ZSBjYW4gc2V0IG9yIGNsZWFyIGlzIGNvbXByZXNzZWQuICovXG4tXHRcdFx0aWYgKEV4dEF0dHJCaXRzIFx1MDAyNiB+RlNfQ09NUFJfRkwpIHtcbi1cdFx0XHRcdHJjID0gLUVPUE5PVFNVUFA7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXG4tXHRcdFx0ZW5hYmxlX2NvbXByZXNzaW9uID0gRXh0QXR0ckJpdHMgXHUwMDI2IEZTX0NPTVBSX0ZMO1xuLVx0XHRcdGNvbXByZXNzaW9uX3N0YXRlID0gZW5hYmxlX2NvbXByZXNzaW9uID9cbi1cdFx0XHRcdENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcbi1cdFx0XHRcdENPTVBSRVNTSU9OX0ZPUk1BVF9OT05FO1xuLVxuLVx0XHRcdHJjID0gY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24oeGlkLCBmaWxlcCwgdGNvbixcbi1cdFx0XHRcdFx0XHRwU01CRmlsZSxcbi1cdFx0XHRcdFx0XHRjb21wcmVzc2lvbl9zdGF0ZSk7XG4tXHRcdFx0aWYgKHJjID09IDApIHtcbi1cdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0XHRcdFx0aWYgKGVuYWJsZV9jb21wcmVzc2lvbilcbi1cdFx0XHRcdFx0Q0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgfD1cbi1cdFx0XHRcdFx0XHRGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyBcdTAwMjY9XG4tXHRcdFx0XHRcdFx0fkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4tXHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0XHRcdH1cbi1cdFx0XHRjaWZzX2RiZyhGWUksIFwic2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXG5cIiwgcmMpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIENJRlNfSU9DX0NPUFlDSFVOS19GSUxFOlxuIFx0XHRcdHJjID0gY2lmc19pb2N0bF9jb3B5Y2h1bmsoeGlkLCBmaWxlcCwgYXJnKTtcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ4OjQ0Ljk5MDU0Njc0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NzM1NDkwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDSUZTIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIENJRlMgcGF0Y2guIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGhvdyB3ZSBoYW5kbGUgYEZTX0lPQ19TRVRGTEFHU2AgYW5kIGBGU19JT0NfR0VURkxBR1NgIGZvciB0aGUgQ0lGUyBmaWxlc3lzdGVtLiAgSW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIHRoZSBgY2lmc19pb2N0bGAgcGF0aCwgd2hpY2ggaXMgd2hhdCB3ZSB1c2VkIHRvIGRvLCBpdCdzIG1pZ3JhdGluZyB0aGUgbG9naWMgdG8gYGNpZnNfZmlsZWF0dHJfc2V0YCBhbmQgYGNpZnNfZmlsZWF0dHJfZ2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFscmVhZHkgZXhpc3RlZCBmb3Igb3RoZXIgb3BlcmF0aW9ucywgYnV0IG5vdyBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHNwZWNpZmljYWxseSBiZWluZyBhZGRlZCwgYW5kIHdpdGggdGhpcyBwYXRjaCwgd2lsbCBiZSB1c2VkLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBjaWZzZnMuY2AsIGBjaWZzZnMuaGAsIGFuZCBgaW9jdGwuY2AuXG5cbkEga2V5IGNoYW5nZSBpcyB0aGF0IGBjaWZzX2ZpbGVhdHRyX3NldGAgaXMgYSAqbmV3KiBmdW5jdGlvbi4gIEl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIHNoaWZ0IOKAkyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGlvY3Rscywgd2UncmUgbm93IGxldmVyYWdpbmcgdGhlIFZGUyBgZmlsZWF0dHJfc2V0YCBpbm9kZSBvcGVyYXRpb24uICBJIHNlZSBpdCdzIGNhbGxpbmcgYGNpZnNfc2V0X2NvbXByZXNzaW9uYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBmdW5jdGlvbiB1c2VkIHRvIGJlIGNhbGxlZCBgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb25gLiAgQWgsIGFuZCBgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYSBgZGVudHJ5YCBpbnN0ZWFkIG9mIGBmaWxlcGAuICBUaGF0J3MgYSBnb29kIGNoYW5nZSwgbW9yZSBpbiBsaW5lIHdpdGggdGhlIFZGUyBkZXNpZ24uXG5cblNvLCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUsIHRoaXMgbWVhbnMgYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIHdpbGwgbm93IHJvdXRlIHRocm91Z2ggdGhlIFZGUyB0byB0aGlzIG5ldyBgZmlsZWF0dHJfc2V0YCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBpdCwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgcGF0Y2guICBUaGlzIGlzIGEgcHJldHR5IGNsZWFuIG1vdmUsIGNlbnRyYWxpemluZyBmaWxlIGF0dHJpYnV0ZSBjb250cm9sIHdpdGhpbiB0aGUgVkZTIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgbmV4dCB0aGluZyBJJ20gdGhpbmtpbmcgYWJvdXQ6IGlzIHRoaXMgZnV6emFibGU/ICBBbmQgb2YgY291cnNlLCBpdCBpcy4gU3l6a2FsbGVyIGhhcyBzb21lIENJRlMvU01CIHN1cHBvcnQgYWxyZWFkeSwgSSd2ZSBzZWVuIGl0IG1vdW50IGFuZCBkbyBvcGVyYXRpb25zLiAgSSBuZWVkIHRvIGNoZWNrLCB0aG91Z2gsIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gIGBDT05GSUdfQ0lGU2AgaXMgd2hhdCBJJ20gbG9va2luZyBmb3IgKG9yIGlzIGl0IGBDT05GSUdfU01CX0ZTYCB0aGVzZSBkYXlzPyBJJ2xsIGNoZWNrKS4gTGV0J3MgZG8gYSBzZWFyY2ggZm9yIGBjaWZzX2ZpbGVhdHRyX3NldGAgd2l0aGluIHRoZSBjb2RlYmFzZSwgYW5kIHNlZSB3aGVyZSBlbHNlIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ4OjUyLjY2NDA5ODA1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4MjM1ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNpZnNfZmlsZWF0dHJfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTI0MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNTgtXFx0LmZpbGVhdHRyX2dldCA9IGNpZnNfZmlsZWF0dHJfZ2V0LFxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTI1OTpcXHQuZmlsZWF0dHJfc2V0ID0gY2lmc19maWxlYXR0cl9zZXQsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjYwLX07XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyNjI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTI3MC1cXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMjcxOlxcdC5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCxcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNzItfTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmg9OTM9aW50IGNpZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjk0OmludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmgtOTUtXFx0XFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW9jdGwuYz0xNDk9c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lvY3RsLmMtMTg0LVxcbmZzL3NtYi9jbGllbnQvaW9jdGwuYzoxODU6aW50IGNpZnNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE4Ni1cXHRcXHQgICAgICBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ4OjU0LjM5MjMzOTEwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTkwMDU2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ0lGUyBLY29uZmlnIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBDSUZTIGNvbmZpZ3VyYXRpb24uIExldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZy4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgdXN1YWwgZ290Y2hhcy4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9kdWxhcml6YXRpb24uIElzIGl0IGJ1aWx0IGFzIGEgbW9kdWxlLCBvciBzdGF0aWNhbGx5IGxpbmtlZD8gV2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBkaWZmZXJlbnQgQ0lGUyB2ZXJzaW9ucywgdGhlIGRpYWxlY3RzLCBhbmQgdGhlIHNlY3VyaXR5IHByb3RvY29scz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgaW4gc3BlY2lmaWMgZW52aXJvbm1lbnRzPyBGb3IgaW5zdGFuY2UsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IHJlY2VudCBrZXJuZWwgdXBkYXRlcyBoYXZlIGFsdGVyZWQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YsIHNheSwgU01CIHNpZ25pbmcgb3IgZW5jcnlwdGlvbiwgYW5kIGlmIHNvLCBob3cgdGhvc2UgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBWRlMgYW5kIG5ldHdvcmsgc3RhY2s/IExldCdzIHZlcmlmeSB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIG5ldHdvcmtpbmcgc3VwcG9ydCBhbmQgY3J5cHRvIGxpYnJhcmllcyBhcmUgY29ycmVjdGx5IGRlY2xhcmVkLiBUaGlzIEtjb25maWcgY2FuIGJlIGEgbGFieXJpbnRoLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgcG90ZW50aWFsIHNlY3VyaXR5LXJlbGF0ZWQgZmxhZ3MsIG1ha2luZyBzdXJlIHRoYXQgaXQncyBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGVkIHNlY3VyaXR5IHBvc3R1cmUgZm9yIHRoaXMgc3lzdGVtLiBUaGVuIEkgd2lsbCBjb21wYXJlIHRoZSBidWlsZCB3aXRoIHdoYXQgSSBleHBlY3QuIEFueSByZWQgZmxhZ3MgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMjo0ODo1OC4xMTEzNDcyNjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2ODUzNzg1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0lGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDI6NDg6NTkuNzc5ODkwMzg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NTMxNjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENJRlMgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgQ0lGU2AuIFJpZ2h0LCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L2NpZnNmcy5jYCBhbmQgYGZzL3NtYi9jbGllbnQvaW9jdGwuY2AuIE15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBgY2lmc19maWxlYXR0cl9zZXRgLCBgY2lmc19zZXRfY29tcHJlc3Npb25gLCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDSUZTYCBpcyBlbmFibGVkLiBJdCdzIHVzZWQgaW4gYm90aCBgaW9jdGwuY2AgYW5kIGBjaWZzZnMuY2AsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9zbWIvY2xpZW50L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ5OjAzLjYzNTIwODU2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxNzYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2N0bC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC9NYWtlZmlsZT04PWNpZnMteSA6PSB0cmFjZS5vIGNpZnNmcy5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIFxcXFxcXG4tLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTAtXFx0ICBjYWNoZWRfZGlyLm8gY2lmc191bmljb2RlLm8gY2lmc2VuY3J5cHQubyBcXFxcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZToxMTpcXHQgIHJlYWRkaXIubyBpb2N0bC5vIHNlc3MubyBleHBvcnQubyB1bmMubyB3aW51Y2FzZS5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTEyLVxcdCAgc21iMm9wcy5vIHNtYjJtYXBlcnJvci5vIHNtYjJ0cmFuc3BvcnQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ5OjAzLjY4MTIyODE5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDYwOTAxNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBDSUZTIEZpbGUgQXR0cmlidXRlIENvbXByZXNzaW9uIEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGR1ZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0lGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZpbGUgYXR0cmlidXRlIGhhbmRsaW5nIGFuZCBjb21wcmVzc2lvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlvY3RsLm9gIGlzIGluZGVlZCBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGNpZnNfZmlsZWF0dHJfc2V0YCB0byBtYW5hZ2UgdGhlIHNldHRpbmcgb2YgdGhlIGNvbXByZXNzaW9uIGZsYWcuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIG9uIENJRlMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcmVwcmVzZW50cyBhIGRpcmVjdCBjaGFuZ2UgdG8gaG93IGZpbGUgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGNvbXByZXNzaW9uLCBhcmUgc2V0IHdpdGhpbiB0aGUgQ0lGUyBzeXN0ZW0sIEknZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgSSd2ZSBpZGVudGlmaWVkIGFzIGJlaW5nIHJlbGV2YW50IGFyZTpcblxuKiAgIGBjaWZzX2ZpbGVhdHRyX3NldGAgKFRoaXMgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQpLlxuKiAgIGBjaWZzX2ZpbGVhdHRyX2dldGAgKE1pbm9yIGNoYW5nZXMpXG4qICAgYGNpZnNfc2V0X2NvbXByZXNzaW9uYCAoU3RhdGljLCBidXQgcG90ZW50aWFsbHkgcmVsZXZhbnQpXG4qICAgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIChTdGF0aWMsIGJ1dCBwb3RlbnRpYWxseSByZWxldmFudClcblxuVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gaXMgYENJRlNgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDSUZTYCBpcyB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbiBmb3IgZW5hYmxpbmcgQ0lGUyBhbmQgU01CMyBzdXBwb3J0LiBUaGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLlxuXG5Jbml0aWFsbHksIEkgbm90ZWQgc29tZSByZW1vdmVkIGNvZGUgZnJvbSBgY2lmc19pb2N0bGAgcmVsYXRlZCB0byBgQ09ORklHX0NJRlNfUE9TSVhgIGFuZCBgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZYCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGBGU19JT0NfR0VURkxBR1NgIGFuZCBgRlNfSU9DX1NFVEZMQUdTYC4gQnV0LCB0aG9zZSBhcmUgaGFuZGxlZCBub3cgYnkgYGNpZnNfZmlsZWF0dHJfZ2V0YCBhbmQgYGNpZnNfZmlsZWF0dHJfc2V0YCwgc28gdGhleSBhcmVuJ3QgcmVsZXZhbnQgdG8gbXkgZnV6emluZyBzY29wZS5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIGBjaWZzX2ZpbGVhdHRyX3NldGAgYW5kIGBjaWZzX2ZpbGVhdHRyX2dldGAsIGFzIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gYGNpZnNfc2V0X2NvbXByZXNzaW9uYCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIGFyZSBzdGF0aWMsIGFuZCBhbHRob3VnaCBsYXJnZSwgYW5kIHRodXMgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZCwgdGhlIGluc3RydWN0aW9ucyBpbmRpY2F0ZSB0aGF0IGl0J3MgcHJlZmVyYWJsZSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNvLCBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHRoZSBwcmltYXJ5IHRhcmdldCwgYnV0IEknbGwgYWxzbyBpbmNsdWRlIGBjaWZzX2ZpbGVhdHRyX2dldGAsIGFzIGl0J3MgYmVlbiBtb2RpZmllZCwgYW5kIG1pZ2h0IHJldmVhbCBpbnRlcmVzdGluZyBjb2RlIHBhdGhzLlxuXG5UbyByZWl0ZXJhdGUsIHRoaXMgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGBGU19JT0NfU0VURkxBR1NgIGZyb20gYGNpZnNfaW9jdGxgIHRvIGBjaWZzX2ZpbGVhdHRyX3NldGAuIFRoaXMgc2hpZnQgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODExLCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDI6NDk6MTYuNzQyMTMyNzkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzMjc5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaWZzX2ZpbGVhdHRyX3NldFwiLFxuICAgIFwiY2lmc19maWxlYXR0cl9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaWZzX2ZpbGVhdHRyX3NldFwiLFxuICAgIFwiY2lmc19maWxlYXR0cl9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5vwl6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 02:08:41 +0000 UTC FinishedAt: 2026-08-05 02:49:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS" ], "series_id": "d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "cifs_fileattr_set", "cifs_fileattr_get" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDI6NDg6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuYyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmNcbmluZGV4IDY2YjkxMDRlN2NhMjAuLjYwM2IxNzdmMWIwOTUgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXG5AQCAtMTE5NCw4ICYjNDM7MTE5NCw4IEBAIGludCBjaWZzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSlcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHR1MzIgYXR0cnM7XG4gXG4tXHQvKiBQcmVzZXJ2ZSBGU19DT01QUl9GTCBwcmV2aW91c2x5IHJlcG9ydGVkIGJ5IGNpZnNfaW9jdGwoKS4gKi9cbi1cdGlmIChDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyBcdTAwMjYgQVRUUl9DT01QUkVTU0VEKVxuJiM0MztcdC8qIFJlcG9ydCB0aGUgY2FjaGVkIFNNQiBjb21wcmVzc2VkIGF0dHJpYnV0ZSBhcyBGU19DT01QUl9GTC4gKi9cbiYjNDM7XHRpZiAoUkVBRF9PTkNFKENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzKSBcdTAwMjYgQVRUUl9DT01QUkVTU0VEKVxuIFx0XHRmYS1cdTAwM2VmbGFncyB8PSBGU19DT01QUl9GTDtcbiBcbiBcdC8qXG5AQCAtMTI1Niw2ICYjNDM7MTI1Niw3IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHtcbiBcdC5nZXRfYWNsID0gY2lmc19nZXRfYWNsLFxuIFx0LnNldF9hY2wgPSBjaWZzX3NldF9hY2wsXG4gXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG4mIzQzO1x0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbkBAIC0xMjY3LDYgJiM0MzsxMjY4LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbiBcdC5nZXRfYWNsID0gY2lmc19nZXRfYWNsLFxuIFx0LnNldF9hY2wgPSBjaWZzX3NldF9hY2wsXG4gXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG4mIzQzO1x0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxuIH07XG4gXG4gY29uc3QgY2hhciAqY2lmc19nZXRfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcbmluZGV4IDg1NGU2NzJhNGUzN2EuLjEwZGNmNTEzNzhkMzEgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5oXG5AQCAtOTEsNiAmIzQzOzkxLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfbmFtZXNwYWNlX2lub2RlX29wZXJhdGlvbnM7XG4gXG4gc3RydWN0IGZpbGVfa2F0dHI7XG4gaW50IGNpZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiYjNDM7aW50IGNpZnNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHQgICAgICBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIFxuIFxuIC8qIEZ1bmN0aW9ucyByZWxhdGVkIHRvIGZpbGVzIGFuZCBkaXJlY3RvcmllcyAqL1xuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvaW9jdGwuYyBiL2ZzL3NtYi9jbGllbnQvaW9jdGwuY1xuaW5kZXggOWZhNzQzYmUzNjUyYS4uMTI3OWUyMTVlY2QyMCAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvaW9jdGwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9pb2N0bC5jXG5AQCAtMTAsNiAmIzQzOzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGVhdHRyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuQEAgLTY3LDExICYjNDM7NjgsMTEgQEAgc3RhdGljIGxvbmcgY2lmc19pb2N0bF9xdWVyeV9pbmZvKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiYjNDM7c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbiBcdFx0XHRcdFx0X191MTYgY29tcHJlc3Npb25fc3RhdGUpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiBcdHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciA9IHRjb24tXHUwMDNlc2VzLVx1MDAzZXNlcnZlcjtcbiBcdHN0cnVjdCBjaWZzX29wZW5fcGFybXMgb3Bhcm1zO1xuQEAgLTkyLDExICYjNDM7OTMsMTEgQEAgc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdCAgICBjaWZzX3NiLVx1MDAzZW1udF9jaWZzX3NlcnZlcmlub19hdXRvZGlzYWJsZWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChkX3VuaGFzaGVkKGZpbGVwLVx1MDAzZWZfcGF0aC5kZW50cnkpKVxuJiM0MztcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldHVybiAtRVNUQUxFO1xuIFxuIFx0cGFnZSA9IGFsbG9jX2RlbnRyeV9wYXRoKCk7XG4tXHRmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGVwLVx1MDAzZWZfcGF0aC5kZW50cnksIHBhZ2UpO1xuJiM0MztcdGZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5LCBwYWdlKTtcbiBcdGlmIChJU19FUlIoZnVsbF9wYXRoKSkge1xuIFx0XHRmcmVlX2RlbnRyeV9wYXRoKHBhZ2UpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihmdWxsX3BhdGgpO1xuQEAgLTEyMyw2ICYjNDM7MTI0LDEwIEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRcdGdvdG8gY2xvc2U7XG4gXG4gXHR1bmlxdWVpZCA9IGxlNjRfdG9fY3B1KGRhdGEuZmkuSW5kZXhOdW1iZXIpO1xuJiM0MztcdGlmICghdW5pcXVlaWQpIHtcbiYjNDM7XHRcdHJjID0gLUVPUE5PVFNVUFA7XG4mIzQzO1x0XHRnb3RvIGNsb3NlO1xuJiM0MztcdH1cbiBcdGlmICh1bmlxdWVpZCAhPSBDSUZTX0koaW5vZGUpLVx1MDAzZXVuaXF1ZWlkKSB7XG4gXHRcdHJjID0gLUVTVEFMRTtcbiBcdFx0Z290byBjbG9zZTtcbkBAIC0xNDEsMTQgJiM0MzsxNDYsMTQgQEAgc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdHJldHVybiByYztcbiB9XG4gXG4tc3RhdGljIGludCBjaWZzX2lvY3RsX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLFxuLVx0XHRcdFx0ICAgICAgc3RydWN0IGNpZnNGaWxlSW5mbyAqY2ZpbGUsXG4tXHRcdFx0XHQgICAgICBfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcbiYjNDM7c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4mIzQzO1x0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSxcbiYjNDM7XHRcdFx0XHRfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgY2lmc0ZpbGVJbmZvICp3ZmlsZTtcbiBcdHN0cnVjdCBjaWZzX3Rjb24gKnd0Y29uO1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHRpbnQgcmM7XG4gXG4gXHRpZiAoIXRjb24tXHUwMDNlc2VzLVx1MDAzZXNlcnZlci1cdTAwM2VvcHMtXHUwMDNlc2V0X2NvbXByZXNzaW9uKVxuQEAgLTE3MywxMCAmIzQzOzE3OCw2OCBAQCBzdGF0aWMgaW50IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbiBcdFx0cmV0dXJuIHJjO1xuIFx0fVxuIFxuLVx0cmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBmaWxlcCwgdGNvbixcbiYjNDM7XHRyZXR1cm4gY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh4aWQsIGRlbnRyeSwgdGNvbixcbiBcdFx0XHRcdFx0ICAgIGNvbXByZXNzaW9uX3N0YXRlKTtcbiB9XG4gXG4mIzQzO2ludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuJiM0MztcdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiYjNDM7XHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiID0gQ0lGU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgZmlsZV9rYXR0ciBjdXJyZW50X2ZhID0ge307XG4mIzQzO1x0c3RydWN0IHRjb25fbGluayAqdGxpbms7XG4mIzQzO1x0c3RydWN0IGNpZnNfdGNvbiAqdGNvbjtcbiYjNDM7XHRfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZTtcbiYjNDM7XHRib29sIGVuYWJsZV9jb21wcmVzc2lvbjtcbiYjNDM7XHR1MzIgYWxsb3dlZCA9IEZTX0NPTVBSX0ZMO1xuJiM0MztcdHVuc2lnbmVkIGludCB4aWQ7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZhLVx1MDAzZWZsYWdzX3ZhbGlkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNoYXR0ciB3cml0ZXMgYmFjayBhbGwgZmxhZ3MgcmV0dXJuZWQgYnkgZmlsZWF0dHJfZ2V0KCkuIEFjY2VwdFxuJiM0MztcdCAqIEZTX0NBU0VGT0xEX0ZMIG9ubHkgd2hlbiBpdCByZWZsZWN0cyB0aGUgc2hhcmUmIzM5O3MgY2FzZWZvbGQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZhLVx1MDAzZWZsYWdzIFx1MDAyNiBGU19DQVNFRk9MRF9GTCkge1xuJiM0MztcdFx0cmMgPSBjaWZzX2ZpbGVhdHRyX2dldChkZW50cnksIFx1MDAyNmN1cnJlbnRfZmEpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHRpZiAoY3VycmVudF9mYS5mbGFncyBcdTAwMjYgRlNfQ0FTRUZPTERfRkwpXG4mIzQzO1x0XHRcdGFsbG93ZWQgfD0gRlNfQ0FTRUZPTERfRkw7XG4mIzQzO1x0fVxuJiM0MztcdGlmIChmYS1cdTAwM2VmbGFncyBcdTAwMjYgfmFsbG93ZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGVuYWJsZV9jb21wcmVzc2lvbiA9IGZhLVx1MDAzZWZsYWdzIFx1MDAyNiBGU19DT01QUl9GTDtcbiYjNDM7XHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcbiYjNDM7XHRcdFx0XHRcdFx0IENPTVBSRVNTSU9OX0ZPUk1BVF9OT05FO1xuJiM0MztcbiYjNDM7XHR0bGluayA9IGNpZnNfc2JfdGxpbmsoY2lmc19zYik7XG4mIzQzO1x0aWYgKElTX0VSUih0bGluaykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUih0bGluayk7XG4mIzQzO1x0dGNvbiA9IHRsaW5rX3Rjb24odGxpbmspO1xuJiM0MztcbiYjNDM7XHR4aWQgPSBnZXRfeGlkKCk7XG4mIzQzO1x0cmMgPSBjaWZzX3NldF9jb21wcmVzc2lvbih4aWQsIGRlbnRyeSwgdGNvbiwgTlVMTCwgY29tcHJlc3Npb25fc3RhdGUpO1xuJiM0MztcdGZyZWVfeGlkKHhpZCk7XG4mIzQzO1x0Y2lmc19wdXRfdGxpbmsodGxpbmspO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJjKSB7XG4mIzQzO1x0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRcdGlmIChlbmFibGVfY29tcHJlc3Npb24pXG4mIzQzO1x0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIHw9IEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIFx1MDAyNj0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4mIzQzO1x0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y2lmc19kYmcoRllJLCBcJiMzNDtzZXQgY29tcHJlc3MgZmxhZyByYyAlZFxcblwmIzM0OywgcmMpO1xuJiM0MztcdHJldHVybiByYztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX2NvcHljaHVuayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzcmNmZClcbiB7XG5AQCAtNDY1LDE0ICYjNDM7NTI4LDYgQEAgbG9uZyBjaWZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbjtcbiBcdHN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rO1xuIFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjtcbi1cdF9fdTY0XHRFeHRBdHRyQml0cyA9IDA7XG4tXHRib29sIGVuYWJsZV9jb21wcmVzc2lvbjtcbi1cdF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlO1xuLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWFxuLSNpZmRlZiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbi1cdF9fdTY0ICAgY2Fwcztcbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXG4tI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovXG4gXG4gXHR4aWQgPSBnZXRfeGlkKCk7XG4gXG5AQCAtNDgzLDgwICYjNDM7NTM4LDYgQEAgbG9uZyBjaWZzX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlcCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHR0cmFjZV9zbWIzX2lvY3RsKHhpZCwgcFNNQkZpbGUtXHUwMDNlZmlkLnBlcnNpc3RlbnRfZmlkLCBjb21tYW5kKTtcbiBcbiBcdHN3aXRjaCAoY29tbWFuZCkge1xuLVx0XHRjYXNlIEZTX0lPQ19HRVRGTEFHUzpcbi1cdFx0XHRpZiAocFNNQkZpbGUgPT0gTlVMTClcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdHRjb24gPSB0bGlua190Y29uKHBTTUJGaWxlLVx1MDAzZXRsaW5rKTtcbi0jaWZkZWYgQ09ORklHX0NJRlNfUE9TSVhcbi0jaWZkZWYgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXG4tXHRcdFx0Y2FwcyA9IGxlNjRfdG9fY3B1KHRjb24tXHUwMDNlZnNVbml4SW5mby5DYXBhYmlsaXR5KTtcbi1cdFx0XHRpZiAoQ0lGU19VTklYX0VYVEFUVFJfQ0FQIFx1MDAyNiBjYXBzKSB7XG4tXHRcdFx0XHRfX3U2NFx0RXh0QXR0ck1hc2sgPSAwO1xuLVx0XHRcdFx0cmMgPSBDSUZTR2V0RXh0QXR0cih4aWQsIHRjb24sXG4tXHRcdFx0XHRcdFx0ICAgIHBTTUJGaWxlLVx1MDAzZWZpZC5uZXRmaWQsXG4tXHRcdFx0XHRcdFx0ICAgIFx1MDAyNkV4dEF0dHJCaXRzLCBcdTAwMjZFeHRBdHRyTWFzayk7XG4tXHRcdFx0XHRpZiAocmMgPT0gMClcbi1cdFx0XHRcdFx0cmMgPSBwdXRfdXNlcihFeHRBdHRyQml0cyBcdTAwMjZcbi1cdFx0XHRcdFx0XHRGU19GTF9VU0VSX1ZJU0lCTEUsXG4tXHRcdFx0XHRcdFx0KGludCBfX3VzZXIgKilhcmcpO1xuLVx0XHRcdFx0aWYgKHJjICE9IC1FT1BOT1RTVVBQKVxuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tI2VuZGlmIC8qIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWSAqL1xuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqL1xuLVx0XHRcdGlmIChDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyBcdTAwMjYgRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRClcbi1cdFx0XHRcdEV4dEF0dHJCaXRzIHw9IEZTX0NPTVBSX0ZMO1xuLVxuLVx0XHRcdHJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgXHUwMDI2IEZTX0ZMX1VTRVJfVklTSUJMRSxcbi1cdFx0XHRcdCAgICAgIChpbnQgX191c2VyICopYXJnKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0Y2FzZSBGU19JT0NfU0VURkxBR1M6XG4tXHRcdFx0aWYgKHBTTUJGaWxlID09IE5VTEwpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR0Y29uID0gdGxpbmtfdGNvbihwU01CRmlsZS1cdTAwM2V0bGluayk7XG4tXHRcdFx0LyogY2FwcyA9IGxlNjRfdG9fY3B1KHRjb24tXHUwMDNlZnNVbml4SW5mby5DYXBhYmlsaXR5KTsgKi9cbi1cbi1cdFx0XHRpZiAoZ2V0X3VzZXIoRXh0QXR0ckJpdHMsIChpbnQgX191c2VyICopYXJnKSkge1xuLVx0XHRcdFx0cmMgPSAtRUZBVUxUO1xuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogaWYgKENJRlNfVU5JWF9FWFRBVFRSX0NBUCBcdTAwMjYgY2Fwcylcbi1cdFx0XHQgKlx0cmMgPSBDSUZTU2V0RXh0QXR0cih4aWQsIHRjb24sXG4tXHRcdFx0ICpcdFx0ICAgICAgIHBTTUJGaWxlLVx1MDAzZWZpZC5uZXRmaWQsXG4tXHRcdFx0ICpcdFx0ICAgICAgIGV4dEF0dHJCaXRzLFxuLVx0XHRcdCAqXHRcdCAgICAgICBcdTAwMjZFeHRBdHRyTWFzayk7XG4tXHRcdFx0ICogaWYgKHJjICE9IC1FT1BOT1RTVVBQKVxuLVx0XHRcdCAqXHRicmVhaztcbi1cdFx0XHQgKi9cbi1cbi1cdFx0XHQvKiBDdXJyZW50bHkgb25seSBmbGFnIHdlIGNhbiBzZXQgb3IgY2xlYXIgaXMgY29tcHJlc3NlZC4gKi9cbi1cdFx0XHRpZiAoRXh0QXR0ckJpdHMgXHUwMDI2IH5GU19DT01QUl9GTCkge1xuLVx0XHRcdFx0cmMgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRlbmFibGVfY29tcHJlc3Npb24gPSBFeHRBdHRyQml0cyBcdTAwMjYgRlNfQ09NUFJfRkw7XG4tXHRcdFx0Y29tcHJlc3Npb25fc3RhdGUgPSBlbmFibGVfY29tcHJlc3Npb24gP1xuLVx0XHRcdFx0Q09NUFJFU1NJT05fRk9STUFUX0RFRkFVTFQgOlxuLVx0XHRcdFx0Q09NUFJFU1NJT05fRk9STUFUX05PTkU7XG4tXG4tXHRcdFx0cmMgPSBjaWZzX2lvY3RsX3NldF9jb21wcmVzc2lvbih4aWQsIGZpbGVwLCB0Y29uLFxuLVx0XHRcdFx0XHRcdHBTTUJGaWxlLFxuLVx0XHRcdFx0XHRcdGNvbXByZXNzaW9uX3N0YXRlKTtcbi1cdFx0XHRpZiAocmMgPT0gMCkge1xuLVx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRcdFx0XHRpZiAoZW5hYmxlX2NvbXByZXNzaW9uKVxuLVx0XHRcdFx0XHRDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyB8PVxuLVx0XHRcdFx0XHRcdEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4tXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIFx1MDAyNj1cbi1cdFx0XHRcdFx0XHR+RklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRcdFx0fVxuLVx0XHRcdGNpZnNfZGJnKEZZSSwgXCYjMzQ7c2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXG5cJiMzNDssIHJjKTtcbi1cdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBDSUZTX0lPQ19DT1BZQ0hVTktfRklMRTpcbiBcdFx0XHRyYyA9IGNpZnNfaW9jdGxfY29weWNodW5rKHhpZCwgZmlsZXAsIGFyZyk7XG4gXHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDI6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX3NldCYjMzQ7LAogICAgJiMzNDtjaWZzX2ZpbGVhdHRyX2dldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDUgMDI6NDg6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuYwppbmRleCA2NmI5MTA0ZTdjYTIwLi42MDNiMTc3ZjFiMDk1IDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmMKQEAgLTExOTQsOCAmIzQzOzExOTQsOCBAQCBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpCiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTsKIAl1MzIgYXR0cnM7CiAKLQkvKiBQcmVzZXJ2ZSBGU19DT01QUl9GTCBwcmV2aW91c2x5IHJlcG9ydGVkIGJ5IGNpZnNfaW9jdGwoKS4gKi8KLQlpZiAoQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzICZhbXA7IEFUVFJfQ09NUFJFU1NFRCkKJiM0MzsJLyogUmVwb3J0IHRoZSBjYWNoZWQgU01CIGNvbXByZXNzZWQgYXR0cmlidXRlIGFzIEZTX0NPTVBSX0ZMLiAqLwomIzQzOwlpZiAoUkVBRF9PTkNFKENJRlNfSShpbm9kZSktJmd0O2NpZnNBdHRycykgJmFtcDsgQVRUUl9DT01QUkVTU0VEKQogCQlmYS0mZ3Q7ZmxhZ3MgfD0gRlNfQ09NUFJfRkw7CiAKIAkvKgpAQCAtMTI1Niw2ICYjNDM7MTI1Niw3IEBAIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHsKIAkuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCwKIAkuc2V0X2FjbCA9IGNpZnNfc2V0X2FjbCwKIAkuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsCiYjNDM7CS5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCwKIH07CiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9pbm9kZV9vcHMgPSB7CkBAIC0xMjY3LDYgJiM0MzsxMjY4LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHsKIAkuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCwKIAkuc2V0X2FjbCA9IGNpZnNfc2V0X2FjbCwKIAkuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsCiYjNDM7CS5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCwKIH07CiAKIGNvbnN0IGNoYXIgKmNpZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLApkaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaCBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmgKaW5kZXggODU0ZTY3MmE0ZTM3YS4uMTBkY2Y1MTM3OGQzMSAxMDA2NDQKLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5oCkBAIC05MSw2ICYjNDM7OTEsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19uYW1lc3BhY2VfaW5vZGVfb3BlcmF0aW9uczsKIAogc3RydWN0IGZpbGVfa2F0dHI7CiBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwomIzQzO2ludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKIAogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi8KZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvaW9jdGwuYyBiL2ZzL3NtYi9jbGllbnQvaW9jdGwuYwppbmRleCA5ZmE3NDNiZTM2NTJhLi4xMjc5ZTIxNWVjZDIwIDEwMDY0NAotLS0gYS9mcy9zbWIvY2xpZW50L2lvY3RsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc21iL2NsaWVudC9pb2N0bC5jCkBAIC0xMCw2ICYjNDM7MTAsNyBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW91bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKQEAgLTY3LDExICYjNDM7NjgsMTEgQEAgc3RhdGljIGxvbmcgY2lmc19pb2N0bF9xdWVyeV9pbmZvKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCwKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiYjNDM7c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQkJc3RydWN0IGNpZnNfdGNvbiAqdGNvbiwKIAkJCQkJX191MTYgY29tcHJlc3Npb25fc3RhdGUpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLSZndDtpX3NiKTsKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSB0Y29uLSZndDtzZXMtJmd0O3NlcnZlcjsKIAlzdHJ1Y3QgY2lmc19vcGVuX3Bhcm1zIG9wYXJtczsKQEAgLTkyLDExICYjNDM7OTMsMTEgQEAgc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkgICAgY2lmc19zYi0mZ3Q7bW50X2NpZnNfc2VydmVyaW5vX2F1dG9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JaWYgKGRfdW5oYXNoZWQoZmlsZXAtJmd0O2ZfcGF0aC5kZW50cnkpKQomIzQzOwlpZiAoZF91bmhhc2hlZChkZW50cnkpKQogCQlyZXR1cm4gLUVTVEFMRTsKIAogCXBhZ2UgPSBhbGxvY19kZW50cnlfcGF0aCgpOwotCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZXAtJmd0O2ZfcGF0aC5kZW50cnksIHBhZ2UpOwomIzQzOwlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRlbnRyeSwgcGFnZSk7CiAJaWYgKElTX0VSUihmdWxsX3BhdGgpKSB7CiAJCWZyZWVfZGVudHJ5X3BhdGgocGFnZSk7CiAJCXJldHVybiBQVFJfRVJSKGZ1bGxfcGF0aCk7CkBAIC0xMjMsNiAmIzQzOzEyNCwxMCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLAogCQlnb3RvIGNsb3NlOwogCiAJdW5pcXVlaWQgPSBsZTY0X3RvX2NwdShkYXRhLmZpLkluZGV4TnVtYmVyKTsKJiM0MzsJaWYgKCF1bmlxdWVpZCkgewomIzQzOwkJcmMgPSAtRU9QTk9UU1VQUDsKJiM0MzsJCWdvdG8gY2xvc2U7CiYjNDM7CX0KIAlpZiAodW5pcXVlaWQgIT0gQ0lGU19JKGlub2RlKS0mZ3Q7dW5pcXVlaWQpIHsKIAkJcmMgPSAtRVNUQUxFOwogCQlnb3RvIGNsb3NlOwpAQCAtMTQxLDE0ICYjNDM7MTQ2LDE0IEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBzdHJ1Y3QgY2lmc190Y29uICp0Y29uLAotCQkJCSAgICAgIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLAotCQkJCSAgICAgIF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlKQomIzQzO3N0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAomIzQzOwkJCQlzdHJ1Y3QgY2lmc190Y29uICp0Y29uLAomIzQzOwkJCQlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSwKJiM0MzsJCQkJX191MTYgY29tcHJlc3Npb25fc3RhdGUpCiB7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqd2ZpbGU7CiAJc3RydWN0IGNpZnNfdGNvbiAqd3Rjb247Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApOwomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpOwogCWludCByYzsKIAogCWlmICghdGNvbi0mZ3Q7c2VzLSZndDtzZXJ2ZXItJmd0O29wcy0mZ3Q7c2V0X2NvbXByZXNzaW9uKQpAQCAtMTczLDEwICYjNDM7MTc4LDY4IEBAIHN0YXRpYyBpbnQgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLAogCQlyZXR1cm4gcmM7CiAJfQogCi0JcmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBmaWxlcCwgdGNvbiwKJiM0MzsJcmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBkZW50cnksIHRjb24sCiAJCQkJCSAgICBjb21wcmVzc2lvbl9zdGF0ZSk7CiB9CiAKJiM0MztpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKJiM0MzsJCSAgICAgIHN0cnVjdCBmaWxlX2thdHRyICpmYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7CiYjNDM7CXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJc3RydWN0IGZpbGVfa2F0dHIgY3VycmVudF9mYSA9IHt9OwomIzQzOwlzdHJ1Y3QgdGNvbl9saW5rICp0bGluazsKJiM0MzsJc3RydWN0IGNpZnNfdGNvbiAqdGNvbjsKJiM0MzsJX191MTYgY29tcHJlc3Npb25fc3RhdGU7CiYjNDM7CWJvb2wgZW5hYmxlX2NvbXByZXNzaW9uOwomIzQzOwl1MzIgYWxsb3dlZCA9IEZTX0NPTVBSX0ZMOwomIzQzOwl1bnNpZ25lZCBpbnQgeGlkOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CWlmICghZmEtJmd0O2ZsYWdzX3ZhbGlkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBjaGF0dHIgd3JpdGVzIGJhY2sgYWxsIGZsYWdzIHJldHVybmVkIGJ5IGZpbGVhdHRyX2dldCgpLiBBY2NlcHQKJiM0MzsJICogRlNfQ0FTRUZPTERfRkwgb25seSB3aGVuIGl0IHJlZmxlY3RzIHRoZSBzaGFyZSYjMzk7cyBjYXNlZm9sZCBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CWlmIChmYS0mZ3Q7ZmxhZ3MgJmFtcDsgRlNfQ0FTRUZPTERfRkwpIHsKJiM0MzsJCXJjID0gY2lmc19maWxlYXR0cl9nZXQoZGVudHJ5LCAmYW1wO2N1cnJlbnRfZmEpOwomIzQzOwkJaWYgKHJjKQomIzQzOwkJCXJldHVybiByYzsKJiM0MzsJCWlmIChjdXJyZW50X2ZhLmZsYWdzICZhbXA7IEZTX0NBU0VGT0xEX0ZMKQomIzQzOwkJCWFsbG93ZWQgfD0gRlNfQ0FTRUZPTERfRkw7CiYjNDM7CX0KJiM0MzsJaWYgKGZhLSZndDtmbGFncyAmYW1wOyB+YWxsb3dlZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZW5hYmxlX2NvbXByZXNzaW9uID0gZmEtJmd0O2ZsYWdzICZhbXA7IEZTX0NPTVBSX0ZMOwomIzQzOwljb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDoKJiM0MzsJCQkJCQkgQ09NUFJFU1NJT05fRk9STUFUX05PTkU7CiYjNDM7CiYjNDM7CXRsaW5rID0gY2lmc19zYl90bGluayhjaWZzX3NiKTsKJiM0MzsJaWYgKElTX0VSUih0bGluaykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0bGluayk7CiYjNDM7CXRjb24gPSB0bGlua190Y29uKHRsaW5rKTsKJiM0MzsKJiM0MzsJeGlkID0gZ2V0X3hpZCgpOwomIzQzOwlyYyA9IGNpZnNfc2V0X2NvbXByZXNzaW9uKHhpZCwgZGVudHJ5LCB0Y29uLCBOVUxMLCBjb21wcmVzc2lvbl9zdGF0ZSk7CiYjNDM7CWZyZWVfeGlkKHhpZCk7CiYjNDM7CWNpZnNfcHV0X3RsaW5rKHRsaW5rKTsKJiM0MzsKJiM0MzsJaWYgKCFyYykgewomIzQzOwkJc3Bpbl9sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQlpZiAoZW5hYmxlX2NvbXByZXNzaW9uKQomIzQzOwkJCUNJRlNfSShpbm9kZSktJmd0O2NpZnNBdHRycyB8PSBGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEOwomIzQzOwkJZWxzZQomIzQzOwkJCUNJRlNfSShpbm9kZSktJmd0O2NpZnNBdHRycyAmYW1wOz0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7CiYjNDM7CQlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwl9CiYjNDM7CiYjNDM7CWNpZnNfZGJnKEZZSSwgJiMzNDtzZXQgY29tcHJlc3MgZmxhZyByYyAlZFxuJiMzNDssIHJjKTsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKIHN0YXRpYyBsb25nIGNpZnNfaW9jdGxfY29weWNodW5rKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpkc3RfZmlsZSwKIAkJCXVuc2lnbmVkIGxvbmcgc3JjZmQpCiB7CkBAIC00NjUsMTQgJiM0Mzs1MjgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJc3RydWN0IGNpZnNfdGNvbiAqdGNvbjsKIAlzdHJ1Y3QgdGNvbl9saW5rICp0bGluazsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwotCV9fdTY0CUV4dEF0dHJCaXRzID0gMDsKLQlib29sIGVuYWJsZV9jb21wcmVzc2lvbjsKLQlfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZTsKLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAotI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWQotCV9fdTY0ICAgY2FwczsKLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi8KLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqLwogCiAJeGlkID0gZ2V0X3hpZCgpOwogCkBAIC00ODMsODAgJiM0Mzs1MzgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJCXRyYWNlX3NtYjNfaW9jdGwoeGlkLCBwU01CRmlsZS0mZ3Q7ZmlkLnBlcnNpc3RlbnRfZmlkLCBjb21tYW5kKTsKIAogCXN3aXRjaCAoY29tbWFuZCkgewotCQljYXNlIEZTX0lPQ19HRVRGTEFHUzoKLQkJCWlmIChwU01CRmlsZSA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQkJdGNvbiA9IHRsaW5rX3Rjb24ocFNNQkZpbGUtJmd0O3RsaW5rKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWAotI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWQotCQkJY2FwcyA9IGxlNjRfdG9fY3B1KHRjb24tJmd0O2ZzVW5peEluZm8uQ2FwYWJpbGl0eSk7Ci0JCQlpZiAoQ0lGU19VTklYX0VYVEFUVFJfQ0FQICZhbXA7IGNhcHMpIHsKLQkJCQlfX3U2NAlFeHRBdHRyTWFzayA9IDA7Ci0JCQkJcmMgPSBDSUZTR2V0RXh0QXR0cih4aWQsIHRjb24sCi0JCQkJCQkgICAgcFNNQkZpbGUtJmd0O2ZpZC5uZXRmaWQsCi0JCQkJCQkgICAgJmFtcDtFeHRBdHRyQml0cywgJmFtcDtFeHRBdHRyTWFzayk7Ci0JCQkJaWYgKHJjID09IDApCi0JCQkJCXJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgJmFtcDsKLQkJCQkJCUZTX0ZMX1VTRVJfVklTSUJMRSwKLQkJCQkJCShpbnQgX191c2VyICopYXJnKTsKLQkJCQlpZiAocmMgIT0gLUVPUE5PVFNVUFApCi0JCQkJCWJyZWFrOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWSAqLwotI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovCi0JCQlpZiAoQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzICZhbXA7IEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQpCi0JCQkJRXh0QXR0ckJpdHMgfD0gRlNfQ09NUFJfRkw7Ci0KLQkJCXJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgJmFtcDsgRlNfRkxfVVNFUl9WSVNJQkxFLAotCQkJCSAgICAgIChpbnQgX191c2VyICopYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEZTX0lPQ19TRVRGTEFHUzoKLQkJCWlmIChwU01CRmlsZSA9PSBOVUxMKQotCQkJCWJyZWFrOwotCQkJdGNvbiA9IHRsaW5rX3Rjb24ocFNNQkZpbGUtJmd0O3RsaW5rKTsKLQkJCS8qIGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLSZndDtmc1VuaXhJbmZvLkNhcGFiaWxpdHkpOyAqLwotCi0JCQlpZiAoZ2V0X3VzZXIoRXh0QXR0ckJpdHMsIChpbnQgX191c2VyICopYXJnKSkgewotCQkJCXJjID0gLUVGQVVMVDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIGlmIChDSUZTX1VOSVhfRVhUQVRUUl9DQVAgJmFtcDsgY2FwcykKLQkJCSAqCXJjID0gQ0lGU1NldEV4dEF0dHIoeGlkLCB0Y29uLAotCQkJICoJCSAgICAgICBwU01CRmlsZS0mZ3Q7ZmlkLm5ldGZpZCwKLQkJCSAqCQkgICAgICAgZXh0QXR0ckJpdHMsCi0JCQkgKgkJICAgICAgICZhbXA7RXh0QXR0ck1hc2spOwotCQkJICogaWYgKHJjICE9IC1FT1BOT1RTVVBQKQotCQkJICoJYnJlYWs7Ci0JCQkgKi8KLQotCQkJLyogQ3VycmVudGx5IG9ubHkgZmxhZyB3ZSBjYW4gc2V0IG9yIGNsZWFyIGlzIGNvbXByZXNzZWQuICovCi0JCQlpZiAoRXh0QXR0ckJpdHMgJmFtcDsgfkZTX0NPTVBSX0ZMKSB7Ci0JCQkJcmMgPSAtRU9QTk9UU1VQUDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJZW5hYmxlX2NvbXByZXNzaW9uID0gRXh0QXR0ckJpdHMgJmFtcDsgRlNfQ09NUFJfRkw7Ci0JCQljb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/Ci0JCQkJQ09NUFJFU1NJT05fRk9STUFUX0RFRkFVTFQgOgotCQkJCUNPTVBSRVNTSU9OX0ZPUk1BVF9OT05FOwotCi0JCQlyYyA9IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHhpZCwgZmlsZXAsIHRjb24sCi0JCQkJCQlwU01CRmlsZSwKLQkJCQkJCWNvbXByZXNzaW9uX3N0YXRlKTsKLQkJCWlmIChyYyA9PSAwKSB7Ci0JCQkJc3Bpbl9sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7Ci0JCQkJaWYgKGVuYWJsZV9jb21wcmVzc2lvbikKLQkJCQkJQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzIHw9Ci0JCQkJCQlGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEOwotCQkJCWVsc2UKLQkJCQkJQ0lGU19JKGlub2RlKS0mZ3Q7Y2lmc0F0dHJzICZhbXA7PQotCQkJCQkJfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7Ci0JCQkJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKLQkJCX0KLQkJCWNpZnNfZGJnKEZZSSwgJiMzNDtzZXQgY29tcHJlc3MgZmxhZyByYyAlZFxuJiMzNDssIHJjKTsKLQkJCWJyZWFrOwogCQljYXNlIENJRlNfSU9DX0NPUFlDSFVOS19GSUxFOgogCQkJcmMgPSBjaWZzX2lvY3RsX2NvcHljaHVuayh4aWQsIGZpbGVwLCBhcmcpOwogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MDkKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDSUZTIEZpbGVzeXN0ZW0gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgQ0lGUyBwYXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgaG93IHdlIGhhbmRsZSBgRlNfSU9DX1NFVEZMQUdTYCBhbmQgYEZTX0lPQ19HRVRGTEFHU2AgZm9yIHRoZSBDSUZTIGZpbGVzeXN0ZW0uICBJbnN0ZWFkIG9mIGdvaW5nIHRocm91Z2ggdGhlIGBjaWZzX2lvY3RsYCBwYXRoLCB3aGljaCBpcyB3aGF0IHdlIHVzZWQgdG8gZG8sIGl0JiMzOTtzIG1pZ3JhdGluZyB0aGUgbG9naWMgdG8gYGNpZnNfZmlsZWF0dHJfc2V0YCBhbmQgYGNpZnNfZmlsZWF0dHJfZ2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFscmVhZHkgZXhpc3RlZCBmb3Igb3RoZXIgb3BlcmF0aW9ucywgYnV0IG5vdyBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHNwZWNpZmljYWxseSBiZWluZyBhZGRlZCwgYW5kIHdpdGggdGhpcyBwYXRjaCwgd2lsbCBiZSB1c2VkLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBjaWZzZnMuY2AsIGBjaWZzZnMuaGAsIGFuZCBgaW9jdGwuY2AuCgpBIGtleSBjaGFuZ2UgaXMgdGhhdCBgY2lmc19maWxlYXR0cl9zZXRgIGlzIGEgKm5ldyogZnVuY3Rpb24uICBJdCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb25hbCBzaGlmdCDigJMgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBpb2N0bHMsIHdlJiMzOTtyZSBub3cgbGV2ZXJhZ2luZyB0aGUgVkZTIGBmaWxlYXR0cl9zZXRgIGlub2RlIG9wZXJhdGlvbi4gIEkgc2VlIGl0JiMzOTtzIGNhbGxpbmcgYGNpZnNfc2V0X2NvbXByZXNzaW9uYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBmdW5jdGlvbiB1c2VkIHRvIGJlIGNhbGxlZCBgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb25gLiAgQWgsIGFuZCBgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYSBgZGVudHJ5YCBpbnN0ZWFkIG9mIGBmaWxlcGAuICBUaGF0JiMzOTtzIGEgZ29vZCBjaGFuZ2UsIG1vcmUgaW4gbGluZSB3aXRoIHRoZSBWRlMgZGVzaWduLgoKU28sIGZyb20gdGhlIHVzZXImIzM5O3MgcGVyc3BlY3RpdmUsIHRoaXMgbWVhbnMgYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIHdpbGwgbm93IHJvdXRlIHRocm91Z2ggdGhlIFZGUyB0byB0aGlzIG5ldyBgZmlsZWF0dHJfc2V0YCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBpdCwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgcGF0Y2guICBUaGlzIGlzIGEgcHJldHR5IGNsZWFuIG1vdmUsIGNlbnRyYWxpemluZyBmaWxlIGF0dHJpYnV0ZSBjb250cm9sIHdpdGhpbiB0aGUgVkZTIHN0cnVjdHVyZS4KCk5vdywgdGhlIG5leHQgdGhpbmcgSSYjMzk7bSB0aGlua2luZyBhYm91dDogaXMgdGhpcyBmdXp6YWJsZT8gIEFuZCBvZiBjb3Vyc2UsIGl0IGlzLiBTeXprYWxsZXIgaGFzIHNvbWUgQ0lGUy9TTUIgc3VwcG9ydCBhbHJlYWR5LCBJJiMzOTt2ZSBzZWVuIGl0IG1vdW50IGFuZCBkbyBvcGVyYXRpb25zLiAgSSBuZWVkIHRvIGNoZWNrLCB0aG91Z2gsIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gIGBDT05GSUdfQ0lGU2AgaXMgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIChvciBpcyBpdCBgQ09ORklHX1NNQl9GU2AgdGhlc2UgZGF5cz8gSSYjMzk7bGwgY2hlY2spLiBMZXQmIzM5O3MgZG8gYSBzZWFyY2ggZm9yIGBjaWZzX2ZpbGVhdHRyX3NldGAgd2l0aGluIHRoZSBjb2RlYmFzZSwgYW5kIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMDI6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lmc19maWxlYXR0cl9zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9jaWZzZnMuYz0xMjQwPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfZGlyX2lub2RlX29wcyA9IHtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNTgtXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyNTk6XHQuZmlsZWF0dHJfc2V0ID0gY2lmc19maWxlYXR0cl9zZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNjAtfTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyNjI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNzAtXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jOjEyNzE6XHQuZmlsZWF0dHJfc2V0ID0gY2lmc19maWxlYXR0cl9zZXQsXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNzItfTtcbi0tXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oPTkzPWludCBjaWZzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjk0OmludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvc21iL2NsaWVudC9jaWZzZnMuaC05NS1cdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbi0tXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM9MTQ5PXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL3NtYi9jbGllbnQvaW9jdGwuYy0xODQtXG5mcy9zbWIvY2xpZW50L2lvY3RsLmM6MTg1OmludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE4Ni1cdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NTkKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkNJRlMgS2NvbmZpZyBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIENJRlMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZy4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgdXN1YWwgZ290Y2hhcy4gRmlyc3QsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG1vZHVsYXJpemF0aW9uLiBJcyBpdCBidWlsdCBhcyBhIG1vZHVsZSwgb3Igc3RhdGljYWxseSBsaW5rZWQ/IFdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgZGlmZmVyZW50IENJRlMgdmVyc2lvbnMsIHRoZSBkaWFsZWN0cywgYW5kIHRoZSBzZWN1cml0eSBwcm90b2NvbHM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZWZhdWx0IHZhbHVlcyB0aGF0IG1pZ2h0IGJlIHByb2JsZW1hdGljIGluIHNwZWNpZmljIGVudmlyb25tZW50cz8gRm9yIGluc3RhbmNlLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSByZWNlbnQga2VybmVsIHVwZGF0ZXMgaGF2ZSBhbHRlcmVkIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mLCBzYXksIFNNQiBzaWduaW5nIG9yIGVuY3J5cHRpb24sIGFuZCBpZiBzbywgaG93IHRob3NlIGNoYW5nZXMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQW5kIGhvdyBkb2VzIGl0IHJlbGF0ZSB0byB0aGUgVkZTIGFuZCBuZXR3b3JrIHN0YWNrPyBMZXQmIzM5O3MgdmVyaWZ5IHRoZSBjcml0aWNhbCBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgbmV0d29ya2luZyBzdXBwb3J0IGFuZCBjcnlwdG8gbGlicmFyaWVzIGFyZSBjb3JyZWN0bHkgZGVjbGFyZWQuIFRoaXMgS2NvbmZpZyBjYW4gYmUgYSBsYWJ5cmludGgsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHBvdGVudGlhbCBzZWN1cml0eS1yZWxhdGVkIGZsYWdzLCBtYWtpbmcgc3VyZSB0aGF0IGl0JiMzOTtzIGFsaWduZWQgd2l0aCB0aGUgZXhwZWN0ZWQgc2VjdXJpdHkgcG9zdHVyZSBmb3IgdGhpcyBzeXN0ZW0uIFRoZW4gSSB3aWxsIGNvbXBhcmUgdGhlIGJ1aWxkIHdpdGggd2hhdCBJIGV4cGVjdC4gQW55IHJlZCBmbGFncyBpbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucz8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMjo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0lGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMjo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MzA0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ0lGUyBDb25maWd1cmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgQ0lGU2AuIFJpZ2h0LCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L2NpZnNmcy5jYCBhbmQgYGZzL3NtYi9jbGllbnQvaW9jdGwuY2AuIE15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBgY2lmc19maWxlYXR0cl9zZXRgLCBgY2lmc19zZXRfY29tcHJlc3Npb25gLCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDSUZTYCBpcyBlbmFibGVkLiBJdCYjMzk7cyB1c2VkIGluIGJvdGggYGlvY3RsLmNgIGFuZCBgY2lmc2ZzLmNgLCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9zbWIvY2xpZW50L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvY3RsLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvTWFrZWZpbGU9OD1jaWZzLXkgOj0gdHJhY2UubyBjaWZzZnMubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBcXFxuLS1cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTAtXHQgIGNhY2hlZF9kaXIubyBjaWZzX3VuaWNvZGUubyBjaWZzZW5jcnlwdC5vIFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjExOlx0ICByZWFkZGlyLm8gaW9jdGwubyBzZXNzLm8gZXhwb3J0Lm8gdW5jLm8gd2ludWNhc2UubyBcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZS0xMi1cdCAgc21iMm9wcy5vIHNtYjJtYXBlcnJvci5vIHNtYjJ0cmFuc3BvcnQubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MTEKCQkJCQkJCW91dHB1dDogMTMzCgkJCQkJCQl0aG91Z2h0czogMTIxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogQ0lGUyBGaWxlIEF0dHJpYnV0ZSBDb21wcmVzc2lvbiBGbGFnKioKCk9rYXksIHNvIEkmIzM5O3ZlIGR1ZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0lGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZpbGUgYXR0cmlidXRlIGhhbmRsaW5nIGFuZCBjb21wcmVzc2lvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlvY3RsLm9gIGlzIGluZGVlZCBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGNpZnNfZmlsZWF0dHJfc2V0YCB0byBtYW5hZ2UgdGhlIHNldHRpbmcgb2YgdGhlIGNvbXByZXNzaW9uIGZsYWcuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIG9uIENJRlMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgoKR2l2ZW4gdGhhdCB0aGlzIHJlcHJlc2VudHMgYSBkaXJlY3QgY2hhbmdlIHRvIGhvdyBmaWxlIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSBjb21wcmVzc2lvbiwgYXJlIHNldCB3aXRoaW4gdGhlIENJRlMgc3lzdGVtLCBJJiMzOTtkIHNheSB0aGlzIGlzIGRlZmluaXRlbHkgYSB2YWxpZCB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuCgpUaGUga2V5IGZ1bmN0aW9ucyB0aGF0IEkmIzM5O3ZlIGlkZW50aWZpZWQgYXMgYmVpbmcgcmVsZXZhbnQgYXJlOgoKKiAgIGBjaWZzX2ZpbGVhdHRyX3NldGAgKFRoaXMgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQpLgoqICAgYGNpZnNfZmlsZWF0dHJfZ2V0YCAoTWlub3IgY2hhbmdlcykKKiAgIGBjaWZzX3NldF9jb21wcmVzc2lvbmAgKFN0YXRpYywgYnV0IHBvdGVudGlhbGx5IHJlbGV2YW50KQoqICAgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIChTdGF0aWMsIGJ1dCBwb3RlbnRpYWxseSByZWxldmFudCkKClRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGlzIGBDSUZTYC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYENJRlNgIGlzIHRoZSByaWdodCBjb25maWcgb3B0aW9uIGZvciBlbmFibGluZyBDSUZTIGFuZCBTTUIzIHN1cHBvcnQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLgoKSW5pdGlhbGx5LCBJIG5vdGVkIHNvbWUgcmVtb3ZlZCBjb2RlIGZyb20gYGNpZnNfaW9jdGxgIHJlbGF0ZWQgdG8gYENPTkZJR19DSUZTX1BPU0lYYCBhbmQgYENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWWAsIHNwZWNpZmljYWxseSBoYW5kbGluZyBgRlNfSU9DX0dFVEZMQUdTYCBhbmQgYEZTX0lPQ19TRVRGTEFHU2AuIEJ1dCwgdGhvc2UgYXJlIGhhbmRsZWQgbm93IGJ5IGBjaWZzX2ZpbGVhdHRyX2dldGAgYW5kIGBjaWZzX2ZpbGVhdHRyX3NldGAsIHNvIHRoZXkgYXJlbiYjMzk7dCByZWxldmFudCB0byBteSBmdXp6aW5nIHNjb3BlLgoKSSBuZWVkIHRvIGZvY3VzIG9uIGBjaWZzX2ZpbGVhdHRyX3NldGAgYW5kIGBjaWZzX2ZpbGVhdHRyX2dldGAsIGFzIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gYGNpZnNfc2V0X2NvbXByZXNzaW9uYCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIGFyZSBzdGF0aWMsIGFuZCBhbHRob3VnaCBsYXJnZSwgYW5kIHRodXMgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZCwgdGhlIGluc3RydWN0aW9ucyBpbmRpY2F0ZSB0aGF0IGl0JiMzOTtzIHByZWZlcmFibGUgdG8gZm9jdXMgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBTbywgYGNpZnNfZmlsZWF0dHJfc2V0YCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQsIGJ1dCBJJiMzOTtsbCBhbHNvIGluY2x1ZGUgYGNpZnNfZmlsZWF0dHJfZ2V0YCwgYXMgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgYW5kIG1pZ2h0IHJldmVhbCBpbnRlcmVzdGluZyBjb2RlIHBhdGhzLgoKVG8gcmVpdGVyYXRlLCB0aGlzIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBgRlNfSU9DX1NFVEZMQUdTYCBmcm9tIGBjaWZzX2lvY3RsYCB0byBgY2lmc19maWxlYXR0cl9zZXRgLiBUaGlzIHNoaWZ0IHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIEJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y2lmc19maWxlYXR0cl9zZXQmIzM0OywKICAgICYjMzQ7Y2lmc19maWxlYXR0cl9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGZpbGUgYXR0cmlidXRlcyAoc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBmbGFnKSBmcm9tIHRoZSBDSUZTIGlvY3RsIGhhbmRsZXIgdG8gdGhlIFZGUyBmaWxlYXR0cl9zZXQgaW5vZGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGZpbGUgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCByZXRyaWV2ZWQgaW4gdGhlIENJRlMgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGwoRlNfSU9DX1NFVEZMQUdTKSBhbmQgaW9jdGwoRlNfSU9DX0dFVEZMQUdTKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NpZnNfZmlsZWF0dHJfc2V0JiMzNDssCiAgICAmIzM0O2NpZnNfZmlsZWF0dHJfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vdmVzIHRoZSBoYW5kbGluZyBvZiBmaWxlIGF0dHJpYnV0ZXMgKHNwZWNpZmljYWxseSB0aGUgY29tcHJlc3Npb24gZmxhZykgZnJvbSB0aGUgQ0lGUyBpb2N0bCBoYW5kbGVyIHRvIHRoZSBWRlMgZmlsZWF0dHJfc2V0IGlub2RlIG9wZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBmaWxlIGF0dHJpYnV0ZXMgYXJlIHNldCBhbmQgcmV0cmlldmVkIGluIHRoZSBDSUZTIGZpbGVzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3RsKEZTX0lPQ19TRVRGTEFHUykgYW5kIGlvY3RsKEZTX0lPQ19HRVRGTEFHUykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMjo0ODo0My42MTIwMzAwMTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzIwNTQ0MjU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2lmc19maWxlYXR0cl9zZXRcIixcbiAgICBcImNpZnNfZmlsZWF0dHJfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGZpbGUgYXR0cmlidXRlcyAoc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBmbGFnKSBmcm9tIHRoZSBDSUZTIGlvY3RsIGhhbmRsZXIgdG8gdGhlIFZGUyBmaWxlYXR0cl9zZXQgaW5vZGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGZpbGUgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCByZXRyaWV2ZWQgaW4gdGhlIENJRlMgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGwoRlNfSU9DX1NFVEZMQUdTKSBhbmQgaW9jdGwoRlNfSU9DX0dFVEZMQUdTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDI6NDg6NDMuNjEyMDM1Mjc5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc3NzY5MzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDAyOjQ4OjQxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmMgYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXFxuaW5kZXggNjZiOTEwNGU3Y2EyMC4uNjAzYjE3N2YxYjA5NSAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jXFxuKysrIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuY1xcbkBAIC0xMTk0LDggKzExOTQsOCBAQCBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuIFxcdHUzMiBhdHRycztcXG4gXFxuLVxcdC8qIFByZXNlcnZlIEZTX0NPTVBSX0ZMIHByZXZpb3VzbHkgcmVwb3J0ZWQgYnkgY2lmc19pb2N0bCgpLiAqL1xcbi1cXHRpZiAoQ0lGU19JKGlub2RlKS1cXHUwMDNlY2lmc0F0dHJzIFxcdTAwMjYgQVRUUl9DT01QUkVTU0VEKVxcbitcXHQvKiBSZXBvcnQgdGhlIGNhY2hlZCBTTUIgY29tcHJlc3NlZCBhdHRyaWJ1dGUgYXMgRlNfQ09NUFJfRkwuICovXFxuK1xcdGlmIChSRUFEX09OQ0UoQ0lGU19JKGlub2RlKS1cXHUwMDNlY2lmc0F0dHJzKSBcXHUwMDI2IEFUVFJfQ09NUFJFU1NFRClcXG4gXFx0XFx0ZmEtXFx1MDAzZWZsYWdzIHw9IEZTX0NPTVBSX0ZMO1xcbiBcXG4gXFx0LypcXG5AQCAtMTI1Niw2ICsxMjU2LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19kaXJfaW5vZGVfb3BzID0ge1xcbiBcXHQuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCxcXG4gXFx0LnNldF9hY2wgPSBjaWZzX3NldF9hY2wsXFxuIFxcdC5maWxlYXR0cl9nZXQgPSBjaWZzX2ZpbGVhdHRyX2dldCxcXG4rXFx0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxcbiB9O1xcbiBcXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcXG5AQCAtMTI2Nyw2ICsxMjY4LDcgQEAgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcXG4gXFx0LmdldF9hY2wgPSBjaWZzX2dldF9hY2wsXFxuIFxcdC5zZXRfYWNsID0gY2lmc19zZXRfYWNsLFxcbiBcXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXFxuK1xcdC5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCxcXG4gfTtcXG4gXFxuIGNvbnN0IGNoYXIgKmNpZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5oIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxcbmluZGV4IDg1NGU2NzJhNGUzN2EuLjEwZGNmNTEzNzhkMzEgMTAwNjQ0XFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxcbisrKyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmhcXG5AQCAtOTEsNiArOTEsOCBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19uYW1lc3BhY2VfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFxuIHN0cnVjdCBmaWxlX2thdHRyO1xcbiBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbitpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4gXFxuIFxcbiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvc21iL2NsaWVudC9pb2N0bC5jIGIvZnMvc21iL2NsaWVudC9pb2N0bC5jXFxuaW5kZXggOWZhNzQzYmUzNjUyYS4uMTI3OWUyMTVlY2QyMCAxMDA2NDRcXG4tLS0gYS9mcy9zbWIvY2xpZW50L2lvY3RsLmNcXG4rKysgYi9mcy9zbWIvY2xpZW50L2lvY3RsLmNcXG5AQCAtMTAsNiArMTAsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlYXR0ci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW91bnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuQEAgLTY3LDExICs2OCwxMSBAQCBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX3F1ZXJ5X2luZm8odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuK3N0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuIFxcdFxcdFxcdFxcdFxcdF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlKVxcbiB7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0c3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbiBcXHRzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSB0Y29uLVxcdTAwM2VzZXMtXFx1MDAzZXNlcnZlcjtcXG4gXFx0c3RydWN0IGNpZnNfb3Blbl9wYXJtcyBvcGFybXM7XFxuQEAgLTkyLDExICs5MywxMSBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHQgICAgY2lmc19zYi1cXHUwMDNlbW50X2NpZnNfc2VydmVyaW5vX2F1dG9kaXNhYmxlZClcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKGRfdW5oYXNoZWQoZmlsZXAtXFx1MDAzZWZfcGF0aC5kZW50cnkpKVxcbitcXHRpZiAoZF91bmhhc2hlZChkZW50cnkpKVxcbiBcXHRcXHRyZXR1cm4gLUVTVEFMRTtcXG4gXFxuIFxcdHBhZ2UgPSBhbGxvY19kZW50cnlfcGF0aCgpO1xcbi1cXHRmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGVwLVxcdTAwM2VmX3BhdGguZGVudHJ5LCBwYWdlKTtcXG4rXFx0ZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkZW50cnksIHBhZ2UpO1xcbiBcXHRpZiAoSVNfRVJSKGZ1bGxfcGF0aCkpIHtcXG4gXFx0XFx0ZnJlZV9kZW50cnlfcGF0aChwYWdlKTtcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZnVsbF9wYXRoKTtcXG5AQCAtMTIzLDYgKzEyNCwxMCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRcXHRnb3RvIGNsb3NlO1xcbiBcXG4gXFx0dW5pcXVlaWQgPSBsZTY0X3RvX2NwdShkYXRhLmZpLkluZGV4TnVtYmVyKTtcXG4rXFx0aWYgKCF1bmlxdWVpZCkge1xcbitcXHRcXHRyYyA9IC1FT1BOT1RTVVBQO1xcbitcXHRcXHRnb3RvIGNsb3NlO1xcbitcXHR9XFxuIFxcdGlmICh1bmlxdWVpZCAhPSBDSUZTX0koaW5vZGUpLVxcdTAwM2V1bmlxdWVpZCkge1xcbiBcXHRcXHRyYyA9IC1FU1RBTEU7XFxuIFxcdFxcdGdvdG8gY2xvc2U7XFxuQEAgLTE0MSwxNCArMTQ2LDE0IEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuIFxcdHJldHVybiByYztcXG4gfVxcbiBcXG4tc3RhdGljIGludCBjaWZzX2lvY3RsX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLFxcbi1cXHRcXHRcXHRcXHQgICAgICBfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcXG4rc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLFxcbitcXHRcXHRcXHRcXHRfX3UxNiBjb21wcmVzc2lvbl9zdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgY2lmc0ZpbGVJbmZvICp3ZmlsZTtcXG4gXFx0c3RydWN0IGNpZnNfdGNvbiAqd3Rjb247XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcXG4gXFx0aW50IHJjO1xcbiBcXG4gXFx0aWYgKCF0Y29uLVxcdTAwM2VzZXMtXFx1MDAzZXNlcnZlci1cXHUwMDNlb3BzLVxcdTAwM2VzZXRfY29tcHJlc3Npb24pXFxuQEAgLTE3MywxMCArMTc4LDY4IEBAIHN0YXRpYyBpbnQgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxcbiBcXHRcXHRyZXR1cm4gcmM7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHhpZCwgZmlsZXAsIHRjb24sXFxuK1xcdHJldHVybiBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHhpZCwgZGVudHJ5LCB0Y29uLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgY29tcHJlc3Npb25fc3RhdGUpO1xcbiB9XFxuIFxcbitpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxcbit7XFxuK1xcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XFxuK1xcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0c3RydWN0IGZpbGVfa2F0dHIgY3VycmVudF9mYSA9IHt9O1xcbitcXHRzdHJ1Y3QgdGNvbl9saW5rICp0bGluaztcXG4rXFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbjtcXG4rXFx0X191MTYgY29tcHJlc3Npb25fc3RhdGU7XFxuK1xcdGJvb2wgZW5hYmxlX2NvbXByZXNzaW9uO1xcbitcXHR1MzIgYWxsb3dlZCA9IEZTX0NPTVBSX0ZMO1xcbitcXHR1bnNpZ25lZCBpbnQgeGlkO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIWZhLVxcdTAwM2VmbGFnc192YWxpZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0LypcXG4rXFx0ICogY2hhdHRyIHdyaXRlcyBiYWNrIGFsbCBmbGFncyByZXR1cm5lZCBieSBmaWxlYXR0cl9nZXQoKS4gQWNjZXB0XFxuK1xcdCAqIEZTX0NBU0VGT0xEX0ZMIG9ubHkgd2hlbiBpdCByZWZsZWN0cyB0aGUgc2hhcmUncyBjYXNlZm9sZCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdGlmIChmYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGU19DQVNFRk9MRF9GTCkge1xcbitcXHRcXHRyYyA9IGNpZnNfZmlsZWF0dHJfZ2V0KGRlbnRyeSwgXFx1MDAyNmN1cnJlbnRfZmEpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0aWYgKGN1cnJlbnRfZmEuZmxhZ3MgXFx1MDAyNiBGU19DQVNFRk9MRF9GTClcXG4rXFx0XFx0XFx0YWxsb3dlZCB8PSBGU19DQVNFRk9MRF9GTDtcXG4rXFx0fVxcbitcXHRpZiAoZmEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfmFsbG93ZWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGVuYWJsZV9jb21wcmVzc2lvbiA9IGZhLVxcdTAwM2VmbGFncyBcXHUwMDI2IEZTX0NPTVBSX0ZMO1xcbitcXHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IENPTVBSRVNTSU9OX0ZPUk1BVF9OT05FO1xcbitcXG4rXFx0dGxpbmsgPSBjaWZzX3NiX3RsaW5rKGNpZnNfc2IpO1xcbitcXHRpZiAoSVNfRVJSKHRsaW5rKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIodGxpbmspO1xcbitcXHR0Y29uID0gdGxpbmtfdGNvbih0bGluayk7XFxuK1xcbitcXHR4aWQgPSBnZXRfeGlkKCk7XFxuK1xcdHJjID0gY2lmc19zZXRfY29tcHJlc3Npb24oeGlkLCBkZW50cnksIHRjb24sIE5VTEwsIGNvbXByZXNzaW9uX3N0YXRlKTtcXG4rXFx0ZnJlZV94aWQoeGlkKTtcXG4rXFx0Y2lmc19wdXRfdGxpbmsodGxpbmspO1xcbitcXG4rXFx0aWYgKCFyYykge1xcbitcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRcXHRpZiAoZW5hYmxlX2NvbXByZXNzaW9uKVxcbitcXHRcXHRcXHRDSUZTX0koaW5vZGUpLVxcdTAwM2VjaWZzQXR0cnMgfD0gRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRDSUZTX0koaW5vZGUpLVxcdTAwM2VjaWZzQXR0cnMgXFx1MDAyNj0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4rXFx0fVxcbitcXG4rXFx0Y2lmc19kYmcoRllJLCBcXFwic2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXFxcblxcXCIsIHJjKTtcXG4rXFx0cmV0dXJuIHJjO1xcbit9XFxuK1xcbiBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX2NvcHljaHVuayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsXFxuIFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3JjZmQpXFxuIHtcXG5AQCAtNDY1LDE0ICs1MjgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdHN0cnVjdCBjaWZzX3Rjb24gKnRjb247XFxuIFxcdHN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rO1xcbiBcXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiO1xcbi1cXHRfX3U2NFxcdEV4dEF0dHJCaXRzID0gMDtcXG4tXFx0Ym9vbCBlbmFibGVfY29tcHJlc3Npb247XFxuLVxcdF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlO1xcbi0jaWZkZWYgQ09ORklHX0NJRlNfUE9TSVhcXG4tI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbi1cXHRfX3U2NCAgIGNhcHM7XFxuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi9cXG4tI2VuZGlmIC8qIENPTkZJR19DSUZTX1BPU0lYICovXFxuIFxcbiBcXHR4aWQgPSBnZXRfeGlkKCk7XFxuIFxcbkBAIC00ODMsODAgKzUzOCw2IEBAIGxvbmcgY2lmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjb21tYW5kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0XFx0dHJhY2Vfc21iM19pb2N0bCh4aWQsIHBTTUJGaWxlLVxcdTAwM2VmaWQucGVyc2lzdGVudF9maWQsIGNvbW1hbmQpO1xcbiBcXG4gXFx0c3dpdGNoIChjb21tYW5kKSB7XFxuLVxcdFxcdGNhc2UgRlNfSU9DX0dFVEZMQUdTOlxcbi1cXHRcXHRcXHRpZiAocFNNQkZpbGUgPT0gTlVMTClcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdHRjb24gPSB0bGlua190Y29uKHBTTUJGaWxlLVxcdTAwM2V0bGluayk7XFxuLSNpZmRlZiBDT05GSUdfQ0lGU19QT1NJWFxcbi0jaWZkZWYgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZXFxuLVxcdFxcdFxcdGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLVxcdTAwM2Vmc1VuaXhJbmZvLkNhcGFiaWxpdHkpO1xcbi1cXHRcXHRcXHRpZiAoQ0lGU19VTklYX0VYVEFUVFJfQ0FQIFxcdTAwMjYgY2Fwcykge1xcbi1cXHRcXHRcXHRcXHRfX3U2NFxcdEV4dEF0dHJNYXNrID0gMDtcXG4tXFx0XFx0XFx0XFx0cmMgPSBDSUZTR2V0RXh0QXR0cih4aWQsIHRjb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBwU01CRmlsZS1cXHUwMDNlZmlkLm5ldGZpZCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZFeHRBdHRyQml0cywgXFx1MDAyNkV4dEF0dHJNYXNrKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJjID09IDApXFxuLVxcdFxcdFxcdFxcdFxcdHJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgXFx1MDAyNlxcbi1cXHRcXHRcXHRcXHRcXHRcXHRGU19GTF9VU0VSX1ZJU0lCTEUsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdChpbnQgX191c2VyICopYXJnKTtcXG4tXFx0XFx0XFx0XFx0aWYgKHJjICE9IC1FT1BOT1RTVVBQKVxcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0fVxcbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZICovXFxuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19QT1NJWCAqL1xcbi1cXHRcXHRcXHRpZiAoQ0lGU19JKGlub2RlKS1cXHUwMDNlY2lmc0F0dHJzIFxcdTAwMjYgRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRClcXG4tXFx0XFx0XFx0XFx0RXh0QXR0ckJpdHMgfD0gRlNfQ09NUFJfRkw7XFxuLVxcbi1cXHRcXHRcXHRyYyA9IHB1dF91c2VyKEV4dEF0dHJCaXRzIFxcdTAwMjYgRlNfRkxfVVNFUl9WSVNJQkxFLFxcbi1cXHRcXHRcXHRcXHQgICAgICAoaW50IF9fdXNlciAqKWFyZyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRjYXNlIEZTX0lPQ19TRVRGTEFHUzpcXG4tXFx0XFx0XFx0aWYgKHBTTUJGaWxlID09IE5VTEwpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR0Y29uID0gdGxpbmtfdGNvbihwU01CRmlsZS1cXHUwMDNldGxpbmspO1xcbi1cXHRcXHRcXHQvKiBjYXBzID0gbGU2NF90b19jcHUodGNvbi1cXHUwMDNlZnNVbml4SW5mby5DYXBhYmlsaXR5KTsgKi9cXG4tXFxuLVxcdFxcdFxcdGlmIChnZXRfdXNlcihFeHRBdHRyQml0cywgKGludCBfX3VzZXIgKilhcmcpKSB7XFxuLVxcdFxcdFxcdFxcdHJjID0gLUVGQVVMVDtcXG4tXFx0XFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIGlmIChDSUZTX1VOSVhfRVhUQVRUUl9DQVAgXFx1MDAyNiBjYXBzKVxcbi1cXHRcXHRcXHQgKlxcdHJjID0gQ0lGU1NldEV4dEF0dHIoeGlkLCB0Y29uLFxcbi1cXHRcXHRcXHQgKlxcdFxcdCAgICAgICBwU01CRmlsZS1cXHUwMDNlZmlkLm5ldGZpZCxcXG4tXFx0XFx0XFx0ICpcXHRcXHQgICAgICAgZXh0QXR0ckJpdHMsXFxuLVxcdFxcdFxcdCAqXFx0XFx0ICAgICAgIFxcdTAwMjZFeHRBdHRyTWFzayk7XFxuLVxcdFxcdFxcdCAqIGlmIChyYyAhPSAtRU9QTk9UU1VQUClcXG4tXFx0XFx0XFx0ICpcXHRicmVhaztcXG4tXFx0XFx0XFx0ICovXFxuLVxcbi1cXHRcXHRcXHQvKiBDdXJyZW50bHkgb25seSBmbGFnIHdlIGNhbiBzZXQgb3IgY2xlYXIgaXMgY29tcHJlc3NlZC4gKi9cXG4tXFx0XFx0XFx0aWYgKEV4dEF0dHJCaXRzIFxcdTAwMjYgfkZTX0NPTVBSX0ZMKSB7XFxuLVxcdFxcdFxcdFxcdHJjID0gLUVPUE5PVFNVUFA7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRlbmFibGVfY29tcHJlc3Npb24gPSBFeHRBdHRyQml0cyBcXHUwMDI2IEZTX0NPTVBSX0ZMO1xcbi1cXHRcXHRcXHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/XFxuLVxcdFxcdFxcdFxcdENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcXG4tXFx0XFx0XFx0XFx0Q09NUFJFU1NJT05fRk9STUFUX05PTkU7XFxuLVxcbi1cXHRcXHRcXHRyYyA9IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHhpZCwgZmlsZXAsIHRjb24sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHBTTUJGaWxlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRjb21wcmVzc2lvbl9zdGF0ZSk7XFxuLVxcdFxcdFxcdGlmIChyYyA9PSAwKSB7XFxuLVxcdFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuLVxcdFxcdFxcdFxcdGlmIChlbmFibGVfY29tcHJlc3Npb24pXFxuLVxcdFxcdFxcdFxcdFxcdENJRlNfSShpbm9kZSktXFx1MDAzZWNpZnNBdHRycyB8PVxcbi1cXHRcXHRcXHRcXHRcXHRcXHRGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEO1xcbi1cXHRcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdFxcdENJRlNfSShpbm9kZSktXFx1MDAzZWNpZnNBdHRycyBcXHUwMDI2PVxcbi1cXHRcXHRcXHRcXHRcXHRcXHR+RklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcXG4tXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGNpZnNfZGJnKEZZSSwgXFxcInNldCBjb21wcmVzcyBmbGFnIHJjICVkXFxcXG5cXFwiLCByYyk7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIENJRlNfSU9DX0NPUFlDSFVOS19GSUxFOlxcbiBcXHRcXHRcXHRyYyA9IGNpZnNfaW9jdGxfY29weWNodW5rKHhpZCwgZmlsZXAsIGFyZyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMjo0ODo0NC45OTA1NDUyOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMTgyNjkxODM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY2lmc19maWxlYXR0cl9zZXRcIixcbiAgICBcImNpZnNfZmlsZWF0dHJfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGZpbGUgYXR0cmlidXRlcyAoc3BlY2lmaWNhbGx5IHRoZSBjb21wcmVzc2lvbiBmbGFnKSBmcm9tIHRoZSBDSUZTIGlvY3RsIGhhbmRsZXIgdG8gdGhlIFZGUyBmaWxlYXR0cl9zZXQgaW5vZGUgb3BlcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGZpbGUgYXR0cmlidXRlcyBhcmUgc2V0IGFuZCByZXRyaWV2ZWQgaW4gdGhlIENJRlMgZmlsZXN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgaW9jdGwoRlNfSU9DX1NFVEZMQUdTKSBhbmQgaW9jdGwoRlNfSU9DX0dFVEZMQUdTKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTM0NGQyOTJlNzgwODAxMWYzN2MxMTRmZTRkMjYzNGIxMWQ2YjEyMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDI6NDg6NDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2NpZnNmcy5jIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuY1xuaW5kZXggNjZiOTEwNGU3Y2EyMC4uNjAzYjE3N2YxYjA5NSAxMDA2NDRcbi0tLSBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmNcbkBAIC0xMTk0LDggKzExOTQsOCBAQCBpbnQgY2lmc19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZF9pbm9kZShkZW50cnkpO1xuIFx0dTMyIGF0dHJzO1xuIFxuLVx0LyogUHJlc2VydmUgRlNfQ09NUFJfRkwgcHJldmlvdXNseSByZXBvcnRlZCBieSBjaWZzX2lvY3RsKCkuICovXG4tXHRpZiAoQ0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgXHUwMDI2IEFUVFJfQ09NUFJFU1NFRClcbitcdC8qIFJlcG9ydCB0aGUgY2FjaGVkIFNNQiBjb21wcmVzc2VkIGF0dHJpYnV0ZSBhcyBGU19DT01QUl9GTC4gKi9cbitcdGlmIChSRUFEX09OQ0UoQ0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMpIFx1MDAyNiBBVFRSX0NPTVBSRVNTRUQpXG4gXHRcdGZhLVx1MDAzZWZsYWdzIHw9IEZTX0NPTVBSX0ZMO1xuIFxuIFx0LypcbkBAIC0xMjU2LDYgKzEyNTYsNyBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHMgPSB7XG4gXHQuZ2V0X2FjbCA9IGNpZnNfZ2V0X2FjbCxcbiBcdC5zZXRfYWNsID0gY2lmc19zZXRfYWNsLFxuIFx0LmZpbGVhdHRyX2dldCA9IGNpZnNfZmlsZWF0dHJfZ2V0LFxuK1x0LmZpbGVhdHRyX3NldCA9IGNpZnNfZmlsZWF0dHJfc2V0LFxuIH07XG4gXG4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcbkBAIC0xMjY3LDYgKzEyNjgsNyBAQCBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2ZpbGVfaW5vZGVfb3BzID0ge1xuIFx0LmdldF9hY2wgPSBjaWZzX2dldF9hY2wsXG4gXHQuc2V0X2FjbCA9IGNpZnNfc2V0X2FjbCxcbiBcdC5maWxlYXR0cl9nZXQgPSBjaWZzX2ZpbGVhdHRyX2dldCxcbitcdC5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCxcbiB9O1xuIFxuIGNvbnN0IGNoYXIgKmNpZnNfZ2V0X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZGlmZiAtLWdpdCBhL2ZzL3NtYi9jbGllbnQvY2lmc2ZzLmggYi9mcy9zbWIvY2xpZW50L2NpZnNmcy5oXG5pbmRleCA4NTRlNjcyYTRlMzdhLi4xMGRjZjUxMzc4ZDMxIDEwMDY0NFxuLS0tIGEvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuKysrIGIvZnMvc21iL2NsaWVudC9jaWZzZnMuaFxuQEAgLTkxLDYgKzkxLDggQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfbmFtZXNwYWNlX2lub2RlX29wZXJhdGlvbnM7XG4gXG4gc3RydWN0IGZpbGVfa2F0dHI7XG4gaW50IGNpZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbitpbnQgY2lmc19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbitcdFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcbiBcbiBcbiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgKi9cbmRpZmYgLS1naXQgYS9mcy9zbWIvY2xpZW50L2lvY3RsLmMgYi9mcy9zbWIvY2xpZW50L2lvY3RsLmNcbmluZGV4IDlmYTc0M2JlMzY1MmEuLjEyNzllMjE1ZWNkMjAgMTAwNjQ0XG4tLS0gYS9mcy9zbWIvY2xpZW50L2lvY3RsLmNcbisrKyBiL2ZzL3NtYi9jbGllbnQvaW9jdGwuY1xuQEAgLTEwLDYgKzEwLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZmlsZWF0dHIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG5AQCAtNjcsMTEgKzY4LDExIEBAIHN0YXRpYyBsb25nIGNpZnNfaW9jdGxfcXVlcnlfaW5mbyh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4rc3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbl9ieV9wYXRoKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbiBcdFx0XHRcdFx0X191MTYgY29tcHJlc3Npb25fc3RhdGUpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZXApO1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbiBcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuIFx0c3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc2VydmVyID0gdGNvbi1cdTAwM2VzZXMtXHUwMDNlc2VydmVyO1xuIFx0c3RydWN0IGNpZnNfb3Blbl9wYXJtcyBvcGFybXM7XG5AQCAtOTIsMTEgKzkzLDExIEBAIHN0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsXG4gXHQgICAgY2lmc19zYi1cdTAwM2VtbnRfY2lmc19zZXJ2ZXJpbm9fYXV0b2Rpc2FibGVkKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAoZF91bmhhc2hlZChmaWxlcC1cdTAwM2VmX3BhdGguZGVudHJ5KSlcbitcdGlmIChkX3VuaGFzaGVkKGRlbnRyeSkpXG4gXHRcdHJldHVybiAtRVNUQUxFO1xuIFxuIFx0cGFnZSA9IGFsbG9jX2RlbnRyeV9wYXRoKCk7XG4tXHRmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGZpbGVwLVx1MDAzZWZfcGF0aC5kZW50cnksIHBhZ2UpO1xuK1x0ZnVsbF9wYXRoID0gYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShkZW50cnksIHBhZ2UpO1xuIFx0aWYgKElTX0VSUihmdWxsX3BhdGgpKSB7XG4gXHRcdGZyZWVfZGVudHJ5X3BhdGgocGFnZSk7XG4gXHRcdHJldHVybiBQVFJfRVJSKGZ1bGxfcGF0aCk7XG5AQCAtMTIzLDYgKzEyNCwxMCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxuIFx0XHRnb3RvIGNsb3NlO1xuIFxuIFx0dW5pcXVlaWQgPSBsZTY0X3RvX2NwdShkYXRhLmZpLkluZGV4TnVtYmVyKTtcbitcdGlmICghdW5pcXVlaWQpIHtcbitcdFx0cmMgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBjbG9zZTtcbitcdH1cbiBcdGlmICh1bmlxdWVpZCAhPSBDSUZTX0koaW5vZGUpLVx1MDAzZXVuaXF1ZWlkKSB7XG4gXHRcdHJjID0gLUVTVEFMRTtcbiBcdFx0Z290byBjbG9zZTtcbkBAIC0xNDEsMTQgKzE0NiwxNCBAQCBzdGF0aWMgaW50IGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgodW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgaW50IGNpZnNfaW9jdGxfc2V0X2NvbXByZXNzaW9uKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBmaWxlICpmaWxlcCxcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpjZmlsZSxcbi1cdFx0XHRcdCAgICAgIF9fdTE2IGNvbXByZXNzaW9uX3N0YXRlKVxuK3N0YXRpYyBpbnQgY2lmc19zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHRcdFx0c3RydWN0IGNpZnNfdGNvbiAqdGNvbixcbitcdFx0XHRcdHN0cnVjdCBjaWZzRmlsZUluZm8gKmNmaWxlLFxuK1x0XHRcdFx0X191MTYgY29tcHJlc3Npb25fc3RhdGUpXG4ge1xuIFx0c3RydWN0IGNpZnNGaWxlSW5mbyAqd2ZpbGU7XG4gXHRzdHJ1Y3QgY2lmc190Y29uICp3dGNvbjtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGVwKTtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkX2lub2RlKGRlbnRyeSk7XG4gXHRpbnQgcmM7XG4gXG4gXHRpZiAoIXRjb24tXHUwMDNlc2VzLVx1MDAzZXNlcnZlci1cdTAwM2VvcHMtXHUwMDNlc2V0X2NvbXByZXNzaW9uKVxuQEAgLTE3MywxMCArMTc4LDY4IEBAIHN0YXRpYyBpbnQgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24odW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGZpbGUgKmZpbGVwLFxuIFx0XHRyZXR1cm4gcmM7XG4gXHR9XG4gXG4tXHRyZXR1cm4gY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aCh4aWQsIGZpbGVwLCB0Y29uLFxuK1x0cmV0dXJuIGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGgoeGlkLCBkZW50cnksIHRjb24sXG4gXHRcdFx0XHRcdCAgICBjb21wcmVzc2lvbl9zdGF0ZSk7XG4gfVxuIFxuK2ludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuK1x0XHQgICAgICBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGRfaW5vZGUoZGVudHJ5KTtcbitcdHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IGZpbGVfa2F0dHIgY3VycmVudF9mYSA9IHt9O1xuK1x0c3RydWN0IHRjb25fbGluayAqdGxpbms7XG4rXHRzdHJ1Y3QgY2lmc190Y29uICp0Y29uO1xuK1x0X191MTYgY29tcHJlc3Npb25fc3RhdGU7XG4rXHRib29sIGVuYWJsZV9jb21wcmVzc2lvbjtcbitcdHUzMiBhbGxvd2VkID0gRlNfQ09NUFJfRkw7XG4rXHR1bnNpZ25lZCBpbnQgeGlkO1xuK1x0aW50IHJjO1xuK1xuK1x0aWYgKCFmYS1cdTAwM2VmbGFnc192YWxpZClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0LypcbitcdCAqIGNoYXR0ciB3cml0ZXMgYmFjayBhbGwgZmxhZ3MgcmV0dXJuZWQgYnkgZmlsZWF0dHJfZ2V0KCkuIEFjY2VwdFxuK1x0ICogRlNfQ0FTRUZPTERfRkwgb25seSB3aGVuIGl0IHJlZmxlY3RzIHRoZSBzaGFyZSdzIGNhc2Vmb2xkIHN0YXRlLlxuK1x0ICovXG4rXHRpZiAoZmEtXHUwMDNlZmxhZ3MgXHUwMDI2IEZTX0NBU0VGT0xEX0ZMKSB7XG4rXHRcdHJjID0gY2lmc19maWxlYXR0cl9nZXQoZGVudHJ5LCBcdTAwMjZjdXJyZW50X2ZhKTtcbitcdFx0aWYgKHJjKVxuK1x0XHRcdHJldHVybiByYztcbitcdFx0aWYgKGN1cnJlbnRfZmEuZmxhZ3MgXHUwMDI2IEZTX0NBU0VGT0xEX0ZMKVxuK1x0XHRcdGFsbG93ZWQgfD0gRlNfQ0FTRUZPTERfRkw7XG4rXHR9XG4rXHRpZiAoZmEtXHUwMDNlZmxhZ3MgXHUwMDI2IH5hbGxvd2VkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRlbmFibGVfY29tcHJlc3Npb24gPSBmYS1cdTAwM2VmbGFncyBcdTAwMjYgRlNfQ09NUFJfRkw7XG4rXHRjb21wcmVzc2lvbl9zdGF0ZSA9IGVuYWJsZV9jb21wcmVzc2lvbiA/IENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcbitcdFx0XHRcdFx0XHQgQ09NUFJFU1NJT05fRk9STUFUX05PTkU7XG4rXG4rXHR0bGluayA9IGNpZnNfc2JfdGxpbmsoY2lmc19zYik7XG4rXHRpZiAoSVNfRVJSKHRsaW5rKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIodGxpbmspO1xuK1x0dGNvbiA9IHRsaW5rX3Rjb24odGxpbmspO1xuK1xuK1x0eGlkID0gZ2V0X3hpZCgpO1xuK1x0cmMgPSBjaWZzX3NldF9jb21wcmVzc2lvbih4aWQsIGRlbnRyeSwgdGNvbiwgTlVMTCwgY29tcHJlc3Npb25fc3RhdGUpO1xuK1x0ZnJlZV94aWQoeGlkKTtcbitcdGNpZnNfcHV0X3RsaW5rKHRsaW5rKTtcbitcbitcdGlmICghcmMpIHtcbitcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRcdGlmIChlbmFibGVfY29tcHJlc3Npb24pXG4rXHRcdFx0Q0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgfD0gRklMRV9BVFRSSUJVVEVfQ09NUFJFU1NFRDtcbitcdFx0ZWxzZVxuK1x0XHRcdENJRlNfSShpbm9kZSktXHUwMDNlY2lmc0F0dHJzIFx1MDAyNj0gfkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHR9XG4rXG4rXHRjaWZzX2RiZyhGWUksIFwic2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXG5cIiwgcmMpO1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbiBzdGF0aWMgbG9uZyBjaWZzX2lvY3RsX2NvcHljaHVuayh1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZmlsZSAqZHN0X2ZpbGUsXG4gXHRcdFx0dW5zaWduZWQgbG9uZyBzcmNmZClcbiB7XG5AQCAtNDY1LDE0ICs1MjgsNiBAQCBsb25nIGNpZnNfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGVwLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRzdHJ1Y3QgY2lmc190Y29uICp0Y29uO1xuIFx0c3RydWN0IHRjb25fbGluayAqdGxpbms7XG4gXHRzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiO1xuLVx0X191NjRcdEV4dEF0dHJCaXRzID0gMDtcbi1cdGJvb2wgZW5hYmxlX2NvbXByZXNzaW9uO1xuLVx0X191MTYgY29tcHJlc3Npb25fc3RhdGU7XG4tI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYXG4tI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxuLVx0X191NjQgICBjYXBzO1xuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi9cbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi9cbiBcbiBcdHhpZCA9IGdldF94aWQoKTtcbiBcbkBAIC00ODMsODAgKzUzOCw2IEBAIGxvbmcgY2lmc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZXAsIHVuc2lnbmVkIGludCBjb21tYW5kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0dHJhY2Vfc21iM19pb2N0bCh4aWQsIHBTTUJGaWxlLVx1MDAzZWZpZC5wZXJzaXN0ZW50X2ZpZCwgY29tbWFuZCk7XG4gXG4gXHRzd2l0Y2ggKGNvbW1hbmQpIHtcbi1cdFx0Y2FzZSBGU19JT0NfR0VURkxBR1M6XG4tXHRcdFx0aWYgKHBTTUJGaWxlID09IE5VTEwpXG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR0Y29uID0gdGxpbmtfdGNvbihwU01CRmlsZS1cdTAwM2V0bGluayk7XG4tI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYXG4tI2lmZGVmIENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxuLVx0XHRcdGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLVx1MDAzZWZzVW5peEluZm8uQ2FwYWJpbGl0eSk7XG4tXHRcdFx0aWYgKENJRlNfVU5JWF9FWFRBVFRSX0NBUCBcdTAwMjYgY2Fwcykge1xuLVx0XHRcdFx0X191NjRcdEV4dEF0dHJNYXNrID0gMDtcbi1cdFx0XHRcdHJjID0gQ0lGU0dldEV4dEF0dHIoeGlkLCB0Y29uLFxuLVx0XHRcdFx0XHRcdCAgICBwU01CRmlsZS1cdTAwM2VmaWQubmV0ZmlkLFxuLVx0XHRcdFx0XHRcdCAgICBcdTAwMjZFeHRBdHRyQml0cywgXHUwMDI2RXh0QXR0ck1hc2spO1xuLVx0XHRcdFx0aWYgKHJjID09IDApXG4tXHRcdFx0XHRcdHJjID0gcHV0X3VzZXIoRXh0QXR0ckJpdHMgXHUwMDI2XG4tXHRcdFx0XHRcdFx0RlNfRkxfVVNFUl9WSVNJQkxFLFxuLVx0XHRcdFx0XHRcdChpbnQgX191c2VyICopYXJnKTtcbi1cdFx0XHRcdGlmIChyYyAhPSAtRU9QTk9UU1VQUClcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0fVxuLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kgKi9cbi0jZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi9cbi1cdFx0XHRpZiAoQ0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgXHUwMDI2IEZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQpXG4tXHRcdFx0XHRFeHRBdHRyQml0cyB8PSBGU19DT01QUl9GTDtcbi1cbi1cdFx0XHRyYyA9IHB1dF91c2VyKEV4dEF0dHJCaXRzIFx1MDAyNiBGU19GTF9VU0VSX1ZJU0lCTEUsXG4tXHRcdFx0XHQgICAgICAoaW50IF9fdXNlciAqKWFyZyk7XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGNhc2UgRlNfSU9DX1NFVEZMQUdTOlxuLVx0XHRcdGlmIChwU01CRmlsZSA9PSBOVUxMKVxuLVx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0dGNvbiA9IHRsaW5rX3Rjb24ocFNNQkZpbGUtXHUwMDNldGxpbmspO1xuLVx0XHRcdC8qIGNhcHMgPSBsZTY0X3RvX2NwdSh0Y29uLVx1MDAzZWZzVW5peEluZm8uQ2FwYWJpbGl0eSk7ICovXG4tXG4tXHRcdFx0aWYgKGdldF91c2VyKEV4dEF0dHJCaXRzLCAoaW50IF9fdXNlciAqKWFyZykpIHtcbi1cdFx0XHRcdHJjID0gLUVGQVVMVDtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIGlmIChDSUZTX1VOSVhfRVhUQVRUUl9DQVAgXHUwMDI2IGNhcHMpXG4tXHRcdFx0ICpcdHJjID0gQ0lGU1NldEV4dEF0dHIoeGlkLCB0Y29uLFxuLVx0XHRcdCAqXHRcdCAgICAgICBwU01CRmlsZS1cdTAwM2VmaWQubmV0ZmlkLFxuLVx0XHRcdCAqXHRcdCAgICAgICBleHRBdHRyQml0cyxcbi1cdFx0XHQgKlx0XHQgICAgICAgXHUwMDI2RXh0QXR0ck1hc2spO1xuLVx0XHRcdCAqIGlmIChyYyAhPSAtRU9QTk9UU1VQUClcbi1cdFx0XHQgKlx0YnJlYWs7XG4tXHRcdFx0ICovXG4tXG4tXHRcdFx0LyogQ3VycmVudGx5IG9ubHkgZmxhZyB3ZSBjYW4gc2V0IG9yIGNsZWFyIGlzIGNvbXByZXNzZWQuICovXG4tXHRcdFx0aWYgKEV4dEF0dHJCaXRzIFx1MDAyNiB+RlNfQ09NUFJfRkwpIHtcbi1cdFx0XHRcdHJjID0gLUVPUE5PVFNVUFA7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4tXG4tXHRcdFx0ZW5hYmxlX2NvbXByZXNzaW9uID0gRXh0QXR0ckJpdHMgXHUwMDI2IEZTX0NPTVBSX0ZMO1xuLVx0XHRcdGNvbXByZXNzaW9uX3N0YXRlID0gZW5hYmxlX2NvbXByZXNzaW9uID9cbi1cdFx0XHRcdENPTVBSRVNTSU9OX0ZPUk1BVF9ERUZBVUxUIDpcbi1cdFx0XHRcdENPTVBSRVNTSU9OX0ZPUk1BVF9OT05FO1xuLVxuLVx0XHRcdHJjID0gY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb24oeGlkLCBmaWxlcCwgdGNvbixcbi1cdFx0XHRcdFx0XHRwU01CRmlsZSxcbi1cdFx0XHRcdFx0XHRjb21wcmVzc2lvbl9zdGF0ZSk7XG4tXHRcdFx0aWYgKHJjID09IDApIHtcbi1cdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0XHRcdFx0aWYgKGVuYWJsZV9jb21wcmVzc2lvbilcbi1cdFx0XHRcdFx0Q0lGU19JKGlub2RlKS1cdTAwM2VjaWZzQXR0cnMgfD1cbi1cdFx0XHRcdFx0XHRGSUxFX0FUVFJJQlVURV9DT01QUkVTU0VEO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRDSUZTX0koaW5vZGUpLVx1MDAzZWNpZnNBdHRycyBcdTAwMjY9XG4tXHRcdFx0XHRcdFx0fkZJTEVfQVRUUklCVVRFX0NPTVBSRVNTRUQ7XG4tXHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0XHRcdH1cbi1cdFx0XHRjaWZzX2RiZyhGWUksIFwic2V0IGNvbXByZXNzIGZsYWcgcmMgJWRcXG5cIiwgcmMpO1xuLVx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIENJRlNfSU9DX0NPUFlDSFVOS19GSUxFOlxuIFx0XHRcdHJjID0gY2lmc19pb2N0bF9jb3B5Y2h1bmsoeGlkLCBmaWxlcCwgYXJnKTtcbiBcdFx0XHRicmVhaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ4OjQ0Ljk5MDU0Njc0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NzM1NDkwNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDSUZTIEZpbGVzeXN0ZW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIENJRlMgcGF0Y2guIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIHJlZmFjdG9yaW5nIGhvdyB3ZSBoYW5kbGUgYEZTX0lPQ19TRVRGTEFHU2AgYW5kIGBGU19JT0NfR0VURkxBR1NgIGZvciB0aGUgQ0lGUyBmaWxlc3lzdGVtLiAgSW5zdGVhZCBvZiBnb2luZyB0aHJvdWdoIHRoZSBgY2lmc19pb2N0bGAgcGF0aCwgd2hpY2ggaXMgd2hhdCB3ZSB1c2VkIHRvIGRvLCBpdCdzIG1pZ3JhdGluZyB0aGUgbG9naWMgdG8gYGNpZnNfZmlsZWF0dHJfc2V0YCBhbmQgYGNpZnNfZmlsZWF0dHJfZ2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFscmVhZHkgZXhpc3RlZCBmb3Igb3RoZXIgb3BlcmF0aW9ucywgYnV0IG5vdyBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHNwZWNpZmljYWxseSBiZWluZyBhZGRlZCwgYW5kIHdpdGggdGhpcyBwYXRjaCwgd2lsbCBiZSB1c2VkLiBUaGlzIGNoYW5nZSB0b3VjaGVzIGBjaWZzZnMuY2AsIGBjaWZzZnMuaGAsIGFuZCBgaW9jdGwuY2AuXG5cbkEga2V5IGNoYW5nZSBpcyB0aGF0IGBjaWZzX2ZpbGVhdHRyX3NldGAgaXMgYSAqbmV3KiBmdW5jdGlvbi4gIEl0IGFwcGVhcnMgdG8gYmUgYSBmdW5jdGlvbmFsIHNoaWZ0IOKAkyByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGlvY3Rscywgd2UncmUgbm93IGxldmVyYWdpbmcgdGhlIFZGUyBgZmlsZWF0dHJfc2V0YCBpbm9kZSBvcGVyYXRpb24uICBJIHNlZSBpdCdzIGNhbGxpbmcgYGNpZnNfc2V0X2NvbXByZXNzaW9uYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhhdCBmdW5jdGlvbiB1c2VkIHRvIGJlIGNhbGxlZCBgY2lmc19pb2N0bF9zZXRfY29tcHJlc3Npb25gLiAgQWgsIGFuZCBgY2lmc19zZXRfY29tcHJlc3Npb25fYnlfcGF0aGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYSBgZGVudHJ5YCBpbnN0ZWFkIG9mIGBmaWxlcGAuICBUaGF0J3MgYSBnb29kIGNoYW5nZSwgbW9yZSBpbiBsaW5lIHdpdGggdGhlIFZGUyBkZXNpZ24uXG5cblNvLCBmcm9tIHRoZSB1c2VyJ3MgcGVyc3BlY3RpdmUsIHRoaXMgbWVhbnMgYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIHdpbGwgbm93IHJvdXRlIHRocm91Z2ggdGhlIFZGUyB0byB0aGlzIG5ldyBgZmlsZWF0dHJfc2V0YCBpZiB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBpdCwgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50IG9mIHRoaXMgcGF0Y2guICBUaGlzIGlzIGEgcHJldHR5IGNsZWFuIG1vdmUsIGNlbnRyYWxpemluZyBmaWxlIGF0dHJpYnV0ZSBjb250cm9sIHdpdGhpbiB0aGUgVkZTIHN0cnVjdHVyZS5cblxuTm93LCB0aGUgbmV4dCB0aGluZyBJJ20gdGhpbmtpbmcgYWJvdXQ6IGlzIHRoaXMgZnV6emFibGU/ICBBbmQgb2YgY291cnNlLCBpdCBpcy4gU3l6a2FsbGVyIGhhcyBzb21lIENJRlMvU01CIHN1cHBvcnQgYWxyZWFkeSwgSSd2ZSBzZWVuIGl0IG1vdW50IGFuZCBkbyBvcGVyYXRpb25zLiAgSSBuZWVkIHRvIGNoZWNrLCB0aG91Z2gsIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZC4gIGBDT05GSUdfQ0lGU2AgaXMgd2hhdCBJJ20gbG9va2luZyBmb3IgKG9yIGlzIGl0IGBDT05GSUdfU01CX0ZTYCB0aGVzZSBkYXlzPyBJJ2xsIGNoZWNrKS4gTGV0J3MgZG8gYSBzZWFyY2ggZm9yIGBjaWZzX2ZpbGVhdHRyX3NldGAgd2l0aGluIHRoZSBjb2RlYmFzZSwgYW5kIHNlZSB3aGVyZSBlbHNlIGl0J3MgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUwOSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ4OjUyLjY2NDA5ODA1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4MjM1ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNpZnNfZmlsZWF0dHJfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvY2lmc2ZzLmM9MTI0MD1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBjaWZzX2Rpcl9pbm9kZV9vcHMgPSB7XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNTgtXFx0LmZpbGVhdHRyX2dldCA9IGNpZnNfZmlsZWF0dHJfZ2V0LFxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmM6MTI1OTpcXHQuZmlsZWF0dHJfc2V0ID0gY2lmc19maWxlYXR0cl9zZXQsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYy0xMjYwLX07XFxuLS1cXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jPTEyNjI9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgY2lmc19maWxlX2lub2RlX29wcyA9IHtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmMtMTI3MC1cXHQuZmlsZWF0dHJfZ2V0ID0gY2lmc19maWxlYXR0cl9nZXQsXFxuZnMvc21iL2NsaWVudC9jaWZzZnMuYzoxMjcxOlxcdC5maWxlYXR0cl9zZXQgPSBjaWZzX2ZpbGVhdHRyX3NldCxcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5jLTEyNzItfTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmg9OTM9aW50IGNpZnNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNmcy5oOjk0OmludCBjaWZzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbmZzL3NtYi9jbGllbnQvY2lmc2ZzLmgtOTUtXFx0XFx0ICAgICAgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvaW9jdGwuYz0xNDk9c3RhdGljIGludCBjaWZzX3NldF9jb21wcmVzc2lvbih1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9zbWIvY2xpZW50L2lvY3RsLmMtMTg0LVxcbmZzL3NtYi9jbGllbnQvaW9jdGwuYzoxODU6aW50IGNpZnNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuZnMvc21iL2NsaWVudC9pb2N0bC5jLTE4Ni1cXHRcXHQgICAgICBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ4OjU0LjM5MjMzOTEwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTkwMDU2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ0lGUyBLY29uZmlnIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBDSUZTIGNvbmZpZ3VyYXRpb24uIExldCdzIGRpdmUgc3RyYWlnaHQgaW50byB0aGUgS2NvbmZpZy4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgdXN1YWwgZ290Y2hhcy4gRmlyc3QsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9kdWxhcml6YXRpb24uIElzIGl0IGJ1aWx0IGFzIGEgbW9kdWxlLCBvciBzdGF0aWNhbGx5IGxpbmtlZD8gV2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBkaWZmZXJlbnQgQ0lGUyB2ZXJzaW9ucywgdGhlIGRpYWxlY3RzLCBhbmQgdGhlIHNlY3VyaXR5IHByb3RvY29scz8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMgaW4gc3BlY2lmaWMgZW52aXJvbm1lbnRzPyBGb3IgaW5zdGFuY2UsIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IHJlY2VudCBrZXJuZWwgdXBkYXRlcyBoYXZlIGFsdGVyZWQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YsIHNheSwgU01CIHNpZ25pbmcgb3IgZW5jcnlwdGlvbiwgYW5kIGlmIHNvLCBob3cgdGhvc2UgY2hhbmdlcyBhcmUgcmVmbGVjdGVkIGluIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBbmQgaG93IGRvZXMgaXQgcmVsYXRlIHRvIHRoZSBWRlMgYW5kIG5ldHdvcmsgc3RhY2s/IExldCdzIHZlcmlmeSB0aGUgY3JpdGljYWwgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIG5ldHdvcmtpbmcgc3VwcG9ydCBhbmQgY3J5cHRvIGxpYnJhcmllcyBhcmUgY29ycmVjdGx5IGRlY2xhcmVkLiBUaGlzIEtjb25maWcgY2FuIGJlIGEgbGFieXJpbnRoLCBzbyBsZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBhcHByb2FjaC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgcG90ZW50aWFsIHNlY3VyaXR5LXJlbGF0ZWQgZmxhZ3MsIG1ha2luZyBzdXJlIHRoYXQgaXQncyBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGVkIHNlY3VyaXR5IHBvc3R1cmUgZm9yIHRoaXMgc3lzdGVtLiBUaGVuIEkgd2lsbCBjb21wYXJlIHRoZSBidWlsZCB3aXRoIHdoYXQgSSBleHBlY3QuIEFueSByZWQgZmxhZ3MgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NTksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMjo0ODo1OC4xMTEzNDcyNjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2ODUzNzg1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0lGU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9zbWIvY2xpZW50L0tjb25maWc6Mjpjb25maWcgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUIzIGFuZCBDSUZTIHN1cHBvcnQgKGFkdmFuY2VkIG5ldHdvcmsgZmlsZXN5c3RlbSlcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNTMtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjU0OmNvbmZpZyBDSUZTX1NUQVRTMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cXHRib29sIFxcXCJFeHRlbmRlZCBzdGF0aXN0aWNzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTY3LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjktXFx0Ym9vbCBcXFwiU3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjgzOmNvbmZpZyBDSUZTX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04NC1cXHRib29sIFxcXCJLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6OTI6Y29uZmlnIENJRlNfWEFUVFJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXFx0Ym9vbCBcXFwiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEwOC1cXHRib29sIFxcXCJDSUZTIFBPU0lYIEV4dGVuc2lvbnNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMTk6Y29uZmlnIENJRlNfREVCVUdcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTIwLVxcdGJvb2wgXFxcIkVuYWJsZSBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjEyODpjb25maWcgQ0lGU19ERUJVRzJcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVxcdGJvb2wgXFxcIkVuYWJsZSBhZGRpdGlvbmFsIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEzOC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDAtXFx0Ym9vbCBcXFwiRHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE0OTpjb25maWcgQ0lGU19ERlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE1MC1cXHRib29sIFxcXCJERlMgZmVhdHVyZSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE2MS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTYyOmNvbmZpZyBDSUZTX1NXTl9VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVxcdGJvb2wgXFxcIlNXTiBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTcyLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkFsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTgwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxODE6Y29uZmlnIENJRlNfU01CX0RJUkVDVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXFx0Ym9vbCBcXFwiU01CIERpcmVjdCBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5MC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkyLVxcdGJvb2wgXFxcIlByb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTk5OmNvbmZpZyBDSUZTX1JPT1RcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAwLVxcdGJvb2wgXFxcIlNNQiByb290IGZpbGUgc3lzdGVtIChFeHBlcmltZW50YWwpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwNi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MjA3OmNvbmZpZyBDSUZTX0NPTVBSRVNTSU9OXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTTUIgbWVzc2FnZSBjb21wcmVzc2lvbiAoRXhwZXJpbWVudGFsKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDI6NDg6NTkuNzc5ODkwMzg5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1NTMxNjU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENJRlMgQ29uZmlndXJhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBjb25maWd1cmF0aW9uIGlzIHNldCB0byBgQ0lGU2AuIFJpZ2h0LCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGBmcy9zbWIvY2xpZW50L2NpZnNmcy5jYCBhbmQgYGZzL3NtYi9jbGllbnQvaW9jdGwuY2AuIE15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyBgY2lmc19maWxlYXR0cl9zZXRgLCBgY2lmc19zZXRfY29tcHJlc3Npb25gLCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgLiBUaGUgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIGBDSUZTYCBpcyBlbmFibGVkLiBJdCdzIHVzZWQgaW4gYm90aCBgaW9jdGwuY2AgYW5kIGBjaWZzZnMuY2AsIHNvIHRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGBmcy9zbWIvY2xpZW50L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBjb21waWxhdGlvbiBkZXBlbmRlbmNpZXMgYW5kIGZsYWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzA0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ5OjAzLjYzNTIwODU2N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjAxNzYzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb2N0bC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3NtYi9jbGllbnQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC9NYWtlZmlsZT04PWNpZnMteSA6PSB0cmFjZS5vIGNpZnNmcy5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIFxcXFxcXG4tLVxcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMTAtXFx0ICBjYWNoZWRfZGlyLm8gY2lmc191bmljb2RlLm8gY2lmc2VuY3J5cHQubyBcXFxcXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZToxMTpcXHQgIHJlYWRkaXIubyBpb2N0bC5vIHNlc3MubyBleHBvcnQubyB1bmMubyB3aW51Y2FzZS5vIFxcXFxcXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTEyLVxcdCAgc21iMm9wcy5vIHNtYjJtYXBlcnJvci5vIHNtYjJ0cmFuc3BvcnQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAyOjQ5OjAzLjY4MTIyODE5NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDYwOTAxNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBDSUZTIEZpbGUgQXR0cmlidXRlIENvbXByZXNzaW9uIEZsYWcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGR1ZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgQ0lGUyBmaWxlc3lzdGVtLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZpbGUgYXR0cmlidXRlIGhhbmRsaW5nIGFuZCBjb21wcmVzc2lvbi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYGlvY3RsLm9gIGlzIGluZGVlZCBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGNpZnNfZmlsZWF0dHJfc2V0YCB0byBtYW5hZ2UgdGhlIHNldHRpbmcgb2YgdGhlIGNvbXByZXNzaW9uIGZsYWcuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggYGlvY3RsKEZTX0lPQ19TRVRGTEFHUylgIG9uIENJRlMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLlxuXG5HaXZlbiB0aGF0IHRoaXMgcmVwcmVzZW50cyBhIGRpcmVjdCBjaGFuZ2UgdG8gaG93IGZpbGUgYXR0cmlidXRlcywgc3BlY2lmaWNhbGx5IGNvbXByZXNzaW9uLCBhcmUgc2V0IHdpdGhpbiB0aGUgQ0lGUyBzeXN0ZW0sIEknZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLCB3aGljaCBtYWtlcyBpdCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuXG5cblRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgSSd2ZSBpZGVudGlmaWVkIGFzIGJlaW5nIHJlbGV2YW50IGFyZTpcblxuKiAgIGBjaWZzX2ZpbGVhdHRyX3NldGAgKFRoaXMgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQpLlxuKiAgIGBjaWZzX2ZpbGVhdHRyX2dldGAgKE1pbm9yIGNoYW5nZXMpXG4qICAgYGNpZnNfc2V0X2NvbXByZXNzaW9uYCAoU3RhdGljLCBidXQgcG90ZW50aWFsbHkgcmVsZXZhbnQpXG4qICAgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIChTdGF0aWMsIGJ1dCBwb3RlbnRpYWxseSByZWxldmFudClcblxuVGhlIGVuYWJsaW5nIGNvbmZpZ3VyYXRpb24gaXMgYENJRlNgLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBDSUZTYCBpcyB0aGUgcmlnaHQgY29uZmlnIG9wdGlvbiBmb3IgZW5hYmxpbmcgQ0lGUyBhbmQgU01CMyBzdXBwb3J0LiBUaGVyZSBhcmVuJ3QgYW55IG90aGVyIGRlcGVuZGVudCBjb25maWdzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkLlxuXG5Jbml0aWFsbHksIEkgbm90ZWQgc29tZSByZW1vdmVkIGNvZGUgZnJvbSBgY2lmc19pb2N0bGAgcmVsYXRlZCB0byBgQ09ORklHX0NJRlNfUE9TSVhgIGFuZCBgQ09ORklHX0NJRlNfQUxMT1dfSU5TRUNVUkVfTEVHQUNZYCwgc3BlY2lmaWNhbGx5IGhhbmRsaW5nIGBGU19JT0NfR0VURkxBR1NgIGFuZCBgRlNfSU9DX1NFVEZMQUdTYC4gQnV0LCB0aG9zZSBhcmUgaGFuZGxlZCBub3cgYnkgYGNpZnNfZmlsZWF0dHJfZ2V0YCBhbmQgYGNpZnNfZmlsZWF0dHJfc2V0YCwgc28gdGhleSBhcmVuJ3QgcmVsZXZhbnQgdG8gbXkgZnV6emluZyBzY29wZS5cblxuSSBuZWVkIHRvIGZvY3VzIG9uIGBjaWZzX2ZpbGVhdHRyX3NldGAgYW5kIGBjaWZzX2ZpbGVhdHRyX2dldGAsIGFzIHRoZXkgYXJlIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4gYGNpZnNfc2V0X2NvbXByZXNzaW9uYCBhbmQgYGNpZnNfc2V0X2NvbXByZXNzaW9uX2J5X3BhdGhgIGFyZSBzdGF0aWMsIGFuZCBhbHRob3VnaCBsYXJnZSwgYW5kIHRodXMgbGVzcyBsaWtlbHkgdG8gYmUgaW5saW5lZCwgdGhlIGluc3RydWN0aW9ucyBpbmRpY2F0ZSB0aGF0IGl0J3MgcHJlZmVyYWJsZSB0byBmb2N1cyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFNvLCBgY2lmc19maWxlYXR0cl9zZXRgIGlzIHRoZSBwcmltYXJ5IHRhcmdldCwgYnV0IEknbGwgYWxzbyBpbmNsdWRlIGBjaWZzX2ZpbGVhdHRyX2dldGAsIGFzIGl0J3MgYmVlbiBtb2RpZmllZCwgYW5kIG1pZ2h0IHJldmVhbCBpbnRlcmVzdGluZyBjb2RlIHBhdGhzLlxuXG5UbyByZWl0ZXJhdGUsIHRoaXMgcGF0Y2ggbW92ZXMgdGhlIGhhbmRsaW5nIG9mIGBGU19JT0NfU0VURkxBR1NgIGZyb20gYGNpZnNfaW9jdGxgIHRvIGBjaWZzX2ZpbGVhdHRyX3NldGAuIFRoaXMgc2hpZnQgd2FycmFudHMgY2FyZWZ1bCBzY3J1dGlueS4gQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODExLCJPdXRwdXRUb2tlbnMiOjEzMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDI6NDk6MTYuNzQyMTMyNzkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUzMjc5NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaWZzX2ZpbGVhdHRyX3NldFwiLFxuICAgIFwiY2lmc19maWxlYXR0cl9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjaWZzX2ZpbGVhdHRyX3NldFwiLFxuICAgIFwiY2lmc19maWxlYXR0cl9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb3ZlcyB0aGUgaGFuZGxpbmcgb2YgZmlsZSBhdHRyaWJ1dGVzIChzcGVjaWZpY2FsbHkgdGhlIGNvbXByZXNzaW9uIGZsYWcpIGZyb20gdGhlIENJRlMgaW9jdGwgaGFuZGxlciB0byB0aGUgVkZTIGZpbGVhdHRyX3NldCBpbm9kZSBvcGVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgZmlsZSBhdHRyaWJ1dGVzIGFyZSBzZXQgYW5kIHJldHJpZXZlZCBpbiB0aGUgQ0lGUyBmaWxlc3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bChGU19JT0NfU0VURkxBR1MpIGFuZCBpb2N0bChGU19JT0NfR0VURkxBR1MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow5vwl6[1] Phase: Succeeded StartedAt: 2026-08-05 02:49:28 +0000 UTC FinishedAt: 2026-08-05 02:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 02:49:28 +0000 UTC FinishedAt: 2026-08-05 02:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2] Phase: Succeeded StartedAt: 2026-08-05 02:49:28 +0000 UTC FinishedAt: 2026-08-05 06:29:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 02:49:28 +0000 UTC FinishedAt: 2026-08-05 06:29:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 02:49:28 +0000 UTC FinishedAt: 2026-08-05 02:49:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 02:49:28 +0000 UTC FinishedAt: 2026-08-05 02:49:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow5vwl6/series-workflow5vwl6-convert-artifact-3200857765/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 02:49:38 +0000 UTC FinishedAt: 2026-08-05 03:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 02:49:38 +0000 UTC FinishedAt: 2026-08-05 03:06:06 +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:*ab648281-b40b-4821-8b78-a3f08b97e2f9,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-workflow5vwl6/series-workflow5vwl6-convert-artifact-3200857765/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": "35cea37b-82b5-402e-b07a-ca6d6d0669a1", "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-workflow5vwl6/series-workflow5vwl6-build-action-2933723851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 02:49:38 +0000 UTC FinishedAt: 2026-08-05 03:05:56 +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:*ab648281-b40b-4821-8b78-a3f08b97e2f9,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-workflow5vwl6/series-workflow5vwl6-convert-artifact-3200857765/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": "35cea37b-82b5-402e-b07a-ca6d6d0669a1", "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-workflow5vwl6/series-workflow5vwl6-build-action-2933723851/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 03:06:06 +0000 UTC FinishedAt: 2026-08-05 03:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 03:06:06 +0000 UTC FinishedAt: 2026-08-05 03:06:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 03:06:06 +0000 UTC FinishedAt: 2026-08-05 03:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 03:06:06 +0000 UTC FinishedAt: 2026-08-05 03:06:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflow5vwl6/series-workflow5vwl6-convert-artifact-3072227456/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 03:06:16 +0000 UTC FinishedAt: 2026-08-05 03:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 03:06:16 +0000 UTC FinishedAt: 2026-08-05 03:08:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35cea37b-82b5-402e-b07a-ca6d6d0669a1,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-workflow5vwl6/series-workflow5vwl6-build-action-2933723851/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-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 03:08:21 +0000 UTC FinishedAt: 2026-08-05 03:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 03:08:21 +0000 UTC FinishedAt: 2026-08-05 03:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 03:08:21 +0000 UTC FinishedAt: 2026-08-05 03:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 03:08:21 +0000 UTC FinishedAt: 2026-08-05 03:24:40 +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:*ab648281-b40b-4821-8b78-a3f08b97e2f9,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-workflow5vwl6/series-workflow5vwl6-convert-artifact-3072227456/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": "b389840a-492f-4cb3-b0a2-a0507da7a2c6", "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-workflow5vwl6/series-workflow5vwl6-build-action-822896188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 03:08:21 +0000 UTC FinishedAt: 2026-08-05 03:24:30 +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:*ab648281-b40b-4821-8b78-a3f08b97e2f9,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-workflow5vwl6/series-workflow5vwl6-convert-artifact-3072227456/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": "b389840a-492f-4cb3-b0a2-a0507da7a2c6", "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-workflow5vwl6/series-workflow5vwl6-build-action-822896188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 03:24:40 +0000 UTC FinishedAt: 2026-08-05 03:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 03:24:40 +0000 UTC FinishedAt: 2026-08-05 03:24:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 03:24:40 +0000 UTC FinishedAt: 2026-08-05 03:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 03:24:40 +0000 UTC FinishedAt: 2026-08-05 03:26:28 +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:*b389840a-492f-4cb3-b0a2-a0507da7a2c6,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-workflow5vwl6/series-workflow5vwl6-build-action-822896188/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-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 03:26:38 +0000 UTC FinishedAt: 2026-08-05 06:29:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 03:26:38 +0000 UTC FinishedAt: 2026-08-05 06:29:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*35cea37b-82b5-402e-b07a-ca6d6d0669a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b389840a-492f-4cb3-b0a2-a0507da7a2c6,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-workflow5vwl6/series-workflow5vwl6-build-action-2933723851/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-workflow5vwl6/series-workflow5vwl6-build-action-822896188/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 03:26:38 +0000 UTC FinishedAt: 2026-08-05 03:26:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 03:26:38 +0000 UTC FinishedAt: 2026-08-05 03:26:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5vwl6/series-workflow5vwl6-convert-artifact-3328451289/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 03:26:38 +0000 UTC FinishedAt: 2026-08-05 03:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 03:26:38 +0000 UTC FinishedAt: 2026-08-05 03:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 03:26:38 +0000 UTC FinishedAt: 2026-08-05 03:26:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 03:26:49 +0000 UTC FinishedAt: 2026-08-05 06:29:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vwl6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["cifs_fileattr_set","cifs_fileattr_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a3ed4fcd04b95347ad04cf4409b394bb7fbd0c02","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS"],"series_id":"d3f1ebd3-d17a-460b-b64b-5aa0bcc718b1","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 03:26:49 +0000 UTC FinishedAt: 2026-08-05 06:29:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35cea37b-82b5-402e-b07a-ca6d6d0669a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b389840a-492f-4cb3-b0a2-a0507da7a2c6,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-workflow5vwl6/series-workflow5vwl6-build-action-2933723851/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-workflow5vwl6/series-workflow5vwl6-build-action-822896188/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-workflow5vwl6/series-workflow5vwl6-convert-artifact-3328451289/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,}