Name: series-workflow9qlvv Phase: Succeeded StartedAt: 2026-08-03 18:12:57 +0000 UTC FinishedAt: 2026-08-03 21:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[0] Phase: Succeeded StartedAt: 2026-08-03 18:12:57 +0000 UTC FinishedAt: 2026-08-03 18:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 18:12:57 +0000 UTC FinishedAt: 2026-08-03 18:16:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT" ], "series_id": "ea18d4c5-2976-46b0-abe9-be6dd70f65be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_lru_sort_commit_inputs_store", "damon_reclaim_commit_inputs_store", "damon_lru_sort_turn", "damon_reclaim_turn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF90dXJuJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSYjMzk7cyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIGEgZmxhZyB0byB0cmFjayBpZiBEQU1PTiBoYXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYmVmb3JlIGFsbG93aW5nIGBkYW1vbl9jYWxsKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGYxNGRlMTFmMzUyOTdmZDlhMzg3M2JmYjI1MTQ4MWFiMzFkNGYwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MTQ6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbmluZGV4IDdlMDc3MDg0Y2IwM2EuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5AQCAtMzQ0LDYgJiM0MzszNDQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuIFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuJiM0MztcbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG5AQCAtMzY0LDExICYjNDM7MzY2LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiBcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qXG4tXHQgKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaXMgbm90IGluaXRpYWxpemVkIHRvIGF2b2lkXG4tXHQgKiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXG4tXHQgKi9cbi1cdGlmICghY3R4KVxuJiM0MztcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xuJiM0MztcdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuQEAgLTQyMSw2ICYjNDM7NDIwLDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuJiM0MztcdFx0ZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xuIFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcdTAwMjZjYWxsX2NvbnRyb2wpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IDA5ZTk0MWQ3NWY2N2QuLjQ1ZDU1NTdjYzU3NWEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuQEAgLTI3MSw2ICYjNDM7MjcxLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuIFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbiYjNDM7XG4gc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0yOTEsMTEgJiM0MzsyOTMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKlxuLVx0ICogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGlzIG5vdCBpbml0aWFsaXplZCB0byBhdm9pZFxuLVx0ICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuLVx0ICovXG4tXHRpZiAoIWN0eClcbiYjNDM7XHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbiYjNDM7XHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuQEAgLTM0NCw2ICYjNDM7MzQzLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbiBcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbiYjNDM7XHRcdGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xuIFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcdTAwMjZjYWxsX2NvbnRyb2wpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X3R1cm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV90dXJuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgREFNT04gc3Vic3lzdGVtJiMzOTtzIG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgYSBmbGFnIHRvIHRyYWNrIGlmIERBTU9OIGhhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCBiZWZvcmUgYWxsb3dpbmcgYGRhbW9uX2NhbGwoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZjE0ZGUxMWYzNTI5N2ZkOWEzODczYmZiMjUxNDgxYWIzMWQ0ZjAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxODoxNDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jCmluZGV4IDdlMDc3MDg0Y2IwM2EuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMzQ0LDYgJiM0MzszNDQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKQogCXJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDsKJiM0MzsKIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewpAQCAtMzY0LDExICYjNDM7MzY2LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKIAlpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdCkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gYXZvaWQKLQkgKiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCi0JICovCi0JaWYgKCFjdHgpCiYjNDM7CS8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqLwomIzQzOwlpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwpAQCAtNDIxLDYgJiM0Mzs0MjAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbikKIAllcnIgPSBkYW1vbl9zdGFydCgmYW1wO2N0eCwgMSwgdHJ1ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKJiM0MzsJaWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCkKJiM0MzsJCWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jCmluZGV4IDA5ZTk0MWQ3NWY2N2QuLjQ1ZDU1NTdjYzU3NWEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3JlY2xhaW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9yZWNsYWltLmMKQEAgLTI3MSw2ICYjNDM7MjcxLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKQogCXJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQ7CiYjNDM7CiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0yOTEsMTEgJiM0MzsyOTMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJaWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpCiAJCXJldHVybiAwOwogCi0JLyoKLQkgKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaXMgbm90IGluaXRpYWxpemVkIHRvIGF2b2lkCi0JICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLgotCSAqLwotCWlmICghY3R4KQomIzQzOwkvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi8KJiM0MzsJaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwpAQCAtMzQ0LDYgJiM0MzszNDMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKQogCWVyciA9IGRhbW9uX3N0YXJ0KCZhbXA7Y3R4LCAxLCB0cnVlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwomIzQzOwlpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpCiYjNDM7CQlkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEVuaGFuY2VkIFNhZmV0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYG1tL2RhbW9uL3JlY2xhaW0uY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgaXNzdWVzIOKAkyBzcGVjaWZpY2FsbHksIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2ltaWxhciBwcm9ibGVtcyB3aXRoaW4gdGhlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBpbnZvbHZlcyBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgYm9vbGVhbiBmbGFncywgYGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkYCBhbmQgYGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWRgLCB0byB0cmFjayB0aGUgc3VjY2Vzc2Z1bCBzdGFydHVwIG9mIERBTU9OLiBTbWFydCwgdXNpbmcgYSBzdGFydHVwIGZsYWcgaXMgYSBjb21tb24gcGF0dGVybiB0byBhdm9pZCB0aGVzZSBzb3J0cyBvZiByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGEgcXVpY2sgcmVtaW5kZXI6IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoZXNlIHNwZWNpZmljIGBfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zIGFjdHVhbGx5IGRvLiBBaCB5ZXMsIHRoZXkmIzM5O3JlIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9ucy4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZSBjb250ZXh0LgoKVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBzZWUgcHJlY2lzZWx5IGhvdyBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgaXMgYmVpbmcgdXNlZC4gVGhhdCYjMzk7bGwgcHJvdmlkZSB0aGUgY3J1Y2lhbCBjb250ZXh0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3RvcmUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoZW4sIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBjb21wbGV0ZSBhbmQgY292ZXJzIGFsbCBzY2VuYXJpb3MuIEV4Y2VsbGVudCwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmM9MzQ3PXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTAtXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzc4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBjb21taXRfaW5wdXRzX3BhcmFtX29wcyA9IHtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc5LVx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzgwOlx0LnNldCA9IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUsXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4MS1cdC5nZXQgPSBwYXJhbV9nZXRfYm9vbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBDb21taXQgSW5wdXRzKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsZWQgYGNvbW1pdF9pbnB1dHNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaW5kIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZCwgYW5kIGluIERBTU9OLCB0aGF0IHVzdWFsbHkgbWVhbnMgZGlnZ2luZyBhcm91bmQgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLiBJdCYjMzk7cyBhIGtleSBmaWxlIGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3IgbW9uaXRvcmluZyBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUgaWYgYGNvbW1pdF9pbnB1dHNgIGhhcyBhbnkgcHJlc2VuY2UgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZmluZCB3aGVyZSBpdHMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21taXRfaW5wdXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTI4PXN0YXRpYyBib29sIGVuYWJsZWQgX19yZWFkX21vc3RseTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzozOTpzdGF0aWMgYm9vbCBjb21taXRfaW5wdXRzIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQwLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQxLVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDI6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQzLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Nz1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUxLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzUyOlx0Ym9vbCBjb21taXRfaW5wdXRzX3JlcXVlc3Q7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM1My1cdGludCBlcnI7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM1NC1cdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY29udHJvbCA9IHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzU1Olx0XHQuZm4gPSBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTYtXHR9O1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzU4LVx0aWYgKCF2YWwpIHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzU5Olx0XHRjb21taXRfaW5wdXRzX3JlcXVlc3QgPSB0cnVlO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjAtXHR9IGVsc2Uge1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNjE6XHRcdGVyciA9IGtzdHJ0b2Jvb2wodmFsLCBcdTAwMjZjb21taXRfaW5wdXRzX3JlcXVlc3QpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjItXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjUtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2NjpcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjctXHRcdHJldHVybiAwO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc3LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzID0ge1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzktXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxubW0vZGFtb24vbHJ1X3NvcnQuYzozODA6XHQuc2V0ID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgxLVx0LmdldCA9IHBhcmFtX2dldF9ib29sLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgzLVxubW0vZGFtb24vbHJ1X3NvcnQuYzozODQ6bW9kdWxlX3BhcmFtX2NiKGNvbW1pdF9pbnB1dHMsIFx1MDAyNmNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzLCBcdTAwMjZjb21taXRfaW5wdXRzLCAwNjAwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUgUGFyYW1ldGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIsIGBkYW1vbl9scnVfc29ydC5jb21taXRfaW5wdXRzYCwgYW5kIHRoZSByZWxhdGVkIGBkYW1vbl9yZWNsYWltLmNvbW1pdF9pbnB1dHNgLiBJIHNlZSB0aGF0IHdyaXRpbmcgdG8gdGhpcyBwYXJhbWV0ZXIga2lja3Mgb2ZmIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb24uIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHN5c2ZzLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgbGVnaXRpbWF0ZSwgZnVuY3Rpb25hbCBpbnRlcmZhY2UsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGZ1enplZC4gSSBrbm93IEkgY2FuIHVzZSBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIgdG8gd3JpdGUgdmFsdWVzIGRpcmVjdGx5IHRvIGAvc3lzL21vZHVsZS9kYW1vbl9scnVfc29ydC9wYXJhbWV0ZXJzL2NvbW1pdF9pbnB1dHNgLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYm90aCBgZGFtb25fbHJ1X3NvcnRgIGFuZCBgZGFtb25fcmVjbGFpbWAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBwYXJhbWV0ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OX0xSVV9TT1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9ODg9Y29uZmlnIERBTU9OX1JFQ0xBSU1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBhY3Rpb25zOgoKKipBbmFseXppbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgaW4gdGhlIE1NL0RhbW9uIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgRGFtb24gc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdmFyaW91cyBjb25maWd1cmF0aW9ucyBpbnRlcmFjdC4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHJlYWRpbmcgYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGxheSBvdXQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEYW1vbiBhbmQgY2xlYXJseSBzaG93IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGFwcHJvYWNoIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCBhbmQgdGhlbiwgcG90ZW50aWFsbHksIGNvbnRyaWJ1dGUgdG8gdGhlIHN1YnN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdGhlbHBcbiAgODE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxuICA4MjpcdFxuICA4MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgODQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cbiAgODk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAgOTE6XHRcdGhlbHBcbiAgOTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG4gIDkzOlx0XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbiAgOTQ6XHRcdCAgdGhvc2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XG4gIDk3Olx0XHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcbiAgOTg6XHRcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXG4gIDk5Olx0XG4gMTAwOlx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXG4gMTAxOlx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXG4gMTA1Olx0XHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4gMTA2Olx0XHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gMTA3Olx0XG4gMTA4Olx0Y29uZmlnIERBTU9OX1NUQVRcbiAxMDk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuIDExMDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuIDExMTpcdFx0aGVscFxuIDExMjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXG4gMTEzOlx0XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG4gMTE0Olx0XHQgIG1ldHJpY3MuXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG4gMTE3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiAxMTg6XHRcdGRlcGVuZHMgb24gREFNT05fU1RBVFxuIDExOTpcdFx0ZGVmYXVsdCBEQU1PTl9TVEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNwZWNpYWxpc3QgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gREFNT04gRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IHBhdHRlcm4gcG9wcGluZyB1cC4gQm90aCBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAgY2xlYXJseSByZWx5IG9uIGBEQU1PTl9QQUREUmAuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIEl0IHRlbGxzIG1lIHRoYXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZyB3aXRoaW4gREFNT04gaXMgZnVuZGFtZW50YWwgdG8gdGhlIHJlY2xhaW0gYW5kIExSVSBzb3J0aW5nIGZ1bmN0aW9uYWxpdGllcy4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHVuZGVybHlpbmcgY29tcG9uZW50LiBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgZXhhbWluaW5nIHdoYXQgZXhhY3RseSBgREFNT05fUEFERFJgIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBvcGVyYXRlcy4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgLSBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBmb3VuZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fUEFERFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBEQU1PTl9QQUREUmAgY29uZmlndXJhdGlvbiBvcHRpb246CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIFBoeXNpY2FsIEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSwgYW5kIEkmIzM5O20gemVyb2luZyBpbiBvbiBgREFNT05fUEFERFJgLiBUaGlzIGlzIGtleS4gVGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBmcmFtZXdvcmsgc2VlbXMgdG8gaGF2ZSBhIHNwZWNpZmljIHdheSBvZiBoYW5kbGluZyBwaHlzaWNhbCBhZGRyZXNzZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyBjb25maWd1cmVkLiBJcyB0aGlzIG9wdGlvbiBlbmFibGluZyBzb21ldGhpbmc/IERpc2FibGluZyBzb21ldGhpbmc/IElzIGl0IGFib3V0IGhvdyBEQU1PTiAqaXRzZWxmKiB1c2VzIHBoeXNpY2FsIGFkZHJlc3Nlcywgb3IgaXMgaXQgYWJvdXQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzeXN0ZW0mIzM5O3MgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmc/CgpUaGUgS2NvbmZpZyBjb250ZXh0IHRlbGxzIG1lIGhvdyBhIGtlcm5lbCBkZXZlbG9wZXIgY2FuIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbnkgZGVmYXVsdCBzdGF0ZXMsIGFuZCBhbnkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBgREFNT05fUEFERFJgLiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgbWVtb3J5IG1vZGVscz8gS25vd2luZyB0aGUgdW5kZXJseWluZyByZWFzb25pbmcgaXMgY3J1Y2lhbCBmb3Igc29tZW9uZSB3b3JraW5nIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNob3VsZCBsb29rIGludG8gdGhlIHNvdXJjZSBmaWxlcyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgaWYgdGhlIHVzZXIgY29uZmlndXJlcyBpdCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGlzc3VlcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEdvdHRhIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IERBTU9OX1BBRERSKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBEQU1PTl9QQUREUmAgaXMgYnVpbHQgdXBvbiB0aGUgZm91bmRhdGlvbiBvZiBib3RoIGBEQU1PTmAgYW5kIHRoZSBgTU1VYC4gVGhpcyBtYWtlcyBzZW5zZTsgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGNvcmUgY29uY2VwdHMgaGVyZS4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYERBTU9OYCBmaXJzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBhbmQgaW50ZXJuYWwgd29ya2luZ3MgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYERBTU9OX1BBRERSYCYjMzk7cyByZWxpYW5jZSBvbiBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYERBTU9OYCBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIHRhc2ssIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIENvbnRleHQqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBEQU1PTiBpdHNlbGYg4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gSSBrbm93IHRoaXMgZmlsZSBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgREFNT04gc3Vic3lzdGVtIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbnRyb2xsYWJsZSwgd2hhdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0Li4uIGJhc2ljYWxseSwgdGhlIGFyY2hpdGVjdHVyYWwga25vYnMgYXZhaWxhYmxlIHRvIGEgdXNlciBvciBkZXZlbG9wZXIuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgREFNT04gY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB3aGV0aGVyIHRoZSB1c2VyIGNhbiBjaGFuZ2Ugc2FtcGxpbmcgcmF0ZXMsIHRocmVzaG9sZHMsIG9yIGV2ZW4gaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVzaWduIHBoaWxvc29waHkgYW5kIGhvdyBmbGV4aWJsZSB0aGUgdG9vbCBpcy4gVGhpcyBpbml0aWFsIGV4cGxvcmF0aW9uIHdpbGwgZ3VpZGUgbXkgZGVlcGVyIGRpdmVzIGludG8gdGhlIGNvZGUgbGF0ZXIgb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MwoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBPcHRpb25zIGFuZCBGdW5jdGlvbiBQb2ludGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgREFNT04gY29uZmlndXJhdGlvbnMgYXJlIHNldCB1cC4gTG9va3MgbGlrZSB0aGUgY29yZSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gTXkgZm9jdXMgaGVyZSBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIHRoZSBBUEkgZm9yIGNoYW5nZXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtJiMzOTtzIHBhcmFtZXRlciBzZXR0aW5nIGFuZCB0aGUgREFNT04gY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4gSG1tLCB0aGVzZSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCB0byBjb25zaWRlciBzaW5jZSBpdCBhZmZlY3RzIHRoZWlyIHZpc2liaWxpdHkgYW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkIGJ5IHRoZSBjb21waWxlci4gTGV0JiMzOTtzIGNvbmZpcm0gLSB5ZXMsIGBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgIGFuZCBgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgLgoKU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCB0aGVyZSYjMzk7cyBhIGNoYW5jZSB0aGV5IG1pZ2h0IGJlIGlubGluZWQsIG9yIG1pZ2h0IG5vdCBoYXZlIGRpc2NyZXRlIHN5bWJvbHMsIGJ1dC4uLiBBaCwgdGhleSYjMzk7cmUgYmVpbmcgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBrZXJuZWxfcGFyYW1fb3BzYC4gVGhhdOKAmXMgaXQhIFRoYXQgbWVhbnMgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBUaGV5ICp3aWxsKiBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEdyZWF0LCBub3cgSSBjYW4gYmUgY2VydGFpbiBpbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHVzYWdlLgoKSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgYXJlIHByZWZlcmFibGUuIEdpdmVuIHRoYXQgaXQgc291bmRzIGxpa2UgdGhleSBhcmUgc2V0dGluZyBzb21ldGhpbmcgdmlhIHN5c2ZzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBTbywgdGhlIHN5c2ZzIHdyaXRlIGxpa2VseSBnb2VzIHRocm91Z2ggYHBhcmFtX2F0dHJfc3RvcmVgIC0mZ3Q7IGBwYXJhbV9zZXRfYm9vbGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBpbiB0aGlzIGNhc2UsIGEgY3VzdG9tIGAuc2V0YCBmdW5jdGlvbiBpcyB1c2VkLiBUaW1lIHRvIGNoZWNrIGBtbS9kYW1vbi9scnVfc29ydC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgdGhhdCBJIGNhbiB1c2UgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKioKCkFscmlnaHQsIEkmIzM5O3ZlIGJlZW4gd3Jlc3RsaW5nIHdpdGggdGhpcyBxdWVyeSBmb3IgYSBiaXQgbm93LCBhbmQgSSYjMzk7bSBzZW5zaW5nIEkmIzM5O20gb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIFBlcmhhcHMgSSYjMzk7bSBnZXR0aW5nIGNhdWdodCB1cCBpbiB0aGUgYWxsdXJlIG9mIG1vcmUgYWR2YW5jZWQgcmVnZXggZmVhdHVyZXMgb3IgdGhpbmtpbmcgdG9vIG11Y2ggYWJvdXQgZWRnZSBjYXNlcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGNvbXBsZXhpdHkgaXMgaGluZGVyaW5nIHByb2dyZXNzLiBMZXQmIzM5O3Mgc3RlcCBiYWNrLCB0YWtlIGEgYnJlYXRoLCBhbmQgZ2V0IGJhY2sgdG8gYmFzaWNzLiBJJiMzOTttIGdvaW5nIHRvIHRyeSBhIG11Y2ggc2ltcGxlciBgZ3JlcGAgY29tbWFuZCBmaXJzdC4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgSSBjYW4gYWNoaWV2ZSBhIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIGNvcmUgZ29hbCB3aXRoIHNvbWV0aGluZyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4gSXTigJlzIG9mdGVuIGVhc2llciB0byBidWlsZCBmcm9tIGEgc2ltcGxlciB3b3JraW5nIHNvbHV0aW9uIHRoYW4gdHJ5aW5nIHRvIGRlYnVnIGEgY29tcGxleCBvbmUgcmlnaHQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGlzIGEgZ29vZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBjb3JlIHByb2JsZW0gYmVmb3JlIGdldHRpbmcgaW50byBtb3JlIGFkdmFuY2VkIHRlY2huaXF1ZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXJlZC1kb3duIGFwcHJvYWNoIHlpZWxkcyBzb21lIGluaXRpYWwgcG9zaXRpdmUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50ICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb25zIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mgb24gdGhpcyBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgbW9kdWxlIGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWUgcXVpY2sgd2lucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgc3VyZ2ljYWwgYXBwcm9hY2guIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIGltbWVkaWF0ZWx5IGhvbWUgaW4gb24gZnVuY3Rpb24gYW5kIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHBvdGVudGlhbCBpbmxpbmluZyBvcHBvcnR1bml0aWVzLCBhbmQgYSBxdWljayB2aWV3IG9mIHRoZSBzY29wZS92aXNpYmlsaXR5IHRvIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igc2ltcGxpZmljYXRpb24uCgpJJiMzOTttIHN0YXJ0aW5nIHdpdGg6IGBec3RhdGljIGludCBgLCBgXnN0YXRpYyB2b2lkIGAsIGBeaW50IGAsIGFuZCBgXnZvaWQgYC4gVGhlc2UgYXJlIHRoZSBzdGFydGluZyBwb2ludHMuIFRoaXMgd2lsbCBmbGFnIGFueSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgaW5saW5lZCwgb3IgZ2xvYmFsIGRlY2xhcmF0aW9ucyB0aGF0IHdlIGNvdWxkIGVsaW1pbmF0ZSB3aXRoIGJldHRlciB1c2Ugb2YgaW50ZXJuYWwgaGVhZGVycywgYWxvbmcgd2l0aCB0aGVpciByZXR1cm4gdHlwZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYW4gaW1tZWRpYXRlIHNlbnNlIG9mIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGFyZWFzIHdoZXJlIHRoZSBjb21waWxlciAqbWlnaHQqIGJlIGFibGUgdG8gcGVyZm9ybSBzb21lIG9wdGltaXphdGlvbnMuCgpJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaGVyZSBpbiB0ZXJtcyBvZiBjb2RlIHRoYXQgY291bGQgYmUgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggY2FuIGhlbHAgd2l0aCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIGFuZCBpbmxpbmluZyBjb3VsZCBwb3RlbnRpYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGNhbmRpZGF0ZXMgdG8gYW5hbHl6ZSBmdXJ0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHR1cm4gdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfGJvb2wpICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYy0yNy0gKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6Mjg6c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xubW0vZGFtb24vbHJ1X3NvcnQuYy0yOS1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzozOTpzdGF0aWMgYm9vbCBjb21taXRfaW5wdXRzIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQwLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NTM9bW9kdWxlX3BhcmFtKGFjdGl2ZV9tZW1fYnAsIHVsb25nLCAwNjAwKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTY1LSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzo2NjpzdGF0aWMgYm9vbCBhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscyBfX3JlYWRfbW9zdGx5O1xubW0vZGFtb24vbHJ1X3NvcnQuYy02Ny1tb2R1bGVfcGFyYW0oYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMsIGJvb2wsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtODAtICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjgxOnN0YXRpYyBib29sIGZpbHRlcl95b3VuZ19wYWdlcyBfX3JlYWRfbW9zdGx5O1xubW0vZGFtb24vbHJ1X3NvcnQuYy04Mi1tb2R1bGVfcGFyYW0oZmlsdGVyX3lvdW5nX3BhZ2VzLCBib29sLCAwNjAwKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyMD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfY29sZF9zY2hlbWUodW5zaWduZWQgaW50IGNvbGRfdGhyZXMpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMjgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjIyOTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMC1cdFx0c3RydWN0IGRhbW9zICpjb2xkX3NjaGVtZSlcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0OC1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQ5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNTAtXHRcdHN0cnVjdCBkYW1vcyAqY29sZF9zY2hlbWUpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTM0MS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG5tbS9kYW1vbi9scnVfc29ydC5jLTM0My17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDYtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0NzpzdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM4ND1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFx1MDAyNmNvbW1pdF9pbnB1dHMsIDA2MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zODUtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM4NjpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zODcte1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQwNi1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MDgte1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDI3LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0Mjg6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRyX3VuaXRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjktXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDQ5PU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDUxLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTI6c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZCh2b2lkKVxubW0vZGFtb24vbHJ1X3NvcnQuYy00NTMte1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDU4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9lbmFibGVkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDYwLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4MS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDgyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9sb2FkKGNoYXIgKmJ1ZmZlcixcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDgzLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ5ND1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00OTYtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5NzpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDk4LVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwNi1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwOC1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz01MzE9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01MzItXG5tbS9kYW1vbi9scnVfc29ydC5jOjUzMzpzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9scnVfc29ydF9pbml0KHZvaWQpXG5tbS9kYW1vbi9scnVfc29ydC5jLTUzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIERBTU9OIENvZGUgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUgREFNT04gY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBvcmdhbml6YXRpb24gb2YgaXRzIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBodW5jaCwgZ2l2ZW4gdGhlIHdheSB0aGluZ3MgYXJlIHN0cnVjdHVyZWQsIGlzIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgYXJlIGFsbCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBjb21tb24gcHJhY3RpY2UgZm9yIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb25zIHdpdGhpbiBhIHNwZWNpZmljIHNvdXJjZSBmaWxlLCB5b3Uga25vdywgdG8gbWFpbnRhaW4gZW5jYXBzdWxhdGlvbiBhbmQgYXZvaWQgdW5pbnRlbmRlZCBleHRlcm5hbCBjYWxscy4gSeKAmWQgYmV0IG9uIGl0LgoKTm93LCBJIGJldCB0aGF0IGlzIHByb2JhYmx5IHRoZSBzYW1lIGNhc2UgZm9yIGBtbS9kYW1vbi9yZWNsYWltLmNgLiBMZXQmIzM5O3MgY29uZmlybSB0aGlzIGJ5IG9wZW5pbmcgdXAgYG1tL2RhbW9uL3JlY2xhaW0uY2AgYW5kIGhhdmluZyBhIGxvb2suIEl0JiMzOTtsbCBiZSBxdWlja2VyIHRvIHZlcmlmeSB0aGFuIHRvIG1ha2UgYW4gYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWR8Ym9vbCkgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYy0yNy0gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYzoyODpzdGF0aWMgYm9vbCBlbmFibGVkIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjktXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM4LSAqL1xubW0vZGFtb24vcmVjbGFpbS5jOjM5OnN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYy00MC1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9OTA9bW9kdWxlX3BhcmFtKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrLCB1bG9uZywgMDYwMCk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTEwMi0gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYzoxMDM6c3RhdGljIGJvb2wgYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMgX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDQtbW9kdWxlX3BhcmFtKGF1dG90dW5lX21vbml0b3JpbmdfaW50ZXJ2YWxzLCBib29sLCAwNjAwKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTQ5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCBfX3JlYWRfbW9zdGx5ID0gMTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTU2LSAqL1xubW0vZGFtb24vcmVjbGFpbS5jOjE1NzpzdGF0aWMgYm9vbCBza2lwX2Fub24gX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNTgtbW9kdWxlX3BhcmFtKHNraXBfYW5vbiwgYm9vbCwgMDYwMCk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTMtXG5tbS9kYW1vbi9yZWNsYWltLmM6MTk0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjY4LVxubW0vZGFtb24vcmVjbGFpbS5jOjI2OTpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG5tbS9kYW1vbi9yZWNsYWltLmMtMjcwLXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjczLVxubW0vZGFtb24vcmVjbGFpbS5jOjI3NDpzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkO1xubW0vZGFtb24vcmVjbGFpbS5jLTI3NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTI3Ny1cdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzExPW1vZHVsZV9wYXJhbV9jYihjb21taXRfaW5wdXRzLCBcdTAwMjZjb21taXRfaW5wdXRzX3BhcmFtX29wcywgXHUwMDI2Y29tbWl0X2lucHV0cywgMDYwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzEyLVxubW0vZGFtb24vcmVjbGFpbS5jOjMxMzpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZGFtb25fY2FsbF9mbih2b2lkICphcmcpXG5tbS9kYW1vbi9yZWNsYWltLmMtMzE0LXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI5LVxubW0vZGFtb24vcmVjbGFpbS5jOjMzMDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxubW0vZGFtb24vcmVjbGFpbS5jLTMzMS17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM1MC1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNTE6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FkZHJfdW5pdF9zdG9yZShjb25zdCBjaGFyICp2YWwsXG5tbS9kYW1vbi9yZWNsYWltLmMtMzUyLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzcyPU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNzQtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mzc1OnN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxubW0vZGFtb24vcmVjbGFpbS5jLTM3Ni17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM4MS1cbm1tL2RhbW9uL3JlY2xhaW0uYzozODI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTM4My1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQwNC1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0MDU6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXG5tbS9kYW1vbi9yZWNsYWltLmMtNDA2LVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9NDE3PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtNDE5LVxubW0vZGFtb24vcmVjbGFpbS5jOjQyMDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTQyMS1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQyOS1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzA6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX2xvYWQoY2hhciAqYnVmZmVyLFxubW0vZGFtb24vcmVjbGFpbS5jLTQzMS1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQ1ND1tb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDU1LVxubW0vZGFtb24vcmVjbGFpbS5jOjQ1NjpzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy00NTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEQU1PTiYjMzk7cyBTdGF0aWMgRnVuY3Rpb24gVXNhZ2UgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZyByZWdhcmRpbmcgdGhpcyBEQU1PTiBjb2RlLiBJbml0aWFsbHksIG15IGluc3RpbmN0IHdhcyB0byBzaW1wbHkgbGlzdCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCwgbGlrZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAsIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBgZGFtb25fbHJ1X3NvcnRfdHVybmAsIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyByZW1pbmQgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGJldHRlciBmb3Igc3ltYm9sIHJlc29sdXRpb24uCgpTaW5jZSwgaW4gdGhpcyBjYXNlLCBhbGwgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBzdGF0aWMsIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjYXNlcyBvZiB0aGUgb25lcyBJIG9yaWdpbmFsbHkgbGlzdGVkIHRoYXQgX2NhbiYjMzk7dF8gYmUgaW5saW5lZC4gR2l2ZW4gdGhleSBhcmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgbGlrZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgLCB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGUgc2FtZSBnb2VzIGZvciBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBJJiMzOTttIGNvbmZpZGVudCB0aG9zZSBzaG91bGQgYmUgb24gbXkgbGlzdC4KCk5vdyBJIG5lZWQgdG8gY29uZmlybSBpZiBgZGFtb25fbHJ1X3NvcnRfdHVybmAgbWlnaHQgYmUgaW5saW5lZC4gSSBhbSBsaXN0aW5nIGl0IGFueXdheSwgaXQmIzM5O3MgZmluZS4KCk5leHQsIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJdCBzZWVtcyB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmU6IGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuCgpOb3csIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTl9QQUREUmAuIEl0IGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgTU1VYCwgYW5kIGBNTVVgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4uIGBEQU1PTmAgaXRzZWxmIGhhcyBubyBkZXBlbmRlbmNpZXMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgREFNT05fU1lTRlNgIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIGBEQU1PTl9SRUNMQUlNYCBvciBgREFNT05fTFJVX1NPUlRgLCBiZWNhdXNlIHRoZXkgYXJlIHVzaW5nIGBtb2R1bGVfcGFyYW1fY2JgIGFuZCBgbW9kdWxlX3BhcmFtYCBkaXJlY3RseSwgd2hpY2ggYXJlIGZyb20gdGhlIGNvcmUgbW9kdWxlIHBhcmFtZXRlciBzeXN0ZW0uIFNvIHRoYXQgbG9va3MgZ29vZC4KCkkgbmVlZCB0byBjb25maXJtIGJ5IGNoZWNraW5nIHRoZSBpbmNsdWRlIHN0YXRlbWVudHMgb2YgYG1tL2RhbW9uL2xydV9zb3J0LmNgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpbmNsdWRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jLTctXG5tbS9kYW1vbi9scnVfc29ydC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvZGFtb24uaFx1MDAzZVxubW0vZGFtb24vbHJ1X3NvcnQuYzo5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzdHJ0b3guaFx1MDAzZVxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTI6I2luY2x1ZGUgXCYjMzQ7bW9kdWxlcy1jb21tb24uaFwmIzM0O1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUmIzM5O3MgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIG1vZHVsZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgdGhleSYjMzk7cmUgdXNpbmcgc3RhbmRhcmQgbW9kdWxlIHBhcmFtZXRlcnMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIGVhc2llciB0byBtYW5hZ2UgYW5kIGludGVncmF0ZS4gTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpUaGVuIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9uczogYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBhbmQgYGRhbW9uX3JlY2xhaW1fdHVybmAuIE5vdyBJJiMzOTttIGdldHRpbmcgY3VyaW91cyBhYm91dCB0aGUgZmxvdy4gSSB3YW50IHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vbl9scnVfc29ydF90dXJuYCBpcyB1c2VkLCBzbyBJJiMzOTtsbCBzZWUgaWYgaXQgaXMgY2FsbGVkIGZyb20gYGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9scnVfc29ydF90dXJuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTQwMj1zdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MDYtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQwNzpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA4LXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ1OT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDc4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0Nzk6XHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfdHVybihlbmFibGVkKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDgwLX1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzMz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9scnVfc29ydF9pbml0KHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy01NDgtXHRpZiAoZW5hYmxlZClcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTQ5Olx0XHRlcnIgPSBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01NTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY3CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEQU1PTiBTdGFydHVwIFNlcXVlbmNpbmcgRml4IGFuZCBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgdGhhdCBjb25maXJtcyBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNyaXRpY2FsIGlzc3VlIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtIOKAkyBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCBwcmVtYXR1cmVseSwgYmVmb3JlIHRoZSBgY3R4YCAoY29udGV4dCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIG9wZXJhdGlvbmFsLiBUaGlzIHByZXNlbnRzIGEgdmVyeSByZWFsIHJpc2sgb2YgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHdvcnNlLCBjb3JydXB0aW5nIG1lbW9yeSBvciB0cmlnZ2VyaW5nIG90aGVyIHVucHJlZGljdGFibGUga2VybmVsIGJlaGF2aW9ycy4KClRoZSBwcm9wb3NlZCBzb2x1dGlvbiwgYXMgZXhwZWN0ZWQsIGludm9sdmVzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1dCBlc3NlbnRpYWwgYWRkaXRpb24uIFdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gZmxhZyB0byBtZXRpY3Vsb3VzbHkgdHJhY2sgd2hldGhlciBEQU1PTiBoYXMgcmVhY2hlZCBhICYjMzQ7c3RhcnRlZCYjMzQ7IHN0YXRlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN5bmNocm9uaXppbmcgdGhlIG9wZXJhdGlvbnMsIGFuZCBlbnN1cmluZyB0aGUgY29udGV4dCBpcyB2YWxpZCBiZWZvcmUgYW55IGNhbGxzIGFyZSBtYWRlLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBwcmltYXJpbHkgdG91Y2hpbmcgdGhlIERBTU9OIHN1YnN5c3RlbSYjMzk7cyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiBzZWUgdGhlIGltbWVkaWF0ZSBiZW5lZml0IGluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHN1YnN5c3RlbSwgc28gSSYjMzk7bSBoYXBweSB3aXRoIHRoYXQgYXBwcm9hY2guCgpOb3csIEkgbmVlZCB0byBvZmZpY2lhbGx5IG1hcmsgdGhpcyBhcyBkb25lLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdyB0byBjbG9zZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF90dXJuJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSYjMzk7cyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIGEgZmxhZyB0byB0cmFjayBpZiBEQU1PTiBoYXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYmVmb3JlIGFsbG93aW5nIGBkYW1vbl9jYWxsKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfdHVybiYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX3R1cm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0mIzM5O3MgbW9kdWxlIHBhcmFtZXRlciBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBhIGZsYWcgdG8gdHJhY2sgaWYgREFNT04gaGFzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIGJlZm9yZSBhbGxvd2luZyBgZGFtb25fY2FsbCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE0OjUxLjA0MjYxMDAwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzgxMTgxOTU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF90dXJuXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSdzIG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgYSBmbGFnIHRvIHRyYWNrIGlmIERBTU9OIGhhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCBiZWZvcmUgYWxsb3dpbmcgYGRhbW9uX2NhbGwoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE0OjUxLjA0MjYxNjg3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1MzU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGYxNGRlMTFmMzUyOTdmZDlhMzg3M2JmYjI1MTQ4MWFiMzFkNGYwMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE4OjE0OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXFxuaW5kZXggN2UwNzcwODRjYjAzYS4uN2RmNDVmOWEwYjNhZSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXFxuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbkBAIC0zNDQsNiArMzQ0LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxuK1xcbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4ge1xcbkBAIC0zNjQsMTEgKzM2Niw4IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gYXZvaWRcXG4tXFx0ICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKCFjdHgpXFxuK1xcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbitcXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y29udHJvbCk7XFxuQEAgLTQyMSw2ICs0MjAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4gXFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXFxuK1xcdFxcdGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTtcXG4gXFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jXFxuaW5kZXggMDllOTQxZDc1ZjY3ZC4uNDVkNTU1N2NjNTc1YSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMjcxLDYgKzI3MSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkO1xcbitcXG4gc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbiB7XFxuQEAgLTI5MSwxMSArMjkzLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaXMgbm90IGluaXRpYWxpemVkIHRvIGF2b2lkXFxuLVxcdCAqIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cXG4tXFx0ICovXFxuLVxcdGlmICghY3R4KVxcbitcXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cXG4rXFx0aWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y29udHJvbCk7XFxuQEAgLTM0NCw2ICszNDMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbiBcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKVxcbitcXHRcXHRkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTtcXG4gXFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTQ6NTEuNDU5MDE0MTY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA3Mzk1NDA1OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fdHVyblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgREFNT04gc3Vic3lzdGVtJ3MgbW9kdWxlIHBhcmFtZXRlciBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBhIGZsYWcgdG8gdHJhY2sgaWYgREFNT04gaGFzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIGJlZm9yZSBhbGxvd2luZyBgZGFtb25fY2FsbCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGYxNGRlMTFmMzUyOTdmZDlhMzg3M2JmYjI1MTQ4MWFiMzFkNGYwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MTQ6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggN2UwNzcwODRjYjAzYS4uN2RmNDVmOWEwYjNhZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDQsNiArMzQ0LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuK1xuIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0zNjQsMTEgKzM2Niw4IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKlxuLVx0ICogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGlzIG5vdCBpbml0aWFsaXplZCB0byBhdm9pZFxuLVx0ICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuLVx0ICovXG4tXHRpZiAoIWN0eClcbitcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xuK1x0aWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5AQCAtNDIxLDYgKzQyMCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4rXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuK1x0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggMDllOTQxZDc1ZjY3ZC4uNDVkNTU1N2NjNTc1YSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDYgKzI3MSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbitcbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4ge1xuQEAgLTI5MSwxMSArMjkzLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0aWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0Lypcbi1cdCAqIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gYXZvaWRcbi1cdCAqIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbi1cdCAqL1xuLVx0aWYgKCFjdHgpXG4rXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbitcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5AQCAtMzQ0LDYgKzM0Myw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbitcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbitcdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTQ6NTEuNDU5MDE2MTE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3NTMyNjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFbmhhbmNlZCBTYWZldHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIHNvbWUgcG90ZW50aWFsIGlzc3VlcyDigJMgc3BlY2lmaWNhbGx5LCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbWlsYXIgcHJvYmxlbXMgd2l0aGluIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBmaXggaW52b2x2ZXMgaW50cm9kdWNpbmcgdGhlc2UgbmV3IGJvb2xlYW4gZmxhZ3MsIGBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZGAgYW5kIGBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkYCwgdG8gdHJhY2sgdGhlIHN1Y2Nlc3NmdWwgc3RhcnR1cCBvZiBEQU1PTi4gU21hcnQsIHVzaW5nIGEgc3RhcnR1cCBmbGFnIGlzIGEgY29tbW9uIHBhdHRlcm4gdG8gYXZvaWQgdGhlc2Ugc29ydHMgb2YgcmFjZSBjb25kaXRpb25zLlxuXG5Ob3csIGEgcXVpY2sgcmVtaW5kZXI6IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoZXNlIHNwZWNpZmljIGBfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zIGFjdHVhbGx5IGRvLiBBaCB5ZXMsIHRoZXkncmUgdGhlIHN5c2ZzL21vZHVsZSBwYXJhbWV0ZXIgc3RvcmUgZnVuY3Rpb25zLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbnRleHQuXG5cblRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEknbGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBzZWUgcHJlY2lzZWx5IGhvdyBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgaXMgYmVpbmcgdXNlZC4gVGhhdCdsbCBwcm92aWRlIHRoZSBjcnVjaWFsIGNvbnRleHQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN0b3JlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCB3aGVuLCB0byBtYWtlIHN1cmUgdGhpcyBmaXggaXMgY29tcGxldGUgYW5kIGNvdmVycyBhbGwgc2NlbmFyaW9zLiBFeGNlbGxlbnQsIHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNDo1Ni42MzQzNDc1NTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NDM0OTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ3PXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQ5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgY29tbWl0X2lucHV0c19wYXJhbV9vcHMgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzktXFx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM4MDpcXHQuc2V0ID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4MS1cXHQuZ2V0ID0gcGFyYW1fZ2V0X2Jvb2wsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE0OjU4LjM4ODcwMzExNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTU5NTc3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvbW1pdCBJbnB1dHMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsZWQgYGNvbW1pdF9pbnB1dHNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaW5kIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZCwgYW5kIGluIERBTU9OLCB0aGF0IHVzdWFsbHkgbWVhbnMgZGlnZ2luZyBhcm91bmQgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLiBJdCdzIGEga2V5IGZpbGUgZm9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBvciBtb25pdG9yaW5nIHN1YnN5c3RlbS4gTGV0J3Mgc2VlIGlmIGBjb21taXRfaW5wdXRzYCBoYXMgYW55IHByZXNlbmNlIHRoZXJlLiBJJ2xsIG5lZWQgdG8gZ28gZmluZCB3aGVyZSBpdHMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjAxLjU4NDY2MzIzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI0MTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21taXRfaW5wdXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0yOD1zdGF0aWMgYm9vbCBlbmFibGVkIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzk6c3RhdGljIGJvb2wgY29tbWl0X2lucHV0cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDAtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNDc9c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MS17XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNTI6XFx0Ym9vbCBjb21taXRfaW5wdXRzX3JlcXVlc3Q7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTMtXFx0aW50IGVycjtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1NC1cXHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNvbnRyb2wgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNTU6XFx0XFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbixcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1Ni1cXHR9O1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTgtXFx0aWYgKCF2YWwpIHtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM1OTpcXHRcXHRjb21taXRfaW5wdXRzX3JlcXVlc3QgPSB0cnVlO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzYwLVxcdH0gZWxzZSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNjE6XFx0XFx0ZXJyID0ga3N0cnRvYm9vbCh2YWwsIFxcdTAwMjZjb21taXRfaW5wdXRzX3JlcXVlc3QpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzYyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM2NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2NjpcXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM2Ny1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc3LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzc4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBjb21taXRfaW5wdXRzX3BhcmFtX29wcyA9IHtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM3OS1cXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzgwOlxcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgxLVxcdC5nZXQgPSBwYXJhbV9nZXRfYm9vbCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgzLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzg0Om1vZHVsZV9wYXJhbV9jYihjb21taXRfaW5wdXRzLCBcXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFxcdTAwMjZjb21taXRfaW5wdXRzLCAwNjAwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6MDEuNjMwOTA5MjYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1NjIxMTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIE1vZHVsZSBQYXJhbWV0ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIsIGBkYW1vbl9scnVfc29ydC5jb21taXRfaW5wdXRzYCwgYW5kIHRoZSByZWxhdGVkIGBkYW1vbl9yZWNsYWltLmNvbW1pdF9pbnB1dHNgLiBJIHNlZSB0aGF0IHdyaXRpbmcgdG8gdGhpcyBwYXJhbWV0ZXIga2lja3Mgb2ZmIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb24uIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHN5c2ZzLiBUaGF0IG1lYW5zIGl0J3MgYSBsZWdpdGltYXRlLCBmdW5jdGlvbmFsIGludGVyZmFjZSwgYW5kIGltcG9ydGFudGx5LCBpdCdzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBmdXp6ZWQuIEkga25vdyBJIGNhbiB1c2Ugc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIHRvIHdyaXRlIHZhbHVlcyBkaXJlY3RseSB0byBgL3N5cy9tb2R1bGUvZGFtb25fbHJ1X3NvcnQvcGFyYW1ldGVycy9jb21taXRfaW5wdXRzYC4gTm93LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJvdGggYGRhbW9uX2xydV9zb3J0YCBhbmQgYGRhbW9uX3JlY2xhaW1gLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgcGFyYW1ldGVyIGFuZCB0aGUgdW5kZXJseWluZyBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njg5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjA1Ljk4NzEyMzg1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA0NjQzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9MUlVfU09SVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTg4PWNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjA3Ljc5MTc3MzU0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjYwNzAxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBhY3Rpb25zOlxuXG4qKkFuYWx5emluZyBLY29uZmlnIERlcGVuZGVuY2llcyBpbiB0aGUgTU0vRGFtb24gU3Vic3lzdGVtKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IERhbW9uIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHZhcmlvdXMgY29uZmlndXJhdGlvbnMgaW50ZXJhY3QuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHJlYWRpbmcgYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGxheSBvdXQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEYW1vbiBhbmQgY2xlYXJseSBzaG93IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGFwcHJvYWNoIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCBhbmQgdGhlbiwgcG90ZW50aWFsbHksIGNvbnRyaWJ1dGUgdG8gdGhlIHN1YnN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjExLjQ1Nzg0NjU0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdGhlbHBcXG4gIDgxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgODQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgREFNT05fUkVDTEFJTVxcbiAgODk6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuICA5MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuICA5MTpcXHRcXHRoZWxwXFxuICA5MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbiAgOTM6XFx0XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxuICA5NDpcXHRcXHQgIHRob3NlLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XFxuICA5NzpcXHRcXHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcXG4gIDk4OlxcdFxcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbiAxMDE6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gMTAzOlxcdFxcdGhlbHBcXG4gMTA0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxuIDEwNTpcXHRcXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuIDEwNjpcXHRcXHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwNzpcXHRcXG4gMTA4OlxcdGNvbmZpZyBEQU1PTl9TVEFUXFxuIDEwOTpcXHRcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbiAxMTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMTE6XFx0XFx0aGVscFxcbiAxMTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXFxuIDExMzpcXHRcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxuIDExNDpcXHRcXHQgIG1ldHJpY3MuXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbiAxMTc6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG4gMTE4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbiAxMTk6XFx0XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjExLjQ1NzkxNTg2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg2NjUzODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzcGVjaWFsaXN0IGluIHRoaXMgYXJlYTpcblxuKipEaWdnaW5nIGludG8gREFNT04gRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBwYXR0ZXJuIHBvcHBpbmcgdXAuIEJvdGggYERBTU9OX1JFQ0xBSU1gIGFuZCBgREFNT05fTFJVX1NPUlRgIGNsZWFybHkgcmVseSBvbiBgREFNT05fUEFERFJgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIEl0IHRlbGxzIG1lIHRoYXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZyB3aXRoaW4gREFNT04gaXMgZnVuZGFtZW50YWwgdG8gdGhlIHJlY2xhaW0gYW5kIExSVSBzb3J0aW5nIGZ1bmN0aW9uYWxpdGllcy4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHVuZGVybHlpbmcgY29tcG9uZW50LiBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgZXhhbWluaW5nIHdoYXQgZXhhY3RseSBgREFNT05fUEFERFJgIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBvcGVyYXRlcy4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCAtIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjE1LjQ0NDU3MjYxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMDA4NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fUEFERFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjE3LjA3NDY2ODE1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg0OTQwMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYERBTU9OX1BBRERSYCBjb25maWd1cmF0aW9uIG9wdGlvbjpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIFBoeXNpY2FsIEFkZHJlc3MgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUsIGFuZCBJJ20gemVyb2luZyBpbiBvbiBgREFNT05fUEFERFJgLiBUaGlzIGlzIGtleS4gVGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBmcmFtZXdvcmsgc2VlbXMgdG8gaGF2ZSBhIHNwZWNpZmljIHdheSBvZiBoYW5kbGluZyBwaHlzaWNhbCBhZGRyZXNzZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGNvbmZpZ3VyZWQuIElzIHRoaXMgb3B0aW9uIGVuYWJsaW5nIHNvbWV0aGluZz8gRGlzYWJsaW5nIHNvbWV0aGluZz8gSXMgaXQgYWJvdXQgaG93IERBTU9OICppdHNlbGYqIHVzZXMgcGh5c2ljYWwgYWRkcmVzc2VzLCBvciBpcyBpdCBhYm91dCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN5c3RlbSdzIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nP1xuXG5UaGUgS2NvbmZpZyBjb250ZXh0IHRlbGxzIG1lIGhvdyBhIGtlcm5lbCBkZXZlbG9wZXIgY2FuIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbnkgZGVmYXVsdCBzdGF0ZXMsIGFuZCBhbnkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBgREFNT05fUEFERFJgLiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgbWVtb3J5IG1vZGVscz8gS25vd2luZyB0aGUgdW5kZXJseWluZyByZWFzb25pbmcgaXMgY3J1Y2lhbCBmb3Igc29tZW9uZSB3b3JraW5nIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNob3VsZCBsb29rIGludG8gdGhlIHNvdXJjZSBmaWxlcyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgaWYgdGhlIHVzZXIgY29uZmlndXJlcyBpdCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGlzc3VlcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEdvdHRhIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNToyMC45NTk2MTI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNToyMC45NTk3MzAxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM1NDMxODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IERBTU9OX1BBRERSKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgREFNT05fUEFERFJgIGlzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYm90aCBgREFNT05gIGFuZCB0aGUgYE1NVWAuIFRoaXMgbWFrZXMgc2Vuc2U7IGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFyZSBjb3JlIGNvbmNlcHRzIGhlcmUuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBEQU1PTmAgZmlyc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgYW5kIGludGVybmFsIHdvcmtpbmdzIGJlZm9yZSBJIGNhbiBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGBEQU1PTl9QQUREUmAncyByZWxpYW5jZSBvbiBpdC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYERBTU9OYCBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6MjQuMDk1MTY1NTc1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3ODY2MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjI1Ljc3MzAzNjg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjk5NjkyMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgdGFzaywgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gS2NvbmZpZyBDb250ZXh0KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEknbSBmb2N1c2luZyBvbiB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIERBTU9OIGl0c2VsZiDigJMgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIEkga25vdyB0aGlzIGZpbGUgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERBTU9OIHN1YnN5c3RlbSBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbnRyb2xsYWJsZSwgd2hhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QuLi4gYmFzaWNhbGx5LCB0aGUgYXJjaGl0ZWN0dXJhbCBrbm9icyBhdmFpbGFibGUgdG8gYSB1c2VyIG9yIGRldmVsb3Blci4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBEQU1PTiBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugd2hldGhlciB0aGUgdXNlciBjYW4gY2hhbmdlIHNhbXBsaW5nIHJhdGVzLCB0aHJlc2hvbGRzLCBvciBldmVuIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGRlc2lnbiBwaGlsb3NvcGh5IGFuZCBob3cgZmxleGlibGUgdGhlIHRvb2wgaXMuIFRoaXMgaW5pdGlhbCBleHBsb3JhdGlvbiB3aWxsIGd1aWRlIG15IGRlZXBlciBkaXZlcyBpbnRvIHRoZSBjb2RlIGxhdGVyIG9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNTozNy40NzI3MzE2NDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjM3LjQ3MjgwMTk5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjE4MzIwOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBDb25maWd1cmF0aW9uIE9wdGlvbnMgYW5kIEZ1bmN0aW9uIFBvaW50ZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgREFNT04gY29uZmlndXJhdGlvbnMgYXJlIHNldCB1cC4gTG9va3MgbGlrZSB0aGUgY29yZSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gTXkgZm9jdXMgaGVyZSBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIHRoZSBBUEkgZm9yIGNoYW5nZXMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBzeXN0ZW0ncyBwYXJhbWV0ZXIgc2V0dGluZyBhbmQgdGhlIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4gSG1tLCB0aGVzZSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZnVuY3Rpb25zLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIGNvbnNpZGVyIHNpbmNlIGl0IGFmZmVjdHMgdGhlaXIgdmlzaWJpbGl0eSBhbmQgaG93IHRoZXkncmUgaGFuZGxlZCBieSB0aGUgY29tcGlsZXIuIExldCdzIGNvbmZpcm0gLSB5ZXMsIGBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgIGFuZCBgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgLlxuXG5TaW5jZSB0aGV5J3JlIHN0YXRpYywgdGhlcmUncyBhIGNoYW5jZSB0aGV5IG1pZ2h0IGJlIGlubGluZWQsIG9yIG1pZ2h0IG5vdCBoYXZlIGRpc2NyZXRlIHN5bWJvbHMsIGJ1dC4uLiBBaCwgdGhleSdyZSBiZWluZyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGtlcm5lbF9wYXJhbV9vcHNgLiBUaGF04oCZcyBpdCEgVGhhdCBtZWFucyB0aGV5ICp3b24ndCogYmUgaW5saW5lZC4gVGhleSAqd2lsbCogaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBHcmVhdCwgbm93IEkgY2FuIGJlIGNlcnRhaW4gaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVpciB1c2FnZS5cblxuSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgYXJlIHByZWZlcmFibGUuIEdpdmVuIHRoYXQgaXQgc291bmRzIGxpa2UgdGhleSBhcmUgc2V0dGluZyBzb21ldGhpbmcgdmlhIHN5c2ZzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBTbywgdGhlIHN5c2ZzIHdyaXRlIGxpa2VseSBnb2VzIHRocm91Z2ggYHBhcmFtX2F0dHJfc3RvcmVgIC1cdTAwM2UgYHBhcmFtX3NldF9ib29sYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGluIHRoaXMgY2FzZSwgYSBjdXN0b20gYC5zZXRgIGZ1bmN0aW9uIGlzIHVzZWQuIFRpbWUgdG8gY2hlY2sgYG1tL2RhbW9uL2xydV9zb3J0LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSB0aGF0IEkgY2FuIHVzZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6NDQuNjkxMTI1MjUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ2MzY0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjQ0Ljc0MzU5NTkyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU4OTYwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlNpbXBsaWZ5aW5nIHRoZSBBcHByb2FjaCoqXG5cbkFscmlnaHQsIEkndmUgYmVlbiB3cmVzdGxpbmcgd2l0aCB0aGlzIHF1ZXJ5IGZvciBhIGJpdCBub3csIGFuZCBJJ20gc2Vuc2luZyBJJ20gb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIFBlcmhhcHMgSSdtIGdldHRpbmcgY2F1Z2h0IHVwIGluIHRoZSBhbGx1cmUgb2YgbW9yZSBhZHZhbmNlZCByZWdleCBmZWF0dXJlcyBvciB0aGlua2luZyB0b28gbXVjaCBhYm91dCBlZGdlIGNhc2VzIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgY29tcGxleGl0eSBpcyBoaW5kZXJpbmcgcHJvZ3Jlc3MuIExldCdzIHN0ZXAgYmFjaywgdGFrZSBhIGJyZWF0aCwgYW5kIGdldCBiYWNrIHRvIGJhc2ljcy4gSSdtIGdvaW5nIHRvIHRyeSBhIG11Y2ggc2ltcGxlciBgZ3JlcGAgY29tbWFuZCBmaXJzdC4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgSSBjYW4gYWNoaWV2ZSBhIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIGNvcmUgZ29hbCB3aXRoIHNvbWV0aGluZyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4gSXTigJlzIG9mdGVuIGVhc2llciB0byBidWlsZCBmcm9tIGEgc2ltcGxlciB3b3JraW5nIHNvbHV0aW9uIHRoYW4gdHJ5aW5nIHRvIGRlYnVnIGEgY29tcGxleCBvbmUgcmlnaHQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGlzIGEgZ29vZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBjb3JlIHByb2JsZW0gYmVmb3JlIGdldHRpbmcgaW50byBtb3JlIGFkdmFuY2VkIHRlY2huaXF1ZXMuIExldCdzIHNlZSBpZiB0aGlzIHBhcmVkLWRvd24gYXBwcm9hY2ggeWllbGRzIHNvbWUgaW5pdGlhbCBwb3NpdGl2ZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNTo0OC41MDI1NTk1NDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzM1OTk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNTo0OC41NTEzMjY3OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5Nzk1OTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb25zIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mgb24gdGhpcyBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgbW9kdWxlIGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWUgcXVpY2sgd2lucy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzdXJnaWNhbCBhcHByb2FjaC4gSSdsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBpbW1lZGlhdGVseSBob21lIGluIG9uIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHBvdGVudGlhbCBpbmxpbmluZyBvcHBvcnR1bml0aWVzLCBhbmQgYSBxdWljayB2aWV3IG9mIHRoZSBzY29wZS92aXNpYmlsaXR5IHRvIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igc2ltcGxpZmljYXRpb24uXG5cbkknbSBzdGFydGluZyB3aXRoOiBgXnN0YXRpYyBpbnQgYCwgYF5zdGF0aWMgdm9pZCBgLCBgXmludCBgLCBhbmQgYF52b2lkIGAuIFRoZXNlIGFyZSB0aGUgc3RhcnRpbmcgcG9pbnRzLiBUaGlzIHdpbGwgZmxhZyBhbnkgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGlubGluZWQsIG9yIGdsb2JhbCBkZWNsYXJhdGlvbnMgdGhhdCB3ZSBjb3VsZCBlbGltaW5hdGUgd2l0aCBiZXR0ZXIgdXNlIG9mIGludGVybmFsIGhlYWRlcnMsIGFsb25nIHdpdGggdGhlaXIgcmV0dXJuIHR5cGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYWxsb3cgbWUgdG8gcXVpY2tseSBpZGVudGlmeSBhcmVhcyB3aGVyZSB0aGUgY29tcGlsZXIgKm1pZ2h0KiBiZSBhYmxlIHRvIHBlcmZvcm0gc29tZSBvcHRpbWl6YXRpb25zLlxuXG5JIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaGVyZSBpbiB0ZXJtcyBvZiBjb2RlIHRoYXQgY291bGQgYmUgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggY2FuIGhlbHAgd2l0aCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIGFuZCBpbmxpbmluZyBjb3VsZCBwb3RlbnRpYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGNhbmRpZGF0ZXMgdG8gYW5hbHl6ZSBmdXJ0aGVyLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gdHVybiB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjUzLjU0OTI4ODk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYwNTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxib29sKSBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jLTI3LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mjg6c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjktXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzk6c3RhdGljIGJvb2wgY29tbWl0X2lucHV0cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDAtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzPW1vZHVsZV9wYXJhbShhY3RpdmVfbWVtX2JwLCB1bG9uZywgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTY1LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NjY6c3RhdGljIGJvb2wgYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMgX19yZWFkX21vc3RseTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTY3LW1vZHVsZV9wYXJhbShhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscywgYm9vbCwgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTgwLSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6ODE6c3RhdGljIGJvb2wgZmlsdGVyX3lvdW5nX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy04Mi1tb2R1bGVfcGFyYW0oZmlsdGVyX3lvdW5nX3BhZ2VzLCBib29sLCAwNjAwKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjIwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19jb2xkX3NjaGVtZSh1bnNpZ25lZCBpbnQgY29sZF90aHJlcylcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjI4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjI5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMC1cXHRcXHRzdHJ1Y3QgZGFtb3MgKmNvbGRfc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNTAtXFx0XFx0c3RydWN0IGRhbW9zICpjb2xkX3NjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcwLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjcxOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDYtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDc6c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzg0PW1vZHVsZV9wYXJhbV9jYihjb21taXRfaW5wdXRzLCBcXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFxcdTAwMjZjb21taXRfaW5wdXRzLCAwNjAwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM4NjpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzg3LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA4LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDI3LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDI4OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkcl91bml0X3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyOS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDQ5PU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NTEtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTI6c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZCh2b2lkKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDUzLXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDU4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDU5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NjAtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4MS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4MjpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00ODMtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ5ND1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5Ni1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5NzpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5OC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTA2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MDgtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzMT1tb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFxcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTMyLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTMzOnN0YXRpYyBpbnQgX19pbml0IGRhbW9uX2xydV9zb3J0X2luaXQodm9pZClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjUzLjU5OTkwODc4N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzcyNTgxNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBEQU1PTiBDb2RlIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBEQU1PTiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG9yZ2FuaXphdGlvbiBvZiBpdHMgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGh1bmNoLCBnaXZlbiB0aGUgd2F5IHRoaW5ncyBhcmUgc3RydWN0dXJlZCwgaXMgdGhhdCB0aGUgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhcmUgYWxsIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3MgYSBwcmV0dHkgY29tbW9uIHByYWN0aWNlIGZvciBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyBzb3VyY2UgZmlsZSwgeW91IGtub3csIHRvIG1haW50YWluIGVuY2Fwc3VsYXRpb24gYW5kIGF2b2lkIHVuaW50ZW5kZWQgZXh0ZXJuYWwgY2FsbHMuIEnigJlkIGJldCBvbiBpdC5cblxuTm93LCBJIGJldCB0aGF0IGlzIHByb2JhYmx5IHRoZSBzYW1lIGNhc2UgZm9yIGBtbS9kYW1vbi9yZWNsYWltLmNgLiBMZXQncyBjb25maXJtIHRoaXMgYnkgb3BlbmluZyB1cCBgbW0vZGFtb24vcmVjbGFpbS5jYCBhbmQgaGF2aW5nIGEgbG9vay4gSXQnbGwgYmUgcXVpY2tlciB0byB2ZXJpZnkgdGhhbiB0byBtYWtlIGFuIGFzc3VtcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjc5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6NTguMzcyNDkyOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkxMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGludHx2b2lkfGJvb2wpIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jLTI3LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODpzdGF0aWMgYm9vbCBlbmFibGVkIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI5LVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM4LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzozOTpzdGF0aWMgYm9vbCBjb21taXRfaW5wdXRzIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQwLVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTkwPW1vZHVsZV9wYXJhbShxdW90YV9hdXRvdHVuZV9mZWVkYmFjaywgdWxvbmcsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTEwMi0gKi9cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTAzOnN0YXRpYyBib29sIGF1dG90dW5lX21vbml0b3JpbmdfaW50ZXJ2YWxzIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTEwNC1tb2R1bGVfcGFyYW0oYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMsIGJvb2wsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE0OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTU2LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoxNTc6c3RhdGljIGJvb2wgc2tpcF9hbm9uIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTE1OC1tb2R1bGVfcGFyYW0oc2tpcF9hbm9uLCBib29sLCAwNjAwKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE5NDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2OC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjY5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjcwLXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI3NDpzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI3NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTI3Ny1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMxMT1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXFx1MDAyNmNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzLCBcXHUwMDI2Y29tbWl0X2lucHV0cywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMxMi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzEzOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzE0LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMjU9c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMyOS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzMwOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzMS17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzUwLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNTE6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FkZHJfdW5pdF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTM1Mi1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zNzI9TU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzc0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNzU6c3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTM3Ni17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozODI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zODMtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDA0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MDU6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQwNi1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00MTc9TU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQxOS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDIwOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyMS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjktXFxubW0vZGFtb24vcmVjbGFpbS5jOjQzMDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQzMS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00NTQ9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDU1LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0NTY6c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ1Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjU4LjQxNzM5MjUwN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTU2MDA2NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIERBTU9OJ3MgU3RhdGljIEZ1bmN0aW9uIFVzYWdlIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgcmVnYXJkaW5nIHRoaXMgREFNT04gY29kZS4gSW5pdGlhbGx5LCBteSBpbnN0aW5jdCB3YXMgdG8gc2ltcGx5IGxpc3QgdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQsIGxpa2UgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBhbmQgYGRhbW9uX3JlY2xhaW1fdHVybmAuIEhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgcmVtaW5kIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGJldHRlciBmb3Igc3ltYm9sIHJlc29sdXRpb24uXG5cblNpbmNlLCBpbiB0aGlzIGNhc2UsIGFsbCBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIHN0YXRpYywgSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGNhc2VzIG9mIHRoZSBvbmVzIEkgb3JpZ2luYWxseSBsaXN0ZWQgdGhhdCBfY2FuJ3RfIGJlIGlubGluZWQuIEdpdmVuIHRoZXkgYXJlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIGxpa2UgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBUaGUgc2FtZSBnb2VzIGZvciBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBJJ20gY29uZmlkZW50IHRob3NlIHNob3VsZCBiZSBvbiBteSBsaXN0LlxuXG5Ob3cgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGRhbW9uX2xydV9zb3J0X3R1cm5gIG1pZ2h0IGJlIGlubGluZWQuIEkgYW0gbGlzdGluZyBpdCBhbnl3YXksIGl0J3MgZmluZS5cblxuTmV4dCwgSSBuZWVkIHRvIG5haWwgZG93biB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGFyZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC5cblxuTm93LCBJJ2xsIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTl9QQUREUmAuIEl0IGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBNTVVgLCBhbmQgYE1NVWAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4gYERBTU9OYCBpdHNlbGYgaGFzIG5vIGRlcGVuZGVuY2llcy5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgREFNT05fU1lTRlNgIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgYERBTU9OX1JFQ0xBSU1gIG9yIGBEQU1PTl9MUlVfU09SVGAsIGJlY2F1c2UgdGhleSBhcmUgdXNpbmcgYG1vZHVsZV9wYXJhbV9jYmAgYW5kIGBtb2R1bGVfcGFyYW1gIGRpcmVjdGx5LCB3aGljaCBhcmUgZnJvbSB0aGUgY29yZSBtb2R1bGUgcGFyYW1ldGVyIHN5c3RlbS4gU28gdGhhdCBsb29rcyBnb29kLlxuXG5JIG5lZWQgdG8gY29uZmlybSBieSBjaGVja2luZyB0aGUgaW5jbHVkZSBzdGF0ZW1lbnRzIG9mIGBtbS9kYW1vbi9scnVfc29ydC5jYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNjowNy45NzM0MDI1MzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjMyMTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaW5jbHVkZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmMtNy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RhbW9uLmhcXHUwMDNlXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc3RydG94LmhcXHUwMDNlXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjEyOiNpbmNsdWRlIFxcXCJtb2R1bGVzLWNvbW1vbi5oXFxcIlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE2OjA4LjEyNTcyOTg3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM2MjIwMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIE1vZHVsZSdzIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gbW9kdWxlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSBub3RpY2luZyBpcyB0aGF0IHRoZXkncmUgdXNpbmcgc3RhbmRhcmQgbW9kdWxlIHBhcmFtZXRlcnMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIGVhc2llciB0byBtYW5hZ2UgYW5kIGludGVncmF0ZS4gTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuVGhlbiBJIHNlZSB0aGUgY29yZSBmdW5jdGlvbnM6IGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAsIGBkYW1vbl9scnVfc29ydF90dXJuYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLiBOb3cgSSdtIGdldHRpbmcgY3VyaW91cyBhYm91dCB0aGUgZmxvdy4gSSB3YW50IHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vbl9scnVfc29ydF90dXJuYCBpcyB1c2VkLCBzbyBJJ2xsIHNlZSBpZiBpdCBpcyBjYWxsZWQgZnJvbSBgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9zdG9yZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE2OjMyLjQ4NzkzMzI5N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3Nzg2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbHJ1X3NvcnRfdHVyblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9NDAyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA4LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDU5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ3OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ3OTpcXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfdHVybihlbmFibGVkKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4MC19XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzMz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9scnVfc29ydF9pbml0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTU0OC1cXHRpZiAoZW5hYmxlZClcXG5tbS9kYW1vbi9scnVfc29ydC5jOjU0OTpcXHRcXHRlcnIgPSBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNjozMi41MzM3MTY2MTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NTAxNzg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRBTU9OIFN0YXJ0dXAgU2VxdWVuY2luZyBGaXggYW5kIEltcGxpY2F0aW9ucyoqXG5cbkFscmlnaHQsIHRoYXQgY29uZmlybXMgaXQuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBpc3N1ZSB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbSDigJMgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgcHJlbWF0dXJlbHksIGJlZm9yZSB0aGUgYGN0eGAgKGNvbnRleHQpIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBvcGVyYXRpb25hbC4gVGhpcyBwcmVzZW50cyBhIHZlcnkgcmVhbCByaXNrIG9mIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciB3b3JzZSwgY29ycnVwdGluZyBtZW1vcnkgb3IgdHJpZ2dlcmluZyBvdGhlciB1bnByZWRpY3RhYmxlIGtlcm5lbCBiZWhhdmlvcnMuXG5cblRoZSBwcm9wb3NlZCBzb2x1dGlvbiwgYXMgZXhwZWN0ZWQsIGludm9sdmVzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1dCBlc3NlbnRpYWwgYWRkaXRpb24uIFdlJ3JlIGludHJvZHVjaW5nIGEgYm9vbGVhbiBmbGFnIHRvIG1ldGljdWxvdXNseSB0cmFjayB3aGV0aGVyIERBTU9OIGhhcyByZWFjaGVkIGEgXCJzdGFydGVkXCIgc3RhdGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc3luY2hyb25pemluZyB0aGUgb3BlcmF0aW9ucywgYW5kIGVuc3VyaW5nIHRoZSBjb250ZXh0IGlzIHZhbGlkIGJlZm9yZSBhbnkgY2FsbHMgYXJlIG1hZGUuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgcHJpbWFyaWx5IHRvdWNoaW5nIHRoZSBEQU1PTiBzdWJzeXN0ZW0ncyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiBzZWUgdGhlIGltbWVkaWF0ZSBiZW5lZml0IGluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHN1YnN5c3RlbSwgc28gSSdtIGhhcHB5IHdpdGggdGhhdCBhcHByb2FjaC5cblxuTm93LCBJIG5lZWQgdG8gb2ZmaWNpYWxseSBtYXJrIHRoaXMgYXMgZG9uZS4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cgdG8gY2xvc2UgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY3LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE2OjM4Ljc3ODczNzA2N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Njc5ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF90dXJuXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSdzIG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgYSBmbGFnIHRvIHRyYWNrIGlmIERBTU9OIGhhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCBiZWZvcmUgYWxsb3dpbmcgYGRhbW9uX2NhbGwoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfdHVyblwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV90dXJuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0ncyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIGEgZmxhZyB0byB0cmFjayBpZiBEQU1PTiBoYXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYmVmb3JlIGFsbG93aW5nIGBkYW1vbl9jYWxsKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9qlvv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 18:12:57 +0000 UTC FinishedAt: 2026-08-03 18:16:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1dbd7c34bb92dd9c0b0363b75f6ec444299af108", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_PADDR", "DAMON_RECLAIM", "DAMON_LRU_SORT" ], "series_id": "ea18d4c5-2976-46b0-abe9-be6dd70f65be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_lru_sort_commit_inputs_store", "damon_reclaim_commit_inputs_store", "damon_lru_sort_turn", "damon_reclaim_turn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF90dXJuJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSYjMzk7cyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIGEgZmxhZyB0byB0cmFjayBpZiBEQU1PTiBoYXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYmVmb3JlIGFsbG93aW5nIGBkYW1vbl9jYWxsKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNGYxNGRlMTFmMzUyOTdmZDlhMzg3M2JmYjI1MTQ4MWFiMzFkNGYwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MTQ6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vbHJ1X3NvcnQuYyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbmluZGV4IDdlMDc3MDg0Y2IwM2EuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9scnVfc29ydC5jXG5AQCAtMzQ0LDYgJiM0MzszNDQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuIFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuJiM0MztcbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiB7XG5AQCAtMzY0LDExICYjNDM7MzY2LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbiBcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qXG4tXHQgKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaXMgbm90IGluaXRpYWxpemVkIHRvIGF2b2lkXG4tXHQgKiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuXG4tXHQgKi9cbi1cdGlmICghY3R4KVxuJiM0MztcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xuJiM0MztcdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuQEAgLTQyMSw2ICYjNDM7NDIwLDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuJiM0MztcdFx0ZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xuIFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcdTAwMjZjYWxsX2NvbnRyb2wpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9yZWNsYWltLmMgYi9tbS9kYW1vbi9yZWNsYWltLmNcbmluZGV4IDA5ZTk0MWQ3NWY2N2QuLjQ1ZDU1NTdjYzU3NWEgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuQEAgLTI3MSw2ICYjNDM7MjcxLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKVxuIFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbiYjNDM7XG4gc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0yOTEsMTEgJiM0MzsyOTMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKlxuLVx0ICogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGlzIG5vdCBpbml0aWFsaXplZCB0byBhdm9pZFxuLVx0ICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuLVx0ICovXG4tXHRpZiAoIWN0eClcbiYjNDM7XHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbiYjNDM7XHRpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0ZXJyID0gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNvbnRyb2wpO1xuQEAgLTM0NCw2ICYjNDM7MzQzLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX3R1cm4oYm9vbCBvbilcbiBcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbiYjNDM7XHRcdGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQgPSB0cnVlO1xuIFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcdTAwMjZjYWxsX2NvbnRyb2wpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fUkVDTEFJTSYjMzQ7LAogICAgJiMzNDtEQU1PTl9MUlVfU09SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX2xydV9zb3J0X3R1cm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcmVjbGFpbV90dXJuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgREFNT04gc3Vic3lzdGVtJiMzOTtzIG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgYSBmbGFnIHRvIHRyYWNrIGlmIERBTU9OIGhhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCBiZWZvcmUgYWxsb3dpbmcgYGRhbW9uX2NhbGwoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0ZjE0ZGUxMWYzNTI5N2ZkOWEzODczYmZiMjUxNDgxYWIzMWQ0ZjAxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMyAxODoxNDo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jCmluZGV4IDdlMDc3MDg0Y2IwM2EuLjdkZjQ1ZjlhMGIzYWUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vbHJ1X3NvcnQuYwpAQCAtMzQ0LDYgJiM0MzszNDQsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKQogCXJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDsKJiM0MzsKIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewpAQCAtMzY0LDExICYjNDM7MzY2LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCwKIAlpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdCkKIAkJcmV0dXJuIDA7CiAKLQkvKgotCSAqIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gYXZvaWQKLQkgKiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCi0JICovCi0JaWYgKCFjdHgpCiYjNDM7CS8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqLwomIzQzOwlpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwpAQCAtNDIxLDYgJiM0Mzs0MjAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbikKIAllcnIgPSBkYW1vbl9zdGFydCgmYW1wO2N0eCwgMSwgdHJ1ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKJiM0MzsJaWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCkKJiM0MzsJCWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jCmluZGV4IDA5ZTk0MWQ3NWY2N2QuLjQ1ZDU1NTdjYzU3NWEgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3JlY2xhaW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9yZWNsYWltLmMKQEAgLTI3MSw2ICYjNDM7MjcxLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfZm4odm9pZCAqYXJnKQogCXJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQ7CiYjNDM7CiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJCQkJCSAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7CkBAIC0yOTEsMTEgJiM0MzsyOTMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsCiAJaWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpCiAJCXJldHVybiAwOwogCi0JLyoKLQkgKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaXMgbm90IGluaXRpYWxpemVkIHRvIGF2b2lkCi0JICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLgotCSAqLwotCWlmICghY3R4KQomIzQzOwkvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi8KJiM0MzsJaWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGRhbW9uX2NhbGwoY3R4LCAmYW1wO2NvbnRyb2wpOwpAQCAtMzQ0LDYgJiM0MzszNDMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKQogCWVyciA9IGRhbW9uX3N0YXJ0KCZhbXA7Y3R4LCAxLCB0cnVlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwomIzQzOwlpZiAoIWRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWQpCiYjNDM7CQlkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTsKIAlyZXR1cm4gZGFtb25fY2FsbChjdHgsICZhbXA7Y2FsbF9jb250cm9sKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2ggZm9yIEVuaGFuY2VkIFNhZmV0eSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhbmQgYG1tL2RhbW9uL3JlY2xhaW0uY2AuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3Npbmcgc29tZSBwb3RlbnRpYWwgaXNzdWVzIOKAkyBzcGVjaWZpY2FsbHksIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igc2ltaWxhciBwcm9ibGVtcyB3aXRoaW4gdGhlIGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCBhbmQgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zLiBUaGUgY29yZSBvZiB0aGlzIGZpeCBpbnZvbHZlcyBpbnRyb2R1Y2luZyB0aGVzZSBuZXcgYm9vbGVhbiBmbGFncywgYGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkYCBhbmQgYGRhbW9uX3JlY2xhaW1fZGFtb25faGFzX3N0YXJ0ZWRgLCB0byB0cmFjayB0aGUgc3VjY2Vzc2Z1bCBzdGFydHVwIG9mIERBTU9OLiBTbWFydCwgdXNpbmcgYSBzdGFydHVwIGZsYWcgaXMgYSBjb21tb24gcGF0dGVybiB0byBhdm9pZCB0aGVzZSBzb3J0cyBvZiByYWNlIGNvbmRpdGlvbnMuCgpOb3csIGEgcXVpY2sgcmVtaW5kZXI6IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoZXNlIHNwZWNpZmljIGBfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zIGFjdHVhbGx5IGRvLiBBaCB5ZXMsIHRoZXkmIzM5O3JlIHRoZSBzeXNmcy9tb2R1bGUgcGFyYW1ldGVyIHN0b3JlIGZ1bmN0aW9ucy4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZSBjb250ZXh0LgoKVG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBzZWUgcHJlY2lzZWx5IGhvdyBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgaXMgYmVpbmcgdXNlZC4gVGhhdCYjMzk7bGwgcHJvdmlkZSB0aGUgY3J1Y2lhbCBjb250ZXh0LiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugc3RvcmUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIHdoZW4sIHRvIG1ha2Ugc3VyZSB0aGlzIGZpeCBpcyBjb21wbGV0ZSBhbmQgY292ZXJzIGFsbCBzY2VuYXJpb3MuIEV4Y2VsbGVudCwgdGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgZGVlcGVyIHJldmlldy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmM9MzQ3PXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTAtXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzc4PXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBjb21taXRfaW5wdXRzX3BhcmFtX29wcyA9IHtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc5LVx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzgwOlx0LnNldCA9IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUsXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4MS1cdC5nZXQgPSBwYXJhbV9nZXRfYm9vbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byBEQU1PTiYjMzk7cyBDb21taXQgSW5wdXRzKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsZWQgYGNvbW1pdF9pbnB1dHNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaW5kIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZCwgYW5kIGluIERBTU9OLCB0aGF0IHVzdWFsbHkgbWVhbnMgZGlnZ2luZyBhcm91bmQgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLiBJdCYjMzk7cyBhIGtleSBmaWxlIGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3IgbW9uaXRvcmluZyBzdWJzeXN0ZW0uIExldCYjMzk7cyBzZWUgaWYgYGNvbW1pdF9pbnB1dHNgIGhhcyBhbnkgcHJlc2VuY2UgdGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZmluZCB3aGVyZSBpdHMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21taXRfaW5wdXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTI4PXN0YXRpYyBib29sIGVuYWJsZWQgX19yZWFkX21vc3RseTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzozOTpzdGF0aWMgYm9vbCBjb21taXRfaW5wdXRzIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQwLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9MjcxPXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQxLVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDI6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQzLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM0Nz1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUxLXtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzUyOlx0Ym9vbCBjb21taXRfaW5wdXRzX3JlcXVlc3Q7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM1My1cdGludCBlcnI7XG5tbS9kYW1vbi9scnVfc29ydC5jLTM1NC1cdHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY29udHJvbCA9IHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzU1Olx0XHQuZm4gPSBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTYtXHR9O1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzU4LVx0aWYgKCF2YWwpIHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzU5Olx0XHRjb21taXRfaW5wdXRzX3JlcXVlc3QgPSB0cnVlO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjAtXHR9IGVsc2Uge1xubW0vZGFtb24vbHJ1X3NvcnQuYzozNjE6XHRcdGVyciA9IGtzdHJ0b2Jvb2wodmFsLCBcdTAwMjZjb21taXRfaW5wdXRzX3JlcXVlc3QpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjItXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjUtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2NjpcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNjctXHRcdHJldHVybiAwO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc3LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNzg6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzID0ge1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzktXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxubW0vZGFtb24vbHJ1X3NvcnQuYzozODA6XHQuc2V0ID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgxLVx0LmdldCA9IHBhcmFtX2dldF9ib29sLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgzLVxubW0vZGFtb24vbHJ1X3NvcnQuYzozODQ6bW9kdWxlX3BhcmFtX2NiKGNvbW1pdF9pbnB1dHMsIFx1MDAyNmNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzLCBcdTAwMjZjb21taXRfaW5wdXRzLCAwNjAwKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2ODkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUgUGFyYW1ldGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIsIGBkYW1vbl9scnVfc29ydC5jb21taXRfaW5wdXRzYCwgYW5kIHRoZSByZWxhdGVkIGBkYW1vbl9yZWNsYWltLmNvbW1pdF9pbnB1dHNgLiBJIHNlZSB0aGF0IHdyaXRpbmcgdG8gdGhpcyBwYXJhbWV0ZXIga2lja3Mgb2ZmIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb24uIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHN5c2ZzLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGEgbGVnaXRpbWF0ZSwgZnVuY3Rpb25hbCBpbnRlcmZhY2UsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGZ1enplZC4gSSBrbm93IEkgY2FuIHVzZSBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIgdG8gd3JpdGUgdmFsdWVzIGRpcmVjdGx5IHRvIGAvc3lzL21vZHVsZS9kYW1vbl9scnVfc29ydC9wYXJhbWV0ZXJzL2NvbW1pdF9pbnB1dHNgLiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgYm90aCBgZGFtb25fbHJ1X3NvcnRgIGFuZCBgZGFtb25fcmVjbGFpbWAuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gdGhpcyBwYXJhbWV0ZXIgYW5kIHRoZSB1bmRlcmx5aW5nIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OX0xSVV9TT1JUJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9ODg9Y29uZmlnIERBTU9OX1JFQ0xBSU1cbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBhY3Rpb25zOgoKKipBbmFseXppbmcgS2NvbmZpZyBEZXBlbmRlbmNpZXMgaW4gdGhlIE1NL0RhbW9uIFN1YnN5c3RlbSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgRGFtb24gc3Vic3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdmFyaW91cyBjb25maWd1cmF0aW9ucyBpbnRlcmFjdC4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIHJlYWRpbmcgYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGxheSBvdXQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEYW1vbiBhbmQgY2xlYXJseSBzaG93IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGFwcHJvYWNoIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCBhbmQgdGhlbiwgcG90ZW50aWFsbHksIGNvbnRyaWJ1dGUgdG8gdGhlIHN1YnN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdGhlbHBcbiAgODE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxuICA4MjpcdFxuICA4MzpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcbiAgODQ6XHRcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXG4gIDg1Olx0XG4gIDg2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIERBTU9OX1JFQ0xBSU1cbiAgODk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbiAgOTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAgOTE6XHRcdGhlbHBcbiAgOTI6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIHJlY2xhbWF0aW9uIHN1YnN5c3RlbS4gIEl0IGZpbmRzIHBhZ2VzXG4gIDkzOlx0XHQgIHRoYXQgbm90IGFjY2Vzc2VkIGZvciBhIGxvbmcgdGltZSAoY29sZCkgdXNpbmcgREFNT04gYW5kIHJlY2xhaW1cbiAgOTQ6XHRcdCAgdGhvc2UuXG4gIDk1Olx0XG4gIDk2Olx0XHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XG4gIDk3Olx0XHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcbiAgOTg6XHRcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXG4gIDk5Olx0XG4gMTAwOlx0Y29uZmlnIERBTU9OX0xSVV9TT1JUXG4gMTAxOlx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbiAxMDI6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiAxMDM6XHRcdGhlbHBcbiAxMDQ6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXG4gMTA1Olx0XHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXG4gMTA2Olx0XHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4gMTA3Olx0XG4gMTA4Olx0Y29uZmlnIERBTU9OX1NUQVRcbiAxMDk6XHRcdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuIDExMDpcdFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxuIDExMTpcdFx0aGVscFxuIDExMjpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXG4gMTEzOlx0XHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XG4gMTE0Olx0XHQgIG1ldHJpY3MuXG4gMTE1Olx0XG4gMTE2Olx0Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG4gMTE3Olx0XHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiAxMTg6XHRcdGRlcGVuZHMgb24gREFNT05fU1RBVFxuIDExOTpcdFx0ZGVmYXVsdCBEQU1PTl9TVEFUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNwZWNpYWxpc3QgaW4gdGhpcyBhcmVhOgoKKipEaWdnaW5nIGludG8gREFNT04gRGVwZW5kZW5jaWVzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzZWUgYSBkZXBlbmRlbmN5IHBhdHRlcm4gcG9wcGluZyB1cC4gQm90aCBgREFNT05fUkVDTEFJTWAgYW5kIGBEQU1PTl9MUlVfU09SVGAgY2xlYXJseSByZWx5IG9uIGBEQU1PTl9QQUREUmAuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIEl0IHRlbGxzIG1lIHRoYXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZyB3aXRoaW4gREFNT04gaXMgZnVuZGFtZW50YWwgdG8gdGhlIHJlY2xhaW0gYW5kIExSVSBzb3J0aW5nIGZ1bmN0aW9uYWxpdGllcy4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHVuZGVybHlpbmcgY29tcG9uZW50LiBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgZXhhbWluaW5nIHdoYXQgZXhhY3RseSBgREFNT05fUEFERFJgIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBvcGVyYXRlcy4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgLSBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBmb3VuZGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fUEFERFImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjIzMwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGBEQU1PTl9QQUREUmAgY29uZmlndXJhdGlvbiBvcHRpb246CgoqKkRpdmluZyBpbnRvIERBTU9OJiMzOTtzIFBoeXNpY2FsIEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZSwgYW5kIEkmIzM5O20gemVyb2luZyBpbiBvbiBgREFNT05fUEFERFJgLiBUaGlzIGlzIGtleS4gVGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBmcmFtZXdvcmsgc2VlbXMgdG8gaGF2ZSBhIHNwZWNpZmljIHdheSBvZiBoYW5kbGluZyBwaHlzaWNhbCBhZGRyZXNzZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBiZWluZyBjb25maWd1cmVkLiBJcyB0aGlzIG9wdGlvbiBlbmFibGluZyBzb21ldGhpbmc/IERpc2FibGluZyBzb21ldGhpbmc/IElzIGl0IGFib3V0IGhvdyBEQU1PTiAqaXRzZWxmKiB1c2VzIHBoeXNpY2FsIGFkZHJlc3Nlcywgb3IgaXMgaXQgYWJvdXQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzeXN0ZW0mIzM5O3MgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmc/CgpUaGUgS2NvbmZpZyBjb250ZXh0IHRlbGxzIG1lIGhvdyBhIGtlcm5lbCBkZXZlbG9wZXIgY2FuIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbnkgZGVmYXVsdCBzdGF0ZXMsIGFuZCBhbnkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBgREFNT05fUEFERFJgLiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgbWVtb3J5IG1vZGVscz8gS25vd2luZyB0aGUgdW5kZXJseWluZyByZWFzb25pbmcgaXMgY3J1Y2lhbCBmb3Igc29tZW9uZSB3b3JraW5nIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNob3VsZCBsb29rIGludG8gdGhlIHNvdXJjZSBmaWxlcyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgaWYgdGhlIHVzZXIgY29uZmlndXJlcyBpdCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGlzc3VlcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEdvdHRhIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY5NjMKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IERBTU9OX1BBRERSKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBEQU1PTl9QQUREUmAgaXMgYnVpbHQgdXBvbiB0aGUgZm91bmRhdGlvbiBvZiBib3RoIGBEQU1PTmAgYW5kIHRoZSBgTU1VYC4gVGhpcyBtYWtlcyBzZW5zZTsgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGNvcmUgY29uY2VwdHMgaGVyZS4gU28sIG15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRlbHZlIGludG8gYERBTU9OYCBmaXJzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciBhbmQgaW50ZXJuYWwgd29ya2luZ3MgYmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMgb2YgYERBTU9OX1BBRERSYCYjMzk7cyByZWxpYW5jZSBvbiBpdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYERBTU9OYCBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTEyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGlzIHRhc2ssIHJlbmRlcmVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIENvbnRleHQqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBEQU1PTiBpdHNlbGYg4oCTIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIG1hdHRlci4gSSBrbm93IHRoaXMgZmlsZSBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgREFNT04gc3Vic3lzdGVtIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGNvbnRyb2xsYWJsZSwgd2hhdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0Li4uIGJhc2ljYWxseSwgdGhlIGFyY2hpdGVjdHVyYWwga25vYnMgYXZhaWxhYmxlIHRvIGEgdXNlciBvciBkZXZlbG9wZXIuIE15IGdvYWwgaGVyZSBpcyB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgREFNT04gY29uZmlndXJhdGlvbiBsYW5kc2NhcGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGluZ3MgbGlrZSB3aGV0aGVyIHRoZSB1c2VyIGNhbiBjaGFuZ2Ugc2FtcGxpbmcgcmF0ZXMsIHRocmVzaG9sZHMsIG9yIGV2ZW4gaG93IERBTU9OIGludGVyYWN0cyB3aXRoIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGVzZSBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVzaWduIHBoaWxvc29waHkgYW5kIGhvdyBmbGV4aWJsZSB0aGUgdG9vbCBpcy4gVGhpcyBpbml0aWFsIGV4cGxvcmF0aW9uIHdpbGwgZ3VpZGUgbXkgZGVlcGVyIGRpdmVzIGludG8gdGhlIGNvZGUgbGF0ZXIgb24uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1MwoJCQkJCQkJb3V0cHV0OiA2OAoJCQkJCQkJdGhvdWdodHM6IDMzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gQ29uZmlndXJhdGlvbiBPcHRpb25zIGFuZCBGdW5jdGlvbiBQb2ludGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgREFNT04gY29uZmlndXJhdGlvbnMgYXJlIHNldCB1cC4gTG9va3MgbGlrZSB0aGUgY29yZSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gTXkgZm9jdXMgaGVyZSBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIHRoZSBBUEkgZm9yIGNoYW5nZXMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgc3lzdGVtJiMzOTtzIHBhcmFtZXRlciBzZXR0aW5nIGFuZCB0aGUgREFNT04gY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4gSG1tLCB0aGVzZSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEga2V5IGRldGFpbCB0byBjb25zaWRlciBzaW5jZSBpdCBhZmZlY3RzIHRoZWlyIHZpc2liaWxpdHkgYW5kIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGVkIGJ5IHRoZSBjb21waWxlci4gTGV0JiMzOTtzIGNvbmZpcm0gLSB5ZXMsIGBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgIGFuZCBgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgLgoKU2luY2UgdGhleSYjMzk7cmUgc3RhdGljLCB0aGVyZSYjMzk7cyBhIGNoYW5jZSB0aGV5IG1pZ2h0IGJlIGlubGluZWQsIG9yIG1pZ2h0IG5vdCBoYXZlIGRpc2NyZXRlIHN5bWJvbHMsIGJ1dC4uLiBBaCwgdGhleSYjMzk7cmUgYmVpbmcgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGBrZXJuZWxfcGFyYW1fb3BzYC4gVGhhdOKAmXMgaXQhIFRoYXQgbWVhbnMgdGhleSAqd29uJiMzOTt0KiBiZSBpbmxpbmVkLiBUaGV5ICp3aWxsKiBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuIEdyZWF0LCBub3cgSSBjYW4gYmUgY2VydGFpbiBpbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHVzYWdlLgoKSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgYXJlIHByZWZlcmFibGUuIEdpdmVuIHRoYXQgaXQgc291bmRzIGxpa2UgdGhleSBhcmUgc2V0dGluZyBzb21ldGhpbmcgdmlhIHN5c2ZzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBTbywgdGhlIHN5c2ZzIHdyaXRlIGxpa2VseSBnb2VzIHRocm91Z2ggYHBhcmFtX2F0dHJfc3RvcmVgIC0mZ3Q7IGBwYXJhbV9zZXRfYm9vbGAgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBpbiB0aGlzIGNhc2UsIGEgY3VzdG9tIGAuc2V0YCBmdW5jdGlvbiBpcyB1c2VkLiBUaW1lIHRvIGNoZWNrIGBtbS9kYW1vbi9scnVfc29ydC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgdGhhdCBJIGNhbiB1c2UgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMjgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqU2ltcGxpZnlpbmcgdGhlIEFwcHJvYWNoKioKCkFscmlnaHQsIEkmIzM5O3ZlIGJlZW4gd3Jlc3RsaW5nIHdpdGggdGhpcyBxdWVyeSBmb3IgYSBiaXQgbm93LCBhbmQgSSYjMzk7bSBzZW5zaW5nIEkmIzM5O20gb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIFBlcmhhcHMgSSYjMzk7bSBnZXR0aW5nIGNhdWdodCB1cCBpbiB0aGUgYWxsdXJlIG9mIG1vcmUgYWR2YW5jZWQgcmVnZXggZmVhdHVyZXMgb3IgdGhpbmtpbmcgdG9vIG11Y2ggYWJvdXQgZWRnZSBjYXNlcyByaWdodCBvZmYgdGhlIGJhdC4gVGhlIGNvbXBsZXhpdHkgaXMgaGluZGVyaW5nIHByb2dyZXNzLiBMZXQmIzM5O3Mgc3RlcCBiYWNrLCB0YWtlIGEgYnJlYXRoLCBhbmQgZ2V0IGJhY2sgdG8gYmFzaWNzLiBJJiMzOTttIGdvaW5nIHRvIHRyeSBhIG11Y2ggc2ltcGxlciBgZ3JlcGAgY29tbWFuZCBmaXJzdC4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgSSBjYW4gYWNoaWV2ZSBhIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIGNvcmUgZ29hbCB3aXRoIHNvbWV0aGluZyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4gSXTigJlzIG9mdGVuIGVhc2llciB0byBidWlsZCBmcm9tIGEgc2ltcGxlciB3b3JraW5nIHNvbHV0aW9uIHRoYW4gdHJ5aW5nIHRvIGRlYnVnIGEgY29tcGxleCBvbmUgcmlnaHQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGlzIGEgZ29vZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBjb3JlIHByb2JsZW0gYmVmb3JlIGdldHRpbmcgaW50byBtb3JlIGFkdmFuY2VkIHRlY2huaXF1ZXMuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXJlZC1kb3duIGFwcHJvYWNoIHlpZWxkcyBzb21lIGluaXRpYWwgcG9zaXRpdmUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50ICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTk0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb25zIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mgb24gdGhpcyBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgbW9kdWxlIGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWUgcXVpY2sgd2lucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIGEgc3VyZ2ljYWwgYXBwcm9hY2guIEkmIzM5O2xsIHJlYWNoIGZvciBgZ3JlcGAgYW5kIGltbWVkaWF0ZWx5IGhvbWUgaW4gb24gZnVuY3Rpb24gYW5kIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHBvdGVudGlhbCBpbmxpbmluZyBvcHBvcnR1bml0aWVzLCBhbmQgYSBxdWljayB2aWV3IG9mIHRoZSBzY29wZS92aXNpYmlsaXR5IHRvIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igc2ltcGxpZmljYXRpb24uCgpJJiMzOTttIHN0YXJ0aW5nIHdpdGg6IGBec3RhdGljIGludCBgLCBgXnN0YXRpYyB2b2lkIGAsIGBeaW50IGAsIGFuZCBgXnZvaWQgYC4gVGhlc2UgYXJlIHRoZSBzdGFydGluZyBwb2ludHMuIFRoaXMgd2lsbCBmbGFnIGFueSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgaW5saW5lZCwgb3IgZ2xvYmFsIGRlY2xhcmF0aW9ucyB0aGF0IHdlIGNvdWxkIGVsaW1pbmF0ZSB3aXRoIGJldHRlciB1c2Ugb2YgaW50ZXJuYWwgaGVhZGVycywgYWxvbmcgd2l0aCB0aGVpciByZXR1cm4gdHlwZXMuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYW4gaW1tZWRpYXRlIHNlbnNlIG9mIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIGFuZCBhbGxvdyBtZSB0byBxdWlja2x5IGlkZW50aWZ5IGFyZWFzIHdoZXJlIHRoZSBjb21waWxlciAqbWlnaHQqIGJlIGFibGUgdG8gcGVyZm9ybSBzb21lIG9wdGltaXphdGlvbnMuCgpJIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaGVyZSBpbiB0ZXJtcyBvZiBjb2RlIHRoYXQgY291bGQgYmUgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggY2FuIGhlbHAgd2l0aCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIGFuZCBpbmxpbmluZyBjb3VsZCBwb3RlbnRpYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGNhbmRpZGF0ZXMgdG8gYW5hbHl6ZSBmdXJ0aGVyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIHR1cm4gdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkfGJvb2wpICYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uL2xydV9zb3J0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYy0yNy0gKi9cbm1tL2RhbW9uL2xydV9zb3J0LmM6Mjg6c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xubW0vZGFtb24vbHJ1X3NvcnQuYy0yOS1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzozOTpzdGF0aWMgYm9vbCBjb21taXRfaW5wdXRzIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTQwLVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NTM9bW9kdWxlX3BhcmFtKGFjdGl2ZV9tZW1fYnAsIHVsb25nLCAwNjAwKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTY1LSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzo2NjpzdGF0aWMgYm9vbCBhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscyBfX3JlYWRfbW9zdGx5O1xubW0vZGFtb24vbHJ1X3NvcnQuYy02Ny1tb2R1bGVfcGFyYW0oYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMsIGJvb2wsIDA2MDApO1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtODAtICovXG5tbS9kYW1vbi9scnVfc29ydC5jOjgxOnN0YXRpYyBib29sIGZpbHRlcl95b3VuZ19wYWdlcyBfX3JlYWRfbW9zdGx5O1xubW0vZGFtb24vbHJ1X3NvcnQuYy04Mi1tb2R1bGVfcGFyYW0oZmlsdGVyX3lvdW5nX3BhZ2VzLCBib29sLCAwNjAwKTtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTIyMD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfY29sZF9zY2hlbWUodW5zaWduZWQgaW50IGNvbGRfdGhyZXMpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yMjgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjIyOTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FkZF9xdW90YV9nb2FscyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMC1cdFx0c3RydWN0IGRhbW9zICpjb2xkX3NjaGVtZSlcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTI0OC1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MjQ5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX2ZpbHRlcnMoc3RydWN0IGRhbW9zICpob3Rfc2NoZW1lLFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNTAtXHRcdHN0cnVjdCBkYW1vcyAqY29sZF9zY2hlbWUpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNzAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjI3MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTM0MS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG5tbS9kYW1vbi9scnVfc29ydC5jLTM0My17XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDYtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM0NzpzdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZDtcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzUwLVx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTM4ND1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFx1MDAyNmNvbW1pdF9pbnB1dHMsIDA2MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy0zODUtXG5tbS9kYW1vbi9scnVfc29ydC5jOjM4NjpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxubW0vZGFtb24vbHJ1X3NvcnQuYy0zODcte1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQwNi1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MDgte1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDI3LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0Mjg6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRyX3VuaXRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vbHJ1X3NvcnQuYy00MjktXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDQ5PU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDUxLVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTI6c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZCh2b2lkKVxubW0vZGFtb24vbHJ1X3NvcnQuYy00NTMte1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDU4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9lbmFibGVkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDYwLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4MS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDgyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9sb2FkKGNoYXIgKmJ1ZmZlcixcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDgzLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ5ND1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00OTYtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5NzpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDk4LVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwNi1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwOC1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYz01MzE9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01MzItXG5tbS9kYW1vbi9scnVfc29ydC5jOjUzMzpzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9scnVfc29ydF9pbml0KHZvaWQpXG5tbS9kYW1vbi9scnVfc29ydC5jLTUzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjc5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIERBTU9OIENvZGUgU3RydWN0dXJlKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUgREFNT04gY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBvcmdhbml6YXRpb24gb2YgaXRzIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBodW5jaCwgZ2l2ZW4gdGhlIHdheSB0aGluZ3MgYXJlIHN0cnVjdHVyZWQsIGlzIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgYXJlIGFsbCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBjb21tb24gcHJhY3RpY2UgZm9yIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb25zIHdpdGhpbiBhIHNwZWNpZmljIHNvdXJjZSBmaWxlLCB5b3Uga25vdywgdG8gbWFpbnRhaW4gZW5jYXBzdWxhdGlvbiBhbmQgYXZvaWQgdW5pbnRlbmRlZCBleHRlcm5hbCBjYWxscy4gSeKAmWQgYmV0IG9uIGl0LgoKTm93LCBJIGJldCB0aGF0IGlzIHByb2JhYmx5IHRoZSBzYW1lIGNhc2UgZm9yIGBtbS9kYW1vbi9yZWNsYWltLmNgLiBMZXQmIzM5O3MgY29uZmlybSB0aGlzIGJ5IG9wZW5pbmcgdXAgYG1tL2RhbW9uL3JlY2xhaW0uY2AgYW5kIGhhdmluZyBhIGxvb2suIEl0JiMzOTtsbCBiZSBxdWlja2VyIHRvIHZlcmlmeSB0aGFuIHRvIG1ha2UgYW4gYXNzdW1wdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWR8Ym9vbCkgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vcmVjbGFpbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3JlY2xhaW0uYy0yNy0gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYzoyODpzdGF0aWMgYm9vbCBlbmFibGVkIF9fcmVhZF9tb3N0bHk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMjktXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM4LSAqL1xubW0vZGFtb24vcmVjbGFpbS5jOjM5OnN0YXRpYyBib29sIGNvbW1pdF9pbnB1dHMgX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYy00MC1cbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9OTA9bW9kdWxlX3BhcmFtKHF1b3RhX2F1dG90dW5lX2ZlZWRiYWNrLCB1bG9uZywgMDYwMCk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTEwMi0gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYzoxMDM6c3RhdGljIGJvb2wgYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMgX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xMDQtbW9kdWxlX3BhcmFtKGF1dG90dW5lX21vbml0b3JpbmdfaW50ZXJ2YWxzLCBib29sLCAwNjAwKTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MTQ5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCBfX3JlYWRfbW9zdGx5ID0gMTtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTU2LSAqL1xubW0vZGFtb24vcmVjbGFpbS5jOjE1NzpzdGF0aWMgYm9vbCBza2lwX2Fub24gX19yZWFkX21vc3RseTtcbm1tL2RhbW9uL3JlY2xhaW0uYy0xNTgtbW9kdWxlX3BhcmFtKHNraXBfYW5vbiwgYm9vbCwgMDYwMCk7XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTE2Nz1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9yZWNsYWltX25ld19zY2hlbWUodW5zaWduZWQgbG9uZyBhZ2dyX2ludGVydmFsKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTMtXG5tbS9kYW1vbi9yZWNsYWltLmM6MTk0OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9hcHBseV9wYXJhbWV0ZXJzKHZvaWQpXG5tbS9kYW1vbi9yZWNsYWltLmMtMTk1LXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjY4LVxubW0vZGFtb24vcmVjbGFpbS5jOjI2OTpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXG5tbS9kYW1vbi9yZWNsYWltLmMtMjcwLXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMjczLVxubW0vZGFtb24vcmVjbGFpbS5jOjI3NDpzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkO1xubW0vZGFtb24vcmVjbGFpbS5jLTI3NS1cbm1tL2RhbW9uL3JlY2xhaW0uYzoyNzY6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTI3Ny1cdFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzExPW1vZHVsZV9wYXJhbV9jYihjb21taXRfaW5wdXRzLCBcdTAwMjZjb21taXRfaW5wdXRzX3BhcmFtX29wcywgXHUwMDI2Y29tbWl0X2lucHV0cywgMDYwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtMzEyLVxubW0vZGFtb24vcmVjbGFpbS5jOjMxMzpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZGFtb25fY2FsbF9mbih2b2lkICphcmcpXG5tbS9kYW1vbi9yZWNsYWltLmMtMzE0LXtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzI1PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzI5LVxubW0vZGFtb24vcmVjbGFpbS5jOjMzMDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxubW0vZGFtb24vcmVjbGFpbS5jLTMzMS17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM1MC1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNTE6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FkZHJfdW5pdF9zdG9yZShjb25zdCBjaGFyICp2YWwsXG5tbS9kYW1vbi9yZWNsYWltLmMtMzUyLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzcyPU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy0zNzQtXG5tbS9kYW1vbi9yZWNsYWltLmM6Mzc1OnN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxubW0vZGFtb24vcmVjbGFpbS5jLTM3Ni17XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM4MS1cbm1tL2RhbW9uL3JlY2xhaW0uYzozODI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTM4My1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQwNC1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0MDU6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXG5tbS9kYW1vbi9yZWNsYWltLmMtNDA2LVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9NDE3PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtNDE5LVxubW0vZGFtb24vcmVjbGFpbS5jOjQyMDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vcmVjbGFpbS5jLTQyMS1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQyOS1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzA6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX2xvYWQoY2hhciAqYnVmZmVyLFxubW0vZGFtb24vcmVjbGFpbS5jLTQzMS1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQ1ND1tb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDU1LVxubW0vZGFtb24vcmVjbGFpbS5jOjQ1NjpzdGF0aWMgaW50IF9faW5pdCBkYW1vbl9yZWNsYWltX2luaXQodm9pZClcbm1tL2RhbW9uL3JlY2xhaW0uYy00NTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM1NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBEQU1PTiYjMzk7cyBTdGF0aWMgRnVuY3Rpb24gVXNhZ2UgYW5kIENvbmZpZ3VyYXRpb24qKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgYnJlYWtkb3duIG9mIHdoYXQgSSYjMzk7bSB0aGlua2luZyByZWdhcmRpbmcgdGhpcyBEQU1PTiBjb2RlLiBJbml0aWFsbHksIG15IGluc3RpbmN0IHdhcyB0byBzaW1wbHkgbGlzdCB0aGUgc3RhdGljIGZ1bmN0aW9ucyBkaXJlY3RseSBpbnZvbHZlZCwgbGlrZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAsIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBgZGFtb25fbHJ1X3NvcnRfdHVybmAsIGFuZCBgZGFtb25fcmVjbGFpbV90dXJuYC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyByZW1pbmQgbWUgdG8gcHJpb3JpdGl6ZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIGJldHRlciBmb3Igc3ltYm9sIHJlc29sdXRpb24uCgpTaW5jZSwgaW4gdGhpcyBjYXNlLCBhbGwgZnVuY3Rpb25zIGFwcGVhciB0byBiZSBzdGF0aWMsIEkgbmVlZCB0byBmaW5kIHRoZSBzcGVjaWZpYyBjYXNlcyBvZiB0aGUgb25lcyBJIG9yaWdpbmFsbHkgbGlzdGVkIHRoYXQgX2NhbiYjMzk7dF8gYmUgaW5saW5lZC4gR2l2ZW4gdGhleSBhcmUgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgbGlrZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgLCB0aGV5IHdvbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGUgc2FtZSBnb2VzIGZvciBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBJJiMzOTttIGNvbmZpZGVudCB0aG9zZSBzaG91bGQgYmUgb24gbXkgbGlzdC4KCk5vdyBJIG5lZWQgdG8gY29uZmlybSBpZiBgZGFtb25fbHJ1X3NvcnRfdHVybmAgbWlnaHQgYmUgaW5saW5lZC4gSSBhbSBsaXN0aW5nIGl0IGFueXdheSwgaXQmIzM5O3MgZmluZS4KCk5leHQsIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJdCBzZWVtcyB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmU6IGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuCgpOb3csIEkmIzM5O2xsIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTl9QQUREUmAuIEl0IGRlcGVuZHMgb24gYERBTU9OICZhbXA7JmFtcDsgTU1VYCwgYW5kIGBNTVVgIGlzIHByZXR0eSBtdWNoIGEgZ2l2ZW4uIGBEQU1PTmAgaXRzZWxmIGhhcyBubyBkZXBlbmRlbmNpZXMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgREFNT05fU1lTRlNgIGlzbiYjMzk7dCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIGBEQU1PTl9SRUNMQUlNYCBvciBgREFNT05fTFJVX1NPUlRgLCBiZWNhdXNlIHRoZXkgYXJlIHVzaW5nIGBtb2R1bGVfcGFyYW1fY2JgIGFuZCBgbW9kdWxlX3BhcmFtYCBkaXJlY3RseSwgd2hpY2ggYXJlIGZyb20gdGhlIGNvcmUgbW9kdWxlIHBhcmFtZXRlciBzeXN0ZW0uIFNvIHRoYXQgbG9va3MgZ29vZC4KCkkgbmVlZCB0byBjb25maXJtIGJ5IGNoZWNraW5nIHRoZSBpbmNsdWRlIHN0YXRlbWVudHMgb2YgYG1tL2RhbW9uL2xydV9zb3J0LmNgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpbmNsdWRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jLTctXG5tbS9kYW1vbi9scnVfc29ydC5jOjg6I2luY2x1ZGUgXHUwMDNjbGludXgvZGFtb24uaFx1MDAzZVxubW0vZGFtb24vbHJ1X3NvcnQuYzo5OiNpbmNsdWRlIFx1MDAzY2xpbnV4L2tzdHJ0b3guaFx1MDAzZVxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMDojaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6MTI6I2luY2x1ZGUgXCYjMzQ7bW9kdWxlcy1jb21tb24uaFwmIzM0O1xubW0vZGFtb24vbHJ1X3NvcnQuYy0xMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NDYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBNb2R1bGUmIzM5O3MgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIERBTU9OIG1vZHVsZSwgYW5kIHRoZSBmaXJzdCB0aGluZyBJJiMzOTttIG5vdGljaW5nIGlzIHRoYXQgdGhleSYjMzk7cmUgdXNpbmcgc3RhbmRhcmQgbW9kdWxlIHBhcmFtZXRlcnMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIGVhc2llciB0byBtYW5hZ2UgYW5kIGludGVncmF0ZS4gTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBEQU1PTmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpUaGVuIEkgc2VlIHRoZSBjb3JlIGZ1bmN0aW9uczogYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBhbmQgYGRhbW9uX3JlY2xhaW1fdHVybmAuIE5vdyBJJiMzOTttIGdldHRpbmcgY3VyaW91cyBhYm91dCB0aGUgZmxvdy4gSSB3YW50IHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vbl9scnVfc29ydF90dXJuYCBpcyB1c2VkLCBzbyBJJiMzOTtsbCBzZWUgaWYgaXQgaXMgY2FsbGVkIGZyb20gYGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmVgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aG9zZSB0d28gZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9scnVfc29ydF90dXJuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vbHJ1X3NvcnQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTQwMj1zdGF0aWMgc3RydWN0IGRhbW9uX2NhbGxfY29udHJvbCBjYWxsX2NvbnRyb2wgPSB7XG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00MDYtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQwNzpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA4LXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ1OT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNDc4LVxubW0vZGFtb24vbHJ1X3NvcnQuYzo0Nzk6XHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfdHVybihlbmFibGVkKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDgwLX1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzMz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9scnVfc29ydF9pbml0KHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy01NDgtXHRpZiAoZW5hYmxlZClcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTQ5Olx0XHRlcnIgPSBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01NTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjY3CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEQU1PTiBTdGFydHVwIFNlcXVlbmNpbmcgRml4IGFuZCBJbXBsaWNhdGlvbnMqKgoKQWxyaWdodCwgdGhhdCBjb25maXJtcyBpdC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIGNyaXRpY2FsIGlzc3VlIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtIOKAkyBhIHZ1bG5lcmFiaWxpdHkgd2hlcmUgYGRhbW9uX2NhbGwoKWAgY291bGQgYmUgaW52b2tlZCBwcmVtYXR1cmVseSwgYmVmb3JlIHRoZSBgY3R4YCAoY29udGV4dCkgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIG9wZXJhdGlvbmFsLiBUaGlzIHByZXNlbnRzIGEgdmVyeSByZWFsIHJpc2sgb2YgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIG9yIHdvcnNlLCBjb3JydXB0aW5nIG1lbW9yeSBvciB0cmlnZ2VyaW5nIG90aGVyIHVucHJlZGljdGFibGUga2VybmVsIGJlaGF2aW9ycy4KClRoZSBwcm9wb3NlZCBzb2x1dGlvbiwgYXMgZXhwZWN0ZWQsIGludm9sdmVzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1dCBlc3NlbnRpYWwgYWRkaXRpb24uIFdlJiMzOTtyZSBpbnRyb2R1Y2luZyBhIGJvb2xlYW4gZmxhZyB0byBtZXRpY3Vsb3VzbHkgdHJhY2sgd2hldGhlciBEQU1PTiBoYXMgcmVhY2hlZCBhICYjMzQ7c3RhcnRlZCYjMzQ7IHN0YXRlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHN5bmNocm9uaXppbmcgdGhlIG9wZXJhdGlvbnMsIGFuZCBlbnN1cmluZyB0aGUgY29udGV4dCBpcyB2YWxpZCBiZWZvcmUgYW55IGNhbGxzIGFyZSBtYWRlLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBwcmltYXJpbHkgdG91Y2hpbmcgdGhlIERBTU9OIHN1YnN5c3RlbSYjMzk7cyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiBzZWUgdGhlIGltbWVkaWF0ZSBiZW5lZml0IGluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHN1YnN5c3RlbSwgc28gSSYjMzk7bSBoYXBweSB3aXRoIHRoYXQgYXBwcm9hY2guCgpOb3csIEkgbmVlZCB0byBvZmZpY2lhbGx5IG1hcmsgdGhpcyBhcyBkb25lLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdyB0byBjbG9zZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1JFQ0xBSU0mIzM0OywKICAgICYjMzQ7REFNT05fTFJVX1NPUlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9scnVfc29ydF90dXJuJiMzNDssCiAgICAmIzM0O2RhbW9uX3JlY2xhaW1fdHVybiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSYjMzk7cyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIGEgZmxhZyB0byB0cmFjayBpZiBEQU1PTiBoYXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYmVmb3JlIGFsbG93aW5nIGBkYW1vbl9jYWxsKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9SRUNMQUlNJiMzNDssCiAgICAmIzM0O0RBTU9OX0xSVV9TT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fbHJ1X3NvcnRfdHVybiYjMzQ7LAogICAgJiMzNDtkYW1vbl9yZWNsYWltX3R1cm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0mIzM5O3MgbW9kdWxlIHBhcmFtZXRlciBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBhIGZsYWcgdG8gdHJhY2sgaWYgREFNT04gaGFzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIGJlZm9yZSBhbGxvd2luZyBgZGFtb25fY2FsbCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE0OjUxLjA0MjYxMDAwMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzgxMTgxOTU0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF90dXJuXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSdzIG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgYSBmbGFnIHRvIHRyYWNrIGlmIERBTU9OIGhhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCBiZWZvcmUgYWxsb3dpbmcgYGRhbW9uX2NhbGwoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE0OjUxLjA0MjYxNjg3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1MzU0ODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNGYxNGRlMTFmMzUyOTdmZDlhMzg3M2JmYjI1MTQ4MWFiMzFkNGYwMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzIDE4OjE0OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2xydV9zb3J0LmMgYi9tbS9kYW1vbi9scnVfc29ydC5jXFxuaW5kZXggN2UwNzcwODRjYjAzYS4uN2RmNDVmOWEwYjNhZSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9scnVfc29ydC5jXFxuKysrIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xcbkBAIC0zNDQsNiArMzQ0LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnMoKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxuK1xcbiBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4ge1xcbkBAIC0zNjQsMTEgKzM2Niw4IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuIFxcdGlmICghY29tbWl0X2lucHV0c19yZXF1ZXN0KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gYXZvaWRcXG4tXFx0ICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxcbi1cXHQgKi9cXG4tXFx0aWYgKCFjdHgpXFxuK1xcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xcbitcXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y29udHJvbCk7XFxuQEAgLTQyMSw2ICs0MjAsOCBAQCBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4gXFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdGlmICghZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQpXFxuK1xcdFxcdGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTtcXG4gXFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcmVjbGFpbS5jIGIvbW0vZGFtb24vcmVjbGFpbS5jXFxuaW5kZXggMDllOTQxZDc1ZjY3ZC4uNDVkNTU1N2NjNTc1YSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9yZWNsYWltLmNcXG4rKysgYi9tbS9kYW1vbi9yZWNsYWltLmNcXG5AQCAtMjcxLDYgKzI3MSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG4gXFx0cmV0dXJuIGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycygpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkO1xcbitcXG4gc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbiB7XFxuQEAgLTI5MSwxMSArMjkzLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbiBcXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaXMgbm90IGluaXRpYWxpemVkIHRvIGF2b2lkXFxuLVxcdCAqIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cXG4tXFx0ICovXFxuLVxcdGlmICghY3R4KVxcbitcXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cXG4rXFx0aWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGVyciA9IGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y29udHJvbCk7XFxuQEAgLTM0NCw2ICszNDMsOCBAQCBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fdHVybihib29sIG9uKVxcbiBcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0aWYgKCFkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkKVxcbitcXHRcXHRkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkID0gdHJ1ZTtcXG4gXFx0cmV0dXJuIGRhbW9uX2NhbGwoY3R4LCBcXHUwMDI2Y2FsbF9jb250cm9sKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTQ6NTEuNDU5MDE0MTY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA3Mzk1NDA1OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fUkVDTEFJTVwiLFxuICAgIFwiREFNT05fTFJVX1NPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVcIixcbiAgICBcImRhbW9uX2xydV9zb3J0X3R1cm5cIixcbiAgICBcImRhbW9uX3JlY2xhaW1fdHVyblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgREFNT04gc3Vic3lzdGVtJ3MgbW9kdWxlIHBhcmFtZXRlciBoYW5kbGluZyBieSBpbnRyb2R1Y2luZyBhIGZsYWcgdG8gdHJhY2sgaWYgREFNT04gaGFzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIGJlZm9yZSBhbGxvd2luZyBgZGFtb25fY2FsbCgpYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNGYxNGRlMTFmMzUyOTdmZDlhMzg3M2JmYjI1MTQ4MWFiMzFkNGYwMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTg6MTQ6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9scnVfc29ydC5jIGIvbW0vZGFtb24vbHJ1X3NvcnQuY1xuaW5kZXggN2UwNzcwODRjYjAzYS4uN2RmNDVmOWEwYjNhZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2xydV9zb3J0LmNcbisrKyBiL21tL2RhbW9uL2xydV9zb3J0LmNcbkBAIC0zNDQsNiArMzQ0LDggQEAgc3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9scnVfc29ydF9hcHBseV9wYXJhbWV0ZXJzKCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xuK1xuIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuIHtcbkBAIC0zNjQsMTEgKzM2Niw4IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKlxuLVx0ICogU2tpcCBkYW1vbl9jYWxsKCkgaWYgY3R4IGlzIG5vdCBpbml0aWFsaXplZCB0byBhdm9pZFxuLVx0ICogTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLlxuLVx0ICovXG4tXHRpZiAoIWN0eClcbitcdC8qIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBoYXMgbm90IHN1Y2Nlc3NmdWxseSBzdGFydGVkLiAqL1xuK1x0aWYgKCFkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5AQCAtNDIxLDYgKzQyMCw4IEBAIHN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxuIFx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4rXHRpZiAoIWRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkKVxuK1x0XHRkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3JlY2xhaW0uYyBiL21tL2RhbW9uL3JlY2xhaW0uY1xuaW5kZXggMDllOTQxZDc1ZjY3ZC4uNDVkNTU1N2NjNTc1YSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3JlY2xhaW0uY1xuKysrIGIvbW0vZGFtb24vcmVjbGFpbS5jXG5AQCAtMjcxLDYgKzI3MSw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcbiBcdHJldHVybiBkYW1vbl9yZWNsYWltX2FwcGx5X3BhcmFtZXRlcnMoKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZDtcbitcbiBzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXG4gXHRcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4ge1xuQEAgLTI5MSwxMSArMjkzLDggQEAgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxuIFx0aWYgKCFjb21taXRfaW5wdXRzX3JlcXVlc3QpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0Lypcbi1cdCAqIFNraXAgZGFtb25fY2FsbCgpIGlmIGN0eCBpcyBub3QgaW5pdGlhbGl6ZWQgdG8gYXZvaWRcbi1cdCAqIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZS5cbi1cdCAqL1xuLVx0aWYgKCFjdHgpXG4rXHQvKiBTa2lwIGRhbW9uX2NhbGwoKSBpZiBjdHggaGFzIG5vdCBzdWNjZXNzZnVsbHkgc3RhcnRlZC4gKi9cbitcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRlcnIgPSBkYW1vbl9jYWxsKGN0eCwgXHUwMDI2Y29udHJvbCk7XG5AQCAtMzQ0LDYgKzM0Myw4IEBAIHN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4gXHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbitcdGlmICghZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZClcbitcdFx0ZGFtb25fcmVjbGFpbV9kYW1vbl9oYXNfc3RhcnRlZCA9IHRydWU7XG4gXHRyZXR1cm4gZGFtb25fY2FsbChjdHgsIFx1MDAyNmNhbGxfY29udHJvbCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTQ6NTEuNDU5MDE2MTE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE3NTMyNjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFbmhhbmNlZCBTYWZldHkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBtb2RpZnlpbmcgYG1tL2RhbW9uL2xydV9zb3J0LmNgIGFuZCBgbW0vZGFtb24vcmVjbGFpbS5jYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBhZGRyZXNzaW5nIHNvbWUgcG90ZW50aWFsIGlzc3VlcyDigJMgc3BlY2lmaWNhbGx5LCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzIG9yIHNpbWlsYXIgcHJvYmxlbXMgd2l0aGluIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgYW5kIGBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmVgIGZ1bmN0aW9ucy4gVGhlIGNvcmUgb2YgdGhpcyBmaXggaW52b2x2ZXMgaW50cm9kdWNpbmcgdGhlc2UgbmV3IGJvb2xlYW4gZmxhZ3MsIGBkYW1vbl9scnVfc29ydF9kYW1vbl9oYXNfc3RhcnRlZGAgYW5kIGBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkYCwgdG8gdHJhY2sgdGhlIHN1Y2Nlc3NmdWwgc3RhcnR1cCBvZiBEQU1PTi4gU21hcnQsIHVzaW5nIGEgc3RhcnR1cCBmbGFnIGlzIGEgY29tbW9uIHBhdHRlcm4gdG8gYXZvaWQgdGhlc2Ugc29ydHMgb2YgcmFjZSBjb25kaXRpb25zLlxuXG5Ob3csIGEgcXVpY2sgcmVtaW5kZXI6IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoZXNlIHNwZWNpZmljIGBfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb25zIGFjdHVhbGx5IGRvLiBBaCB5ZXMsIHRoZXkncmUgdGhlIHN5c2ZzL21vZHVsZSBwYXJhbWV0ZXIgc3RvcmUgZnVuY3Rpb25zLiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlIGNvbnRleHQuXG5cblRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcsIEknbGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBzZWUgcHJlY2lzZWx5IGhvdyBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgaXMgYmVpbmcgdXNlZC4gVGhhdCdsbCBwcm92aWRlIHRoZSBjcnVjaWFsIGNvbnRleHQuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHN0b3JlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGFuZCB3aGVuLCB0byBtYWtlIHN1cmUgdGhpcyBmaXggaXMgY29tcGxldGUgYW5kIGNvdmVycyBhbGwgc2NlbmFyaW9zLiBFeGNlbGxlbnQsIHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIGRlZXBlciByZXZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3OTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNDo1Ni42MzQzNDc1NTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1NDM0OTk4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9MzQ3PXN0YXRpYyBib29sIGRhbW9uX2xydV9zb3J0X2RhbW9uX2hhc19zdGFydGVkO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQ4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQ5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTM3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgY29tbWl0X2lucHV0c19wYXJhbV9vcHMgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNzktXFx0LmZsYWdzID0gS0VSTkVMX1BBUkFNX09QU19GTF9OT0FSRyxcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM4MDpcXHQuc2V0ID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZSxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4MS1cXHQuZ2V0ID0gcGFyYW1fZ2V0X2Jvb2wsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE0OjU4LjM4ODcwMzExNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTU5NTc3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIENvbW1pdCBJbnB1dHMqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGEgbW9kdWxlIHBhcmFtZXRlciBjYWxsZWQgYGNvbW1pdF9pbnB1dHNgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBmaW5kIHdoZXJlIHRoaXMgdGhpbmcgaXMgdXNlZCwgYW5kIGluIERBTU9OLCB0aGF0IHVzdWFsbHkgbWVhbnMgZGlnZ2luZyBhcm91bmQgaW4gYG1tL2RhbW9uL2xydV9zb3J0LmNgLiBJdCdzIGEga2V5IGZpbGUgZm9yIGFueSBtZW1vcnkgbWFuYWdlbWVudCBvciBtb25pdG9yaW5nIHN1YnN5c3RlbS4gTGV0J3Mgc2VlIGlmIGBjb21taXRfaW5wdXRzYCBoYXMgYW55IHByZXNlbmNlIHRoZXJlLiBJJ2xsIG5lZWQgdG8gZ28gZmluZCB3aGVyZSBpdHMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU5OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjAxLjU4NDY2MzIzNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjI0MTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21taXRfaW5wdXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuYz0yOD1zdGF0aWMgYm9vbCBlbmFibGVkIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzk6c3RhdGljIGJvb2wgY29tbWl0X2lucHV0cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDAtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTI3MT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2FwcGx5X3BhcmFtZXRlcnModm9pZClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz0zNDc9c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MS17XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNTI6XFx0Ym9vbCBjb21taXRfaW5wdXRzX3JlcXVlc3Q7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTMtXFx0aW50IGVycjtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1NC1cXHRzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNvbnRyb2wgPSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNTU6XFx0XFx0LmZuID0gZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbixcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1Ni1cXHR9O1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNTgtXFx0aWYgKCF2YWwpIHtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjM1OTpcXHRcXHRjb21taXRfaW5wdXRzX3JlcXVlc3QgPSB0cnVlO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzYwLVxcdH0gZWxzZSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNjE6XFx0XFx0ZXJyID0ga3N0cnRvYm9vbCh2YWwsIFxcdTAwMjZjb21taXRfaW5wdXRzX3JlcXVlc3QpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzYyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM2NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM2NjpcXHRpZiAoIWNvbW1pdF9pbnB1dHNfcmVxdWVzdClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM2Ny1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzc3LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzc4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBjb21taXRfaW5wdXRzX3BhcmFtX29wcyA9IHtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM3OS1cXHQuZmxhZ3MgPSBLRVJORUxfUEFSQU1fT1BTX0ZMX05PQVJHLFxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzgwOlxcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgxLVxcdC5nZXQgPSBwYXJhbV9nZXRfYm9vbCxcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzgzLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzg0Om1vZHVsZV9wYXJhbV9jYihjb21taXRfaW5wdXRzLCBcXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFxcdTAwMjZjb21taXRfaW5wdXRzLCAwNjAwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6MDEuNjMwOTA5MjYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1NjIxMTk1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIE1vZHVsZSBQYXJhbWV0ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIsIGBkYW1vbl9scnVfc29ydC5jb21taXRfaW5wdXRzYCwgYW5kIHRoZSByZWxhdGVkIGBkYW1vbl9yZWNsYWltLmNvbW1pdF9pbnB1dHNgLiBJIHNlZSB0aGF0IHdyaXRpbmcgdG8gdGhpcyBwYXJhbWV0ZXIga2lja3Mgb2ZmIHRoZSBgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZWAgZnVuY3Rpb24uIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhhdCB0aGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UsIHNwZWNpZmljYWxseSB0aHJvdWdoIHN5c2ZzLiBUaGF0IG1lYW5zIGl0J3MgYSBsZWdpdGltYXRlLCBmdW5jdGlvbmFsIGludGVyZmFjZSwgYW5kIGltcG9ydGFudGx5LCBpdCdzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBmdXp6ZWQuIEkga25vdyBJIGNhbiB1c2Ugc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyIHRvIHdyaXRlIHZhbHVlcyBkaXJlY3RseSB0byBgL3N5cy9tb2R1bGUvZGFtb25fbHJ1X3NvcnQvcGFyYW1ldGVycy9jb21taXRfaW5wdXRzYC4gTm93LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGJvdGggYGRhbW9uX2xydV9zb3J0YCBhbmQgYGRhbW9uX3JlY2xhaW1gLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIHRoaXMgcGFyYW1ldGVyIGFuZCB0aGUgdW5kZXJseWluZyBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njg5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjA1Ljk4NzEyMzg1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA0NjQzOTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9MUlVfU09SVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTg4PWNvbmZpZyBEQU1PTl9SRUNMQUlNXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjA3Ljc5MTc3MzU0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjYwNzAxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBhY3Rpb25zOlxuXG4qKkFuYWx5emluZyBLY29uZmlnIERlcGVuZGVuY2llcyBpbiB0aGUgTU0vRGFtb24gU3Vic3lzdGVtKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IERhbW9uIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHZhcmlvdXMgY29uZmlndXJhdGlvbnMgaW50ZXJhY3QuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIHJlYWRpbmcgYG1tL2RhbW9uL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGxheSBvdXQgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBEYW1vbiBhbmQgY2xlYXJseSBzaG93IHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGlmZmVyZW50IHNldHRpbmdzIGFuZCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLiBUaGlzIGFwcHJvYWNoIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGJhc2UgdG8gdW5kZXJzdGFuZCBhbmQgdGhlbiwgcG90ZW50aWFsbHksIGNvbnRyaWJ1dGUgdG8gdGhlIHN1YnN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyBhcmUgY29udGFpbmVkIHdpdGhpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEzOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjExLjQ1Nzg0NjU0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDgwOlxcdFxcdGhlbHBcXG4gIDgxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgODQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgREFNT05fUkVDTEFJTVxcbiAgODk6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuICA5MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuICA5MTpcXHRcXHRoZWxwXFxuICA5MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbiAgOTM6XFx0XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxuICA5NDpcXHRcXHQgIHRob3NlLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XFxuICA5NzpcXHRcXHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcXG4gIDk4OlxcdFxcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbiAxMDE6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gMTAzOlxcdFxcdGhlbHBcXG4gMTA0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxuIDEwNTpcXHRcXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuIDEwNjpcXHRcXHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwNzpcXHRcXG4gMTA4OlxcdGNvbmZpZyBEQU1PTl9TVEFUXFxuIDEwOTpcXHRcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbiAxMTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcbiAxMTE6XFx0XFx0aGVscFxcbiAxMTI6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04tYmFzZWQgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdGlzdGljcyBzdWJzeXN0ZW0uXFxuIDExMzpcXHRcXHQgIEl0IHJ1bnMgREFNT04gYW5kIGV4cG9zZSBhY2Nlc3MgbW9uaXRvcmluZyByZXN1bHRzIGluIHNpbXBsZSBzdGF0XFxuIDExNDpcXHRcXHQgIG1ldHJpY3MuXFxuIDExNTpcXHRcXG4gMTE2OlxcdGNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbiAxMTc6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG4gMTE4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1RBVFxcbiAxMTk6XFx0XFx0ZGVmYXVsdCBEQU1PTl9TVEFUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjExLjQ1NzkxNTg2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg2NjUzODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzcGVjaWFsaXN0IGluIHRoaXMgYXJlYTpcblxuKipEaWdnaW5nIGludG8gREFNT04gRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBwYXR0ZXJuIHBvcHBpbmcgdXAuIEJvdGggYERBTU9OX1JFQ0xBSU1gIGFuZCBgREFNT05fTFJVX1NPUlRgIGNsZWFybHkgcmVseSBvbiBgREFNT05fUEFERFJgLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24uIEl0IHRlbGxzIG1lIHRoYXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZyB3aXRoaW4gREFNT04gaXMgZnVuZGFtZW50YWwgdG8gdGhlIHJlY2xhaW0gYW5kIExSVSBzb3J0aW5nIGZ1bmN0aW9uYWxpdGllcy4gQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHVuZGVybHlpbmcgY29tcG9uZW50LiBJIHNob3VsZCBzdGFydCBieSBjYXJlZnVsbHkgZXhhbWluaW5nIHdoYXQgZXhhY3RseSBgREFNT05fUEFERFJgIHJlcHJlc2VudHMgYW5kIGhvdyBpdCBvcGVyYXRlcy4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCAtIGdldCBhIGZpcm0gZ3Jhc3Agb24gdGhlIGZvdW5kYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5MjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjE1LjQ0NDU3MjYxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMDA4NzY4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fUEFERFJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zOD1jb25maWcgREFNT05fVkFERFJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjE3LjA3NDY2ODE1MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg0OTQwMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgYERBTU9OX1BBRERSYCBjb25maWd1cmF0aW9uIG9wdGlvbjpcblxuKipEaXZpbmcgaW50byBEQU1PTidzIFBoeXNpY2FsIEFkZHJlc3MgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUsIGFuZCBJJ20gemVyb2luZyBpbiBvbiBgREFNT05fUEFERFJgLiBUaGlzIGlzIGtleS4gVGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBmcmFtZXdvcmsgc2VlbXMgdG8gaGF2ZSBhIHNwZWNpZmljIHdheSBvZiBoYW5kbGluZyBwaHlzaWNhbCBhZGRyZXNzZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIGJlaW5nIGNvbmZpZ3VyZWQuIElzIHRoaXMgb3B0aW9uIGVuYWJsaW5nIHNvbWV0aGluZz8gRGlzYWJsaW5nIHNvbWV0aGluZz8gSXMgaXQgYWJvdXQgaG93IERBTU9OICppdHNlbGYqIHVzZXMgcGh5c2ljYWwgYWRkcmVzc2VzLCBvciBpcyBpdCBhYm91dCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHN5c3RlbSdzIHBoeXNpY2FsIG1lbW9yeSBtYXBwaW5nP1xuXG5UaGUgS2NvbmZpZyBjb250ZXh0IHRlbGxzIG1lIGhvdyBhIGtlcm5lbCBkZXZlbG9wZXIgY2FuIGVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBzZW5zZSBvZiB0aGUgZGVwZW5kZW5jaWVzLCBhbnkgZGVmYXVsdCBzdGF0ZXMsIGFuZCBhbnkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCBgREFNT05fUEFERFJgLiBJcyBpdCB0aWVkIHRvIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IgbWVtb3J5IG1vZGVscz8gS25vd2luZyB0aGUgdW5kZXJseWluZyByZWFzb25pbmcgaXMgY3J1Y2lhbCBmb3Igc29tZW9uZSB3b3JraW5nIG9uIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNob3VsZCBsb29rIGludG8gdGhlIHNvdXJjZSBmaWxlcyB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGhhcHBlbnMgaWYgdGhlIHVzZXIgY29uZmlndXJlcyBpdCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzLiBBcmUgdGhlcmUgYW55IHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgY291bGQgYmUgYSBjcml0aWNhbCBwb2ludCBvZiBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGlzc3VlcyBmb3Igc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMuIEdvdHRhIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNToyMC45NTk2MTI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNToyMC45NTk3MzAxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM1NDMxODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IERBTU9OX1BBRERSKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgREFNT05fUEFERFJgIGlzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYm90aCBgREFNT05gIGFuZCB0aGUgYE1NVWAuIFRoaXMgbWFrZXMgc2Vuc2U7IGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGFyZSBjb3JlIGNvbmNlcHRzIGhlcmUuIFNvLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkZWx2ZSBpbnRvIGBEQU1PTmAgZmlyc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvdXIgYW5kIGludGVybmFsIHdvcmtpbmdzIGJlZm9yZSBJIGNhbiBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIGBEQU1PTl9QQUREUmAncyByZWxpYW5jZSBvbiBpdC4gTGV0J3Mgc2VlIHdoYXQncyBnb2luZyBvbiB0aGVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYERBTU9OYCBhbmQgdHJhY2UgdGhyb3VnaCB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6MjQuMDk1MTY1NTc1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjc3ODY2MTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjI1Ljc3MzAzNjg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjk5NjkyMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCdzIGdvaW5nIHRocm91Z2ggbXkgbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMgdGFzaywgcmVuZGVyZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gS2NvbmZpZyBDb250ZXh0KipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL2RhbW9uL0tjb25maWdgIGZpbGUuIEknbSBmb2N1c2luZyBvbiB0aGUgc2VjdGlvbiByZWxhdGVkIHRvIERBTU9OIGl0c2VsZiDigJMgdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuIEkga25vdyB0aGlzIGZpbGUgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERBTU9OIHN1YnN5c3RlbSBhcmUgZGVmaW5lZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNvbnRyb2xsYWJsZSwgd2hhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QuLi4gYmFzaWNhbGx5LCB0aGUgYXJjaGl0ZWN0dXJhbCBrbm9icyBhdmFpbGFibGUgdG8gYSB1c2VyIG9yIGRldmVsb3Blci4gTXkgZ29hbCBoZXJlIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSBEQU1PTiBjb25maWd1cmF0aW9uIGxhbmRzY2FwZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2Ugd2hldGhlciB0aGUgdXNlciBjYW4gY2hhbmdlIHNhbXBsaW5nIHJhdGVzLCB0aHJlc2hvbGRzLCBvciBldmVuIGhvdyBEQU1PTiBpbnRlcmFjdHMgd2l0aCBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2Ugb3B0aW9ucyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIGRlc2lnbiBwaGlsb3NvcGh5IGFuZCBob3cgZmxleGlibGUgdGhlIHRvb2wgaXMuIFRoaXMgaW5pdGlhbCBleHBsb3JhdGlvbiB3aWxsIGd1aWRlIG15IGRlZXBlciBkaXZlcyBpbnRvIHRoZSBjb2RlIGxhdGVyIG9uLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNTozNy40NzI3MzE2NDFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjM3LjQ3MjgwMTk5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjE4MzIwOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBDb25maWd1cmF0aW9uIE9wdGlvbnMgYW5kIEZ1bmN0aW9uIFBvaW50ZXJzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlc2UgREFNT04gY29uZmlndXJhdGlvbnMgYXJlIHNldCB1cC4gTG9va3MgbGlrZSB0aGUgY29yZSBjb25maWdzIHRvIGVuYWJsZSBhcmUgYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gTXkgZm9jdXMgaGVyZSBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgaG93IHdlIGNhbiBiZXN0IGxldmVyYWdlIHRoZSBBUEkgZm9yIGNoYW5nZXMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBzeXN0ZW0ncyBwYXJhbWV0ZXIgc2V0dGluZyBhbmQgdGhlIERBTU9OIGNvZGUuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYC4gSG1tLCB0aGVzZSBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZnVuY3Rpb25zLiBUaGF0J3MgYSBrZXkgZGV0YWlsIHRvIGNvbnNpZGVyIHNpbmNlIGl0IGFmZmVjdHMgdGhlaXIgdmlzaWJpbGl0eSBhbmQgaG93IHRoZXkncmUgaGFuZGxlZCBieSB0aGUgY29tcGlsZXIuIExldCdzIGNvbmZpcm0gLSB5ZXMsIGBzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgIGFuZCBgc3RhdGljIGludCBkYW1vbl9yZWNsYWltX2NvbW1pdF9pbnB1dHNfc3RvcmUoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClgLlxuXG5TaW5jZSB0aGV5J3JlIHN0YXRpYywgdGhlcmUncyBhIGNoYW5jZSB0aGV5IG1pZ2h0IGJlIGlubGluZWQsIG9yIG1pZ2h0IG5vdCBoYXZlIGRpc2NyZXRlIHN5bWJvbHMsIGJ1dC4uLiBBaCwgdGhleSdyZSBiZWluZyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGtlcm5lbF9wYXJhbV9vcHNgLiBUaGF04oCZcyBpdCEgVGhhdCBtZWFucyB0aGV5ICp3b24ndCogYmUgaW5saW5lZC4gVGhleSAqd2lsbCogaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBHcmVhdCwgbm93IEkgY2FuIGJlIGNlcnRhaW4gaW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGVpciB1c2FnZS5cblxuSG93ZXZlciwgdGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgZW50cnlwb2ludCBmdW5jdGlvbnMgYXJlIHByZWZlcmFibGUuIEdpdmVuIHRoYXQgaXQgc291bmRzIGxpa2UgdGhleSBhcmUgc2V0dGluZyBzb21ldGhpbmcgdmlhIHN5c2ZzLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUgYXJlIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzLiBTbywgdGhlIHN5c2ZzIHdyaXRlIGxpa2VseSBnb2VzIHRocm91Z2ggYHBhcmFtX2F0dHJfc3RvcmVgIC1cdTAwM2UgYHBhcmFtX3NldF9ib29sYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYnV0IGluIHRoaXMgY2FzZSwgYSBjdXN0b20gYC5zZXRgIGZ1bmN0aW9uIGlzIHVzZWQuIFRpbWUgdG8gY2hlY2sgYG1tL2RhbW9uL2xydV9zb3J0LmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGF2YWlsYWJsZSB0aGF0IEkgY2FuIHVzZSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDUzLCJPdXRwdXRUb2tlbnMiOjY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6NDQuNjkxMTI1MjUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ2MzY0NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjQ0Ljc0MzU5NTkyOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU4OTYwODI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKlNpbXBsaWZ5aW5nIHRoZSBBcHByb2FjaCoqXG5cbkFscmlnaHQsIEkndmUgYmVlbiB3cmVzdGxpbmcgd2l0aCB0aGlzIHF1ZXJ5IGZvciBhIGJpdCBub3csIGFuZCBJJ20gc2Vuc2luZyBJJ20gb3ZlcmNvbXBsaWNhdGluZyB0aGluZ3MuIFBlcmhhcHMgSSdtIGdldHRpbmcgY2F1Z2h0IHVwIGluIHRoZSBhbGx1cmUgb2YgbW9yZSBhZHZhbmNlZCByZWdleCBmZWF0dXJlcyBvciB0aGlua2luZyB0b28gbXVjaCBhYm91dCBlZGdlIGNhc2VzIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGUgY29tcGxleGl0eSBpcyBoaW5kZXJpbmcgcHJvZ3Jlc3MuIExldCdzIHN0ZXAgYmFjaywgdGFrZSBhIGJyZWF0aCwgYW5kIGdldCBiYWNrIHRvIGJhc2ljcy4gSSdtIGdvaW5nIHRvIHRyeSBhIG11Y2ggc2ltcGxlciBgZ3JlcGAgY29tbWFuZCBmaXJzdC4gTXkgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgSSBjYW4gYWNoaWV2ZSBhIHNpZ25pZmljYW50IHBhcnQgb2YgdGhlIGNvcmUgZ29hbCB3aXRoIHNvbWV0aGluZyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4gSXTigJlzIG9mdGVuIGVhc2llciB0byBidWlsZCBmcm9tIGEgc2ltcGxlciB3b3JraW5nIHNvbHV0aW9uIHRoYW4gdHJ5aW5nIHRvIGRlYnVnIGEgY29tcGxleCBvbmUgcmlnaHQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGlzIGEgZ29vZCB3YXkgdG8gZGV0ZXJtaW5lIHRoZSBjb3JlIHByb2JsZW0gYmVmb3JlIGdldHRpbmcgaW50byBtb3JlIGFkdmFuY2VkIHRlY2huaXF1ZXMuIExldCdzIHNlZSBpZiB0aGlzIHBhcmVkLWRvd24gYXBwcm9hY2ggeWllbGRzIHNvbWUgaW5pdGlhbCBwb3NpdGl2ZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNTo0OC41MDI1NTk1NDRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NzM1OTk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNTo0OC41NTEzMjY3OTJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk5Nzk1OTQxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBPcHRpbWl6YXRpb25zIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mgb24gdGhpcyBgbW0vZGFtb24vbHJ1X3NvcnQuY2AgbW9kdWxlIGFuZCBzZWUgaWYgd2UgY2FuIGlkZW50aWZ5IHNvbWUgcXVpY2sgd2lucy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBzdXJnaWNhbCBhcHByb2FjaC4gSSdsbCByZWFjaCBmb3IgYGdyZXBgIGFuZCBpbW1lZGlhdGVseSBob21lIGluIG9uIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHBvdGVudGlhbCBpbmxpbmluZyBvcHBvcnR1bml0aWVzLCBhbmQgYSBxdWljayB2aWV3IG9mIHRoZSBzY29wZS92aXNpYmlsaXR5IHRvIHNlZSBpZiB0aGVyZSBhcmUgb3Bwb3J0dW5pdGllcyBmb3Igc2ltcGxpZmljYXRpb24uXG5cbkknbSBzdGFydGluZyB3aXRoOiBgXnN0YXRpYyBpbnQgYCwgYF5zdGF0aWMgdm9pZCBgLCBgXmludCBgLCBhbmQgYF52b2lkIGAuIFRoZXNlIGFyZSB0aGUgc3RhcnRpbmcgcG9pbnRzLiBUaGlzIHdpbGwgZmxhZyBhbnkgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGlubGluZWQsIG9yIGdsb2JhbCBkZWNsYXJhdGlvbnMgdGhhdCB3ZSBjb3VsZCBlbGltaW5hdGUgd2l0aCBiZXR0ZXIgdXNlIG9mIGludGVybmFsIGhlYWRlcnMsIGFsb25nIHdpdGggdGhlaXIgcmV0dXJuIHR5cGVzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGFuIGltbWVkaWF0ZSBzZW5zZSBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgYWxsb3cgbWUgdG8gcXVpY2tseSBpZGVudGlmeSBhcmVhcyB3aGVyZSB0aGUgY29tcGlsZXIgKm1pZ2h0KiBiZSBhYmxlIHRvIHBlcmZvcm0gc29tZSBvcHRpbWl6YXRpb25zLlxuXG5JIGV4cGVjdCB0byBmaW5kIHNvbWUgbG93LWhhbmdpbmcgZnJ1aXQgaGVyZSBpbiB0ZXJtcyBvZiBjb2RlIHRoYXQgY291bGQgYmUgcG90ZW50aWFsbHkgaW5saW5lZCwgd2hpY2ggY2FuIGhlbHAgd2l0aCBmdW5jdGlvbiBjYWxsIG92ZXJoZWFkIGFuZCBpbmxpbmluZyBjb3VsZCBwb3RlbnRpYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlLiBUaGlzIGNvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGNhbmRpZGF0ZXMgdG8gYW5hbHl6ZSBmdXJ0aGVyLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gdHVybiB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU5NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjUzLjU0OTI4ODk1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYwNTIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKHN0YXRpYyApPyhpbnR8dm9pZHxib29sKSBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vbHJ1X3NvcnQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jLTI3LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mjg6c3RhdGljIGJvb2wgZW5hYmxlZCBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjktXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6Mzk6c3RhdGljIGJvb2wgY29tbWl0X2lucHV0cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDAtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzPW1vZHVsZV9wYXJhbShhY3RpdmVfbWVtX2JwLCB1bG9uZywgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTY1LSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NjY6c3RhdGljIGJvb2wgYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMgX19yZWFkX21vc3RseTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTY3LW1vZHVsZV9wYXJhbShhdXRvdHVuZV9tb25pdG9yaW5nX2ludGVydmFscywgYm9vbCwgMDYwMCk7XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTgwLSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6ODE6c3RhdGljIGJvb2wgZmlsdGVyX3lvdW5nX3BhZ2VzIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy04Mi1tb2R1bGVfcGFyYW0oZmlsdGVyX3lvdW5nX3BhZ2VzLCBib29sLCAwNjAwKTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MjIwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19jb2xkX3NjaGVtZSh1bnNpZ25lZCBpbnQgY29sZF90aHJlcylcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjI4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjI5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkX3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vcyAqaG90X3NjaGVtZSxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTIzMC1cXHRcXHRzdHJ1Y3QgZGFtb3MgKmNvbGRfc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNDgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoyNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9hZGRfZmlsdGVycyhzdHJ1Y3QgZGFtb3MgKmhvdF9zY2hlbWUsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0yNTAtXFx0XFx0c3RydWN0IGRhbW9zICpjb2xkX3NjaGVtZSlcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcwLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MjcxOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMjcyLXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzQxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6MzQyOnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19mbih2b2lkICphcmcpXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDMte1xcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDYtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDc6c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZGFtb25faGFzX3N0YXJ0ZWQ7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy0zNDgtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzozNDk6c3RhdGljIGludCBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM1MC1cXHRcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9Mzg0PW1vZHVsZV9wYXJhbV9jYihjb21taXRfaW5wdXRzLCBcXHUwMDI2Y29tbWl0X2lucHV0c19wYXJhbV9vcHMsIFxcdTAwMjZjb21taXRfaW5wdXRzLCAwNjAwKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTM4NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjM4NjpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2RhbW9uX2NhbGxfZm4odm9pZCAqYXJnKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMzg3LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDAyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA4LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDI3LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDI4OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfYWRkcl91bml0X3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyOS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDQ5PU1PRFVMRV9QQVJNX0RFU0MoYWRkcl91bml0LFxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NTEtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0NTI6c3RhdGljIGJvb2wgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZCh2b2lkKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDUzLXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDU4LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDU5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NjAtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4MS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4MjpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy00ODMtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ5ND1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5Ni1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5NzpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5OC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTA2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MDgtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzMT1tb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFxcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTMyLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTMzOnN0YXRpYyBpbnQgX19pbml0IGRhbW9uX2xydV9zb3J0X2luaXQodm9pZClcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUzNC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjUzLjU5OTkwODc4N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzcyNTgxNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBEQU1PTiBDb2RlIFN0cnVjdHVyZSoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZSBEQU1PTiBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG9yZ2FuaXphdGlvbiBvZiBpdHMgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGh1bmNoLCBnaXZlbiB0aGUgd2F5IHRoaW5ncyBhcmUgc3RydWN0dXJlZCwgaXMgdGhhdCB0aGUgZnVuY3Rpb25zIGluIGBtbS9kYW1vbi9scnVfc29ydC5jYCBhcmUgYWxsIGRlY2xhcmVkIGBzdGF0aWNgLiBUaGF0J3MgYSBwcmV0dHkgY29tbW9uIHByYWN0aWNlIGZvciBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyBzb3VyY2UgZmlsZSwgeW91IGtub3csIHRvIG1haW50YWluIGVuY2Fwc3VsYXRpb24gYW5kIGF2b2lkIHVuaW50ZW5kZWQgZXh0ZXJuYWwgY2FsbHMuIEnigJlkIGJldCBvbiBpdC5cblxuTm93LCBJIGJldCB0aGF0IGlzIHByb2JhYmx5IHRoZSBzYW1lIGNhc2UgZm9yIGBtbS9kYW1vbi9yZWNsYWltLmNgLiBMZXQncyBjb25maXJtIHRoaXMgYnkgb3BlbmluZyB1cCBgbW0vZGFtb24vcmVjbGFpbS5jYCBhbmQgaGF2aW5nIGEgbG9vay4gSXQnbGwgYmUgcXVpY2tlciB0byB2ZXJpZnkgdGhhbiB0byBtYWtlIGFuIGFzc3VtcHRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjc5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTg6MTU6NTguMzcyNDkyOTlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODkxMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGludHx2b2lkfGJvb2wpIFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9yZWNsYWltLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vcmVjbGFpbS5jLTI3LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoyODpzdGF0aWMgYm9vbCBlbmFibGVkIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTI5LVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM4LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzozOTpzdGF0aWMgYm9vbCBjb21taXRfaW5wdXRzIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQwLVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTkwPW1vZHVsZV9wYXJhbShxdW90YV9hdXRvdHVuZV9mZWVkYmFjaywgdWxvbmcsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTEwMi0gKi9cXG5tbS9kYW1vbi9yZWNsYWltLmM6MTAzOnN0YXRpYyBib29sIGF1dG90dW5lX21vbml0b3JpbmdfaW50ZXJ2YWxzIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTEwNC1tb2R1bGVfcGFyYW0oYXV0b3R1bmVfbW9uaXRvcmluZ19pbnRlcnZhbHMsIGJvb2wsIDA2MDApO1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTE0OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQgX19yZWFkX21vc3RseSA9IDE7XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMTU2LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzoxNTc6c3RhdGljIGJvb2wgc2tpcF9hbm9uIF9fcmVhZF9tb3N0bHk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTE1OC1tb2R1bGVfcGFyYW0oc2tpcF9hbm9uLCBib29sLCAwNjAwKTtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE5NDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fYXBwbHlfcGFyYW1ldGVycyh2b2lkKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xOTUte1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTI2OC1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MjY5OnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMjcwLXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzMtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI3NDpzdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2RhbW9uX2hhc19zdGFydGVkO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy0yNzUtXFxubW0vZGFtb24vcmVjbGFpbS5jOjI3NjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTI3Ny1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTMxMT1tb2R1bGVfcGFyYW1fY2IoY29tbWl0X2lucHV0cywgXFx1MDAyNmNvbW1pdF9pbnB1dHNfcGFyYW1fb3BzLCBcXHUwMDI2Y29tbWl0X2lucHV0cywgMDYwMCk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTMxMi1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzEzOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9kYW1vbl9jYWxsX2ZuKHZvaWQgKmFyZylcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzE0LXtcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zMjU9c3RhdGljIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgY2FsbF9jb250cm9sID0ge1xcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTMyOS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzMwOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxubW0vZGFtb24vcmVjbGFpbS5jLTMzMS17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzUwLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNTE6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2FkZHJfdW5pdF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTM1Mi1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0zNzI9TU9EVUxFX1BBUk1fREVTQyhhZGRyX3VuaXQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzc0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNzU6c3RhdGljIGJvb2wgZGFtb25fcmVjbGFpbV9lbmFibGVkKHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTM3Ni17XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozODI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy0zODMtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDA0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MDU6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQwNi1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00MTc9TU9EVUxFX1BBUk1fREVTQyhlbmFibGVkLFxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQxOS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDIwOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyMS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjktXFxubW0vZGFtb24vcmVjbGFpbS5jOjQzMDpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXFxubW0vZGFtb24vcmVjbGFpbS5jLTQzMS1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz00NTQ9bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDU1LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0NTY6c3RhdGljIGludCBfX2luaXQgZGFtb25fcmVjbGFpbV9pbml0KHZvaWQpXFxubW0vZGFtb24vcmVjbGFpbS5jLTQ1Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE1OjU4LjQxNzM5MjUwN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTU2MDA2NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIERBTU9OJ3MgU3RhdGljIEZ1bmN0aW9uIFVzYWdlIGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24gb2Ygd2hhdCBJJ20gdGhpbmtpbmcgcmVnYXJkaW5nIHRoaXMgREFNT04gY29kZS4gSW5pdGlhbGx5LCBteSBpbnN0aW5jdCB3YXMgdG8gc2ltcGx5IGxpc3QgdGhlIHN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgaW52b2x2ZWQsIGxpa2UgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgLCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX2xydV9zb3J0X3R1cm5gLCBhbmQgYGRhbW9uX3JlY2xhaW1fdHVybmAuIEhvd2V2ZXIsIHRoZSBpbnN0cnVjdGlvbnMgcmVtaW5kIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGJldHRlciBmb3Igc3ltYm9sIHJlc29sdXRpb24uXG5cblNpbmNlLCBpbiB0aGlzIGNhc2UsIGFsbCBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIHN0YXRpYywgSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIGNhc2VzIG9mIHRoZSBvbmVzIEkgb3JpZ2luYWxseSBsaXN0ZWQgdGhhdCBfY2FuJ3RfIGJlIGlubGluZWQuIEdpdmVuIHRoZXkgYXJlIHVzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIGxpa2UgYGRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVgIGFuZCBgZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlYCwgdGhleSB3b24ndCBiZSBpbmxpbmVkLiBUaGUgc2FtZSBnb2VzIGZvciBgZGFtb25fbHJ1X3NvcnRfdHVybmAgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gIGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZnVuY3Rpb24gcG9pbnRlcnMuIFNvLCBJJ20gY29uZmlkZW50IHRob3NlIHNob3VsZCBiZSBvbiBteSBsaXN0LlxuXG5Ob3cgSSBuZWVkIHRvIGNvbmZpcm0gaWYgYGRhbW9uX2xydV9zb3J0X3R1cm5gIG1pZ2h0IGJlIGlubGluZWQuIEkgYW0gbGlzdGluZyBpdCBhbnl3YXksIGl0J3MgZmluZS5cblxuTmV4dCwgSSBuZWVkIHRvIG5haWwgZG93biB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb25zIGFyZTogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC5cblxuTm93LCBJJ2xsIGRvdWJsZS1jaGVjayBkZXBlbmRlbmNpZXMgZm9yIGBEQU1PTl9QQUREUmAuIEl0IGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBNTVVgLCBhbmQgYE1NVWAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbi4gYERBTU9OYCBpdHNlbGYgaGFzIG5vIGRlcGVuZGVuY2llcy5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBgREFNT05fU1lTRlNgIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgYERBTU9OX1JFQ0xBSU1gIG9yIGBEQU1PTl9MUlVfU09SVGAsIGJlY2F1c2UgdGhleSBhcmUgdXNpbmcgYG1vZHVsZV9wYXJhbV9jYmAgYW5kIGBtb2R1bGVfcGFyYW1gIGRpcmVjdGx5LCB3aGljaCBhcmUgZnJvbSB0aGUgY29yZSBtb2R1bGUgcGFyYW1ldGVyIHN5c3RlbS4gU28gdGhhdCBsb29rcyBnb29kLlxuXG5JIG5lZWQgdG8gY29uZmlybSBieSBjaGVja2luZyB0aGUgaW5jbHVkZSBzdGF0ZW1lbnRzIG9mIGBtbS9kYW1vbi9scnVfc29ydC5jYFxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNjowNy45NzM0MDI1MzJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjMyMTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjaW5jbHVkZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmMtNy1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RhbW9uLmhcXHUwMDNlXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo5OiNpbmNsdWRlIFxcdTAwM2NsaW51eC9rc3RydG94LmhcXHUwMDNlXFxubW0vZGFtb24vbHJ1X3NvcnQuYzoxMDojaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxubW0vZGFtb24vbHJ1X3NvcnQuYy0xMS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjEyOiNpbmNsdWRlIFxcXCJtb2R1bGVzLWNvbW1vbi5oXFxcIlxcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE2OjA4LjEyNTcyOTg3M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDM2MjIwMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIE1vZHVsZSdzIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gbW9kdWxlLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSBub3RpY2luZyBpcyB0aGF0IHRoZXkncmUgdXNpbmcgc3RhbmRhcmQgbW9kdWxlIHBhcmFtZXRlcnMsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgdGhpbmdzIGVhc2llciB0byBtYW5hZ2UgYW5kIGludGVncmF0ZS4gTG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogYERBTU9OYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuVGhlbiBJIHNlZSB0aGUgY29yZSBmdW5jdGlvbnM6IGBkYW1vbl9scnVfc29ydF9jb21taXRfaW5wdXRzX3N0b3JlYCwgYGRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZWAsIGBkYW1vbl9scnVfc29ydF90dXJuYCwgYW5kIGBkYW1vbl9yZWNsYWltX3R1cm5gLiBOb3cgSSdtIGdldHRpbmcgY3VyaW91cyBhYm91dCB0aGUgZmxvdy4gSSB3YW50IHRvIHF1aWNrbHkgY2hlY2sgaG93IGBkYW1vbl9scnVfc29ydF90dXJuYCBpcyB1c2VkLCBzbyBJJ2xsIHNlZSBpZiBpdCBpcyBjYWxsZWQgZnJvbSBgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9zdG9yZWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRob3NlIHR3byBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTQ2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE2OjMyLjQ4NzkzMzI5N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3Nzg2NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbHJ1X3NvcnRfdHVyblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2xydV9zb3J0LmM9NDAyPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sIGNhbGxfY29udHJvbCA9IHtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA2LVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDA3OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfdHVybihib29sIG9uKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDA4LXtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9NDU5PXN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfZW5hYmxlZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ3OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ3OTpcXHRyZXR1cm4gZGFtb25fbHJ1X3NvcnRfdHVybihlbmFibGVkKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4MC19XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTUzMz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9scnVfc29ydF9pbml0KHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTU0OC1cXHRpZiAoZW5hYmxlZClcXG5tbS9kYW1vbi9scnVfc29ydC5jOjU0OTpcXHRcXHRlcnIgPSBkYW1vbl9scnVfc29ydF90dXJuKHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxODoxNjozMi41MzM3MTY2MTRaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI0NTAxNzg4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRBTU9OIFN0YXJ0dXAgU2VxdWVuY2luZyBGaXggYW5kIEltcGxpY2F0aW9ucyoqXG5cbkFscmlnaHQsIHRoYXQgY29uZmlybXMgaXQuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBjcml0aWNhbCBpc3N1ZSB3aXRoaW4gdGhlIERBTU9OIHN1YnN5c3RlbSDigJMgYSB2dWxuZXJhYmlsaXR5IHdoZXJlIGBkYW1vbl9jYWxsKClgIGNvdWxkIGJlIGludm9rZWQgcHJlbWF0dXJlbHksIGJlZm9yZSB0aGUgYGN0eGAgKGNvbnRleHQpIGlzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBvcGVyYXRpb25hbC4gVGhpcyBwcmVzZW50cyBhIHZlcnkgcmVhbCByaXNrIG9mIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciB3b3JzZSwgY29ycnVwdGluZyBtZW1vcnkgb3IgdHJpZ2dlcmluZyBvdGhlciB1bnByZWRpY3RhYmxlIGtlcm5lbCBiZWhhdmlvcnMuXG5cblRoZSBwcm9wb3NlZCBzb2x1dGlvbiwgYXMgZXhwZWN0ZWQsIGludm9sdmVzIGEgc3RyYWlnaHRmb3J3YXJkIGJ1dCBlc3NlbnRpYWwgYWRkaXRpb24uIFdlJ3JlIGludHJvZHVjaW5nIGEgYm9vbGVhbiBmbGFnIHRvIG1ldGljdWxvdXNseSB0cmFjayB3aGV0aGVyIERBTU9OIGhhcyByZWFjaGVkIGEgXCJzdGFydGVkXCIgc3RhdGUuIFRoaXMgaXMgY3J1Y2lhbCBmb3Igc3luY2hyb25pemluZyB0aGUgb3BlcmF0aW9ucywgYW5kIGVuc3VyaW5nIHRoZSBjb250ZXh0IGlzIHZhbGlkIGJlZm9yZSBhbnkgY2FsbHMgYXJlIG1hZGUuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgcHJpbWFyaWx5IHRvdWNoaW5nIHRoZSBEQU1PTiBzdWJzeXN0ZW0ncyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsLiBJIGNhbiBzZWUgdGhlIGltbWVkaWF0ZSBiZW5lZml0IGluIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHN1YnN5c3RlbSwgc28gSSdtIGhhcHB5IHdpdGggdGhhdCBhcHByb2FjaC5cblxuTm93LCBJIG5lZWQgdG8gb2ZmaWNpYWxseSBtYXJrIHRoaXMgYXMgZG9uZS4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cgdG8gY2xvc2UgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjY3LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE4OjE2OjM4Ljc3ODczNzA2N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1Njc5ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1JFQ0xBSU1cIixcbiAgICBcIkRBTU9OX0xSVV9TT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbHJ1X3NvcnRfY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV9jb21taXRfaW5wdXRzX3N0b3JlXCIsXG4gICAgXCJkYW1vbl9scnVfc29ydF90dXJuXCIsXG4gICAgXCJkYW1vbl9yZWNsYWltX3R1cm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIERBTU9OIHN1YnN5c3RlbSdzIG1vZHVsZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYnkgaW50cm9kdWNpbmcgYSBmbGFnIHRvIHRyYWNrIGlmIERBTU9OIGhhcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCBiZWZvcmUgYWxsb3dpbmcgYGRhbW9uX2NhbGwoKWAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9SRUNMQUlNXCIsXG4gICAgXCJEQU1PTl9MUlVfU09SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX2xydV9zb3J0X2NvbW1pdF9pbnB1dHNfc3RvcmVcIixcbiAgICBcImRhbW9uX3JlY2xhaW1fY29tbWl0X2lucHV0c19zdG9yZVwiLFxuICAgIFwiZGFtb25fbHJ1X3NvcnRfdHVyblwiLFxuICAgIFwiZGFtb25fcmVjbGFpbV90dXJuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0ncyBtb2R1bGUgcGFyYW1ldGVyIGhhbmRsaW5nIGJ5IGludHJvZHVjaW5nIGEgZmxhZyB0byB0cmFjayBpZiBEQU1PTiBoYXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgYmVmb3JlIGFsbG93aW5nIGBkYW1vbl9jYWxsKClgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow9qlvv[1] Phase: Succeeded StartedAt: 2026-08-03 18:16:50 +0000 UTC FinishedAt: 2026-08-03 18:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 18:16:50 +0000 UTC FinishedAt: 2026-08-03 18:16:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2] Phase: Succeeded StartedAt: 2026-08-03 18:16:50 +0000 UTC FinishedAt: 2026-08-03 21:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-03 18:16:50 +0000 UTC FinishedAt: 2026-08-03 21:58:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 18:16:50 +0000 UTC FinishedAt: 2026-08-03 18:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 18:16:50 +0000 UTC FinishedAt: 2026-08-03 18:16:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9qlvv/series-workflow9qlvv-convert-artifact-4164241387/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-03 18:17:00 +0000 UTC FinishedAt: 2026-08-03 18:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-03 18:17:00 +0000 UTC FinishedAt: 2026-08-03 18:33:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*def2f7b5-dd72-4cb1-b05b-6c0bafd6412f,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-workflow9qlvv/series-workflow9qlvv-convert-artifact-4164241387/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": "b62a8fce-3696-4af7-9946-dba422e00754", "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-workflow9qlvv/series-workflow9qlvv-build-action-3210197993/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-03 18:17:00 +0000 UTC FinishedAt: 2026-08-03 18:33:15 +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:*def2f7b5-dd72-4cb1-b05b-6c0bafd6412f,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-workflow9qlvv/series-workflow9qlvv-convert-artifact-4164241387/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": "b62a8fce-3696-4af7-9946-dba422e00754", "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-workflow9qlvv/series-workflow9qlvv-build-action-3210197993/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-03 18:33:25 +0000 UTC FinishedAt: 2026-08-03 18:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-03 18:33:25 +0000 UTC FinishedAt: 2026-08-03 18:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-03 18:33:25 +0000 UTC FinishedAt: 2026-08-03 18:33:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-03 18:33:25 +0000 UTC FinishedAt: 2026-08-03 18:33:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9qlvv/series-workflow9qlvv-convert-artifact-3820450498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-03 18:33:35 +0000 UTC FinishedAt: 2026-08-03 18:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-03 18:33:35 +0000 UTC FinishedAt: 2026-08-03 18:35:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b62a8fce-3696-4af7-9946-dba422e00754,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-workflow9qlvv/series-workflow9qlvv-build-action-3210197993/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-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-03 18:35:28 +0000 UTC FinishedAt: 2026-08-03 18:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-03 18:35:28 +0000 UTC FinishedAt: 2026-08-03 18:35:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-03 18:35:28 +0000 UTC FinishedAt: 2026-08-03 18:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-03 18:35:28 +0000 UTC FinishedAt: 2026-08-03 18:52:14 +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:*def2f7b5-dd72-4cb1-b05b-6c0bafd6412f,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-workflow9qlvv/series-workflow9qlvv-convert-artifact-3820450498/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": "bc6a256b-282a-4d6a-9e71-83797616ac67", "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-workflow9qlvv/series-workflow9qlvv-build-action-381035798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-03 18:35:28 +0000 UTC FinishedAt: 2026-08-03 18:52:04 +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:*def2f7b5-dd72-4cb1-b05b-6c0bafd6412f,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-workflow9qlvv/series-workflow9qlvv-convert-artifact-3820450498/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": "bc6a256b-282a-4d6a-9e71-83797616ac67", "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-workflow9qlvv/series-workflow9qlvv-build-action-381035798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-03 18:52:14 +0000 UTC FinishedAt: 2026-08-03 18:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-03 18:52:14 +0000 UTC FinishedAt: 2026-08-03 18:52:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-03 18:52:14 +0000 UTC FinishedAt: 2026-08-03 18:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-03 18:52:14 +0000 UTC FinishedAt: 2026-08-03 18:54:06 +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:*bc6a256b-282a-4d6a-9e71-83797616ac67,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-workflow9qlvv/series-workflow9qlvv-build-action-381035798/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-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-03 18:54:16 +0000 UTC FinishedAt: 2026-08-03 21:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-03 18:54:16 +0000 UTC FinishedAt: 2026-08-03 21:58:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b62a8fce-3696-4af7-9946-dba422e00754,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bc6a256b-282a-4d6a-9e71-83797616ac67,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-workflow9qlvv/series-workflow9qlvv-build-action-3210197993/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-workflow9qlvv/series-workflow9qlvv-build-action-381035798/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-03 18:54:16 +0000 UTC FinishedAt: 2026-08-03 18:54:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-03 18:54:16 +0000 UTC FinishedAt: 2026-08-03 18:54:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9qlvv/series-workflow9qlvv-convert-artifact-3042184695/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-03 18:54:16 +0000 UTC FinishedAt: 2026-08-03 18:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-03 18:54:16 +0000 UTC FinishedAt: 2026-08-03 18:54:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-03 18:54:17 +0000 UTC FinishedAt: 2026-08-03 18:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-03 18:54:27 +0000 UTC FinishedAt: 2026-08-03 21:58:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9qlvv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_lru_sort_commit_inputs_store","damon_reclaim_commit_inputs_store","damon_lru_sort_turn","damon_reclaim_turn"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1dbd7c34bb92dd9c0b0363b75f6ec444299af108","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_PADDR","DAMON_RECLAIM","DAMON_LRU_SORT"],"series_id":"ea18d4c5-2976-46b0-abe9-be6dd70f65be","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-03 18:54:27 +0000 UTC FinishedAt: 2026-08-03 21:57:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b62a8fce-3696-4af7-9946-dba422e00754,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bc6a256b-282a-4d6a-9e71-83797616ac67,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-workflow9qlvv/series-workflow9qlvv-build-action-3210197993/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-workflow9qlvv/series-workflow9qlvv-build-action-381035798/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-workflow9qlvv/series-workflow9qlvv-convert-artifact-3042184695/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,}