Name: series-workflowtlnmm Phase: Succeeded StartedAt: 2026-08-11 16:41:06 +0000 UTC FinishedAt: 2026-08-11 17:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[0] Phase: Succeeded StartedAt: 2026-08-11 16:41:06 +0000 UTC FinishedAt: 2026-08-11 16:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 16:41:06 +0000 UTC FinishedAt: 2026-08-11 16:45:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY_UV", "S390_UV_UAPI", "PKEY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY_UV", "S390_UV_UAPI", "PKEY" ], "series_id": "3dc16253-adb6-4085-afef-d14301a4a113" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "uv_find_secret" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BLRVlfVVYmIzM0OywKICAgICYjMzQ7UzM5MF9VVl9VQVBJJiMzNDssCiAgICAmIzM0O1BLRVkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgKHRvdGFsIHNlY3JldHMgaW4gdGhlIGd1ZXN0KSB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEl0IGZpeGVzIHRoZSBsb29wIGNvbmRpdGlvbiBpbiBgdXZfZmluZF9zZWNyZXRgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cyBieSB1cGRhdGluZyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIHJhdGhlciB0aGFuIHRoZSBlbmQuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgYmVmb3JlIHRoZSBsb29wIGNvbmRpdGlvbiBjaGVjay4gSXQgYWxzbyBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnkgdXNpbmcgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCBpbnN0ZWFkIG9mIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5pbmRleCBhMjg0Zjk4ZDk3MTY4Li5lNzBhY2FkMDljZDVmIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC03NjAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4ge1xuIFx0dTE2IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7XG4gXHRcdFx0KnNlY3JldCA9IGxpc3QtXHUwMDNlc2VjcmV0c1tpXS5oZHI7XG4gXHRcdFx0cmV0dXJuIDA7XG5AQCAtNzgxLDExICYjNDM7NzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4ge1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4mIzQzO1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDA7XG4mIzQzO1xuIFx0ZG8ge1xuJiM0MztcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICYjNDM7Nzk5LDYgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiBcdFx0cmV0ID0gZmluZF9zZWNyZXRfaW5fcGFnZShzZWNyZXRfaWQsIGxpc3QsIHNlY3JldCk7XG4gXHRcdGlmIChyZXQgPT0gMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcdTAwMjZcdTAwMjYgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCk7XG4gXG4gXHRyZXR1cm4gLUVOT0VOVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEtFWV9VViYjMzQ7LAogICAgJiMzNDtTMzkwX1VWX1VBUEkmIzM0OywKICAgICYjMzQ7UEtFWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uIHdoZXJlIHRoZSBsb29wIHRvIGl0ZXJhdGUgdGhyb3VnaCBwYWdlcyBvZiBzZWNyZXRzIHdvdWxkIHRlcm1pbmF0ZSBwcmVtYXR1cmVseSBhZnRlciB0aGUgZmlyc3QgaXRlcmF0aW9uIGJlY2F1c2UgYHN0YXJ0X2lkeGAgd2FzIHVwZGF0ZWQgdG8gYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBiZWZvcmUgdGhlIGxvb3AgY29uZGl0aW9uIGNoZWNrLiBJdCBhbHNvIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBieSB1c2luZyBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgc2VjcmV0cyBpbiBhIHNpbmdsZSBwYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkweCBVbHRyYXZpc29yIHNlY3JldCByZXRyaWV2YWwgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGAvZGV2L3BrZXlgIGlvY3RsIGludGVyZmFjZSB3aGVuIHRoZSBgUEtFWV9VVmAgbW9kdWxlIGlzIGxvYWRlZC4gRnV6emluZyB0aGlzIGlzIHZhbHVhYmxlIHRvIGVuc3VyZSB0aGUgc2VjcmV0IHJldHJpZXZhbCBsb2dpYyBoYW5kbGVzIG11bHRpLXBhZ2UgcmVzcG9uc2VzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY1MTBkOWQ0OTIxNjdhYzBlMjY0OTI5ZTNkMDExMGExNDE0YzhhMDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0MjozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwppbmRleCBhMjg0Zjk4ZDk3MTY4Li5lNzBhY2FkMDljZDVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC03NjAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiB7CiAJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LSZndDtzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7CiAJCQkqc2VjcmV0ID0gbGlzdC0mZ3Q7c2VjcmV0c1tpXS5oZHI7CiAJCQlyZXR1cm4gMDsKQEAgLTc4MSwxMSAmIzQzOzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsCiAJCSAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KQogewotCXUxNiBzdGFydF9pZHggPSAwOwomIzQzOwl1MTYgc3RhcnRfaWR4OwogCXUxNiBsaXN0X3JjOwogCWludCByZXQ7CiAKJiM0MzsJbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4ID0gMDsKJiM0MzsKIAlkbyB7CiYjNDM7CQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJCXV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsICZhbXA7bGlzdF9yYywgTlVMTCk7CiAJCWlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCAmYW1wOyZhbXA7IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkgewogCQkJaWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpCkBAIC03OTYsNyAmIzQzOzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiAJCXJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpOwogCQlpZiAocmV0ID09IDApCiAJCQlyZXR1cm4gcmV0OwotCQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJfSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBICZhbXA7JmFtcDsgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4KTsKIAogCXJldHVybiAtRU5PRU5UOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHMzOTB4IFVWIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbnMuIEluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZW5hbWVkIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAuIEEgc2ltcGxlIG5hbWUgY2hhbmdlOyBub3RoaW5nIHRvbyBleGNpdGluZyB0aGVyZS4gSG93ZXZlciwgdGhlIGNoYW5nZXMgdG8gYHV2X2ZpbmRfc2VjcmV0YCBhcmUgYSBiaXQgbW9yZSBpbnRlcmVzdGluZy4gV2UgaGF2ZSBhbiBpbml0aWFsaXphdGlvbiBvZiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4ID0gMDtgIGFuZCwgY3J1Y2lhbGx5LCBgc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4O2AgbW92ZWQgdG8gdGhlICpiZWdpbm5pbmcqIG9mIHRoZSBsb29wLCBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIHNhbWUgbGluZSBmcm9tIHRoZSBlbmQuIFRoaXMgY2xlYXJseSBtb2RpZmllcyB0aGUgc2VjcmV0IHNlYXJjaGluZyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHNldHVwPyBUaGlzIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZpbGUgaXMgY2xlYXJseSByZWxhdGVkIHRvIFVsdHJhdmlzb3IsIG9yIFVWLCBvbiBzMzkweC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIGZ1enplZD8gV2VsbCwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweCwgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBDYW4gSSB0ZXN0IHRoaXMgc3BlY2lmaWMgY29kZSBjaGFuZ2U/IFFFTVUgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZW11bGF0aW5nIHMzOTB4LiBIb3dldmVyLCB0aGUgY2F0Y2ggaXMgVVYgc3VwcG9ydCBpbiBRRU1VLiBMdWNraWx5LCBRRU1VICpkb2VzKiBoYXZlIHNvbWUgczM5MHggcHJvdGVjdGVkIHZpcnR1YWxpemF0aW9uIChQVikgc3VwcG9ydCwgYW5kIFBWIHVzZXMgVVYuIFNvLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aGF0IEkgY2FuIGdldCBhIHJlcHJvZHVjaWJsZSB0ZXN0IGNhc2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIGB1dl9maW5kX3NlY3JldGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUmIzM5O3MgY29udGV4dCBhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cdG11dGV4X3VubG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgdXZfZmluZF9zZWNyZXRgIENhbGwqKgoKT2theSwgc28gYHV2X2ZpbmRfc2VjcmV0YCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24sIGFuZCB0aGUgY2FsbCBvcmlnaW5hdGVzIGZyb20gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhhdCBmaWxlLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBhcmVhcyB3aXRoaW4gYHBrZXlfdXYuY2AgSSBuZWVkIHRvIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBhcmUgYmVpbmcgZmV0Y2hlZCBieSBjaGVja2luZyBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoaXMgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NlY3JldF9tZXRhZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3V2LmM9ODA2PUVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODEyLSAqIEBidWZfc2l6ZTogU2l6ZSBvZiB0aGUgYnVmZmVyLiBUaGUgY29ycmVjdCBidWZmZXIgc2l6ZSBpcyByZXBvcnRlZCBhcyBwYXJ0IG9mXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODEzOiAqIHRoZSByZXN1bHQgZnJvbSBgdXZfZ2V0X3NlY3JldF9tZXRhZGF0YWAuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODE0LSAqXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9ODM9c3RhdGljIGJvb2wgaXNfdXZfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5dHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjkzOnN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05NC1cdFx0XHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTA2PXN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTI6XHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEoc2VjcmV0X2lkLCBcdTAwMjZzZWNyZXRfbWV0YV9kYXRhKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNDg6XHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEodC1cdTAwM2VzZWNyZXRfaWQsIFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ5LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOgoKKipUcmFjaW5nIERhdGEgRmxvdzogVW5jb3ZlcmluZyBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0JiMzOTtzIG9idmlvdXNseSBwdWxsaW5nIHNvbWUgY3JpdGljYWwgaW5mb3JtYXRpb24sIGxpa2VseSBhYm91dCBzZWNyZXRzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgcmV0cmlldmVfc2VjcmV0YCBhbmQgYHV2X3ZlcmlmeWtleWAuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzIG9mICp0aG9zZSogdHdvIGZ1bmN0aW9ucy4gS25vd2luZyB3aGVyZSBgcmV0cmlldmVfc2VjcmV0YCBhbmQgYHV2X3ZlcmlmeWtleWAgYXJlIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgcmV0cmlldmVfc2VjcmV0YCBhbmQgYHV2X3ZlcmlmeWtleWAgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBgZ2V0X3NlY3JldF9tZXRhZGF0YWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmV0cmlldmVfc2VjcmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYyMC1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjIxOmludCB1dl9yZXRyaWV2ZV9zZWNyZXQodTE2IHNlY3JldF9pZHgsIHU4ICpidWYsIHNpemVfdCBidWZfc2l6ZSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjItXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTgwNj1FWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwOC0vKipcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDk6ICogdXZfcmV0cmlldmVfc2VjcmV0KCkgLSBnZXQgdGhlIHNlY3JldCB2YWx1ZSBmb3IgdGhlIHNlY3JldCBpbmRleC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTAtICogQHNlY3JldF9pZHg6IFNlY3JldCBpbmRleCBmb3Igd2hpY2ggdGhlIHNlY3JldCBzaG91bGQgYmUgcmV0cmlldmVkLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MjUtICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODI2OmludCB1dl9yZXRyaWV2ZV9zZWNyZXQodTE2IHNlY3JldF9pZHgsIHU4ICpidWYsIHNpemVfdCBidWZfc2l6ZSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04Mjcte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04NTItfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjg1MzpFWFBPUlRfU1lNQk9MX0dQTCh1dl9yZXRyaWV2ZV9zZWNyZXQpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTA1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTA2OnN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwNy1cdFx0XHQgICB1MTYgKnNlY3JldF90eXBlLCB1OCAqYnVmLCB1MzIgKmJ1Zmxlbilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTk6XHRyYyA9IHV2X3JldHJpZXZlX3NlY3JldChzZWNyZXRfbWV0YV9kYXRhLmluZGV4LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTIwLVx0XHRcdFx0YnVmLCBzZWNyZXRfbWV0YV9kYXRhLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTI6XHRyYyA9IHJldHJpZXZlX3NlY3JldCh0LVx1MDAzZXNlY3JldF9pZCwgXHUwMDI2c2VjcmV0X3R5cGUsIHByb3RrZXksIHByb3RrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjEzLVx0aWYgKHJjKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTQ6XHRcdFBLRVlfREJGX0VSUihcJiMzNDslcyByZXRyaWV2ZV9zZWNyZXQoKSBmYWlsZWQgd2l0aCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIxNS1cdFx0XHQgICAgIF9fZnVuY19fLCByYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY2OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYHJldHJpZXZlX3NlY3JldGAgQ2FsbCBDaGFpbioqCgpSaWdodCwgYHJldHJpZXZlX3NlY3JldGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGB1dl9rZXkycHJvdGtleWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJIG5lZWQgdG8gc2VlICp3aGVyZSogYHV2X2tleTJwcm90a2V5YCBhbmQgYHV2X3ZlcmlmeWtleWAgYXJlICp0aGVtc2VsdmVzKiBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHdoYXQgYHJldHJpZXZlX3NlY3JldGAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkIGZvciBhbmQgc2hlZCBsaWdodCBvbiBpdHMgY3JpdGljYWxpdHkuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIGlkZW50aWZ5IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4gQSBxdWljayBzZWFyY2ggZm9yIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgdXNhZ2VzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZXRyaWV2ZV9zZWNyZXRgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2tleTJwcm90a2V5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTEzMD1zdGF0aWMgaW50IHV2X2dldF9zaXplX2FuZF90eXBlKHUxNiBzZWNyZXRfdHlwZSwgdTMyICpwa2V5c2l6ZSwgdTMyICpwa2V5dHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xODktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxOTA6c3RhdGljIGludCB1dl9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICpfYXBxbnMgX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTkxLVx0XHRcdCAgc2l6ZV90IF9ucl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc2LVx0LmlzX3N1cHBvcnRlZF9rZXl0eXBlXHQgPSBpc191dl9rZXl0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjc3Olx0LmtleV90b19wcm90a2V5XHRcdCA9IHV2X2tleTJwcm90a2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc4LVx0LnZlcmlmeV9rZXlcdFx0ID0gdXZfdmVyaWZ5a2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuCgoqKlRyYWNpbmcgdGhlIFBhdGggdG8gdGhlIFVzZXIgSW50ZXJmYWNlIG9mIHRoZSBzMzkwIFBLZXkgQVBJKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHMzOTAmIzM5O3MgUEtleSBmdW5jdGlvbmFsaXR5IGludGVyYWN0cyB3aXRoIHVzZXJzcGFjZS4gSSBzZWUgdGhlc2UgY29tcG9uZW50czogd2UgaGF2ZSBgdXZfaGFuZGxlcmAsIHdoaWNoIGlzIHBhcnQgb2YgYSBgcGtleV9oYW5kbGVyYC4gVGhlIGBwa2V5X2hhbmRsZXJgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYCBmaWxlLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsICYjMzQ7Q2FuIHVzZXJzcGFjZSBldmVuIHJlYWNoIHRoaXMgYHBrZXlfYXBpYD8mIzM0OyBBbmQsIHRoYW5rZnVsbHksIHRoZSBhbnN3ZXIgaXMgeWVzLCBiZWNhdXNlIHRoZXJlJiMzOTtzIGFuIGlvY3RsIGludGVyZmFjZSBleHBvc2VkIHRocm91Z2ggYC9kZXYvcGtleWAuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZpbGUsIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlvY3RsIHdvcmtzIGFuZCBob3cgaXQgdHJhbnNsYXRlcyB0byB0aGUgdW5kZXJseWluZyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGtleV9oYW5kbGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNT1zdGF0aWMgaW50IGtleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVx0LyogdHJ5IHRoZSBkaXJlY3Qgd2F5ICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzM6XHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzQtXHRcdFx0XHRcdCBrZXksIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzktXHRpZiAocmMgPT0gLUVOT0RFVikge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjQwOlx0XHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDEtXHRcdFx0XHRcdFx0XHQgIGtleSwga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz01NT1pbnQgcGtleV9rZXkycHJvdGtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cdGlmIChyYyA9PSAtRU5PREVWKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjM6XHRcdHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXMoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02NC1cdFx0cmMgPSBrZXkycHJvdGtleShOVUxMLCAwLCBrZXksIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTA0LVx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoxMDU6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KFx1MDAyNmFwcW4sIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTA2LVx0XHRcdFx0ICBrZ3Mua2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0xMTY9c3RhdGljIGludCBwa2V5X2lvY3RsX2NscjJzZWNrKHN0cnVjdCBwa2V5X2NscjJzZWNrIF9fdXNlciAqdWNzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXHRrZXlidWZsZW4gPSBzaXplb2Yoa2NzLnNlY2tleS5zZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjEyOTpcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXHUwMDI2YXBxbiwgMSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMzAtXHRcdFx0XHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTE0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2VjMnByb3RrKHN0cnVjdCBwa2V5X3NlYzJwcm90ayBfX3VzZXIgKnVzcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTUzLVx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcdHJjID0gcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KFx1MDAyNmFwcW4sIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVx0XHRcdFx0XHQga3NwLnNlY2tleS5zZWNrZXksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTIxNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZmluZGNhcmQoc3RydWN0IHBrZXlfZmluZGNhcmQgX191c2VyICp1ZmMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyMzA6XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGtmYy5zZWNrZXkuc2Vja2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cdFx0XHRcdFx0c2l6ZW9mKGtmYy5zZWNrZXkuc2Vja2V5KSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjM0LVx0aWYgKHJjID09IC1FTk9ERVYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1Olx0XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGtmYy5zZWNrZXkuc2Vja2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cdFx0XHRcdFx0XHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNTM9c3RhdGljIGludCBwa2V5X2lvY3RsX3NrZXkycGtleShzdHJ1Y3QgcGtleV9za2V5MnBrZXkgX191c2VyICp1c3ApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI2MS1cdGtzcC5wcm90a2V5LmxlbiA9IHNpemVvZihrc3AucHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShOVUxMLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI2My1cdFx0XHRcdFx0IGtzcC5zZWNrZXkuc2Vja2V5LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI4Ni1cdGt2ay5kb21haW4gPSAweEZGRkY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6Mjg3Olx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShrdmsuc2Vja2V5LnNlY2tleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXHRcdFx0XHQgICAgIHNpemVvZihrdmsuc2Vja2V5LnNlY2tleSksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxMy1cdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMTQ6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KE5VTEwsIDAsIGtncC5rZXl0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cdFx0XHRcdCAgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KHRtcGJ1Ziwgc2l6ZW9mKCp0KSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zNTctXHRcdFx0XHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0zOTA9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2syKHN0cnVjdCBwa2V5X2dlbnNlY2syIF9fdXNlciAqdWdzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00MTQtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShhcHFucywga2dzLmFwcW5fZW50cmllcyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00MTYtXHRcdFx0XHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz00NDI9c3RhdGljIGludCBwa2V5X2lvY3RsX2NscjJzZWNrMihzdHJ1Y3QgcGtleV9jbHIyc2VjazIgX191c2VyICp1Y3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQ3MC1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XHRyYyA9IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGFwcW5zLCBrY3MuYXBxbl9lbnRyaWVzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQ3Mi1cdFx0XHRcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTUwMz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5a2V5MihzdHJ1Y3QgcGtleV92ZXJpZnlrZXkyIF9fdXNlciAqdXZrKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NTE1Olx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUxNi1cdFx0XHRcdCAgICAgXHUwMDI2a3ZrLmNhcmRuciwgXHUwMDI2a3ZrLmRvbWFpbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTc4LVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjU3OTpcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2tleSwga2FrLmtleWxlbiwga2FrLmZsYWdzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cdFx0XHRcdFx0YXBxbnMsIFx1MDAyNm5yX2FwcW5zLCAwKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NjA4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrdChzdHJ1Y3QgcGtleV9hcHFuczRrZXl0eXBlIF9fdXNlciAqdWF0KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjItXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUoa2F0LnR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjI0LVx0XHRcdFx0XHQgICAga2F0LmN1cl9ta3ZwLCBrYXQuYWx0X21rdnAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNjppbnQgcGtleV9oYW5kbGVyX3JlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mzg6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTc4LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy04MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6ODE6aW50IHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTkzLX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTk1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEwMS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEwMy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTExNy19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjExODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChlbnVtIHBrZXlfa2V5X3R5cGUga3QpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEyMS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEyMy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEzNy19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEzODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNDA6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE0MS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE0My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1NS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE1NjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9wdXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE1ODppbnQgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1OS1cdFx0XHRcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjIte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjQtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE2NjpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY3LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNla2V5X3RvX3Byb3RrZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3MS1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTczLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTc2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTgzLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTg1LVx0XHRcdFx0XHQgc2l6ZV90IG5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTg5LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaCwgKmh0bXBbMTBdO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xOTEtXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIxNS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIxNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjE4OmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXHRcdFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyMi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyNC1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjI2Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjctXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VnZW5fa2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzEtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzMy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzNS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9nZW5fa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMzg6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzOS1cdFx0XHQgICAgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ0LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ1Olx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ2LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDg6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoa2V5c3VidHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWNscl90b19rZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjU0Olx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjU4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2Nscl90b19rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjYxLVx0XHRcdCAgICB1MTYgKmNhcmQsIHUxNiAqZG9tLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjY1Olx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2OS1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZXZlcmlmeV9rZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3Mi1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjczOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc2LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3OTppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXHRcdFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjgyLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg0LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyODY6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4Ny1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWFwcW5zX2Zvcl9rZXkpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODktXHRcdFx0XHQgICAgICB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTMtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjk2OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUoZW51bSBwa2V5X2tleV90eXBlIGtleXN1YnR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5Ny1cdFx0XHRcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDAte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDItXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMwNDpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzA1LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlYXBxbnNfZm9yX2tleXR5cGUpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwOS1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzExLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzEzLX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE0OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTY6dm9pZCBwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxNy17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE5Olx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwa2V5X2hhbmRsZXJfbW9kdWxlc1tdID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGtleV9oYW5kbGVyX21vZHVsZXMpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMzY6XHRcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNy1cdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzQxLVx0XHRcdGlmIChoLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlx0XHRcdCAgICAhc3RyY21wKGgtXHUwMDNlbW9kdWxlLVx1MDAzZW5hbWUsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXHRcdFx0XHRmb3VuZCA9IHRydWU7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXHRcdGlmICghZm91bmQpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5Olx0XHRcdHByX2RlYnVnKFwmIzM0O3JlcXVlc3RfbW9kdWxlKCVzKVxcblwmIzM0OywgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNTA6XHRcdFx0cmVxdWVzdF9tb2R1bGUocGtleV9oYW5kbGVyX21vZHVsZXNbaV0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXHRcdH1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1NC19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1NTpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXMpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaD0xNDU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBrZXlfYXR0cl9ncm91cHNbXTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE1MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MTUxOnN0cnVjdCBwa2V5X2hhbmRsZXIge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXHRzdHJ1Y3QgbW9kdWxlICptb2R1bGU7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5MzppbnQgcGtleV9oYW5kbGVyX3JlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTQ6aW50IHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDE6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAyOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDQ6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDUtXHRcdFx0XHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjA3LVx0XHRcdFx0dTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwODppbnQgcGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDktXHRcdFx0XHRcdCBzaXplX3QgbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXHRcdFx0XHRcdCB1MzIgKnByb3RrZXl0eXBlLCB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTQtXHRcdFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cdFx0XHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIxNzppbnQgcGtleV9oYW5kbGVyX2Nscl90b19rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE4LVx0XHRcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjItXHRcdFx0ICAgIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMjM6aW50IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cdFx0XHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNi1cdFx0XHQgICAgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjgtXHRcdFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjktXHRcdFx0ICAgICAgIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzMS1cdFx0XHRcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzctICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIzODp2b2lkIHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXModm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NTU3PXN0YXRpYyBpbnQgY2NhX3Nsb3dwYXRoX2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy01OTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM6NTk2OnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGNjYV9oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cdC5tb2R1bGVcdFx0XHQgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjE1LVx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jOjYxNjpcdHJldHVybiBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2Y2NhX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYxNy19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MjQtXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jOjYyNTpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNmNjYV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MjYtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQ0LVx0Lm1vZHVsZVx0XHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTYwPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfZXAxMV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgZXAxMSBzdHVmZiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYzo1NjM6XHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNmVwMTFfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU2NC19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYz01Njk9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfZXAxMV9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYzo1NzI6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZlcDExX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzMtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQzNT1zdGF0aWMgaW50IHBrZXlfcGNrbW9fdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM6NDQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHBja21vX2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NDQtXHQubW9kdWxlXHRcdCAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfcGNrbW9faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cdC8qIHJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciBmb3IgYWxsIHRoZSBwY2ttbyBzdHVmZiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM6NDcwOlx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZwY2ttb19oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ3MS19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM9NDc2PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X3Bja21vX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM6NDc5Olx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2cGNrbW9faGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00ODAtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3LS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoxODogKiBXcmFwcGVyIGFyb3VuZCBwa2V5X2hhbmRsZXJfZ2VuX2tleSgpIHdoaWNoIGRlYWxzIHdpdGggdGhlXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIxLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjMtXHRcdFx0XHQgICAgdTMyIGtleWJpdHNpemUsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjI4Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjktXHRcdFx0XHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzItXHRpZiAocmMgPT0gLUVOT0RFVikge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XHRcdHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXMoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0Olx0XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KE5VTEwsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cdFx0XHRcdFx0ICBrZXl0eXBlLCBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQ5PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBib29sIGlzX3h0cywgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVx0cHJvdGtleS5sZW4gPSBzaXplb2YocHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjY4Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy02OS1cdFx0XHRcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXHUwMDI2cHJvdGtleS5sZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtODEtXHRcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo4MjpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04My1cdFx0XHRcdFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcdTAwMjZwcm90a2V5Lmxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xMDY9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2Flc194dHNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTMyOlx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXHRcdFx0XHQgICAgICB0LVx1MDAzZXByb3RrZXksIFx1MDAyNnByb3RsZW4sIFx1MDAyNnByb3R0eXBlKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTczLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzUtXHRcdFx0XHQgICAgICB0LVx1MDAzZXByb3RrZXksIFx1MDAyNnByb3RsZW4sIFx1MDAyNnByb3R0eXBlKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0zMDg9c3RhdGljIHNzaXplX3QgcGtleV9jY2FkYXRhX2Flc19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGJvb2wgaXNfeHRzLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIxLVx0YnVmbGVuID0gc2l6ZW9mKHNlY2tleS1cdTAwM2VzZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzIyOlx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVx0XHRcdFx0ICAgICAgc2Vja2V5LVx1MDAzZXNlY2tleSwgXHUwMDI2YnVmbGVuLCBOVUxMKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMjktXHRcdGJ1ZmxlbiA9IHNpemVvZihzZWNrZXktXHUwMDNlc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVx0XHRcdFx0XHQgICAgICBzZWNrZXktXHUwMDNlc2Vja2V5LCBcdTAwMjZidWZsZW4sIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQzMy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQzNS1cdFx0XHRcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0Mi1cdFx0YnVmICYjNDM7PSBDQ0FDSVBIRVJUT0tFTlNJWkU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo0NDM6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQ0LVx0XHRcdHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTQ4LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkocGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTUwLVx0XHRcdFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1Ny1cdFx0YnVmICYjNDM7PSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo1NTg6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU5LVx0XHRcdHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3My1cdC5tb2R1bGVcdFx0XHQgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yODQ9c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjk4Olx0cmMgPSBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2dXZfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MzA4PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X3V2X2V4aXQodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMwOS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZ1dl9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cdG11dGV4X2xvY2soXHUwMDI2dXZfbGlzdF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDAyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKlJlYWNoaW5nIGB1dl9maW5kX3NlY3JldGAgaW4gUUVNVSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBwa2V5X3V2X2luaXRgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCBiZWNhdXNlIGl0IHJlZ2lzdGVycyBgdXZfaGFuZGxlcmAuIFRoYXQgYHV2X2hhbmRsZXJgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHN0cnVjdHVyZSwgbGlua2luZyB0aGUga2V5LXRvLXByb3RvY29sIGtleSBjb252ZXJzaW9uIGFuZCBrZXkgdmVyaWZpY2F0aW9uLiBOb3csIGBrZXlfdG9fcHJvdGtleWAgcG9pbnRzIHRvIGB1dl9rZXkycHJvdGtleWAsIGFuZCBgdmVyaWZ5X2tleWAgcG9pbnRzIHRvIGB1dl92ZXJpZnlrZXlgLiBUaGVzZSB0d28gZnVuY3Rpb25zLCBgdXZfa2V5MnByb3RrZXlgIGFuZCBgdXZfdmVyaWZ5a2V5YCwgYXJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhcyB0aGV5IGJvdGggY2FsbCBgZ2V0X3NlY3JldF9tZXRhZGF0YWAuIEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGdldF9zZWNyZXRfbWV0YWRhdGFgIGluIHR1cm4gY2FsbHMgYHV2X2ZpbmRfc2VjcmV0YC4KCkFoLCByaWdodCwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhlIHBhdGNoIG1vZGlmaWVkLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYHV2X2ZpbmRfc2VjcmV0YCBhY3R1YWxseSAqcmVhY2hhYmxlKiBkdXJpbmcgUUVNVSYjMzk7cyBvcGVyYXRpb24/IEl0JiMzOTtzIGFsbCBhYm91dCBjb250cm9sIGZsb3cuIFdhaXQgYSBtaW51dGUuLi4gYHV2X2ZpbmRfc2VjcmV0YCByZWxpZXMgb24gYHV2X2xpc3Rfc2VjcmV0c2AuIFRoYXQgc3VnZ2VzdHMgYSBwYXRoIHRvIGV4cGxvcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB1dl9saXN0X3NlY3JldHNgIGRvZXMuIElmIEkgY2FuIGZpZ3VyZSBvdXQgaG93IGB1dl9saXN0X3NlY3JldHNgIGdldHMgY2FsbGVkLCBJJiMzOTtsbCBrbm93IGlmIGB1dl9maW5kX3NlY3JldGAgaXMgb24gYSB2aWFibGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBJJiMzOTtsbCBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhlIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2xpc3Rfc2VjcmV0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00ODktLyoqXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00OTEtICpcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MTI6c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTEzLVx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzkyOlx0XHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcdTAwMjZsaXN0X3JjLCBOVUxMKTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMTYtXHRkbyB7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxNzpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcdTAwMjZ1dl9pb2N0bC1cdTAwM2V1dl9yYyxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE4LVx0XHRcdFx0XHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcnJjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVsdHJhdmlzb3IgQ2FsbCBFeGVjdXRpb24gaW4gUUVNVSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uLCB3aGljaCBJIHNlZSBleGVjdXRlcyBhbiBVbHRyYXZpc29yIENhbGwgKFVWQykuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgUUVNVSBldmVuIHN1cHBvcnQgdGhlc2UgdGhpbmdzPyBMdWNraWx5LCBJIGtub3cgUUVNVSBkb2VzIHN1cHBvcnQgczM5MHggUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgdGhyb3VnaCBLVk0sIHdoaWNoIGlzIGEgZ29vZCBzdGFydCBhcyBpdCBtZWFucyBRRU1VICpjYW4qIGludGVyY2VwdCB0aGVzZSBVVkNzLgoKQnV0IHRoZW4gSSBoYWQgYSByZWFsaXphdGlvbi4gSWYgdGhpcyBpcyBhIGd1ZXN0IHJ1bm5pbmcgdW5kZXIgS1ZNIHdpdGggUFYgZW5hYmxlZCwgdGhlIFVsdHJhdmlzb3IgZnVuY3Rpb25hbGl0eSBpcyBlc3NlbnRpYWxseSBpbXBsZW1lbnRlZCBieSB0aGUgSUJNIGZpcm13YXJlLCBvciBpbiBhIHRlc3Rpbmcgc2NlbmFyaW8sIHBlcmhhcHMgS1ZNL1FFTVUgaXRzZWxmLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzPyBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWUgUFYgc3VwcG9ydCBpbiBRRU1VLiBIb3dldmVyLCBpdCYjMzk7cyB1c3VhbGx5IHRpZWQgdG8gS1ZNIGFuZCByZXF1aXJlcyBhIGhvc3QgdGhhdCBhY3R1YWxseSAqc3VwcG9ydHMqIFBWLCBsaWtlIElCTSBaIGhhcmR3YXJlLgoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIGtub3cgc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBhbmQgR0NFICpkb2VzbiYjMzk7dCogaGF2ZSBzMzkweCBoYXJkd2FyZSwgc28gaXQgdXNlcyBRRU1VIFRDRyBmb3IgczM5MHggZW11bGF0aW9uLiBTbyB0aGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyBRRU1VIFRDRywgdGhlICplbXVsYXRpb24qIG1vZGUsIGFjdHVhbGx5IHN1cHBvcnQgczM5MHggVWx0cmF2aXNvciBjYWxscz8KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBgdXZfbGlzdF9zZWNyZXRzYCBpbiBhIFFFTVUgVENHIGVudmlyb25tZW50LiBUaGlzIHdpbGwgcmVxdWlyZSBjbG9zZXIgZXhhbWluYXRpb24uIExldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyB0aGF0IGB1dl9saXN0X3NlY3JldHNgIGNhbGxzIGB1dl9jYWxsYCB3aGljaCB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9jYWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3V2LmM9MTU9dm9pZCB1dl9xdWVyeV9pbmZvKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2Jvb3QvdXYuYy0yNS1cdC8qIElnbm9yZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIG1vcmUgZGF0YSB3ZSBkbyBub3QgcHJvY2VzcyAqL1xuYXJjaC9zMzkwL2Jvb3QvdXYuYzoyNjpcdGlmICh1dl9jYWxsKDAsICh1aW50NjRfdClcdTAwMjZ1dmNiKSBcdTAwMjZcdTAwMjYgdXZjYi5oZWFkZXIucmMgIT0gVVZDX1JDX01PUkVfREFUQSlcbmFyY2gvczM5MC9ib290L3V2LmMtMjctXHRcdHJldHVybjtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MzI9c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHV2X3NlY3JldF9saXN0KSA9PSBQQUdFX1NJWkUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDMzLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDM0OnN0YXRpYyBpbmxpbmUgaW50IF9fdXZfY2FsbCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDM1LXtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NDYtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NDc6c3RhdGljIGlubGluZSBpbnQgdXZfY2FsbCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDQ4LXtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTEtXHRkbyB7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NTI6XHRcdGNjID0gX191dl9jYWxsKHIxLCByMik7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTMtXHR9IHdoaWxlIChjYyBcdTAwM2UgMSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDU2LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDU3Oi8qIExvdyBsZXZlbCB1dl9jYWxsIHRoYXQgYXZvaWRzIHN0YWxscyBmb3IgbG9uZyBydW5uaW5nIGJ1c3kgY29uZGl0aW9ucyAgKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ1ODpzdGF0aWMgaW5saW5lIGludCB1dl9jYWxsX3NjaGVkKHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTkte1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2Mi1cdGRvIHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ2MzpcdFx0Y2MgPSBfX3V2X2NhbGwocjEsIHIyKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2NC1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDY5LS8qXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NzA6ICogc3BlY2lhbCB2YXJpYW50IG9mIHV2X2NhbGwgdGhhdCBvbmx5IHRyYW5zcG9ydHMgdGhlIGNwdSBvciBndWVzdFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDcxLSAqIGhhbmRsZSBhbmQgdGhlIGNvbW1hbmQsIGxpa2UgZGVzdHJveSBvciB2ZXJpZnkuXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDgyLVx0V0FSTighaGFuZGxlLCBcJiMzNDtObyBoYW5kbGUgcHJvdmlkZWQgdG8gVWx0cmF2aXNvciBjYWxsIGNtZCAleFxcblwmIzM0OywgY21kKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ4MzpcdGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDg0LVx0KnJjID0gdXZjYi5oZWFkZXIucmM7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NTEyPXN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MjAtXHR9O1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTIxOlx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTIyLVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTU3MT1zdGF0aWMgaW5saW5lIGludCBzaGFyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBjbWQpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTg4LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTg5Olx0aWYgKCF1dl9jYWxsKDAsICh1NjQpXHUwMDI2dXZjYikpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01OTAtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz00MT1zdGF0aWMgaW50IF9faW5pdCB1dl9pbml0KHBoeXNfYWRkcl90IHN0b3JfYmFzZSwgdW5zaWduZWQgbG9uZyBzdG9yX2xlbilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNDktXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NTA6XHRpZiAodXZfY2FsbCgwLCAodWludDY0X3QpXHUwMDI2dXZjYikpIHtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy01MS1cdFx0cHJfZXJyKFwmIzM0O1VsdHJhdmlzb3IgaW5pdCBmYWlsZWQgd2l0aCByYzogMHgleCBycmM6IDAleFxcblwmIzM0Oyxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9OTE9aW50IHV2X3Bpbl9zaGFyZWQodW5zaWduZWQgbG9uZyBwYWRkcilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtOTgtXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6OTk6XHRpZiAodXZfY2FsbCgwLCAodTY0KVx1MDAyNnV2Y2IpKVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTEwMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTExMj1zdGF0aWMgaW50IHV2X2Rlc3Ryb3kodW5zaWduZWQgbG9uZyBwYWRkcilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMTE5LVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjEyMDpcdGlmICh1dl9jYWxsKDAsICh1NjQpXHUwMDI2dXZjYikpIHtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xMjEtXHRcdC8qXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTE2OD1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xNzUtXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MTc2Olx0aWYgKHV2X2NhbGwoMCwgKHU2NClcdTAwMjZ1dmNiKSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xNzctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz0yNTE9aW50IF9fbWFrZV9mb2xpb19zZWN1cmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHV2X2NiX2hlYWRlciAqdXZjYilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjY4LVx0ICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MjY5Olx0Y2MgPSBfX3V2X2NhbGwoMCwgKHU2NCl1dmNiKTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNzAtXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NTk4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHV2X2NiX3F1ZXJ5X2tleXMgdXZfcXVlcnlfa2V5cyh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02MDQtXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjA1Olx0dXZfY2FsbCgwLCAodWludDY0X3QpXHUwMDI2dXZjYik7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjA2LVx0cmV0dXJuIHV2Y2I7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTgyNj1pbnQgdXZfcmV0cmlldmVfc2VjcmV0KHUxNiBzZWNyZXRfaWR4LCB1OCAqYnVmLCBzaXplX3QgYnVmX3NpemUpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgzNS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MzY6XHR1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2dXZjYik7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODM3LVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz0yODQ9aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzE1LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjMxNjpcdGNjID0gdXZfY2FsbCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTMxNy1cdCpyYyA9IHV2Y2IuaGVhZGVyLnJjO1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz00MjQ9c3RhdGljIGludCBrdm1fczM5MF9wdl9kZWluaXRfdm1fZmFzdChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy00MzItXG5hcmNoL3MzOTAva3ZtL3B2LmM6NDMzOlx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2dXZjYik7XG5hcmNoL3MzOTAva3ZtL3B2LmMtNDM0LVx0aWYgKHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz03MDk9aW50IGt2bV9zMzkwX3B2X2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzQ5LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjc1MDpcdGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTc1MS1cdCpyYyA9IHV2Y2IuaGVhZGVyLnJjO1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz03NzI9aW50IGt2bV9zMzkwX3B2X3NldF9zZWNfcGFybXMoc3RydWN0IGt2bSAqa3ZtLCB2b2lkICpoZHIsIHU2NCBsZW5ndGgsIHUxNiAqcmMsXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTc4MS1cdH07XG5hcmNoL3MzOTAva3ZtL3B2LmM6NzgyOlx0aW50IGNjID0gdXZfY2FsbCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTc4My1cbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9ODUxPWludCBrdm1fczM5MF9wdl9zZXRfY3B1X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggc3RhdGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTg2MC1cbmFyY2gvczM5MC9rdm0vcHYuYzo4NjE6XHRjYyA9IHV2X2NhbGwoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmFyY2gvczM5MC9rdm0vcHYuYy04NjItXHRLVk1fVVZfRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O1BST1RWSVJUIFNFVCBDUFUgJWQgU1RBVEUgJWQgcmMgJXggcnJjICV4XCYjMzQ7LFxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz04Njk9aW50IGt2bV9zMzkwX3B2X2R1bXBfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqYnVmZiwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTg3OC1cbmFyY2gvczM5MC9rdm0vcHYuYzo4Nzk6XHRjYyA9IHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmFyY2gvczM5MC9rdm0vcHYuYy04ODAtXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9OTE2PWludCBrdm1fczM5MF9wdl9kdW1wX3N0b3Jfc3RhdGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy05NjItXHRcdC8qIEdldCAxTUIgd29ydGggb2YgZ3Vlc3Qgc3RvcmFnZSBzdGF0ZSBkYXRhICovXG5hcmNoL3MzOTAva3ZtL3B2LmM6OTYzOlx0XHRjYyA9IHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmFyY2gvczM5MC9rdm0vcHYuYy05NjQtXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTEwMjQ9aW50IGt2bV9zMzkwX3B2X2R1bXBfY29tcGxldGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy0xMDQwLVxuYXJjaC9zMzkwL2t2bS9wdi5jOjEwNDE6XHRyZXQgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2Y29tcGxldGUpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTEwNDItXHQqcmMgPSBjb21wbGV0ZS5oZWFkZXIucmM7XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM9ODc4PXN0YXRpYyBpbmxpbmUgaW50IHV2X25taV9rZGJfcmVhc29uKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmMtODk1LSAqL1xuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM6ODk2OnN0YXRpYyB2b2lkIHV2X2NhbGxfa2dkYl9rZGIoaW50IGNwdSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtYXN0ZXIpXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy04OTcte1xuLS1cbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTkyOC0jZWxzZSAvKiAhQ09ORklHX0tHREIgKi9cbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jOjkyOTpzdGF0aWMgaW5saW5lIHZvaWQgdXZfY2FsbF9rZ2RiX2tkYihpbnQgY3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG1hc3RlcilcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTkzMC17XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM9OTM4PXN0YXRpYyBpbnQgdXZfaGFuZGxlX25taSh1bnNpZ25lZCBpbnQgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy05NzgtXHRjYXNlIG5taV9hY3Rfa2dkYjpcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jOjk3OTpcdFx0dXZfY2FsbF9rZ2RiX2tkYihjcHUsIHJlZ3MsIG1hc3Rlcik7XG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy05ODAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MTg1PXN0YXRpYyBpbnQgdXZpb19hdHRlc3RhdGlvbihzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yMjYtXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjIyNzpcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NCl1dmNiX2F0dGVzdCk7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTIyOC1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTI2OT1zdGF0aWMgaW50IHV2aW9fYWRkX3NlY3JldChzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yOTMtXHR1dmNiLmFkZHIgPSAodTY0KWFzcmNiO1xuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzoyOTQ6XHR1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2dXZjYik7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTI5NS1cdHV2X2lvY3RsLVx1MDAzZXV2X3JjID0gdXZjYi5oZWFkZXIucmM7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz00MDQ9c3RhdGljIGludCB1dmlvX2xvY2tfc2VjcmV0cyhzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy00MTMtXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjQxNDpcdHV2X2NhbGwoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDE1LVx0aW9jdGwtXHUwMDNldXZfcmMgPSB1dmNiLmhlYWRlci5yYztcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTQzNj1zdGF0aWMgaW50IHV2aW9fcmV0cl9zZWNyZXQoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDU5LVx0dXZjYi5idWZfc2l6ZSA9IGJ1Zl9sZW47XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjQ2MDpcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDcxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVWQyBJbnN0cnVjdGlvbiBhbmQgSXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXZfY2FsbGAgZnVuY3Rpb24uIEl0JiMzOTtzIHVzaW5nIHRoZSBgVVZDYCBpbnN0cnVjdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBxdWVzdGlvbjogZG9lcyBRRU1VIFRDRyBhY3R1YWxseSAqZW11bGF0ZSogdGhhdD8gSSBrbm93IGl0IG9mdGVuIGRvZXNuJiMzOTt0IGRlYWwgd2l0aCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHkgaXMgZXZlbiBlbmFibGVkIHdpdGhpbiBRRU1VIFRDRy4KCkkgc2VlIHRoZSBrZXJuZWwgY2hlY2tzIGlmIHRoZSBmYWNpbGl0eSBpcyBhdmFpbGFibGUsIHdoaWNoIHN1Z2dlc3RzIGl0IGV4cGVjdHMgaXQgdG8gKnBvdGVudGlhbGx5KiBiZSB0aGVyZS4gSSByZW1lbWJlciBzZWVpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgcmVhbGl6ZSBpdCYjMzk7cyBhIG1vZHVsZS4gVGhpcyBtYWtlcyBtZSB3b25kZXI6IGNhbiB3ZSBnZXQgdG8gYHV2X2ZpbmRfc2VjcmV0YCBldmVuIGlmIGBVVkNgIHJldHVybnMgYW4gZXJyb3I/IEl0IGxvb2tzIGxpa2UgaXQgKmhhbmRsZXMqIGVycm9ycyBjb21pbmcgYmFjayBmcm9tIGB1dl9saXN0X3NlY3JldHNgLiBTcGVjaWZpY2FsbHksIGlmIGB1dl9saXN0X3NlY3JldHNgIGdpdmVzIGBVVkNfUkNfSU5WX0NNRGAsIHRoZW4gaXQgdHJhbnNsYXRlcyB0byBgLUVOT0RFVmAuCgpOb3csIHRoZSBjb2RlIGhhcyByZWNlbnRseSBiZWVuIHBhdGNoZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBmcm9tIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAgaW4gdGhlIGxvb3AuIEFsc28sIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0YXJ0X2lkeCA9IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgaW4gdGhlIGBkby4uLndoaWxlYCBsb29wIGFuZCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHggPSAwYC4gSWYgYHV2X2xpc3Rfc2VjcmV0c2AgZG9lc24mIzM5O3QgKmRvKiBhbnl0aGluZyAocGVyaGFwcyBiZWNhdXNlIHRoZSBVVkMgaXMgbm90IHN1cHBvcnRlZCksIHRoZW4gYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAgd291bGQgYmUgd2hhdGV2ZXIgaXQgd2FzIGluaXRpYWxpemVkIHRvLCB3aGljaCBjb3VsZCBiZSB6ZXJvLgoKU28sIGlmIHRoZSBVVkMgaW5zdHJ1Y3Rpb24gaXNuJiMzOTt0IHN1cHBvcnRlZCBpbiBRRU1VLCBgdXZfY2FsbGAgbGlrZWx5IGp1c3QgdGhyb3dzIGEgU0lHSUxMIG9yLCBhdCBiZXN0LCByZXR1cm5zIGFuIGVycm9yIGNvZGUuIEhvd2V2ZXIsIHRoZSBrZXJuZWwgKnNob3VsZG4mIzM5O3QqIGV2ZW4gYXR0ZW1wdCB0byB1c2UgaXQgaWYgdGhlIGZhY2lsaXR5IGlzIG5vdCBhY3R1YWxseSB0aGVyZS4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBgcGtleV91dl9pbml0YCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrZXlfdXZfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyODQ6c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODUte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzE1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MzE2Om1vZHVsZV9jcHVfZmVhdHVyZV9tYXRjaChTMzkwX0NQVV9GRUFUVVJFX1VWLCBwa2V5X3V2X2luaXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzE3LW1vZHVsZV9leGl0KHBrZXlfdXZfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW9kdWxlIExvYWQgQ29uZGl0aW9uKioKCk9rYXksIHNvIHRoaXMgYG1vZHVsZV9jcHVfZmVhdHVyZV9tYXRjaChTMzkwX0NQVV9GRUFUVVJFX1VWLCBwa2V5X3V2X2luaXQpYCBmdW5jdGlvbiBjYWxsIG1lYW5zIHRoZSBtb2R1bGUgYHBrZXlfdXZfaW5pdGAgd2lsbCAqb25seSogbG9hZCBpZiB0aGUgYFMzOTBfQ1BVX0ZFQVRVUkVfVVZgIENQVSBmZWF0dXJlIGlzIHByZXNlbnQuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZlYXR1cmUsIHNwZWNpZmljYWxseSBmYWNpbGl0eSAxNTgg4oCTIHRoZSBVbHRyYXZpc29yIGZlYXR1cmUg4oCTIGlzIGV2ZW4gYXZhaWxhYmxlIGluIFFFTVUgVENHLiBJIGtub3cgdGhhdCBRRU1VIFRDRyB0eXBpY2FsbHkgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGF0IGZlYXR1cmU7IGl0JiMzOTtzIGdlbmVyYWxseSByZXNlcnZlZCBmb3IgS1ZNIG1vZGUgb24gYSBob3N0IHdpdGggYW4gVWx0cmF2aXNvci4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgU3l6a2FsbGVyLiBJdCBydW5zIHMzOTB4LCBhbmQgSSBrbm93IGl0IHN1cHBvcnRzIGJvdGggVENHIGFuZCBLVk0uIEkgbmVlZCB0byBiZSBzdXJlLiBJZiBpdCBydW5zIG9uIGEgcmVhbCBzMzkweCBob3N0IChsaWtlIElCTSBDbG91ZCksIGl0ICpjb3VsZCogYmUgdXNpbmcgS1ZNLCB3aGljaCB3b3VsZCBtYWtlIHRoaXMgcG9zc2libGUuIFJpZ2h0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggS1ZNIGluc3RhbmNlcy4gU28gaXQgKmlzKiByZWFjaGFibGUgdmlhIEtWTS4KClRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIGZvdW5kIHRoZSBidWcsIGFuZCB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgdGhlIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YCBlbWFpbCBhZGRyZXNzLCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IFN5emthbGxlciBlaXRoZXIgdHJpZ2dlcmVkIHRoZSBjb2RlIGRpcmVjdGx5IG9yIGl0IHdhcyBhdCBsZWFzdCB2YWxpZGF0ZWQgaW4gdGhlaXIgdGVzdGluZy4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuIEkgdGhpbmsgYENPTkZJR19QS0VZX1VWYCBpcyByZXF1aXJlZCwgeWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEtFWV9VViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnPTEzNz1jb25maWcgUEtFWV9QQ0tNT1xuLS1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU3LVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxNTg6Y29uZmlnIFBLRVlfVVZcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ3J5cHRvZ3JhcGhpYyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBLRVlfVVZgLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0eXBlcyBvZiBrZXJuZWwgZmVhdHVyZXMgYXJlIGRlZmluZWQgYW5kIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgYXNzb2NpYXRlZCBidWlsZC10aW1lIGNvbnRyb2xzLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIHByZXNlbmNlLCBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbGx5IHJlbGF0ZWQgb3B0aW9ucyBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU1Olx0XHQgIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIHN1cmUgeW91IG5ldmVyIG5lZWQgdG8gZGVyaXZlIHByb3RlY3RlZFxuIDE1NjpcdFx0ICBrZXlzIGZyb20gY2xlYXIga2V5IHZhbHVlcyBkaXJlY3RseSB2aWEgUENLTU8uXG4gMTU3Olx0XG4gMTU4Olx0Y29uZmlnIFBLRVlfVVZcbiAxNTk6XHRcdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4gMTYwOlx0XHRkZXBlbmRzIG9uIFBLRVlcbiAxNjE6XHRcdGRlcGVuZHMgb24gUzM5MF9VVl9VQVBJXG4gMTYyOlx0XHRoZWxwXG4gMTYzOlx0XHQgIFRoaXMgaXMgdGhlIFBLRVkgVWx0cmF2aXNvciBzdXBwb3J0IGhhbmRsZXIgZm9yIGRlcml2aW5nIHByb3RlY3RlZFxuIDE2NDpcdFx0ICBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZSBVbHRyYXZpc29yIChVVikuXG4gMTY1Olx0XG4gMTY2Olx0XHQgIFRoaXMgbW9kdWxlIHdvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIFVWIGRldmljZSBhbmQgc3VwcG9ydHMgdGhlXG4gMTY3Olx0XHQgIHJldHJpZXZhbCBvZiBwcm90ZWN0ZWQga2V5cyBmcm9tIHNlY3JldHMgc3RvcmVkIHdpdGhpbiB0aGVcbiAxNjg6XHRcdCAgVVYgZmlybXdhcmUgbGF5ZXIuIFRoaXMgc2VydmljZSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoaW5cbiAxNjk6XHRcdCAgYSBwcm90ZWN0ZWQgZXhlY3V0aW9uIGd1ZXN0IGFuZCB0aHVzIHRoaXMgbW9kdWxlIHdpbGwgZmFpbCB1cG9uXG4gMTcwOlx0XHQgIG1vZHByb2JlIGlmIG5vIHByb3RlY3RlZCBleGVjdXRpb24gZW52aXJvbm1lbnQgaXMgZGV0ZWN0ZWQuXG4gMTcxOlx0XG4gMTcyOlx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCB3aXRoIGFuIEtWTVxuIDE3MzpcdFx0ICBndWVzdCB3aXRoIHByb3RlY3RlZCBleGVjdXRpb24gYW5kIHlvdSB3YW50IHRvIHVzZSBVViByZXRyaWV2YWJsZVxuIDE3NDpcdFx0ICBzZWNyZXRzIHZpYSBQS0VZIEFQSS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzNjQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhpcyBzaXR1YXRpb24gaGluZ2VzIG9uIHR3byBrZXkgZmFjdG9yczogdGhlIGBQS0VZYCBhbmQgYFMzOTBfVVZfVUFQSWAgcGFyYW1ldGVycy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYW5kIHRoZSBvbmx5IGxvZ2ljYWwgb25lLCBpcyB0byBzeXN0ZW1hdGljYWxseSBleGFtaW5lIHRob3NlIHZhcmlhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3RhdGVzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCBlYWNoIG90aGVyLiBBIGRlZXBlciBkaXZlIGludG8gaG93IHRoZXkmIzM5O3JlIHNldCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIG9uIG90aGVyIHN5c3RlbSBjb21wb25lbnRzIHdpbGwgYmUgY3JpdGljYWwgdG8gcmVzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLiBFc3NlbnRpYWxseSwgYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYCBhcmUgdGhlIGtleXMgdG8gdW5sb2NraW5nIHRoZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz02Nz1jb25maWcgWkNSWVBUXG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6Nzg6Y29uZmlnIFBLRVlcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDQtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEwNTpjb25maWcgUEtFWV9DQ0FcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA2LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBDQ0Egc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEyMTpjb25maWcgUEtFWV9FUDExXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgRVAxMSBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzNi1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTM3OmNvbmZpZyBQS0VZX1BDS01PXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzOC1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgUENLTU8gc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTctXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlJldmlld2luZyBgUzM5MF9VVl9VQVBJYCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBmb2N1cyBvbiB0aGF0IHNwZWNpZmljIHRoaW5nLCBgUzM5MF9VVl9VQVBJYC4gUHJlc3VtYWJseSwgdGhpcyBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGNvZGUsIGRvY3VtZW50YXRpb24sIG9yIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBhIHN5c3RlbSBvciBwcm9qZWN0LiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGNvbnRleHRzOiBpcyB0aGlzIGEgc3BlY2lmaWMgdXNlci1zcGFjZSBBUEkgb24gYW4gczM5MHggYXJjaGl0ZWN0dXJlLCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBVViAoVWx0cmF2aXNvcikgb3Igc29tZSBvdGhlciB2aXJ0dWFsaXphdGlvbiBsYXllcj8gSXQgY291bGQgYmUgYSBkcml2ZXIsIGEgbGlicmFyeSwgb3IgZXZlbiBhIGJ1aWxkIHRhcmdldC4KClRoZSBpbnN0cnVjdGlvbiBpcyB2ZXJ5IGNvbmNpc2UsIHdoaWNoIHN1Z2dlc3RzIHRoZSBjb250ZXh0IGlzIGFscmVhZHkga25vd24sIG9yIGl0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBlbGVtZW50IHdpdGhpbiBhIG11Y2ggbGFyZ2VyIGNvbnZlcnNhdGlvbi4gSSBzaG91bGQgc3RhcnQgYnkgbWVudGFsbHkgY29ubmVjdGluZyB0aGlzIHRvIGFueSByZWNlbnQgZGlzY3Vzc2lvbnMgb3IgY3VycmVudCB0YXNrcyB0byBwcm92aWRlIGEgaGVscGZ1bCBzdW1tYXJ5LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBXaGF0JiMzOTtzIHRoZSAqcHVycG9zZSogb2YgdGhpcyByZXZpZXc/IEFtIEkgY2hlY2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyDigJMgYSBidWcsIGEgcGVyZm9ybWFuY2UgaXNzdWUsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgY29tcGF0aWJpbGl0eSwgb3IgZG9jdW1lbnRhdGlvbiBhY2N1cmFjeT8gSXMgdGhpcyBwYXJ0IG9mIGEgZGVidWdnaW5nIHByb2Nlc3MsIGEgY29kZSByZXZpZXcsIG9yIGRvY3VtZW50YXRpb24gdXBkYXRlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlZm9yZSBJIHN0YXJ0LCBvdGhlcndpc2UsIEkgbWlnaHQgd2FzdGUgdGltZSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTMzkwX1VWX1VBUEkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZz03NT1jb25maWcgSE1DX0RSVlxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL0tjb25maWctODctXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnOjg4OmNvbmZpZyBTMzkwX1VWX1VBUElcbmRyaXZlcnMvczM5MC9jaGFyL0tjb25maWctODktXHRkZWZfdHJpc3RhdGUgbVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVViBTdXBwb3J0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBTMzkwLCB0aGF0JiMzOTtzIHRoZSBTeXN0ZW0geiBhcmNoaXRlY3R1cmUuIFRoZSBmb2N1cyBpcyBsaWtlbHkgb24gVW5pcHJvY2Vzc29yIFZpcnR1YWxpemF0aW9uIChVVikgVXNlciBBUEkgc3VwcG9ydCwgZ2l2ZW4gdGhlIGBTMzkwX1VWX1VBUElgIHJlZmVyZW5jZS4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IHBvaW50cyBtZSB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIHNwZWNpZmljYWxseSB0byB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIGluIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYXMgVUFQSSBmZWF0dXJlcyBvZnRlbiBpbnZvbHZlIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlcyBmb3IgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIFVWIFVBUEkgc3VwcG9ydCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcHJlc2VudCwgYW5kIGlmIHNvLCB3aGF0IGNvbmRpdGlvbnMgZW5hYmxlIHRoZSBpbmNsdXNpb24gb2YgdGhlIGBTMzkwX1VWX1VBUElgIGZlYXR1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgaGVscGZ1bCBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gaG93IHRoaXMgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0XHQgIHRyYW5zZmVyIGNhY2hlIHNpemUgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSAwLjVNQiB0byBOIGJ5dGVzLiBJZiBOXG4gIDg2Olx0XHQgIGlzIHplcm8sIHRoZW4gbm8gY2FjaGluZyBpcyBwZXJmb3JtZWQuXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIFMzOTBfVVZfVUFQSVxuICA4OTpcdFx0ZGVmX3RyaXN0YXRlIG1cbiAgOTA6XHRcdHByb21wdCBcJiMzNDtVbHRyYXZpc29yIHVzZXJzcGFjZSBBUElcJiMzNDtcbiAgOTE6XHRcdGRlcGVuZHMgb24gUzM5MFxuICA5MjpcdFx0aGVscFxuICA5MzpcdFx0ICBTZWxlY3RpbmcgZXhwb3NlcyBwYXJ0cyBvZiB0aGUgVVYgaW50ZXJmYWNlIHRvIHVzZXJzcGFjZVxuICA5NDpcdFx0ICBieSBwcm92aWRpbmcgYSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgYXQgL2Rldi91di5cbiAgOTU6XHRcdCAgVXNpbmcgSU9DVExzIG9uZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgVVYuXG4gIDk2Olx0XHQgIFRoZSBkZXZpY2UgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIFVsdHJhdmlzb3JcbiAgOTc6XHRcdCAgRmFjaWxpdHkgKDE1OCkgaXMgcHJlc2VudC5cbiAgOTg6XHRcbiAgOTk6XHRjb25maWcgUzM5MF9UQVBFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBLZXkgRGVmaW5pdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0JiMzOTtzIGNsZWFyIHdlJiMzOTtsbCBuZWVkIGRlZmluaXRpb25zIGZvciBgUEtFWV9VVmAsIGBQS0VZYCwgYW5kIGBTMzkwX1VWX1VBUElgLiBNYWtlcyBzZW5zZSwgdGhlc2UgYXJlIGxpa2VseSBjcml0aWNhbCBmb3Igb3VyIGNvbmZpZ3VyYXRpb24uIFdhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYFBLRVlgIGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBjcnlwdG8gZHJpdmVycz8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBBaCB5ZXMsIGl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBkcml2ZXJzL2NyeXB0by9LY29uZmlnYC4gUmlnaHQsIG5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgcGllY2VzIGRvZXMgYFBLRVlgIHJlbHkgb24sIG9yIHdoaWNoIG9mIGl0cyB1cHN0cmVhbSBlbGVtZW50cyBtaWdodCBhZmZlY3QgbXkgY29uc2lkZXJhdGlvbnM/IExldCYjMzk7cyBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICB0byA4IGluIENvcHJvY2Vzc29yIChDRVh4QyksIEVQMTEgQ29wcm9jZXNzb3IgKENFWHhQKVxuICA3NjpcdFx0ICBvciBBY2NlbGVyYXRvciAoQ0VYeEEpIG1vZGUuXG4gIDc3Olx0XG4gIDc4Olx0Y29uZmlnIFBLRVlcbiAgNzk6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcJiMzNDtcbiAgODA6XHRcdGRlcGVuZHMgb24gUzM5MFxuICA4MTpcdFx0aGVscFxuICA4MjpcdFx0ICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgdGhlIHBrZXkga2VybmVsIG1vZHVsZXMgcHJvdmlkZSBhbiBBUElcbiAgODM6XHRcdCAgZm9yIGNyZWF0aW9uIGFuZCBoYW5kbGluZyBvZiBwcm90ZWN0ZWQga2V5cy4gT3RoZXIgcGFydHMgb2YgdGhlXG4gIDg0Olx0XHQgIGtlcm5lbCBvciB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIG1heSB1c2UgdGhlc2UgZnVuY3Rpb25zLlxuICA4NTpcdFxuICA4NjpcdFx0ICBUaGUgcHJvdGVjdGVkIGtleSBzdXBwb3J0IGlzIGRpc3RyaWJ1dGVkIGludG86XG4gIDg3Olx0XHQgIC0gQSBwa2V5IGJhc2UgYW5kIEFQSSBrZXJuZWwgbW9kdWxlIChwa2V5LmtvKSB3aGljaCBvZmZlcnMgdGhlXG4gIDg4Olx0XHQgICAgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBwa2V5IGhhbmRsZXIga2VybmVsIG1vZHVsZXMsIHRoZSBpb2N0bFxuICA4OTpcdFx0ICAgIGFuZCB0aGUgc3lzZnMgQVBJIGFuZCB0aGUgaW4ta2VybmVsIEFQSSB0byB0aGUgY3J5cHRvIGNpcGhlclxuICA5MDpcdFx0ICAgIGltcGxlbWVudGF0aW9ucyB1c2luZyBwcm90ZWN0ZWQga2V5LlxuICA5MTpcdFx0ICAtIEEgcGtleSBwY2ttbyBrZXJuZWwgbW9kdWxlIChwa2V5LXBja21vLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XG4gIDkyOlx0XHQgICAgbG9hZGVkIHdoZW4gcGNrbW8gc3VwcG9ydCAodGhhdCBpcyBnZW5lcmF0aW9uIG9mIHByb3RlY3RlZCBrZXlzXG4gIDkzOlx0XHQgICAgZnJvbSBjbGVhciBrZXkgdmFsdWVzKSBpcyBhdmFpbGFibGUuXG4gIDk0Olx0XHQgIC0gQSBwa2V5IENDQSBrZXJuZWwgbW9kdWxlIChwa2V5LWNjYS5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQzOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYFBLRVlgIERlcGVuZGVuY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZSBgUEtFWWAgZnVuY3Rpb25hbGl0eSBoYXMgYSBkZXBlbmRlbmN5IG9uIHRoZSBgUzM5MGAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkuIEl0JiMzOTtzIGRyaWxsaW5nIGludG8gdGhlIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZpbGUuIFJpZ2h0LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgYXJvdW5kIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbXBvbmVudCBoZXJlLCBhbmQgaXQmIzM5O3MgYmVpbmcgZXhwb3J0ZWQuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXM7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSBgcGtleV91di5jYCBpcyB1c2luZyBpdCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIHVzZXJzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGdldCBpbXBhY3RlZC4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBpbXBhY3RzIG90aGVyIGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTktXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtzMzkwIHByb3RlY3RlZCBrZXkgVVYgaGFuZGxlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjItLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk5LVx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlx0cmMgPSB1dl9maW5kX3NlY3JldChzZWNyZXRfaWQsIHV2X2xpc3QsIHNlY3JldCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXHRtdXRleF91bmxvY2soXHUwMDI2dXZfbGlzdF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzkyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTkyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVVYgU2VjcmV0IEZpbmRpbmcgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0IHdpdGggU3l6a2FsbGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gYHV2LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBzZWNyZXRzIGFyZSBmb3VuZCBhbmQgbGlzdGVkLiBUaGUgY3JpdGljYWwgY29kZSBwYXRoIGlzIGluIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgb25lIHRoYXQgd2FzIG1vZGlmaWVkLgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYW4gcmVhY2ggdGhpcyBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoaXMgaW52b2x2ZXMgZW5hYmxpbmcgdGhlIGBQS0VZX1VWYCBtb2R1bGUuIExldCBtZSB2ZXJpZnk6IGBQS0VZX1VWYCBhbmQgYFMzOTBfVVZfVUFQSWAgaXMgdXNlZCBoZXJlPyBZZXMuIEkgc2VlIG5vdyB0aGF0IGBTMzkwX1VWX1VBUElgIGlzIG5lZWRlZCBieSBgUEtFWV9VVmAuIEFuZCBgUEtFWWAgaXRzZWxmLiBBbHJpZ2h0LCBzbyBJJiMzOTtsbCBuZWVkIGBQS0VZX1VWYCwgYFMzOTBfVVZfVUFQSWAsIGFuZCBgUEtFWWAgZW5hYmxlZCBpbiB0aGUgY29uZmlnLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGJ1ZyBpbiB0aGUgbG9vcCBsb2dpYyB3aXRoaW4gYHV2X2ZpbmRfc2VjcmV0YC4gSXQgbG9va3MgbGlrZSBgc3RhcnRfaWR4YCB3YXMgbm90IHVwZGF0ZWQgY29ycmVjdGx5IHdpdGhpbiB0aGUgbG9vcCwgbGVhZGluZyB0byB0aGUgbG9vcCBwb3RlbnRpYWxseSB0ZXJtaW5hdGluZyBhZnRlciBhIHNpbmdsZSBpdGVyYXRpb24gZXZlbiBpZiB0aGVyZSB3ZXJlIG1vcmUgc2VjcmV0cyB0byBiZSBwcm9jZXNzZWQuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBjb2RlJiMzOTtzIGxvZ2ljIG9mIHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCwgdGhlbiBjaGVja2luZyBgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCAod2hlcmUgdGhlIG5ldyBgc3RhcnRfaWR4YCBpcyBlcXVhbCB0byB0aGUgbmV3IGBuZXh0X3NlY3JldF9pZHhgKSwgbWVhbnQgdGhlIGxvb3Agd291bGRuJiMzOTt0IGl0ZXJhdGUgYmV5b25kIHRoZSBmaXJzdCBwYWdlLgoKVGhlIG5ldyBjb2RlLCBieSBtb3ZpbmcgdGhlIGBzdGFydF9pZHhgIHVwZGF0ZSAqdG8gdGhlIGJlZ2lubmluZyogb2YgdGhlIGxvb3AgZml4ZXMgdGhpcy4gSXQgZW5zdXJlcyB0aGUgY2hlY2sgYHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgY29tcGFyZXMgdGhlIGN1cnJlbnQgdmFsdWUgd2l0aCB0aGUgbmV3IHZhbHVlLCBhbGxvd2luZyB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHNlY3JldHMuCgpBbHNvLCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGZpeCByZWxhdGVkIHRvIHVzaW5nIGBudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYHRvdGFsX251bV9zZWNyZXRzYCB3aGljaCBpcyBnb29kIGJlY2F1c2Ugd2UgZG9uJiMzOTt0IHdhbnQgdG8gcmVhZCBwYXN0IGEgcGFnZSBib3VuZGFyeS4KClRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBidWcgZml4LCBzbyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYHV2X2ZpbmRfc2VjcmV0YCwgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBvbmUgbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyBhbHNvIGV4cG9ydGVkLiBObyBvdGhlciBmdW5jdGlvbnMgbmVlZCB0byBiZSBjYWxsZWQuCgpTbyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZTogYFBLRVlfVVZgLCBgUzM5MF9VVl9VQVBJYCwgYW5kIGBQS0VZYC4gVGhlc2UgbG9vayBsaWtlIHRoZSByZXF1aXJlZCBpbmdyZWRpZW50cy4gTm93IEkmIzM5O20gcmVhZHkgdG8gY3JhZnQgc29tZSBTeXprYWxsZXIgdGFyZ2V0cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz02Nz1jb25maWcgWkNSWVBUXG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6Nzg6Y29uZmlnIFBLRVlcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDQtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEwNTpjb25maWcgUEtFWV9DQ0FcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA2LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBDQ0Egc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEyMTpjb25maWcgUEtFWV9FUDExXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgRVAxMSBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzNi1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTM3OmNvbmZpZyBQS0VZX1BDS01PXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzOC1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgUENLTU8gc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTctXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2Ygc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipBbmFseXppbmcgS2VybmVsIENyeXB0byBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCYjMzk7cyBjcnlwdG9ncmFwaGljIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkLiBJIHNlZSBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AgYW5kIEkgaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGF0IGl0JiMzOTtzIHNvdXJjZWQgZnJvbSBlaXRoZXIgdGhlIG1haW4gYGNyeXB0by9LY29uZmlnYCBmaWxlIG9yIHRoZSB0b3AtbGV2ZWwgYGRyaXZlcnMvS2NvbmZpZ2AuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtjb25maWcgZmlsZXMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoaWNoIG9uZSB0YWtlcyBwcmVjZWRlbmNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgIGF0IGl0cyB0b3AgbGV2ZWwgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gSSB3aWxsIGNoZWNrIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCwgd2hhdCBvdGhlciBLY29uZmlnIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBjcnlwdG8gZHJpdmVycyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIENSWVBUT19IV1xuICAgNDpcdFx0Ym9vbCBcJiMzNDtIYXJkd2FyZSBjcnlwdG8gZGV2aWNlc1wmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCB5XG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciBoYXJkd2FyZSBjcnlwdG8gZGV2aWNlcyBhbmRcbiAgIDg6XHRcdCAgcHJvY2Vzc29ycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cbiAgMTE6XHRcbiAgMTI6XHRpZiBDUllQVE9fSFdcbiAgMTM6XHRcbiAgMTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9jcnlwdG8vYWxsd2lubmVyL0tjb25maWdcJiMzNDtcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgQ1JZUFRPX0RFVl9QQURMT0NLXG4gIDE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBWSUEgUGFkTG9jayBBQ0VcJiMzNDtcbiAgMTg6XHRcdGRlcGVuZHMgb24gWDg2IFx1MDAyNlx1MDAyNiAhVU1MXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFNvbWUgVklBIHByb2Nlc3NvcnMgY29tZSB3aXRoIGFuIGludGVncmF0ZWQgY3J5cHRvIGVuZ2luZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY5MQoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNlY3JldCBSZXRyaWV2YWwgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgZml4IHJlcXVpcmVzIGBDUllQVE9fSFdgLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5Oy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENSWVBUT2AgaXMgYWxzbyBhIGRlcGVuZGVuY3ksIGFuZCBpdCBzZWVtcyBsaWtlbHkgZ2l2ZW4gdGhhdCBgZHJpdmVycy9jcnlwdG9gIGlzIHVzdWFsbHkgd2l0aGluIGBDUllQVE9gLiBIb3dldmVyLCBgUEtFWV9VVmAgaXMgdGhlIGtleSBjb21wb25lbnQgaGVyZS4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YC4gU3BlY2lmaWNhbGx5LCB0aGUgbG9vcCBsb2dpYyBmb3IgaXRlcmF0aW5nIHRocm91Z2ggc2VjcmV0IHBhZ2VzIHdhcyBmbGF3ZWQsIGNhdXNpbmcgaXQgdG8gZXhpdCBlYXJseS4gVGhpcyB3YXMgZHVlIHRvIGFuIHVwZGF0ZSB0byBgc3RhcnRfaWR4YCB3aXRoaW4gdGhlIGxvb3AgYmVmb3JlIHRoZSBjb25kaXRpb24gY2hlY2ssIGNhdXNpbmcgYW4gZWFybHkgdGVybWluYXRpb24uIFRoZXJlJiMzOTtzIGFsc28gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgYmVpbmcgYWRkcmVzc2VkIGJ5IHVzaW5nIGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCwgd2hpY2ggY29ycmVjdHMgaG93IHNlY3JldHMgYXJlIGl0ZXJhdGVkIHdpdGhpbiBhIHNpbmdsZSBwYWdlLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzLCBwZXJ0YWluaW5nIHRvIGhvdyB0aGUgczM5MHggVWx0cmF2aXNvciByZXRyaWV2ZXMgc2VjcmV0cy4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ug4oCTIGFzc3VtaW5nIHRoZSBgUEtFWV9VVmAgbW9kdWxlIGlzIGxvYWRlZC4gU2luY2UgdXNlcnNwYWNlIGNhbiBhY2Nlc3MgdGhpcyB0aHJvdWdoIGFuIGlvY3RsLCB0aGlzIHdvdWxkIGJlIGhpZ2hseSB2YWx1YWJsZSB0byBmdXp6LiBJdCYjMzk7cyBjcnVjaWFsIHRvIHZlcmlmeSB0aGUgc2VjcmV0IHJldHJpZXZhbCBsb2dpYyBoYW5kbGVzIG11bHRpLXBhZ2UgcmVzcG9uc2VzIGNvcnJlY3RseS4KClRvIHRlc3QgdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbi4KClRvIGVuYWJsZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLCBJIG5lZWQgYFBLRVlfVVZgLCBgUzM5MF9VVl9VQVBJYCBhbmQgYFBLRVlgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZX1VWJiMzNDssCiAgICAmIzM0O1MzOTBfVVZfVUFQSSYjMzQ7LAogICAgJiMzNDtQS0VZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gd2hlcmUgdGhlIGxvb3AgdG8gaXRlcmF0ZSB0aHJvdWdoIHBhZ2VzIG9mIHNlY3JldHMgd291bGQgdGVybWluYXRlIHByZW1hdHVyZWx5IGFmdGVyIHRoZSBmaXJzdCBpdGVyYXRpb24gYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBzZWNyZXRzIGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTB4IFVsdHJhdmlzb3Igc2VjcmV0IHJldHJpZXZhbCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYC9kZXYvcGtleWAgaW9jdGwgaW50ZXJmYWNlIHdoZW4gdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBGdXp6aW5nIHRoaXMgaXMgdmFsdWFibGUgdG8gZW5zdXJlIHRoZSBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljIGhhbmRsZXMgbXVsdGktcGFnZSByZXNwb25zZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZX1VWJiMzNDssCiAgICAmIzM0O1MzOTBfVVZfVUFQSSYjMzQ7LAogICAgJiMzNDtQS0VZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gd2hlcmUgdGhlIGxvb3AgdG8gaXRlcmF0ZSB0aHJvdWdoIHBhZ2VzIG9mIHNlY3JldHMgd291bGQgdGVybWluYXRlIHByZW1hdHVyZWx5IGFmdGVyIHRoZSBmaXJzdCBpdGVyYXRpb24gYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBzZWNyZXRzIGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTB4IFVsdHJhdmlzb3Igc2VjcmV0IHJldHJpZXZhbCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYC9kZXYvcGtleWAgaW9jdGwgaW50ZXJmYWNlIHdoZW4gdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBGdXp6aW5nIHRoaXMgaXMgdmFsdWFibGUgdG8gZW5zdXJlIHRoZSBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljIGhhbmRsZXMgbXVsdGktcGFnZSByZXNwb25zZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgKHRvdGFsIHNlY3JldHMgaW4gdGhlIGd1ZXN0KSB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEl0IGZpeGVzIHRoZSBsb29wIGNvbmRpdGlvbiBpbiBgdXZfZmluZF9zZWNyZXRgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cyBieSB1cGRhdGluZyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIHJhdGhlciB0aGFuIHRoZSBlbmQuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwpAQCAtNzYwLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogewogCXUxNiBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7bnVtX3NlY3Jfc3RvcmVkOyBpJiM0MzsmIzQzOykgewogCQlpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC0mZ3Q7c2VjcmV0c1tpXS5pZCwgVVZfU0VDUkVUX0lEX0xFTikgPT0gMCkgewogCQkJKnNlY3JldCA9IGxpc3QtJmd0O3NlY3JldHNbaV0uaGRyOwogCQkJcmV0dXJuIDA7CkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSwKIAkJICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCkKIHsKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CiAKIAlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBzMzkwIFNlY3JldCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc2VjcmV0IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBVViBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgKm5ldyogcmlza3MsIGVzcGVjaWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKRmlyc3QsIHRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnVuY3Rpb24gaXMgbW9kaWZpZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCBpbiB0aGUgbG9vcCBjb25kaXRpb24sIGJ1dCBub3cgdXNlcyBgbGlzdC0mZ3Q7bnVtX3NlY3Jfc3RvcmVkYC4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBgdG90YWxfbnVtX3NlY3JldHNgIHByb2JhYmx5IHJlcHJlc2VudHMgdGhlICp0b3RhbCogbnVtYmVyIG9mIHNlY3JldHMgYXZhaWxhYmxlIGFjcm9zcyBwb3RlbnRpYWxseSBtdWx0aXBsZSBwYWdlcy9saXN0cywgd2hlcmVhcyBgbnVtX3NlY3Jfc3RvcmVkYCBzcGVjaWZpY2FsbHkgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2VjcmV0cyBjdXJyZW50bHkgKnN0b3JlZCogaW4gdGhlIHJlbGV2YW50IHBhZ2UvbGlzdC4gSWYgdGhlIGNvZGUgdXNlZCBgdG90YWxfbnVtX3NlY3JldHNgIGJlZm9yZSwgaXQgd2FzIGxpa2VseSBpdGVyYXRpbmcgcGFzdCB0aGUgaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IsIGF0IGJlc3QsIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheS4gVGhpcyBjaGFuZ2UgaXMgYSBjbGVhciBmaXggZm9yIHRoaXMuCgpUaGUgbW9yZSBpbnRyaWNhdGUgcGFydCBpcyB0aGUgY2hhbmdlcyB0byBgdXZfZmluZF9zZWNyZXRgLiAgVGhlIGxvb3Agc3RydWN0dXJlIGFwcGVhcnMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBzZWNyZXRzLCBwb3RlbnRpYWxseSBhY3Jvc3MgbXVsdGlwbGUgcGFnZXMuICBJbml0aWFsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHggPSAwO2AgdG8gaW5pdGlhbGl6ZSB0aGUgaW5kZXguIFRoZW4sIHRoZSBpbXBvcnRhbnQgcGFydDogdGhlIGBzdGFydF9pZHhgIGlzIGFzc2lnbmVkICppbnNpZGUqIHRoZSBsb29wLiAgQmVmb3JlIHRoZSBwYXRjaCwgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCwgd2hpY2ggbWVhbnMgdGhlIGNvbmRpdGlvbiBgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCB3b3VsZCAqYWx3YXlzKiBiZSBmYWxzZS4gV2h5PyBCZWNhdXNlIHRoZSBgc3RhcnRfaWR4YCB3b3VsZCBiZSB0aGUgc2FtZSBhcyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCwgcmVuZGVyaW5nIHRoZSBsb29wIGluZWZmZWN0aXZlIHdoZW4gYGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQWAuIFRoaXMgaXMgYSBidWcgZml4LCBhcyBpdCBwcmV2ZW50ZWQgaXRlcmF0aW5nIHRocm91Z2ggbXVsdGlwbGUgcGFnZXMgYW5kIHNlY3JldHMuCgpOb3csIHdpdGggdGhlIHBhdGNoLCB0aGUgbG9naWMgaXMgYXMgZm9sbG93czogYHN0YXJ0X2lkeGAgY2FwdHVyZXMgdGhlIGluZGV4ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB1dl9saXN0X3NlY3JldHNgLiBgdXZfbGlzdF9zZWNyZXRzYCB0aGVuIHVwZGF0ZXMgdGhlIGludGVybmFsIGxpc3QgYW5kIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgLiAgVGhlIGB3aGlsZWAgY29uZGl0aW9uIHRoZW4gY29ycmVjdGx5IGNvbXBhcmVzIHRoZSAqb2xkKiBpbmRleCB0byB0aGUgKm5ldyogaW5kZXguCgpNeSB0aGlua2luZzogVGhlIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uIHBvcHVsYXRlcyB0aGUgYGxpc3RgIHdpdGggc2VjcmV0cy4gSWYgaXRzIHJldHVybiBjb2RlIGlzIGBVVkNfUkNfTU9SRV9EQVRBYCwgdGhlbiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBpcyBsaWtlbHkgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV4dCBzZWNyZXQgaW5kZXggdG8gYmUgcmVhZC4KClJlZ2FyZGluZyB0aGUgcmlzayBvZiB0aGUgcGF0Y2ggaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIEkmIzM5O20gY29uZmlkZW50IGl0IGRvZXNuJiMzOTt0LiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIHB1cmVseSBsb2dpY2FsIGNvcnJlY3Rpb25zIHRvIHRoZSBpdGVyYXRpb24gYW5kIGxvb3AgY29uZGl0aW9ucy4gVGhlIGludGVudCBpcyB0byBwcmV2ZW50IHJlYWRpbmcgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHZhbGlkIGRhdGEuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZywgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSBkb24mIzM5O3Qgc2VlIGFueSBjb2RlIGludHJvZHVjZWQgaGVyZSB0aGF0ICpjcmVhdGVzKiBhIHJpc2sgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHBhdGNoIGNsZWFucyB1cCB0aGUgbG9naWMuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhZGQgZmllbGRzLCBvciBpbnRyb2R1Y2UgdXNlci1zcGFjZSBjb3BpZXMuIFNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBzdGlsbCB3YW50IHRvIGRvdWJsZSBjaGVjayB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCBkb3VibGUgY2hlY2sgbXkgdGhvdWdodCBwcm9jZXNzLCBqdXN0IHRvIGNvbmZpcm0gbXkgdGhpbmtpbmcgdXNpbmcgc29tZXRoaW5nIGxpa2UgYSBncmVwcGVyIG9yIHNpbWlsYXIgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHV2X3NlY3JldF9saXN0IFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyMy0gKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQyNDpzdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDI1LVx0dTE2IG51bV9zZWNyX3N0b3JlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHV2X3NlY3JldF9saXN0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgYHV2X3NlY3JldF9saXN0YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCByZWZlcnMgdG8uIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB1dl9zZWNyZXRfbGlzdGAuIE5vIHBvaW50IGluIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMgb3IgbWFraW5nIGFzc3VtcHRpb25zIOKAkyBJIHdhbnQgdG8gZXN0YWJsaXNoIGEgc29saWQgZm91bmRhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGRlZmluaXRpb24gcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDExPXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MjMtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0MjQ6c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHMzOTAgVVYgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA0MjQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0JiMzOTtzIGEgbGlrZWx5IHNwb3QgZm9yIHNvbWUgY29yZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBkZWZpbml0aW9ucyBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIFVWIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtsbCBiZSBzb21ldGhpbmcgbG93LWxldmVsIC0gbWVtb3J5IGxheW91dCwgcmVnaXN0ZXIgYXNzaWdubWVudHMsIG9yIGludGVycnVwdCBoYW5kbGluZyDigJMgc3R1ZmYgZGlyZWN0bHkgaW5mbHVlbmNpbmcgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG1hY3JvIGRlZmluaXRpb25zLCBlbnVtcywgb3Igc3RydWN0dXJlIGRlY2xhcmF0aW9ucyB0aGF0IHNoZWQgbGlnaHQgb24gaG93IFVWIGNhcGFiaWxpdGllcyBhcmUgZXhwb3NlZCBhbmQgdXRpbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29udGV4dC4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBudWFuY2VzIG9mIHRoZSBVViBlbnZpcm9ubWVudCBvbiBzMzkwLCBnaXZlbiBpdHMgc3BlY2lhbGl6ZWQgbmF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHQgKi9cbiA0MTE6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XG4gNDEyOlx0XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgaGRyO1xuIDQxMzpcdFx0dTY0IHJlc2VydmVyZDA4O1xuIDQxNDpcdFx0dTggaWRbVVZfU0VDUkVUX0lEX0xFTl07XG4gNDE1Olx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDE2Olx0XG4gNDE3Olx0LyoqXG4gNDE4Olx0ICogdXZfc2VjcmV0X2xpc3QgLSBVViBzZWNyZXQtbWV0YWRhdGEgbGlzdC5cbiA0MTk6XHQgKiBAbnVtX3NlY3Jfc3RvcmVkOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhpcyBsaXN0LlxuIDQyMDpcdCAqIEB0b3RhbF9udW1fc2VjcmV0czogTnVtYmVyIG9mIHNlY3JldHMgc3RvcmVkIGluIHRoZSBVViBmb3IgdGhpcyBndWVzdC5cbiA0MjE6XHQgKiBAbmV4dF9zZWNyZXRfaWR4OiBwb3NpdGl2ZSBudW1iZXIgaWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGUgb3IgemVyby5cbiA0MjI6XHQgKiBAc2VjcmV0czogVXAgdG8gODUgVVYtc2VjcmV0IG1ldGFkYXRhIGVudHJpZXMuXG4gNDIzOlx0ICovXG4gNDI0Olx0c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbiA0MjU6XHRcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4gNDI2Olx0XHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XG4gNDI3Olx0XHR1MTYgbmV4dF9zZWNyZXRfaWR4O1xuIDQyODpcdFx0dTE2IHJlc2VydmVkXzA2O1xuIDQyOTpcdFx0dTY0IHJlc2VydmVkXzA4O1xuIDQzMDpcdFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07XG4gNDMxOlx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDMyOlx0c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHV2X3NlY3JldF9saXN0KSA9PSBQQUdFX1NJWkUpO1xuIDQzMzpcdFxuIDQzNDpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdXZfY2FsbCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxuIDQzNTpcdHtcbiA0MzY6XHRcdGludCBjYztcbiA0Mzc6XHRcbiA0Mzg6XHRcdGFzbSB2b2xhdGlsZShcbiA0Mzk6XHRcdFx0XCYjMzQ7XHQuaW5zblx0IHJyZiwweGI5YTQwMDAwLCVbcjFdLCVbcjJdLDAsMFxcblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYyCgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBhbmQgcmVhc29uaW5nLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIHR3byByZWxhdGVkIGJ1Z3Mgd2l0aGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCBjb3JyZWN0aW5nIGhvdyB3ZSB0cmF2ZXJzZSBhbmQgYWNjZXNzIHRoZSBzZWNyZXRzIHdpdGhpbiBhIHNwZWNpZmljIHN0cnVjdHVyZS4KClRoZSBmaXJzdCBpc3N1ZSB3YXMgYSBzaW1wbGUgYm91bmRzIGNoZWNrIGVycm9yLiBJdCB3YXMgdXNpbmcgYHRvdGFsX251bV9zZWNyZXRzYCB3aGVyZSBpdCBzaG91bGQgaGF2ZSBiZWVuIHVzaW5nIGBudW1fc2Vjcl9zdG9yZWRgLiBgdG90YWxfbnVtX3NlY3JldHNgIHJlcHJlc2VudHMgdGhlICpvdmVyYWxsKiBudW1iZXIgb2Ygc2VjcmV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGd1ZXN0LCB3aGlsZSBgbnVtX3NlY3Jfc3RvcmVkYCBpcyBzcGVjaWZpYyB0byAqdGhpcyogc2VjcmV0IGxpc3QgKGFuZCBjYXBwZWQgYXQgODUpLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIHdhcyBncmVhdGVyIHRoYW4gODUsIHRoaXMgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgbGlzdC0mZ3Q7c2VjcmV0c2AgYXJyYXk7IGlmIGl0IHdhcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gODUgYnV0IHN0aWxsIGxhcmdlciB0aGFuIGBudW1fc2Vjcl9zdG9yZWRgLCB3ZSYjMzk7ZCBiZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBhcnJheS4gVGhpcyBpcyBhIGNsZWFyIGJ1ZywgYW5kIHRoZSBwYXRjaCBmaXhlcyBpdCBieSBtYWtpbmcgdGhlIGNvcnJlY3QgY29tcGFyaXNvbi4KClRoZSBzZWNvbmQgYnVnIHdhcyBpbiB0aGUgbG9naWMgb2YgYHV2X2ZpbmRfc2VjcmV0YC4gVGhlIGxvb3Agd2FzIHRlcm1pbmF0aW5nIHByZW1hdHVyZWx5LCBhbmQgbm93IGl0JiMzOTtzIGNvcnJlY3RseSB1cGRhdGVkIHRvIHByb3Blcmx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzLgoKSW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggKmZpeGVzKiB0aGVzZSBpc3N1ZXMuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHBhdGh3YXlzIHRoYXQgY291bGQgbGVhZCB0byBuZXcgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSXQgaXMgcHVyZWx5IGEgY29ycmVjdGlvbiBvZiBleGlzdGluZyBhY2Nlc3MgcGF0dGVybnMgYW5kIGJvdW5kcy4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBubyByZWFsIG5lZWQgdG8gcnVuIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcyBjaGFuZ2UuIFRoZSByaXNrIHRoYXQgd291bGQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYnkgS01TQU4gd2FzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgZXhpc3RpbmcgY29kZSwgYW5kIHRoaXMgcGF0Y2gganVzdCBjbGVhbnMgaXQgdXAuIEEgZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgYXMgdGhpcyBpcyBhIGJ1ZyBmaXguIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGZvciB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0d28gYnVncyBpbiB0aGUgVWx0cmF2aXNvciBzZWNyZXQgbGlzdGluZyBsb2dpYzpcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgICh0b3RhbCBzZWNyZXRzIGluIHRoZSBndWVzdCkgdG8gYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCAoc2VjcmV0cyBzdG9yZWQgaW4gdGhlIGN1cnJlbnQgcGFnZSkuIFRoaXMgcHJldmVudHMgcmVhZGluZyBwYXN0IHRoZSB2YWxpZCBlbnRyaWVzIGluIHRoZSBgbGlzdC1cdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJdCBmaXhlcyB0aGUgbG9vcCBjb25kaXRpb24gaW4gYHV2X2ZpbmRfc2VjcmV0YCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIG11bHRpcGxlIHBhZ2VzIG9mIHNlY3JldHMgYnkgdXBkYXRpbmcgYHN0YXJ0X2lkeGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCByYXRoZXIgdGhhbiB0aGUgZW5kLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgKHRvdGFsIHNlY3JldHMgaW4gdGhlIGd1ZXN0KSB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEl0IGZpeGVzIHRoZSBsb29wIGNvbmRpdGlvbiBpbiBgdXZfZmluZF9zZWNyZXRgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cyBieSB1cGRhdGluZyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIHJhdGhlciB0aGFuIHRoZSBlbmQuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MjozMS44ODY1OTUzOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4OTEwMjM0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEtFWV9VVlwiLFxuICAgIFwiUzM5MF9VVl9VQVBJXCIsXG4gICAgXCJQS0VZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfZmluZF9zZWNyZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCAodG90YWwgc2VjcmV0cyBpbiB0aGUgZ3Vlc3QpIHRvIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuMi4gSXQgZml4ZXMgdGhlIGxvb3AgY29uZGl0aW9uIGluIGB1dl9maW5kX3NlY3JldGAgdG8gY29ycmVjdGx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzIGJ5IHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgcmF0aGVyIHRoYW4gdGhlIGVuZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQyOjMxLjg4NjYwMjQ5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTkzODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1MTBkOWQ0OTIxNjdhYzBlMjY0OTI5ZTNkMDExMGExNDE0YzhhMDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG5AQCAtNzYwLDcgKzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIHtcXG4gXFx0dTE2IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGlzdC1cXHUwMDNlbnVtX3NlY3Jfc3RvcmVkOyBpKyspIHtcXG4gXFx0XFx0aWYgKG1lbWNtcChzZWNyZXRfaWQsIGxpc3QtXFx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcXG4gXFx0XFx0XFx0KnNlY3JldCA9IGxpc3QtXFx1MDAzZXNlY3JldHNbaV0uaGRyO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNzgxLDExICs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4gXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbiBcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG4ge1xcbi1cXHR1MTYgc3RhcnRfaWR4ID0gMDtcXG4rXFx0dTE2IHN0YXJ0X2lkeDtcXG4gXFx0dTE2IGxpc3RfcmM7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xcbitcXG4gXFx0ZG8ge1xcbitcXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuIFxcdFxcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFxcdTAwMjZsaXN0X3JjLCBOVUxMKTtcXG4gXFx0XFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFxcdTAwMjZcXHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xcbiBcXHRcXHRcXHRpZiAobGlzdF9yYyA9PSBVVkNfUkNfSU5WX0NNRClcXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIFxcdFxcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xcbiBcXHRcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdHN0YXJ0X2lkeCA9IGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeDtcXG4gXFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFxcdTAwMjZcXHUwMDI2IHN0YXJ0X2lkeCBcXHUwMDNjIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCk7XFxuIFxcbiBcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6MzMuMDIzMzA5MTM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIxOTE2MjY0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiLFxuICAgIFwiUEtFWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gd2hlcmUgdGhlIGxvb3AgdG8gaXRlcmF0ZSB0aHJvdWdoIHBhZ2VzIG9mIHNlY3JldHMgd291bGQgdGVybWluYXRlIHByZW1hdHVyZWx5IGFmdGVyIHRoZSBmaXJzdCBpdGVyYXRpb24gYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCB0byBgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBiZWZvcmUgdGhlIGxvb3AgY29uZGl0aW9uIGNoZWNrLiBJdCBhbHNvIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBieSB1c2luZyBgbGlzdC1cXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCBpbnN0ZWFkIG9mIGBsaXN0LVxcdTAwM2V0b3RhbF9udW1fc2VjcmV0c2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBzZWNyZXRzIGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTB4IFVsdHJhdmlzb3Igc2VjcmV0IHJldHJpZXZhbCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYC9kZXYvcGtleWAgaW9jdGwgaW50ZXJmYWNlIHdoZW4gdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBGdXp6aW5nIHRoaXMgaXMgdmFsdWFibGUgdG8gZW5zdXJlIHRoZSBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljIGhhbmRsZXMgbXVsdGktcGFnZSByZXNwb25zZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIHtcbiBcdHUxNiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0czsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgKzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuIHtcbi1cdHUxNiBzdGFydF9pZHggPSAwO1xuK1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbitcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbitcbiBcdGRvIHtcbitcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6MzMuMDIzMzEwMjk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MzcyNjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBzMzkweCBVViBDb2RlKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBiZWNhdXNlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGFuZCBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9ucy4gSW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgcmVuYW1lZCBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgdG8gYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gQSBzaW1wbGUgbmFtZSBjaGFuZ2U7IG5vdGhpbmcgdG9vIGV4Y2l0aW5nIHRoZXJlLiBIb3dldmVyLCB0aGUgY2hhbmdlcyB0byBgdXZfZmluZF9zZWNyZXRgIGFyZSBhIGJpdCBtb3JlIGludGVyZXN0aW5nLiBXZSBoYXZlIGFuIGluaXRpYWxpemF0aW9uIG9mIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDA7YCBhbmQsIGNydWNpYWxseSwgYHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O2AgbW92ZWQgdG8gdGhlICpiZWdpbm5pbmcqIG9mIHRoZSBsb29wLCBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIHNhbWUgbGluZSBmcm9tIHRoZSBlbmQuIFRoaXMgY2xlYXJseSBtb2RpZmllcyB0aGUgc2VjcmV0IHNlYXJjaGluZyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGltcGxpY2F0aW9ucyBvZiB0aGlzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgc2V0dXA/IFRoaXMgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgZmlsZSBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gVWx0cmF2aXNvciwgb3IgVVYsIG9uIHMzOTB4LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgZnV6emVkPyBXZWxsLCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IHMzOTB4LCBzbyB0aGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIENhbiBJIHRlc3QgdGhpcyBzcGVjaWZpYyBjb2RlIGNoYW5nZT8gUUVNVSBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBlbXVsYXRpbmcgczM5MHguIEhvd2V2ZXIsIHRoZSBjYXRjaCBpcyBVViBzdXBwb3J0IGluIFFFTVUuIEx1Y2tpbHksIFFFTVUgKmRvZXMqIGhhdmUgc29tZSBzMzkweCBwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24gKFBWKSBzdXBwb3J0LCBhbmQgUFYgdXNlcyBVVi4gU28sIGl0J3MgdmVyeSBsaWtlbHkgdGhhdCBJIGNhbiBnZXQgYSByZXByb2R1Y2libGUgdGVzdCBjYXNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIGB1dl9maW5kX3NlY3JldGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBjb250ZXh0IGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MjozOC45MTcwMzg5MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MzIxMzAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mjo0MC44MTAyNTgzNzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM0NzQ3NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBDYWxsKipcblxuT2theSwgc28gYHV2X2ZpbmRfc2VjcmV0YCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24sIGFuZCB0aGUgY2FsbCBvcmlnaW5hdGVzIGZyb20gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGF0IGZpbGUuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgYGdldF9zZWNyZXRfbWV0YWRhdGFgIG5hcnJvd3MgZG93biB0aGUgcG90ZW50aWFsIGFyZWFzIHdpdGhpbiBgcGtleV91di5jYCBJIG5lZWQgdG8gZm9jdXMgb24uIExldCdzIHNlZSB3aGF0IHNlY3JldHMgYXJlIGJlaW5nIGZldGNoZWQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6NDMuNjQ1MDA4MjkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjkzODYzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3NlY3JldF9tZXRhZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmM9ODA2PUVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTItICogQGJ1Zl9zaXplOiBTaXplIG9mIHRoZSBidWZmZXIuIFRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIHJlcG9ydGVkIGFzIHBhcnQgb2ZcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODEzOiAqIHRoZSByZXN1bHQgZnJvbSBgdXZfZ2V0X3NlY3JldF9tZXRhZGF0YWAuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgxNC0gKlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9ODM9c3RhdGljIGJvb2wgaXNfdXZfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5dHlwZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTkyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjkzOnN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTA2PXN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTI6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNDg6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHQtXFx1MDAzZXNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0OS1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQyOjQ1LjQxNDQwMTE4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjcxNDg4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgY29kZWJhc2U6XG5cbioqVHJhY2luZyBEYXRhIEZsb3c6IFVuY292ZXJpbmcgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0J3Mgb2J2aW91c2x5IHB1bGxpbmcgc29tZSBjcml0aWNhbCBpbmZvcm1hdGlvbiwgbGlrZWx5IGFib3V0IHNlY3JldHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBJdCdzIGNhbGxlZCBmcm9tIGJvdGggYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY2FsbCBzaXRlcyBvZiAqdGhvc2UqIHR3byBmdW5jdGlvbnMuIEtub3dpbmcgd2hlcmUgYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgIGFyZSBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYGdldF9zZWNyZXRfbWV0YWRhdGFgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgYGdldF9zZWNyZXRfbWV0YWRhdGFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTU1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6NDguNTgxNTUyOTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTAwNjQzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmV0cmlldmVfc2VjcmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjIwLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MjE6aW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjItXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9ODA2PUVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDgtLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwOTogKiB1dl9yZXRyaWV2ZV9zZWNyZXQoKSAtIGdldCB0aGUgc2VjcmV0IHZhbHVlIGZvciB0aGUgc2VjcmV0IGluZGV4LlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTAtICogQHNlY3JldF9pZHg6IFNlY3JldCBpbmRleCBmb3Igd2hpY2ggdGhlIHNlY3JldCBzaG91bGQgYmUgcmV0cmlldmVkLlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgyNS0gKi9cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODI2OmludCB1dl9yZXRyaWV2ZV9zZWNyZXQodTE2IHNlY3JldF9pZHgsIHU4ICpidWYsIHNpemVfdCBidWZfc2l6ZSlcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODI3LXtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04NTItfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4NTM6RVhQT1JUX1NZTUJPTF9HUEwodXZfcmV0cmlldmVfc2VjcmV0KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTA2OnN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDctXFx0XFx0XFx0ICAgdTE2ICpzZWNyZXRfdHlwZSwgdTggKmJ1ZiwgdTMyICpidWZsZW4pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTE5OlxcdHJjID0gdXZfcmV0cmlldmVfc2VjcmV0KHNlY3JldF9tZXRhX2RhdGEuaW5kZXgsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTIwLVxcdFxcdFxcdFxcdGJ1Ziwgc2VjcmV0X21ldGFfZGF0YS5sZW5ndGgpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIxMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTI6XFx0cmMgPSByZXRyaWV2ZV9zZWNyZXQodC1cXHUwMDNlc2VjcmV0X2lkLCBcXHUwMDI2c2VjcmV0X3R5cGUsIHByb3RrZXksIHByb3RrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIxMy1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTQ6XFx0XFx0UEtFWV9EQkZfRVJSKFxcXCIlcyByZXRyaWV2ZV9zZWNyZXQoKSBmYWlsZWQgd2l0aCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMTUtXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mjo1MC4wNzE2MjE3NDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY2NTg0MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHJldHJpZXZlX3NlY3JldGAgQ2FsbCBDaGFpbioqXG5cblJpZ2h0LCBgcmV0cmlldmVfc2VjcmV0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYHV2X2tleTJwcm90a2V5YC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJIG5lZWQgdG8gc2VlICp3aGVyZSogYHV2X2tleTJwcm90a2V5YCBhbmQgYHV2X3ZlcmlmeWtleWAgYXJlICp0aGVtc2VsdmVzKiBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHdoYXQgYHJldHJpZXZlX3NlY3JldGAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkIGZvciBhbmQgc2hlZCBsaWdodCBvbiBpdHMgY3JpdGljYWxpdHkuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIGlkZW50aWZ5IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4gQSBxdWljayBzZWFyY2ggZm9yIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgdXNhZ2VzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZXRyaWV2ZV9zZWNyZXRgIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mjo1My4zMzgyMDg3MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU0MTI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfa2V5MnByb3RrZXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTMwPXN0YXRpYyBpbnQgdXZfZ2V0X3NpemVfYW5kX3R5cGUodTE2IHNlY3JldF90eXBlLCB1MzIgKnBrZXlzaXplLCB1MzIgKnBrZXl0eXBlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjE5MDpzdGF0aWMgaW50IHV2X2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTkxLVxcdFxcdFxcdCAgc2l6ZV90IF9ucl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3Ni1cXHQuaXNfc3VwcG9ydGVkX2tleXR5cGVcXHQgPSBpc191dl9rZXl0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3NzpcXHQua2V5X3RvX3Byb3RrZXlcXHRcXHQgPSB1dl9rZXkycHJvdGtleSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzgtXFx0LnZlcmlmeV9rZXlcXHRcXHQgPSB1dl92ZXJpZnlrZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQyOjU0Ljg3MzYyOTA2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA5NzcyMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuXG5cbioqVHJhY2luZyB0aGUgUGF0aCB0byB0aGUgVXNlciBJbnRlcmZhY2Ugb2YgdGhlIHMzOTAgUEtleSBBUEkqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHMzOTAncyBQS2V5IGZ1bmN0aW9uYWxpdHkgaW50ZXJhY3RzIHdpdGggdXNlcnNwYWNlLiBJIHNlZSB0aGVzZSBjb21wb25lbnRzOiB3ZSBoYXZlIGB1dl9oYW5kbGVyYCwgd2hpY2ggaXMgcGFydCBvZiBhIGBwa2V5X2hhbmRsZXJgLiBUaGUgYHBrZXlfaGFuZGxlcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIGZpbGUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgXCJDYW4gdXNlcnNwYWNlIGV2ZW4gcmVhY2ggdGhpcyBgcGtleV9hcGlgP1wiIEFuZCwgdGhhbmtmdWxseSwgdGhlIGFuc3dlciBpcyB5ZXMsIGJlY2F1c2UgdGhlcmUncyBhbiBpb2N0bCBpbnRlcmZhY2UgZXhwb3NlZCB0aHJvdWdoIGAvZGV2L3BrZXlgLiBTbywgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZpbGUsIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlvY3RsIHdvcmtzIGFuZCBob3cgaXQgdHJhbnNsYXRlcyB0byB0aGUgdW5kZXJseWluZyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjA4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6NTguNTgzNDA0Nzg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5ODg3ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVxcdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVxcdFxcdFxcdFxcdFxcdCBrZXksIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcXHRcXHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcXHRcXHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVxcdFxcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cXHRcXHRcXHRcXHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5OlxcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cXHRcXHRcXHRcXHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcXHUwMDI2YXBxbiwgMSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cXHRpZiAocmMgPT0gLUVOT0RFVilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXFx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XFx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVxcdGt2ay5kb21haW4gPSAweEZGRkY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcXHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVxcdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cXHRcXHRcXHRcXHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cXHRcXHRcXHRcXHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cXHRcXHRcXHRcXHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XFx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVxcdFxcdFxcdFxcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a3ZrLmNhcmRuciwgXFx1MDAyNmt2ay5kb21haW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cXHRcXHRcXHRcXHRcXHRhcHFucywgXFx1MDAyNm5yX2FwcW5zLCAwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXFx0XFx0XFx0XFx0XFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4OlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VrZXlfdG9fcHJvdGtleSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXFx0XFx0XFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZWdlbl9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVxcdFxcdFxcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VjbHJfdG9fa2V5KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZXZlcmlmeV9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXFx0aW50IHJjID0gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcXHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXFx0aWYgKGggXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlYXBxbnNfZm9yX2tleSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVxcdFxcdFxcdFxcdCAgICAgIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVxcdFxcdFxcdFxcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkrKykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXFx0XFx0XFx0aWYgKGgtXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlxcdFxcdFxcdCAgICAhc3RyY21wKGgtXFx1MDAzZW1vZHVsZS1cXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXFx0XFx0aWYgKCFmb3VuZCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJyZXF1ZXN0X21vZHVsZSglcylcXFxcblxcXCIsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXFx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cXHRcXHRcXHRcXHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXFx0XFx0XFx0XFx0dTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXFx0XFx0XFx0XFx0XFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVxcdFxcdFxcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cXHRcXHRcXHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXFx0XFx0XFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cXHRcXHRcXHQgICAgICAgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXFx0XFx0XFx0XFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2Y2NhX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNmNjYV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcXHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZlcDExX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcXHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcXHUwMDI2ZXAxMV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cXHQubW9kdWxlXFx0XFx0ICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2cGNrbW9faGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnBja21vX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVxcdFxcdFxcdFxcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVxcdFxcdFxcdFxcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVxcdGlmIChyYyA9PSAtRU5PREVWKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XFx0XFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cXHRcXHRcXHRcXHRcXHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVxcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXFx0XFx0XFx0XFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcXHUwMDI2cHJvdGtleS5sZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cXHRcXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXFx1MDAyNnByb3RrZXkubGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXFx0XFx0XFx0XFx0ICAgICAgdC1cXHUwMDNlcHJvdGtleSwgXFx1MDAyNnByb3RsZW4sIFxcdTAwMjZwcm90dHlwZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICB0LVxcdTAwM2Vwcm90a2V5LCBcXHUwMDI2cHJvdGxlbiwgXFx1MDAyNnByb3R0eXBlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cXHRcXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcXHRcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVxcdFxcdFxcdFxcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVxcdFxcdGJ1ZiArPSBDQ0FDSVBIRVJUT0tFTlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXFx0XFx0XFx0XFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVxcdFxcdGJ1ZiArPSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4OlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXFx0Lm1vZHVsZVxcdFxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcXHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2dXZfaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnV2X2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MDAuMTAzMzAyMjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjE1MTA5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKlJlYWNoaW5nIGB1dl9maW5kX3NlY3JldGAgaW4gUUVNVSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBwa2V5X3V2X2luaXRgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCBiZWNhdXNlIGl0IHJlZ2lzdGVycyBgdXZfaGFuZGxlcmAuIFRoYXQgYHV2X2hhbmRsZXJgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHN0cnVjdHVyZSwgbGlua2luZyB0aGUga2V5LXRvLXByb3RvY29sIGtleSBjb252ZXJzaW9uIGFuZCBrZXkgdmVyaWZpY2F0aW9uLiBOb3csIGBrZXlfdG9fcHJvdGtleWAgcG9pbnRzIHRvIGB1dl9rZXkycHJvdGtleWAsIGFuZCBgdmVyaWZ5X2tleWAgcG9pbnRzIHRvIGB1dl92ZXJpZnlrZXlgLiBUaGVzZSB0d28gZnVuY3Rpb25zLCBgdXZfa2V5MnByb3RrZXlgIGFuZCBgdXZfdmVyaWZ5a2V5YCwgYXJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhcyB0aGV5IGJvdGggY2FsbCBgZ2V0X3NlY3JldF9tZXRhZGF0YWAuIEFuZCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgYmVjYXVzZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgaW4gdHVybiBjYWxscyBgdXZfZmluZF9zZWNyZXRgLlxuXG5BaCwgcmlnaHQsIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhlIHBhdGNoIG1vZGlmaWVkLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYHV2X2ZpbmRfc2VjcmV0YCBhY3R1YWxseSAqcmVhY2hhYmxlKiBkdXJpbmcgUUVNVSdzIG9wZXJhdGlvbj8gSXQncyBhbGwgYWJvdXQgY29udHJvbCBmbG93LiBXYWl0IGEgbWludXRlLi4uIGB1dl9maW5kX3NlY3JldGAgcmVsaWVzIG9uIGB1dl9saXN0X3NlY3JldHNgLiBUaGF0IHN1Z2dlc3RzIGEgcGF0aCB0byBleHBsb3JhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdXZfbGlzdF9zZWNyZXRzYCBkb2VzLiBJZiBJIGNhbiBmaWd1cmUgb3V0IGhvdyBgdXZfbGlzdF9zZWNyZXRzYCBnZXRzIGNhbGxlZCwgSSdsbCBrbm93IGlmIGB1dl9maW5kX3NlY3JldGAgaXMgb24gYSB2aWFibGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBJJ2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMDIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MDUuNTI0ODE1MzgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3MzIxNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3Rfc2VjcmV0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4OS0vKipcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDkxLSAqXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTMtXFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3OTI6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXFx0XFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFxcdTAwMjZcXHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxNi1cXHRkbyB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTc6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCwgXFx1MDAyNnV2X2lvY3RsLVxcdTAwM2V1dl9yYyxcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxOC1cXHRcXHRcXHRcXHRcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JyYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjA3LjA3MjE0MzI2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDkwNTc1ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVbHRyYXZpc29yIENhbGwgRXhlY3V0aW9uIGluIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHV2X2xpc3Rfc2VjcmV0c2AgZnVuY3Rpb24sIHdoaWNoIEkgc2VlIGV4ZWN1dGVzIGFuIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKS4gTXkgZmlyc3QgdGhvdWdodCBpczogZG9lcyBRRU1VIGV2ZW4gc3VwcG9ydCB0aGVzZSB0aGluZ3M/IEx1Y2tpbHksIEkga25vdyBRRU1VIGRvZXMgc3VwcG9ydCBzMzkweCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSB0aHJvdWdoIEtWTSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0IGFzIGl0IG1lYW5zIFFFTVUgKmNhbiogaW50ZXJjZXB0IHRoZXNlIFVWQ3MuXG5cbkJ1dCB0aGVuIEkgaGFkIGEgcmVhbGl6YXRpb24uIElmIHRoaXMgaXMgYSBndWVzdCBydW5uaW5nIHVuZGVyIEtWTSB3aXRoIFBWIGVuYWJsZWQsIHRoZSBVbHRyYXZpc29yIGZ1bmN0aW9uYWxpdHkgaXMgZXNzZW50aWFsbHkgaW1wbGVtZW50ZWQgYnkgdGhlIElCTSBmaXJtd2FyZSwgb3IgaW4gYSB0ZXN0aW5nIHNjZW5hcmlvLCBwZXJoYXBzIEtWTS9RRU1VIGl0c2VsZi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzPyBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWUgUFYgc3VwcG9ydCBpbiBRRU1VLiBIb3dldmVyLCBpdCdzIHVzdWFsbHkgdGllZCB0byBLVk0gYW5kIHJlcXVpcmVzIGEgaG9zdCB0aGF0IGFjdHVhbGx5ICpzdXBwb3J0cyogUFYsIGxpa2UgSUJNIFogaGFyZHdhcmUuXG5cblRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBrbm93IHN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSAqZG9lc24ndCogaGF2ZSBzMzkweCBoYXJkd2FyZSwgc28gaXQgdXNlcyBRRU1VIFRDRyBmb3IgczM5MHggZW11bGF0aW9uLiBTbyB0aGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyBRRU1VIFRDRywgdGhlICplbXVsYXRpb24qIG1vZGUsIGFjdHVhbGx5IHN1cHBvcnQgczM5MHggVWx0cmF2aXNvciBjYWxscz9cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQncyBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgYHV2X2xpc3Rfc2VjcmV0c2AgaW4gYSBRRU1VIFRDRyBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIHJlcXVpcmUgY2xvc2VyIGV4YW1pbmF0aW9uLiBMZXQncyBzdGFydCBieSBjaGVja2luZyB0aGF0IGB1dl9saXN0X3NlY3JldHNgIGNhbGxzIGB1dl9jYWxsYCB3aGljaCB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MzoxMy41NjI3MjE0MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc2MzQ3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfY2FsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvYm9vdC91di5jPTE1PXZvaWQgdXZfcXVlcnlfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2Jvb3QvdXYuYy0yNS1cXHQvKiBJZ25vcmUgdGhhdCB0aGVyZSBtaWdodCBiZSBtb3JlIGRhdGEgd2UgZG8gbm90IHByb2Nlc3MgKi9cXG5hcmNoL3MzOTAvYm9vdC91di5jOjI2OlxcdGlmICh1dl9jYWxsKDAsICh1aW50NjRfdClcXHUwMDI2dXZjYikgXFx1MDAyNlxcdTAwMjYgdXZjYi5oZWFkZXIucmMgIT0gVVZDX1JDX01PUkVfREFUQSlcXG5hcmNoL3MzOTAvYm9vdC91di5jLTI3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQzMj1zdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QpID09IFBBR0VfU0laRSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDMzLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQzNDpzdGF0aWMgaW5saW5lIGludCBfX3V2X2NhbGwodW5zaWduZWQgbG9uZyByMSwgdW5zaWduZWQgbG9uZyByMilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MzUte1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDQ2LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ0NzpzdGF0aWMgaW5saW5lIGludCB1dl9jYWxsKHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDQ4LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ1MS1cXHRkbyB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDUyOlxcdFxcdGNjID0gX191dl9jYWxsKHIxLCByMik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDUzLVxcdH0gd2hpbGUgKGNjIFxcdTAwM2UgMSk7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTYtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDU3Oi8qIExvdyBsZXZlbCB1dl9jYWxsIHRoYXQgYXZvaWRzIHN0YWxscyBmb3IgbG9uZyBydW5uaW5nIGJ1c3kgY29uZGl0aW9ucyAgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NTg6c3RhdGljIGlubGluZSBpbnQgdXZfY2FsbF9zY2hlZCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ1OS17XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NjItXFx0ZG8ge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ2MzpcXHRcXHRjYyA9IF9fdXZfY2FsbChyMSwgcjIpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2NC1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2OS0vKlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ3MDogKiBzcGVjaWFsIHZhcmlhbnQgb2YgdXZfY2FsbCB0aGF0IG9ubHkgdHJhbnNwb3J0cyB0aGUgY3B1IG9yIGd1ZXN0XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDcxLSAqIGhhbmRsZSBhbmQgdGhlIGNvbW1hbmQsIGxpa2UgZGVzdHJveSBvciB2ZXJpZnkuXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4Mi1cXHRXQVJOKCFoYW5kbGUsIFxcXCJObyBoYW5kbGUgcHJvdmlkZWQgdG8gVWx0cmF2aXNvciBjYWxsIGNtZCAleFxcXFxuXFxcIiwgY21kKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0ODM6XFx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4NC1cXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTUxMj1zdGF0aWMgaW5saW5lIGludCB1dl9saXN0X3NlY3JldHMoc3RydWN0IHV2X3NlY3JldF9saXN0ICpidWYsIHUxNiBzdGFydF9pZHgsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MjAtXFx0fTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MjE6XFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MjItXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD01NzE9c3RhdGljIGlubGluZSBpbnQgc2hhcmUodW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgY21kKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTg4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjU4OTpcXHRpZiAoIXV2X2NhbGwoMCwgKHU2NClcXHUwMDI2dXZjYikpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTkwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTQxPXN0YXRpYyBpbnQgX19pbml0IHV2X2luaXQocGh5c19hZGRyX3Qgc3Rvcl9iYXNlLCB1bnNpZ25lZCBsb25nIHN0b3JfbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTQ5LVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo1MDpcXHRpZiAodXZfY2FsbCgwLCAodWludDY0X3QpXFx1MDAyNnV2Y2IpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTUxLVxcdFxcdHByX2VycihcXFwiVWx0cmF2aXNvciBpbml0IGZhaWxlZCB3aXRoIHJjOiAweCV4IHJyYzogMCV4XFxcXG5cXFwiLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTkxPWludCB1dl9waW5fc2hhcmVkKHVuc2lnbmVkIGxvbmcgcGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtOTgtXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjk5OlxcdGlmICh1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xMDAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9MTEyPXN0YXRpYyBpbnQgdXZfZGVzdHJveSh1bnNpZ25lZCBsb25nIHBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTExOS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MTIwOlxcdGlmICh1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTEyMS1cXHRcXHQvKlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTE2OD1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTE3NS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MTc2OlxcdGlmICh1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xNzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9MjUxPWludCBfX21ha2VfZm9saW9fc2VjdXJlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1dl9jYl9oZWFkZXIgKnV2Y2IpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjY4LVxcdCAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNjk6XFx0Y2MgPSBfX3V2X2NhbGwoMCwgKHU2NCl1dmNiKTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjcwLVxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWQpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTU5OD1zdGF0aWMgaW5saW5lIHN0cnVjdCB1dl9jYl9xdWVyeV9rZXlzIHV2X3F1ZXJ5X2tleXModm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02MDQtXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjYwNTpcXHR1dl9jYWxsKDAsICh1aW50NjRfdClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTYwNi1cXHRyZXR1cm4gdXZjYjtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz04MjY9aW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgzNS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODM2OlxcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgzNy1cXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz0yODQ9aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0zMTUtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjMxNjpcXHRjYyA9IHV2X2NhbGwoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2t2bS9wdi5jLTMxNy1cXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz00MjQ9c3RhdGljIGludCBrdm1fczM5MF9wdl9kZWluaXRfdm1fZmFzdChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTQzMi1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6NDMzOlxcdGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNDM0LVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz03MDk9aW50IGt2bV9zMzkwX3B2X2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy03NDktXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjc1MDpcXHRjYyA9IHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2t2bS9wdi5jLTc1MS1cXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz03NzI9aW50IGt2bV9zMzkwX3B2X3NldF9zZWNfcGFybXMoc3RydWN0IGt2bSAqa3ZtLCB2b2lkICpoZHIsIHU2NCBsZW5ndGgsIHUxNiAqcmMsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzgxLVxcdH07XFxuYXJjaC9zMzkwL2t2bS9wdi5jOjc4MjpcXHRpbnQgY2MgPSB1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy03ODMtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9ODUxPWludCBrdm1fczM5MF9wdl9zZXRfY3B1X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggc3RhdGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtODYwLVxcbmFyY2gvczM5MC9rdm0vcHYuYzo4NjE6XFx0Y2MgPSB1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy04NjItXFx0S1ZNX1VWX0VWRU5UKHZjcHUtXFx1MDAzZWt2bSwgMywgXFxcIlBST1RWSVJUIFNFVCBDUFUgJWQgU1RBVEUgJWQgcmMgJXggcnJjICV4XFxcIixcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz04Njk9aW50IGt2bV9zMzkwX3B2X2R1bXBfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqYnVmZiwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtODc4LVxcbmFyY2gvczM5MC9rdm0vcHYuYzo4Nzk6XFx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy04ODAtXFx0KnJjID0gdXZjYi5oZWFkZXIucmM7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9OTE2PWludCBrdm1fczM5MF9wdl9kdW1wX3N0b3Jfc3RhdGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTk2Mi1cXHRcXHQvKiBHZXQgMU1CIHdvcnRoIG9mIGd1ZXN0IHN0b3JhZ2Ugc3RhdGUgZGF0YSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzo5NjM6XFx0XFx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy05NjQtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MTAyND1pbnQga3ZtX3MzOTBfcHZfZHVtcF9jb21wbGV0ZShzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICpidWZmX3VzZXIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTA0MC1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6MTA0MTpcXHRyZXQgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNmNvbXBsZXRlKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTA0Mi1cXHQqcmMgPSBjb21wbGV0ZS5oZWFkZXIucmM7XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYz04Nzg9c3RhdGljIGlubGluZSBpbnQgdXZfbm1pX2tkYl9yZWFzb24odm9pZClcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTg5NS0gKi9cXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYzo4OTY6c3RhdGljIHZvaWQgdXZfY2FsbF9rZ2RiX2tkYihpbnQgY3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG1hc3RlcilcXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy04OTcte1xcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmMtOTI4LSNlbHNlIC8qICFDT05GSUdfS0dEQiAqL1xcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jOjkyOTpzdGF0aWMgaW5saW5lIHZvaWQgdXZfY2FsbF9rZ2RiX2tkYihpbnQgY3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG1hc3RlcilcXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy05MzAte1xcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM9OTM4PXN0YXRpYyBpbnQgdXZfaGFuZGxlX25taSh1bnNpZ25lZCBpbnQgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTk3OC1cXHRjYXNlIG5taV9hY3Rfa2dkYjpcXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYzo5Nzk6XFx0XFx0dXZfY2FsbF9rZ2RiX2tkYihjcHUsIHJlZ3MsIG1hc3Rlcik7XFxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmMtOTgwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0xODU9c3RhdGljIGludCB1dmlvX2F0dGVzdGF0aW9uKHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMjI2LVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6MjI3OlxcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NCl1dmNiX2F0dGVzdCk7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yMjgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTI2OT1zdGF0aWMgaW50IHV2aW9fYWRkX3NlY3JldChzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTI5My1cXHR1dmNiLmFkZHIgPSAodTY0KWFzcmNiO1xcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6Mjk0OlxcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yOTUtXFx0dXZfaW9jdGwtXFx1MDAzZXV2X3JjID0gdXZjYi5oZWFkZXIucmM7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTQwND1zdGF0aWMgaW50IHV2aW9fbG9ja19zZWNyZXRzKHN0cnVjdCB1dmlvX2lvY3RsX2NiICppb2N0bClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDEzLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6NDE0OlxcdHV2X2NhbGwoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy00MTUtXFx0aW9jdGwtXFx1MDAzZXV2X3JjID0gdXZjYi5oZWFkZXIucmM7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTQzNj1zdGF0aWMgaW50IHV2aW9fcmV0cl9zZWNyZXQoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy00NTktXFx0dXZjYi5idWZfc2l6ZSA9IGJ1Zl9sZW47XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzo0NjA6XFx0dXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTQ2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MTUuMTEwMzU5NjU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTg3NzM5NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVZDIEluc3RydWN0aW9uIGFuZCBJdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXZfY2FsbGAgZnVuY3Rpb24uIEl0J3MgdXNpbmcgdGhlIGBVVkNgIGluc3RydWN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhIHF1ZXN0aW9uOiBkb2VzIFFFTVUgVENHIGFjdHVhbGx5ICplbXVsYXRlKiB0aGF0PyBJIGtub3cgaXQgb2Z0ZW4gZG9lc24ndCBkZWFsIHdpdGggUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgZGlyZWN0bHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBVbHRyYXZpc29yIGZhY2lsaXR5IGlzIGV2ZW4gZW5hYmxlZCB3aXRoaW4gUUVNVSBUQ0cuXG5cbkkgc2VlIHRoZSBrZXJuZWwgY2hlY2tzIGlmIHRoZSBmYWNpbGl0eSBpcyBhdmFpbGFibGUsIHdoaWNoIHN1Z2dlc3RzIGl0IGV4cGVjdHMgaXQgdG8gKnBvdGVudGlhbGx5KiBiZSB0aGVyZS4gSSByZW1lbWJlciBzZWVpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgcmVhbGl6ZSBpdCdzIGEgbW9kdWxlLiBUaGlzIG1ha2VzIG1lIHdvbmRlcjogY2FuIHdlIGdldCB0byBgdXZfZmluZF9zZWNyZXRgIGV2ZW4gaWYgYFVWQ2AgcmV0dXJucyBhbiBlcnJvcj8gSXQgbG9va3MgbGlrZSBpdCAqaGFuZGxlcyogZXJyb3JzIGNvbWluZyBiYWNrIGZyb20gYHV2X2xpc3Rfc2VjcmV0c2AuIFNwZWNpZmljYWxseSwgaWYgYHV2X2xpc3Rfc2VjcmV0c2AgZ2l2ZXMgYFVWQ19SQ19JTlZfQ01EYCwgdGhlbiBpdCB0cmFuc2xhdGVzIHRvIGAtRU5PREVWYC5cblxuTm93LCB0aGUgY29kZSBoYXMgcmVjZW50bHkgYmVlbiBwYXRjaGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBmcm9tIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluIHRoZSBsb29wLiBBbHNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW4gdGhlIGBkby4uLndoaWxlYCBsb29wIGFuZCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDBgLiBJZiBgdXZfbGlzdF9zZWNyZXRzYCBkb2Vzbid0ICpkbyogYW55dGhpbmcgKHBlcmhhcHMgYmVjYXVzZSB0aGUgVVZDIGlzIG5vdCBzdXBwb3J0ZWQpLCB0aGVuIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgd291bGQgYmUgd2hhdGV2ZXIgaXQgd2FzIGluaXRpYWxpemVkIHRvLCB3aGljaCBjb3VsZCBiZSB6ZXJvLlxuXG5TbywgaWYgdGhlIFVWQyBpbnN0cnVjdGlvbiBpc24ndCBzdXBwb3J0ZWQgaW4gUUVNVSwgYHV2X2NhbGxgIGxpa2VseSBqdXN0IHRocm93cyBhIFNJR0lMTCBvciwgYXQgYmVzdCwgcmV0dXJucyBhbiBlcnJvciBjb2RlLiBIb3dldmVyLCB0aGUga2VybmVsICpzaG91bGRuJ3QqIGV2ZW4gYXR0ZW1wdCB0byB1c2UgaXQgaWYgdGhlIGZhY2lsaXR5IGlzIG5vdCBhY3R1YWxseSB0aGVyZS4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBgcGtleV91dl9pbml0YCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjI1LjI5ODEwMTQ4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTgxNjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa2V5X3V2X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjg0OnN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI4NS17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0zMDg9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfdXZfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjMxNjptb2R1bGVfY3B1X2ZlYXR1cmVfbWF0Y2goUzM5MF9DUFVfRkVBVFVSRV9VViwgcGtleV91dl9pbml0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0zMTctbW9kdWxlX2V4aXQocGtleV91dl9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MjYuODczOTI4MzQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzQ1Nzg3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNb2R1bGUgTG9hZCBDb25kaXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGBtb2R1bGVfY3B1X2ZlYXR1cmVfbWF0Y2goUzM5MF9DUFVfRkVBVFVSRV9VViwgcGtleV91dl9pbml0KWAgZnVuY3Rpb24gY2FsbCBtZWFucyB0aGUgbW9kdWxlIGBwa2V5X3V2X2luaXRgIHdpbGwgKm9ubHkqIGxvYWQgaWYgdGhlIGBTMzkwX0NQVV9GRUFUVVJFX1VWYCBDUFUgZmVhdHVyZSBpcyBwcmVzZW50LiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgZmFjaWxpdHkgMTU4IOKAkyB0aGUgVWx0cmF2aXNvciBmZWF0dXJlIOKAkyBpcyBldmVuIGF2YWlsYWJsZSBpbiBRRU1VIFRDRy4gSSBrbm93IHRoYXQgUUVNVSBUQ0cgdHlwaWNhbGx5IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZlYXR1cmU7IGl0J3MgZ2VuZXJhbGx5IHJlc2VydmVkIGZvciBLVk0gbW9kZSBvbiBhIGhvc3Qgd2l0aCBhbiBVbHRyYXZpc29yLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIFN5emthbGxlci4gSXQgcnVucyBzMzkweCwgYW5kIEkga25vdyBpdCBzdXBwb3J0cyBib3RoIFRDRyBhbmQgS1ZNLiBJIG5lZWQgdG8gYmUgc3VyZS4gSWYgaXQgcnVucyBvbiBhIHJlYWwgczM5MHggaG9zdCAobGlrZSBJQk0gQ2xvdWQpLCBpdCAqY291bGQqIGJlIHVzaW5nIEtWTSwgd2hpY2ggd291bGQgbWFrZSB0aGlzIHBvc3NpYmxlLiBSaWdodCwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIHMzOTB4IEtWTSBpbnN0YW5jZXMuIFNvIGl0ICppcyogcmVhY2hhYmxlIHZpYSBLVk0uXG5cblRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIGZvdW5kIHRoZSBidWcsIGFuZCB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgdGhlIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAgZW1haWwgYWRkcmVzcywgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBTeXprYWxsZXIgZWl0aGVyIHRyaWdnZXJlZCB0aGUgY29kZSBkaXJlY3RseSBvciBpdCB3YXMgYXQgbGVhc3QgdmFsaWRhdGVkIGluIHRoZWlyIHRlc3RpbmcuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuIEkgdGhpbmsgYENPTkZJR19QS0VZX1VWYCBpcyByZXF1aXJlZCwgeWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MzozMy4zNDg1MDk4NjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzUyMjE3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBLRVlfVVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZz0xMzc9Y29uZmlnIFBLRVlfUENLTU9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU3LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcIlBLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MzozNC44ODM3NDA2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3Mjc0MTU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENyeXB0b2dyYXBoaWMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBLRVlfVVZgLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGtlcm5lbCBmZWF0dXJlcyBhcmUgZGVmaW5lZCBhbmQgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIGFzc29jaWF0ZWQgYnVpbGQtdGltZSBjb250cm9scy4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBwcmVzZW5jZSwgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIG9wdGlvbnMgaW4gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjM4LjE1NjQ4NDUyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1NTpcXHRcXHQgIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIHN1cmUgeW91IG5ldmVyIG5lZWQgdG8gZGVyaXZlIHByb3RlY3RlZFxcbiAxNTY6XFx0XFx0ICBrZXlzIGZyb20gY2xlYXIga2V5IHZhbHVlcyBkaXJlY3RseSB2aWEgUENLTU8uXFxuIDE1NzpcXHRcXG4gMTU4OlxcdGNvbmZpZyBQS0VZX1VWXFxuIDE1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiUEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIFBLRVlcXG4gMTYxOlxcdFxcdGRlcGVuZHMgb24gUzM5MF9VVl9VQVBJXFxuIDE2MjpcXHRcXHRoZWxwXFxuIDE2MzpcXHRcXHQgIFRoaXMgaXMgdGhlIFBLRVkgVWx0cmF2aXNvciBzdXBwb3J0IGhhbmRsZXIgZm9yIGRlcml2aW5nIHByb3RlY3RlZFxcbiAxNjQ6XFx0XFx0ICBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZSBVbHRyYXZpc29yIChVVikuXFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcXG4gMTY3OlxcdFxcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxcbiAxNjg6XFx0XFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxcbiAxNjk6XFx0XFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cXG4gMTcwOlxcdFxcdCAgbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgd2l0aCBhbiBLVk1cXG4gMTczOlxcdFxcdCAgZ3Vlc3Qgd2l0aCBwcm90ZWN0ZWQgZXhlY3V0aW9uIGFuZCB5b3Ugd2FudCB0byB1c2UgVVYgcmV0cmlldmFibGVcXG4gMTc0OlxcdFxcdCAgc2VjcmV0cyB2aWEgUEtFWSBBUEkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjM4LjE1NjU1ODU4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU1NDQ0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoaXMgc2l0dWF0aW9uIGhpbmdlcyBvbiB0d28ga2V5IGZhY3RvcnM6IHRoZSBgUEtFWWAgYW5kIGBTMzkwX1VWX1VBUElgIHBhcmFtZXRlcnMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGFuZCB0aGUgb25seSBsb2dpY2FsIG9uZSwgaXMgdG8gc3lzdGVtYXRpY2FsbHkgZXhhbWluZSB0aG9zZSB2YXJpYWJsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHN0YXRlcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggZWFjaCBvdGhlci4gQSBkZWVwZXIgZGl2ZSBpbnRvIGhvdyB0aGV5J3JlIHNldCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIG9uIG90aGVyIHN5c3RlbSBjb21wb25lbnRzIHdpbGwgYmUgY3JpdGljYWwgdG8gcmVzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLiBFc3NlbnRpYWxseSwgYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYCBhcmUgdGhlIGtleXMgdG8gdW5sb2NraW5nIHRoZSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNjQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjQxLjIxMjAwNTg0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NzY4Njg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEtFWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnPTY3PWNvbmZpZyBaQ1JZUFRcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzctXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzo3ODpjb25maWcgUEtFWVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcIktlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEwNC1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEwNTpjb25maWcgUEtFWV9DQ0FcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEwNi1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBDQ0Egc3VwcG9ydCBoYW5kbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMjE6Y29uZmlnIFBLRVlfRVAxMVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJQS0VZIEVQMTEgc3VwcG9ydCBoYW5kbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMzYtXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMzc6Y29uZmlnIFBLRVlfUENLTU9cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzOC1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBQQ0tNTyBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6NDIuNzk5Njk4MTUxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTY1MDMyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgYFMzOTBfVVZfVUFQSWAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBmb2N1cyBvbiB0aGF0IHNwZWNpZmljIHRoaW5nLCBgUzM5MF9VVl9VQVBJYC4gUHJlc3VtYWJseSwgdGhpcyBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGNvZGUsIGRvY3VtZW50YXRpb24sIG9yIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBhIHN5c3RlbSBvciBwcm9qZWN0LiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgY29udGV4dHM6IGlzIHRoaXMgYSBzcGVjaWZpYyB1c2VyLXNwYWNlIEFQSSBvbiBhbiBzMzkweCBhcmNoaXRlY3R1cmUsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIFVWIChVbHRyYXZpc29yKSBvciBzb21lIG90aGVyIHZpcnR1YWxpemF0aW9uIGxheWVyPyBJdCBjb3VsZCBiZSBhIGRyaXZlciwgYSBsaWJyYXJ5LCBvciBldmVuIGEgYnVpbGQgdGFyZ2V0LlxuXG5UaGUgaW5zdHJ1Y3Rpb24gaXMgdmVyeSBjb25jaXNlLCB3aGljaCBzdWdnZXN0cyB0aGUgY29udGV4dCBpcyBhbHJlYWR5IGtub3duLCBvciBpdCdzIGEgdmVyeSBzcGVjaWZpYyBlbGVtZW50IHdpdGhpbiBhIG11Y2ggbGFyZ2VyIGNvbnZlcnNhdGlvbi4gSSBzaG91bGQgc3RhcnQgYnkgbWVudGFsbHkgY29ubmVjdGluZyB0aGlzIHRvIGFueSByZWNlbnQgZGlzY3Vzc2lvbnMgb3IgY3VycmVudCB0YXNrcyB0byBwcm92aWRlIGEgaGVscGZ1bCBzdW1tYXJ5LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBXaGF0J3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIHJldmlldz8gQW0gSSBjaGVja2luZyBmb3Igc29tZXRoaW5nIHNwZWNpZmljIOKAkyBhIGJ1ZywgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBjb21wYXRpYmlsaXR5LCBvciBkb2N1bWVudGF0aW9uIGFjY3VyYWN5PyBJcyB0aGlzIHBhcnQgb2YgYSBkZWJ1Z2dpbmcgcHJvY2VzcywgYSBjb2RlIHJldmlldywgb3IgZG9jdW1lbnRhdGlvbiB1cGRhdGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVmb3JlIEkgc3RhcnQsIG90aGVyd2lzZSwgSSBtaWdodCB3YXN0ZSB0aW1lIGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg2MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjQ2Ljg1NjIwNDYwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTAzMDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUzM5MF9VVl9VQVBJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jaGFyL0tjb25maWc9NzU9Y29uZmlnIEhNQ19EUlZcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL0tjb25maWctODctXFxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZzo4ODpjb25maWcgUzM5MF9VVl9VQVBJXFxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZy04OS1cXHRkZWZfdHJpc3RhdGUgbVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo0OC40NDEyMzk3MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNTAwNjc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgVVYgU3VwcG9ydCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IFMzOTAsIHRoYXQncyB0aGUgU3lzdGVtIHogYXJjaGl0ZWN0dXJlLiBUaGUgZm9jdXMgaXMgbGlrZWx5IG9uIFVuaXByb2Nlc3NvciBWaXJ0dWFsaXphdGlvbiAoVVYpIFVzZXIgQVBJIHN1cHBvcnQsIGdpdmVuIHRoZSBgUzM5MF9VVl9VQVBJYCByZWZlcmVuY2UuIE15IGludHVpdGlvbiBpbW1lZGlhdGVseSBwb2ludHMgbWUgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCBzcGVjaWZpY2FsbHkgdG8gdGhlIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycyBpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGFzIFVBUEkgZmVhdHVyZXMgb2Z0ZW4gaW52b2x2ZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZXMgZm9yIGludGVyYWN0aW9uIGJldHdlZW4gdXNlciBzcGFjZSBhbmQgdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIFVWIFVBUEkgc3VwcG9ydCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcHJlc2VudCwgYW5kIGlmIHNvLCB3aGF0IGNvbmRpdGlvbnMgZW5hYmxlIHRoZSBpbmNsdXNpb24gb2YgdGhlIGBTMzkwX1VWX1VBUElgIGZlYXR1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGRlZmluZWQgdGhlcmUuIEknbSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGhlbHBmdWwgY29tbWVudHMgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyOTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo1Mi40NjYyNTI4OTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHQgIHRyYW5zZmVyIGNhY2hlIHNpemUgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSAwLjVNQiB0byBOIGJ5dGVzLiBJZiBOXFxuICA4NjpcXHRcXHQgIGlzIHplcm8sIHRoZW4gbm8gY2FjaGluZyBpcyBwZXJmb3JtZWQuXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBTMzkwX1VWX1VBUElcXG4gIDg5OlxcdFxcdGRlZl90cmlzdGF0ZSBtXFxuICA5MDpcXHRcXHRwcm9tcHQgXFxcIlVsdHJhdmlzb3IgdXNlcnNwYWNlIEFQSVxcXCJcXG4gIDkxOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgOTI6XFx0XFx0aGVscFxcbiAgOTM6XFx0XFx0ICBTZWxlY3RpbmcgZXhwb3NlcyBwYXJ0cyBvZiB0aGUgVVYgaW50ZXJmYWNlIHRvIHVzZXJzcGFjZVxcbiAgOTQ6XFx0XFx0ICBieSBwcm92aWRpbmcgYSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgYXQgL2Rldi91di5cXG4gIDk1OlxcdFxcdCAgVXNpbmcgSU9DVExzIG9uZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgVVYuXFxuICA5NjpcXHRcXHQgIFRoZSBkZXZpY2UgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIFVsdHJhdmlzb3JcXG4gIDk3OlxcdFxcdCAgRmFjaWxpdHkgKDE1OCkgaXMgcHJlc2VudC5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0Y29uZmlnIFMzOTBfVEFQRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo1Mi40NjYzNDk4MzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNDE5ODgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEtleSBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0J3MgY2xlYXIgd2UnbGwgbmVlZCBkZWZpbml0aW9ucyBmb3IgYFBLRVlfVVZgLCBgUEtFWWAsIGFuZCBgUzM5MF9VVl9VQVBJYC4gTWFrZXMgc2Vuc2UsIHRoZXNlIGFyZSBsaWtlbHkgY3JpdGljYWwgZm9yIG91ciBjb25maWd1cmF0aW9uLiBXYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYFBLRVlgIGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBjcnlwdG8gZHJpdmVycz8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBBaCB5ZXMsIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLiBSaWdodCwgbm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBwaWVjZXMgZG9lcyBgUEtFWWAgcmVseSBvbiwgb3Igd2hpY2ggb2YgaXRzIHVwc3RyZWFtIGVsZW1lbnRzIG1pZ2h0IGFmZmVjdCBteSBjb25zaWRlcmF0aW9ucz8gTGV0J3MgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjU2LjU5MDU1MTI3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgdG8gOCBpbiBDb3Byb2Nlc3NvciAoQ0VYeEMpLCBFUDExIENvcHJvY2Vzc29yIChDRVh4UClcXG4gIDc2OlxcdFxcdCAgb3IgQWNjZWxlcmF0b3IgKENFWHhBKSBtb2RlLlxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgUEtFWVxcbiAgNzk6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcXFwiXFxuICA4MDpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIHRoZSBwa2V5IGtlcm5lbCBtb2R1bGVzIHByb3ZpZGUgYW4gQVBJXFxuICA4MzpcXHRcXHQgIGZvciBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgb2YgcHJvdGVjdGVkIGtleXMuIE90aGVyIHBhcnRzIG9mIHRoZVxcbiAgODQ6XFx0XFx0ICBrZXJuZWwgb3IgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBUaGUgcHJvdGVjdGVkIGtleSBzdXBwb3J0IGlzIGRpc3RyaWJ1dGVkIGludG86XFxuICA4NzpcXHRcXHQgIC0gQSBwa2V5IGJhc2UgYW5kIEFQSSBrZXJuZWwgbW9kdWxlIChwa2V5LmtvKSB3aGljaCBvZmZlcnMgdGhlXFxuICA4ODpcXHRcXHQgICAgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBwa2V5IGhhbmRsZXIga2VybmVsIG1vZHVsZXMsIHRoZSBpb2N0bFxcbiAgODk6XFx0XFx0ICAgIGFuZCB0aGUgc3lzZnMgQVBJIGFuZCB0aGUgaW4ta2VybmVsIEFQSSB0byB0aGUgY3J5cHRvIGNpcGhlclxcbiAgOTA6XFx0XFx0ICAgIGltcGxlbWVudGF0aW9ucyB1c2luZyBwcm90ZWN0ZWQga2V5LlxcbiAgOTE6XFx0XFx0ICAtIEEgcGtleSBwY2ttbyBrZXJuZWwgbW9kdWxlIChwa2V5LXBja21vLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XFxuICA5MjpcXHRcXHQgICAgbG9hZGVkIHdoZW4gcGNrbW8gc3VwcG9ydCAodGhhdCBpcyBnZW5lcmF0aW9uIG9mIHByb3RlY3RlZCBrZXlzXFxuICA5MzpcXHRcXHQgICAgZnJvbSBjbGVhciBrZXkgdmFsdWVzKSBpcyBhdmFpbGFibGUuXFxuICA5NDpcXHRcXHQgIC0gQSBwa2V5IENDQSBrZXJuZWwgbW9kdWxlIChwa2V5LWNjYS5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo1Ni41OTA2Mjk1NTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NzUyMDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBQS0VZYCBEZXBlbmRlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGUgYFBLRVlgIGZ1bmN0aW9uYWxpdHkgaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgYFMzOTBgIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5LiBJdCdzIGRyaWxsaW5nIGludG8gdGhlIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZpbGUuIFJpZ2h0LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgYXJvdW5kIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbXBvbmVudCBoZXJlLCBhbmQgaXQncyBiZWluZyBleHBvcnRlZC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlczsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGBwa2V5X3V2LmNgIGlzIHVzaW5nIGl0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHBvdGVudGlhbCB1c2VycyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBnZXQgaW1wYWN0ZWQuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaW1wYWN0cyBvdGhlciBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjAwLjI3ODE1MTkzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTA4NzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDowMS43ODcyNDQ1NzhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkxOTY0NjAyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFVWIFNlY3JldCBGaW5kaW5nIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQgd2l0aCBTeXprYWxsZXIuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgdXYuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHNlY3JldHMgYXJlIGZvdW5kIGFuZCBsaXN0ZWQuIFRoZSBjcml0aWNhbCBjb2RlIHBhdGggaXMgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBvbmUgdGhhdCB3YXMgbW9kaWZpZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIHJlYWNoIHRoaXMgY29kZS4gSXQgc2VlbXMgbGlrZSB0aGlzIGludm9sdmVzIGVuYWJsaW5nIHRoZSBgUEtFWV9VVmAgbW9kdWxlLiBMZXQgbWUgdmVyaWZ5OiBgUEtFWV9VVmAgYW5kIGBTMzkwX1VWX1VBUElgIGlzIHVzZWQgaGVyZT8gWWVzLiBJIHNlZSBub3cgdGhhdCBgUzM5MF9VVl9VQVBJYCBpcyBuZWVkZWQgYnkgYFBLRVlfVVZgLiBBbmQgYFBLRVlgIGl0c2VsZi4gQWxyaWdodCwgc28gSSdsbCBuZWVkIGBQS0VZX1VWYCwgYFMzOTBfVVZfVUFQSWAsIGFuZCBgUEtFWWAgZW5hYmxlZCBpbiB0aGUgY29uZmlnLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIGxvb3AgbG9naWMgd2l0aGluIGB1dl9maW5kX3NlY3JldGAuIEl0IGxvb2tzIGxpa2UgYHN0YXJ0X2lkeGAgd2FzIG5vdCB1cGRhdGVkIGNvcnJlY3RseSB3aXRoaW4gdGhlIGxvb3AsIGxlYWRpbmcgdG8gdGhlIGxvb3AgcG90ZW50aWFsbHkgdGVybWluYXRpbmcgYWZ0ZXIgYSBzaW5nbGUgaXRlcmF0aW9uIGV2ZW4gaWYgdGhlcmUgd2VyZSBtb3JlIHNlY3JldHMgdG8gYmUgcHJvY2Vzc2VkLiBTcGVjaWZpY2FsbHksIHRoZSBvbGQgY29kZSdzIGxvZ2ljIG9mIHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCwgdGhlbiBjaGVja2luZyBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgKHdoZXJlIHRoZSBuZXcgYHN0YXJ0X2lkeGAgaXMgZXF1YWwgdG8gdGhlIG5ldyBgbmV4dF9zZWNyZXRfaWR4YCksIG1lYW50IHRoZSBsb29wIHdvdWxkbid0IGl0ZXJhdGUgYmV5b25kIHRoZSBmaXJzdCBwYWdlLlxuXG5UaGUgbmV3IGNvZGUsIGJ5IG1vdmluZyB0aGUgYHN0YXJ0X2lkeGAgdXBkYXRlICp0byB0aGUgYmVnaW5uaW5nKiBvZiB0aGUgbG9vcCBmaXhlcyB0aGlzLiBJdCBlbnN1cmVzIHRoZSBjaGVjayBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgY29tcGFyZXMgdGhlIGN1cnJlbnQgdmFsdWUgd2l0aCB0aGUgbmV3IHZhbHVlLCBhbGxvd2luZyB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHNlY3JldHMuXG5cbkFsc28sIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHBvdGVudGlhbCBmaXggcmVsYXRlZCB0byB1c2luZyBgbnVtX3NlY3Jfc3RvcmVkYCBpbnN0ZWFkIG9mIGB0b3RhbF9udW1fc2VjcmV0c2Agd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVhZCBwYXN0IGEgcGFnZSBib3VuZGFyeS5cblxuVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGJ1ZyBmaXgsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgdXZfZmluZF9zZWNyZXRgLCBiZWNhdXNlIHRoYXQncyB0aGUgb25lIG1vZGlmaWVkLCBhbmQgaXQncyBhbHNvIGV4cG9ydGVkLiBObyBvdGhlciBmdW5jdGlvbnMgbmVlZCB0byBiZSBjYWxsZWQuXG5cblNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlOiBgUEtFWV9VVmAsIGBTMzkwX1VWX1VBUElgLCBhbmQgYFBLRVlgLiBUaGVzZSBsb29rIGxpa2UgdGhlIHJlcXVpcmVkIGluZ3JlZGllbnRzLiBOb3cgSSdtIHJlYWR5IHRvIGNyYWZ0IHNvbWUgU3l6a2FsbGVyIHRhcmdldHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzkyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDoyMC45ODM3MDcwMjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTMzODQ0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBLRVlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZz02Nz1jb25maWcgWkNSWVBUXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTc3LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6Nzg6Y29uZmlnIFBLRVlcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTc5LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDQtXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMDU6Y29uZmlnIFBLRVlfQ0NBXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDYtXFx0dHJpc3RhdGUgXFxcIlBLRVkgQ0NBIHN1cHBvcnQgaGFuZGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTIwLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTIxOmNvbmZpZyBQS0VZX0VQMTFcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMi1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBFUDExIHN1cHBvcnQgaGFuZGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM2LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTM3OmNvbmZpZyBQS0VZX1BDS01PXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMzgtXFx0dHJpc3RhdGUgXFxcIlBLRVkgUENLTU8gc3VwcG9ydCBoYW5kbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTctXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxNTg6Y29uZmlnIFBLRVlfVVZcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjIyLjQ5NzA5OTM5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA4MjMzNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDcnlwdG8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsJ3MgY3J5cHRvZ3JhcGhpYyBmZWF0dXJlcyBhcmUgY29uZmlndXJlZC4gSSBzZWUgYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgIGFuZCBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCBpdCdzIHNvdXJjZWQgZnJvbSBlaXRoZXIgdGhlIG1haW4gYGNyeXB0by9LY29uZmlnYCBmaWxlIG9yIHRoZSB0b3AtbGV2ZWwgYGRyaXZlcnMvS2NvbmZpZ2AuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtjb25maWcgZmlsZXMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoaWNoIG9uZSB0YWtlcyBwcmVjZWRlbmNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgIGF0IGl0cyB0b3AgbGV2ZWwgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gSSB3aWxsIGNoZWNrIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCwgd2hhdCBvdGhlciBLY29uZmlnIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBjcnlwdG8gZHJpdmVycyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTkwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDQ6MjYuMjA1MzM1NjM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBDUllQVE9fSFdcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkhhcmR3YXJlIGNyeXB0byBkZXZpY2VzXFxcIlxcbiAgIDU6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciBoYXJkd2FyZSBjcnlwdG8gZGV2aWNlcyBhbmRcXG4gICA4OlxcdFxcdCAgcHJvY2Vzc29ycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRpZiBDUllQVE9fSFdcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL2NyeXB0by9hbGx3aW5uZXIvS2NvbmZpZ1xcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIENSWVBUT19ERVZfUEFETE9DS1xcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIFZJQSBQYWRMb2NrIEFDRVxcXCJcXG4gIDE4OlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2ICFVTUxcXG4gIDE5OlxcdFxcdGhlbHBcXG4gIDIwOlxcdFxcdCAgU29tZSBWSUEgcHJvY2Vzc29ycyBjb21lIHdpdGggYW4gaW50ZWdyYXRlZCBjcnlwdG8gZW5naW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjI2LjIwNTQyMzAzNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjYzODIxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTZWNyZXQgUmV0cmlldmFsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgZml4IHJlcXVpcmVzIGBDUllQVE9fSFdgLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCBkZWZhdWx0cyB0byAneScuIEkgbmVlZCB0byBjb25maXJtIGlmIGBDUllQVE9gIGlzIGFsc28gYSBkZXBlbmRlbmN5LCBhbmQgaXQgc2VlbXMgbGlrZWx5IGdpdmVuIHRoYXQgYGRyaXZlcnMvY3J5cHRvYCBpcyB1c3VhbGx5IHdpdGhpbiBgQ1JZUFRPYC4gSG93ZXZlciwgYFBLRVlfVVZgIGlzIHRoZSBrZXkgY29tcG9uZW50IGhlcmUuXG5cbkhlcmUncyB0aGUgZ2lzdDogdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXRgLiBTcGVjaWZpY2FsbHksIHRoZSBsb29wIGxvZ2ljIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBzZWNyZXQgcGFnZXMgd2FzIGZsYXdlZCwgY2F1c2luZyBpdCB0byBleGl0IGVhcmx5LiBUaGlzIHdhcyBkdWUgdG8gYW4gdXBkYXRlIHRvIGBzdGFydF9pZHhgIHdpdGhpbiB0aGUgbG9vcCBiZWZvcmUgdGhlIGNvbmRpdGlvbiBjaGVjaywgY2F1c2luZyBhbiBlYXJseSB0ZXJtaW5hdGlvbi4gVGhlcmUncyBhbHNvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGJlaW5nIGFkZHJlc3NlZCBieSB1c2luZyBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgLCB3aGljaCBjb3JyZWN0cyBob3cgc2VjcmV0cyBhcmUgaXRlcmF0ZWQgd2l0aGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMsIHBlcnRhaW5pbmcgdG8gaG93IHRoZSBzMzkweCBVbHRyYXZpc29yIHJldHJpZXZlcyBzZWNyZXRzLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGAvZGV2L3BrZXlgIGlvY3RsIGludGVyZmFjZSDigJMgYXNzdW1pbmcgdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBTaW5jZSB1c2Vyc3BhY2UgY2FuIGFjY2VzcyB0aGlzIHRocm91Z2ggYW4gaW9jdGwsIHRoaXMgd291bGQgYmUgaGlnaGx5IHZhbHVhYmxlIHRvIGZ1enouIEl0J3MgY3J1Y2lhbCB0byB2ZXJpZnkgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXG5cblRvIHRlc3QgdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbi5cblxuVG8gZW5hYmxlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24sIEkgbmVlZCBgUEtFWV9VVmAsIGBTMzkwX1VWX1VBUElgIGFuZCBgUEtFWWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY5MSwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDozNC44NjkyNDgxNDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDMyMjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEtFWV9VVlwiLFxuICAgIFwiUzM5MF9VVl9VQVBJXCIsXG4gICAgXCJQS0VZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfZmluZF9zZWNyZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEtFWV9VVlwiLFxuICAgIFwiUzM5MF9VVl9VQVBJXCIsXG4gICAgXCJQS0VZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfZmluZF9zZWNyZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjM0LjkzOTU3NzcwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4MzgwMjk4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDozNC45NDAwODA3NDZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzM4Mzc1MjExNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCAodG90YWwgc2VjcmV0cyBpbiB0aGUgZ3Vlc3QpIHRvIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuMi4gSXQgZml4ZXMgdGhlIGxvb3AgY29uZGl0aW9uIGluIGB1dl9maW5kX3NlY3JldGAgdG8gY29ycmVjdGx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzIGJ5IHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgcmF0aGVyIHRoYW4gdGhlIGVuZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIHtcbiBcdHUxNiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0czsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgKzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuIHtcbi1cdHUxNiBzdGFydF9pZHggPSAwO1xuK1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbitcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbitcbiBcdGRvIHtcbitcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDQ6MzQuOTQwMDgxNTM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTYxMzA1NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBzMzkwIFNlY3JldCBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNlY3JldCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVVYgc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGJ1ZyBmaXgsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55ICpuZXcqIHJpc2tzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuRmlyc3QsIHRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnVuY3Rpb24gaXMgbW9kaWZpZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluIHRoZSBsb29wIGNvbmRpdGlvbiwgYnV0IG5vdyB1c2VzIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgYHRvdGFsX251bV9zZWNyZXRzYCBwcm9iYWJseSByZXByZXNlbnRzIHRoZSAqdG90YWwqIG51bWJlciBvZiBzZWNyZXRzIGF2YWlsYWJsZSBhY3Jvc3MgcG90ZW50aWFsbHkgbXVsdGlwbGUgcGFnZXMvbGlzdHMsIHdoZXJlYXMgYG51bV9zZWNyX3N0b3JlZGAgc3BlY2lmaWNhbGx5IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNlY3JldHMgY3VycmVudGx5ICpzdG9yZWQqIGluIHRoZSByZWxldmFudCBwYWdlL2xpc3QuIElmIHRoZSBjb2RlIHVzZWQgYHRvdGFsX251bV9zZWNyZXRzYCBiZWZvcmUsIGl0IHdhcyBsaWtlbHkgaXRlcmF0aW5nIHBhc3QgdGhlIGluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yLCBhdCBiZXN0LCBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aGluIHRoZSBgbGlzdC1cdTAwM2VzZWNyZXRzYCBhcnJheS4gVGhpcyBjaGFuZ2UgaXMgYSBjbGVhciBmaXggZm9yIHRoaXMuXG5cblRoZSBtb3JlIGludHJpY2F0ZSBwYXJ0IGlzIHRoZSBjaGFuZ2VzIHRvIGB1dl9maW5kX3NlY3JldGAuICBUaGUgbG9vcCBzdHJ1Y3R1cmUgYXBwZWFycyB0byBiZSByZXNwb25zaWJsZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHNlY3JldHMsIHBvdGVudGlhbGx5IGFjcm9zcyBtdWx0aXBsZSBwYWdlcy4gIEluaXRpYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtgIHRvIGluaXRpYWxpemUgdGhlIGluZGV4LiBUaGVuLCB0aGUgaW1wb3J0YW50IHBhcnQ6IHRoZSBgc3RhcnRfaWR4YCBpcyBhc3NpZ25lZCAqaW5zaWRlKiB0aGUgbG9vcC4gIEJlZm9yZSB0aGUgcGF0Y2gsIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBhdCB0aGUgKmVuZCogb2YgdGhlIGxvb3AsIHdoaWNoIG1lYW5zIHRoZSBjb25kaXRpb24gYHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdvdWxkICphbHdheXMqIGJlIGZhbHNlLiBXaHk/IEJlY2F1c2UgdGhlIGBzdGFydF9pZHhgIHdvdWxkIGJlIHRoZSBzYW1lIGFzIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAsIHJlbmRlcmluZyB0aGUgbG9vcCBpbmVmZmVjdGl2ZSB3aGVuIGBsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEFgLiBUaGlzIGlzIGEgYnVnIGZpeCwgYXMgaXQgcHJldmVudGVkIGl0ZXJhdGluZyB0aHJvdWdoIG11bHRpcGxlIHBhZ2VzIGFuZCBzZWNyZXRzLlxuXG5Ob3csIHdpdGggdGhlIHBhdGNoLCB0aGUgbG9naWMgaXMgYXMgZm9sbG93czogYHN0YXJ0X2lkeGAgY2FwdHVyZXMgdGhlIGluZGV4ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB1dl9saXN0X3NlY3JldHNgLiBgdXZfbGlzdF9zZWNyZXRzYCB0aGVuIHVwZGF0ZXMgdGhlIGludGVybmFsIGxpc3QgYW5kIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAuICBUaGUgYHdoaWxlYCBjb25kaXRpb24gdGhlbiBjb3JyZWN0bHkgY29tcGFyZXMgdGhlICpvbGQqIGluZGV4IHRvIHRoZSAqbmV3KiBpbmRleC5cblxuTXkgdGhpbmtpbmc6IFRoZSBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiBwb3B1bGF0ZXMgdGhlIGBsaXN0YCB3aXRoIHNlY3JldHMuIElmIGl0cyByZXR1cm4gY29kZSBpcyBgVVZDX1JDX01PUkVfREFUQWAsIHRoZW4gYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpcyBsaWtlbHkgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV4dCBzZWNyZXQgaW5kZXggdG8gYmUgcmVhZC5cblxuUmVnYXJkaW5nIHRoZSByaXNrIG9mIHRoZSBwYXRjaCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgSSdtIGNvbmZpZGVudCBpdCBkb2Vzbid0LiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIHB1cmVseSBsb2dpY2FsIGNvcnJlY3Rpb25zIHRvIHRoZSBpdGVyYXRpb24gYW5kIGxvb3AgY29uZGl0aW9ucy4gVGhlIGludGVudCBpcyB0byBwcmV2ZW50IHJlYWRpbmcgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHZhbGlkIGRhdGEuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGEgYnVnLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbid0IHNlZSBhbnkgY29kZSBpbnRyb2R1Y2VkIGhlcmUgdGhhdCAqY3JlYXRlcyogYSByaXNrIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSBwYXRjaCBjbGVhbnMgdXAgdGhlIGxvZ2ljLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWRkIGZpZWxkcywgb3IgaW50cm9kdWNlIHVzZXItc3BhY2UgY29waWVzLiBTbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgc3RpbGwgd2FudCB0byBkb3VibGUgY2hlY2sgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBhbmQgZG91YmxlIGNoZWNrIG15IHRob3VnaHQgcHJvY2VzcywganVzdCB0byBjb25maXJtIG15IHRoaW5raW5nIHVzaW5nIHNvbWV0aGluZyBsaWtlIGEgZ3JlcHBlciBvciBzaW1pbGFyIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDQ6NTAuOTAxMzkwODMxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcyMDAzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB1dl9zZWNyZXRfbGlzdCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDIzLSAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQyNDpzdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDo1My4xNzM0MDM0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY4MzMzMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB1dl9zZWNyZXRfbGlzdGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgdXZfc2VjcmV0X2xpc3RgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IHJlZmVycyB0by4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHV2X3NlY3JldF9saXN0YC4gTm8gcG9pbnQgaW4ganVtcGluZyB0byBjb25jbHVzaW9ucyBvciBtYWtpbmcgYXNzdW1wdGlvbnMg4oCTIEkgd2FudCB0byBlc3RhYmxpc2ggYSBzb2xpZCBmb3VuZGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZGlnIGRlZXBlci4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBkZWZpbml0aW9uIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjU2LjE0MTczODkzM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NzQ1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHV2X3NlY3JldF9saXN0IFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQxMT1zdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MjMtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDI0OnN0cnVjdCB1dl9zZWNyZXRfbGlzdCB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDI1LVxcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjU2LjE5MjUxODM0M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2NDE3Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHMzOTAgVVYgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgNDI0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCdzIGEgbGlrZWx5IHNwb3QgZm9yIHNvbWUgY29yZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBkZWZpbml0aW9ucyBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJ3MgVVYgaW1wbGVtZW50YXRpb24uIEknbSBndWVzc2luZyBpdCdsbCBiZSBzb21ldGhpbmcgbG93LWxldmVsIC0gbWVtb3J5IGxheW91dCwgcmVnaXN0ZXIgYXNzaWdubWVudHMsIG9yIGludGVycnVwdCBoYW5kbGluZyDigJMgc3R1ZmYgZGlyZWN0bHkgaW5mbHVlbmNpbmcgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgbWFjcm8gZGVmaW5pdGlvbnMsIGVudW1zLCBvciBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgVVYgY2FwYWJpbGl0aWVzIGFyZSBleHBvc2VkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbnRleHQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBudWFuY2VzIG9mIHRoZSBVViBlbnZpcm9ubWVudCBvbiBzMzkwLCBnaXZlbiBpdHMgc3BlY2lhbGl6ZWQgbmF0dXJlLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NTowMC4wODg5Mzg0ODdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdCAqL1xcbiA0MTE6XFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xcbiA0MTI6XFx0XFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjtcXG4gNDEzOlxcdFxcdHU2NCByZXNlcnZlcmQwODtcXG4gNDE0OlxcdFxcdHU4IGlkW1VWX1NFQ1JFVF9JRF9MRU5dO1xcbiA0MTU6XFx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdC8qKlxcbiA0MTg6XFx0ICogdXZfc2VjcmV0X2xpc3QgLSBVViBzZWNyZXQtbWV0YWRhdGEgbGlzdC5cXG4gNDE5OlxcdCAqIEBudW1fc2Vjcl9zdG9yZWQ6IE51bWJlciBvZiBzZWNyZXRzIHN0b3JlZCBpbiB0aGlzIGxpc3QuXFxuIDQyMDpcXHQgKiBAdG90YWxfbnVtX3NlY3JldHM6IE51bWJlciBvZiBzZWNyZXRzIHN0b3JlZCBpbiB0aGUgVVYgZm9yIHRoaXMgZ3Vlc3QuXFxuIDQyMTpcXHQgKiBAbmV4dF9zZWNyZXRfaWR4OiBwb3NpdGl2ZSBudW1iZXIgaWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGUgb3IgemVyby5cXG4gNDIyOlxcdCAqIEBzZWNyZXRzOiBVcCB0byA4NSBVVi1zZWNyZXQgbWV0YWRhdGEgZW50cmllcy5cXG4gNDIzOlxcdCAqL1xcbiA0MjQ6XFx0c3RydWN0IHV2X3NlY3JldF9saXN0IHtcXG4gNDI1OlxcdFxcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XFxuIDQyNjpcXHRcXHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XFxuIDQyNzpcXHRcXHR1MTYgbmV4dF9zZWNyZXRfaWR4O1xcbiA0Mjg6XFx0XFx0dTE2IHJlc2VydmVkXzA2O1xcbiA0Mjk6XFx0XFx0dTY0IHJlc2VydmVkXzA4O1xcbiA0MzA6XFx0XFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07XFxuIDQzMTpcXHR9IF9fcGFja2VkIF9fYWxpZ25lZCg4KTtcXG4gNDMyOlxcdHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCkgPT0gUEFHRV9TSVpFKTtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0c3RhdGljIGlubGluZSBpbnQgX191dl9jYWxsKHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpXFxuIDQzNTpcXHR7XFxuIDQzNjpcXHRcXHRpbnQgY2M7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdGFzbSB2b2xhdGlsZShcXG4gNDM5OlxcdFxcdFxcdFxcXCJcXHQuaW5zblxcdCBycmYsMHhiOWE0MDAwMCwlW3IxXSwlW3IyXSwwLDBcXFxcblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDU6MDAuMDg5MDM0OTM3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2ODg1Mzg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgYW5kIHJlYXNvbmluZy4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gcmVsYXRlZCBidWdzIHdpdGhpbiB0aGUgVWx0cmF2aXNvciBzZWNyZXQgbGlzdGluZyBmdW5jdGlvbmFsaXR5LiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBjb3JyZWN0aW5nIGhvdyB3ZSB0cmF2ZXJzZSBhbmQgYWNjZXNzIHRoZSBzZWNyZXRzIHdpdGhpbiBhIHNwZWNpZmljIHN0cnVjdHVyZS5cblxuVGhlIGZpcnN0IGlzc3VlIHdhcyBhIHNpbXBsZSBib3VuZHMgY2hlY2sgZXJyb3IuIEl0IHdhcyB1c2luZyBgdG90YWxfbnVtX3NlY3JldHNgIHdoZXJlIGl0IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYG51bV9zZWNyX3N0b3JlZGAuIGB0b3RhbF9udW1fc2VjcmV0c2AgcmVwcmVzZW50cyB0aGUgKm92ZXJhbGwqIG51bWJlciBvZiBzZWNyZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ3Vlc3QsIHdoaWxlIGBudW1fc2Vjcl9zdG9yZWRgIGlzIHNwZWNpZmljIHRvICp0aGlzKiBzZWNyZXQgbGlzdCAoYW5kIGNhcHBlZCBhdCA4NSkuIElmIGB0b3RhbF9udW1fc2VjcmV0c2Agd2FzIGdyZWF0ZXIgdGhhbiA4NSwgdGhpcyBjYXVzZWQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5OyBpZiBpdCB3YXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDg1IGJ1dCBzdGlsbCBsYXJnZXIgdGhhbiBgbnVtX3NlY3Jfc3RvcmVkYCwgd2UnZCBiZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBhcnJheS4gVGhpcyBpcyBhIGNsZWFyIGJ1ZywgYW5kIHRoZSBwYXRjaCBmaXhlcyBpdCBieSBtYWtpbmcgdGhlIGNvcnJlY3QgY29tcGFyaXNvbi5cblxuVGhlIHNlY29uZCBidWcgd2FzIGluIHRoZSBsb2dpYyBvZiBgdXZfZmluZF9zZWNyZXRgLiBUaGUgbG9vcCB3YXMgdGVybWluYXRpbmcgcHJlbWF0dXJlbHksIGFuZCBub3cgaXQncyBjb3JyZWN0bHkgdXBkYXRlZCB0byBwcm9wZXJseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cy5cblxuSW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggKmZpeGVzKiB0aGVzZSBpc3N1ZXMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgcGF0aHdheXMgdGhhdCBjb3VsZCBsZWFkIHRvIG5ldyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCBpcyBwdXJlbHkgYSBjb3JyZWN0aW9uIG9mIGV4aXN0aW5nIGFjY2VzcyBwYXR0ZXJucyBhbmQgYm91bmRzLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgbm8gcmVhbCBuZWVkIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXMgY2hhbmdlLiBUaGUgcmlzayB0aGF0IHdvdWxkIGhhdmUgYmVlbiBpZGVudGlmaWVkIGJ5IEtNU0FOIHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGV4aXN0aW5nIGNvZGUsIGFuZCB0aGlzIHBhdGNoIGp1c3QgY2xlYW5zIGl0IHVwLiBBIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGFzIHRoaXMgaXMgYSBidWcgZml4LiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODYyLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ1OjA4Ljc3NzU3NzIzOFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGJ1Z3MgaW4gdGhlIFVsdHJhdmlzb3Igc2VjcmV0IGxpc3RpbmcgbG9naWM6XFxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgICh0b3RhbCBzZWNyZXRzIGluIHRoZSBndWVzdCkgdG8gYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAgKHNlY3JldHMgc3RvcmVkIGluIHRoZSBjdXJyZW50IHBhZ2UpLiBUaGlzIHByZXZlbnRzIHJlYWRpbmcgcGFzdCB0aGUgdmFsaWQgZW50cmllcyBpbiB0aGUgYGxpc3QtXFx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG4yLiBJdCBmaXhlcyB0aGUgbG9vcCBjb25kaXRpb24gaW4gYHV2X2ZpbmRfc2VjcmV0YCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIG11bHRpcGxlIHBhZ2VzIG9mIHNlY3JldHMgYnkgdXBkYXRpbmcgYHN0YXJ0X2lkeGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCByYXRoZXIgdGhhbiB0aGUgZW5kLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCAodG90YWwgc2VjcmV0cyBpbiB0aGUgZ3Vlc3QpIHRvIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuMi4gSXQgZml4ZXMgdGhlIGxvb3AgY29uZGl0aW9uIGluIGB1dl9maW5kX3NlY3JldGAgdG8gY29ycmVjdGx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzIGJ5IHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgcmF0aGVyIHRoYW4gdGhlIGVuZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtlnmm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 16:41:06 +0000 UTC FinishedAt: 2026-08-11 16:45:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY_UV", "S390_UV_UAPI", "PKEY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "d58772d8520c7ef247c4b95c9bd76d3a25da9ff5", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PKEY_UV", "S390_UV_UAPI", "PKEY" ], "series_id": "3dc16253-adb6-4085-afef-d14301a4a113" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "uv_find_secret" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BLRVlfVVYmIzM0OywKICAgICYjMzQ7UzM5MF9VVl9VQVBJJiMzNDssCiAgICAmIzM0O1BLRVkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgKHRvdGFsIHNlY3JldHMgaW4gdGhlIGd1ZXN0KSB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEl0IGZpeGVzIHRoZSBsb29wIGNvbmRpdGlvbiBpbiBgdXZfZmluZF9zZWNyZXRgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cyBieSB1cGRhdGluZyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIHJhdGhlciB0aGFuIHRoZSBlbmQuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgYmVmb3JlIHRoZSBsb29wIGNvbmRpdGlvbiBjaGVjay4gSXQgYWxzbyBmaXhlcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYnkgdXNpbmcgYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCBpbnN0ZWFkIG9mIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXG5pbmRleCBhMjg0Zjk4ZDk3MTY4Li5lNzBhY2FkMDljZDVmIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbkBAIC03NjAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4ge1xuIFx0dTE2IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7XG4gXHRcdFx0KnNlY3JldCA9IGxpc3QtXHUwMDNlc2VjcmV0c1tpXS5oZHI7XG4gXHRcdFx0cmV0dXJuIDA7XG5AQCAtNzgxLDExICYjNDM7NzgxLDE0IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbiBcdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4ge1xuLVx0dTE2IHN0YXJ0X2lkeCA9IDA7XG4mIzQzO1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDA7XG4mIzQzO1xuIFx0ZG8ge1xuJiM0MztcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICYjNDM7Nzk5LDYgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbiBcdFx0cmV0ID0gZmluZF9zZWNyZXRfaW5fcGFnZShzZWNyZXRfaWQsIGxpc3QsIHNlY3JldCk7XG4gXHRcdGlmIChyZXQgPT0gMClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuLVx0XHRzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeDtcbiBcdH0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSBcdTAwMjZcdTAwMjYgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCk7XG4gXG4gXHRyZXR1cm4gLUVOT0VOVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEtFWV9VViYjMzQ7LAogICAgJiMzNDtTMzkwX1VWX1VBUEkmIzM0OywKICAgICYjMzQ7UEtFWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uIHdoZXJlIHRoZSBsb29wIHRvIGl0ZXJhdGUgdGhyb3VnaCBwYWdlcyBvZiBzZWNyZXRzIHdvdWxkIHRlcm1pbmF0ZSBwcmVtYXR1cmVseSBhZnRlciB0aGUgZmlyc3QgaXRlcmF0aW9uIGJlY2F1c2UgYHN0YXJ0X2lkeGAgd2FzIHVwZGF0ZWQgdG8gYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBiZWZvcmUgdGhlIGxvb3AgY29uZGl0aW9uIGNoZWNrLiBJdCBhbHNvIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBieSB1c2luZyBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIHdoZW4gaXRlcmF0aW5nIG92ZXIgc2VjcmV0cyBpbiBhIHNpbmdsZSBwYWdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBzMzkweCBVbHRyYXZpc29yIHNlY3JldCByZXRyaWV2YWwgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGAvZGV2L3BrZXlgIGlvY3RsIGludGVyZmFjZSB3aGVuIHRoZSBgUEtFWV9VVmAgbW9kdWxlIGlzIGxvYWRlZC4gRnV6emluZyB0aGlzIGlzIHZhbHVhYmxlIHRvIGVuc3VyZSB0aGUgc2VjcmV0IHJldHJpZXZhbCBsb2dpYyBoYW5kbGVzIG11bHRpLXBhZ2UgcmVzcG9uc2VzIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDY1MTBkOWQ0OTIxNjdhYzBlMjY0OTI5ZTNkMDExMGExNDE0YzhhMDIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAxNjo0MjozMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdXYuYyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwppbmRleCBhMjg0Zjk4ZDk3MTY4Li5lNzBhY2FkMDljZDVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2tlcm5lbC91di5jCkBAIC03NjAsNyAmIzQzOzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiB7CiAJdTE2IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7dG90YWxfbnVtX3NlY3JldHM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWQ7IGkmIzQzOyYjNDM7KSB7CiAJCWlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LSZndDtzZWNyZXRzW2ldLmlkLCBVVl9TRUNSRVRfSURfTEVOKSA9PSAwKSB7CiAJCQkqc2VjcmV0ID0gbGlzdC0mZ3Q7c2VjcmV0c1tpXS5oZHI7CiAJCQlyZXR1cm4gMDsKQEAgLTc4MSwxMSAmIzQzOzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsCiAJCSAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KQogewotCXUxNiBzdGFydF9pZHggPSAwOwomIzQzOwl1MTYgc3RhcnRfaWR4OwogCXUxNiBsaXN0X3JjOwogCWludCByZXQ7CiAKJiM0MzsJbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4ID0gMDsKJiM0MzsKIAlkbyB7CiYjNDM7CQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJCXV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsICZhbXA7bGlzdF9yYywgTlVMTCk7CiAJCWlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCAmYW1wOyZhbXA7IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkgewogCQkJaWYgKGxpc3RfcmMgPT0gVVZDX1JDX0lOVl9DTUQpCkBAIC03OTYsNyAmIzQzOzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sCiAJCXJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpOwogCQlpZiAocmV0ID09IDApCiAJCQlyZXR1cm4gcmV0OwotCQlzdGFydF9pZHggPSBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHg7CiAJfSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBICZhbXA7JmFtcDsgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4KTsKIAogCXJldHVybiAtRU5PRU5UOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzgxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIHRvIHMzOTB4IFVWIENvZGUqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0b3VjaGVzIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLCBzcGVjaWZpY2FsbHkgYmVjYXVzZSB0aGUgY2hhbmdlcyBhcmUgaW4gdGhlIGBmaW5kX3NlY3JldF9pbl9wYWdlYCBhbmQgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbnMuIEluIGBmaW5kX3NlY3JldF9pbl9wYWdlYCwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZW5hbWVkIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAuIEEgc2ltcGxlIG5hbWUgY2hhbmdlOyBub3RoaW5nIHRvbyBleGNpdGluZyB0aGVyZS4gSG93ZXZlciwgdGhlIGNoYW5nZXMgdG8gYHV2X2ZpbmRfc2VjcmV0YCBhcmUgYSBiaXQgbW9yZSBpbnRlcmVzdGluZy4gV2UgaGF2ZSBhbiBpbml0aWFsaXphdGlvbiBvZiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4ID0gMDtgIGFuZCwgY3J1Y2lhbGx5LCBgc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4O2AgbW92ZWQgdG8gdGhlICpiZWdpbm5pbmcqIG9mIHRoZSBsb29wLCBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIHNhbWUgbGluZSBmcm9tIHRoZSBlbmQuIFRoaXMgY2xlYXJseSBtb2RpZmllcyB0aGUgc2VjcmV0IHNlYXJjaGluZyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaXMgdGhpcyBjb2RlIGV2ZW4gKnJlYWNoYWJsZSogaW4gYSB0eXBpY2FsIHNldHVwPyBUaGlzIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZpbGUgaXMgY2xlYXJseSByZWxhdGVkIHRvIFVsdHJhdmlzb3IsIG9yIFVWLCBvbiBzMzkweC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiB0aGlzIGJlIGZ1enplZD8gV2VsbCwgc3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzMzkweCwgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBDYW4gSSB0ZXN0IHRoaXMgc3BlY2lmaWMgY29kZSBjaGFuZ2U/IFFFTVUgaXMgcGVyZmVjdGx5IGNhcGFibGUgb2YgZW11bGF0aW5nIHMzOTB4LiBIb3dldmVyLCB0aGUgY2F0Y2ggaXMgVVYgc3VwcG9ydCBpbiBRRU1VLiBMdWNraWx5LCBRRU1VICpkb2VzKiBoYXZlIHNvbWUgczM5MHggcHJvdGVjdGVkIHZpcnR1YWxpemF0aW9uIChQVikgc3VwcG9ydCwgYW5kIFBWIHVzZXMgVVYuIFNvLCBpdCYjMzk7cyB2ZXJ5IGxpa2VseSB0aGF0IEkgY2FuIGdldCBhIHJlcHJvZHVjaWJsZSB0ZXN0IGNhc2UuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIGB1dl9maW5kX3NlY3JldGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUmIzM5O3MgY29udGV4dCBhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2ZpbmRfc2VjcmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxMz1zdGF0aWMgaW5saW5lIGludCB1dl9yZW1vdmVfc2hhcmVkKHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MTg6aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYxOS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzcyLS8qKlxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc0LSAqIEBzZWNyZXRfaWQ6IHNlYXJjaCBwYXR0ZXJuLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzgwOmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzgxLVx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODA2OkVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDctXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjA9TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3MzOTAgcHJvdGVjdGVkIGtleSBVViBoYW5kbGVyXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMi0vKlxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0LSAqL1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTktXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMDA6XHRyYyA9IHV2X2ZpbmRfc2VjcmV0KHNlY3JldF9pZCwgdXZfbGlzdCwgc2VjcmV0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cdG11dGV4X3VubG9jayhcdTAwMjZ1dl9saXN0X211dGV4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzg4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgdXZfZmluZF9zZWNyZXRgIENhbGwqKgoKT2theSwgc28gYHV2X2ZpbmRfc2VjcmV0YCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24sIGFuZCB0aGUgY2FsbCBvcmlnaW5hdGVzIGZyb20gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhhdCBmaWxlLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBuYXJyb3dzIGRvd24gdGhlIHBvdGVudGlhbCBhcmVhcyB3aXRoaW4gYHBrZXlfdXYuY2AgSSBuZWVkIHRvIGZvY3VzIG9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgc2VjcmV0cyBhcmUgYmVpbmcgZmV0Y2hlZCBieSBjaGVja2luZyBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRoaXMgd2lsbCBiZSBzdHJhaWdodGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X3NlY3JldF9tZXRhZGF0YSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAva2VybmVsL3V2LmM9ODA2PUVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODEyLSAqIEBidWZfc2l6ZTogU2l6ZSBvZiB0aGUgYnVmZmVyLiBUaGUgY29ycmVjdCBidWZmZXIgc2l6ZSBpcyByZXBvcnRlZCBhcyBwYXJ0IG9mXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODEzOiAqIHRoZSByZXN1bHQgZnJvbSBgdXZfZ2V0X3NlY3JldF9tZXRhZGF0YWAuXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODE0LSAqXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9ODM9c3RhdGljIGJvb2wgaXNfdXZfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5dHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjkzOnN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05NC1cdFx0XHQgICAgICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTA2PXN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTI6XHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEoc2VjcmV0X2lkLCBcdTAwMjZzZWNyZXRfbWV0YV9kYXRhKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMy1cdGlmIChyYylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNDctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNDg6XHRyYyA9IGdldF9zZWNyZXRfbWV0YWRhdGEodC1cdTAwM2VzZWNyZXRfaWQsIFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjQ5LVx0aWYgKHJjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGggdGhlIGNvZGViYXNlOgoKKipUcmFjaW5nIERhdGEgRmxvdzogVW5jb3ZlcmluZyBEZXBlbmRlbmNpZXMqKgoKUmlnaHQsIHNvIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0JiMzOTtzIG9idmlvdXNseSBwdWxsaW5nIHNvbWUgY3JpdGljYWwgaW5mb3JtYXRpb24sIGxpa2VseSBhYm91dCBzZWNyZXRzLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYm90aCBgcmV0cmlldmVfc2VjcmV0YCBhbmQgYHV2X3ZlcmlmeWtleWAuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBjYWxsIHNpdGVzIG9mICp0aG9zZSogdHdvIGZ1bmN0aW9ucy4gS25vd2luZyB3aGVyZSBgcmV0cmlldmVfc2VjcmV0YCBhbmQgYHV2X3ZlcmlmeWtleWAgYXJlIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0cyBvZiBgcmV0cmlldmVfc2VjcmV0YCBhbmQgYHV2X3ZlcmlmeWtleWAgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBgZ2V0X3NlY3JldF9tZXRhZGF0YWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmV0cmlldmVfc2VjcmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTYyMC1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyICpzZWNyZXQpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjIxOmludCB1dl9yZXRyaWV2ZV9zZWNyZXQodTE2IHNlY3JldF9pZHgsIHU4ICpidWYsIHNpemVfdCBidWZfc2l6ZSk7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjItXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTgwNj1FWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwOC0vKipcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MDk6ICogdXZfcmV0cmlldmVfc2VjcmV0KCkgLSBnZXQgdGhlIHNlY3JldCB2YWx1ZSBmb3IgdGhlIHNlY3JldCBpbmRleC5cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTAtICogQHNlY3JldF9pZHg6IFNlY3JldCBpbmRleCBmb3Igd2hpY2ggdGhlIHNlY3JldCBzaG91bGQgYmUgcmV0cmlldmVkLlxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MjUtICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODI2OmludCB1dl9yZXRyaWV2ZV9zZWNyZXQodTE2IHNlY3JldF9pZHgsIHU4ICpidWYsIHNpemVfdCBidWZfc2l6ZSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04Mjcte1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04NTItfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjg1MzpFWFBPUlRfU1lNQk9MX0dQTCh1dl9yZXRyaWV2ZV9zZWNyZXQpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTA1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTA2OnN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwNy1cdFx0XHQgICB1MTYgKnNlY3JldF90eXBlLCB1OCAqYnVmLCB1MzIgKmJ1Zmxlbilcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTk6XHRyYyA9IHV2X3JldHJpZXZlX3NlY3JldChzZWNyZXRfbWV0YV9kYXRhLmluZGV4LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTIwLVx0XHRcdFx0YnVmLCBzZWNyZXRfbWV0YV9kYXRhLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMTEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTI6XHRyYyA9IHJldHJpZXZlX3NlY3JldCh0LVx1MDAzZXNlY3JldF9pZCwgXHUwMDI2c2VjcmV0X3R5cGUsIHByb3RrZXksIHByb3RrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjEzLVx0aWYgKHJjKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTQ6XHRcdFBLRVlfREJGX0VSUihcJiMzNDslcyByZXRyaWV2ZV9zZWNyZXQoKSBmYWlsZWQgd2l0aCAlZFxcblwmIzM0OyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIxNS1cdFx0XHQgICAgIF9fZnVuY19fLCByYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY2OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYHJldHJpZXZlX3NlY3JldGAgQ2FsbCBDaGFpbioqCgpSaWdodCwgYHJldHJpZXZlX3NlY3JldGAgaXMgYmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIGB1dl9rZXkycHJvdGtleWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJIG5lZWQgdG8gc2VlICp3aGVyZSogYHV2X2tleTJwcm90a2V5YCBhbmQgYHV2X3ZlcmlmeWtleWAgYXJlICp0aGVtc2VsdmVzKiBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHdoYXQgYHJldHJpZXZlX3NlY3JldGAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkIGZvciBhbmQgc2hlZCBsaWdodCBvbiBpdHMgY3JpdGljYWxpdHkuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIGlkZW50aWZ5IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4gQSBxdWljayBzZWFyY2ggZm9yIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgdXNhZ2VzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZXRyaWV2ZV9zZWNyZXRgIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2tleTJwcm90a2V5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTEzMD1zdGF0aWMgaW50IHV2X2dldF9zaXplX2FuZF90eXBlKHUxNiBzZWNyZXRfdHlwZSwgdTMyICpwa2V5c2l6ZSwgdTMyICpwa2V5dHlwZSlcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xODktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxOTA6c3RhdGljIGludCB1dl9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICpfYXBxbnMgX19hbHdheXNfdW51c2VkLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTkxLVx0XHRcdCAgc2l6ZV90IF9ucl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc2LVx0LmlzX3N1cHBvcnRlZF9rZXl0eXBlXHQgPSBpc191dl9rZXl0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjc3Olx0LmtleV90b19wcm90a2V5XHRcdCA9IHV2X2tleTJwcm90a2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjc4LVx0LnZlcmlmeV9rZXlcdFx0ID0gdXZfdmVyaWZ5a2V5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjA4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuCgoqKlRyYWNpbmcgdGhlIFBhdGggdG8gdGhlIFVzZXIgSW50ZXJmYWNlIG9mIHRoZSBzMzkwIFBLZXkgQVBJKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHMzOTAmIzM5O3MgUEtleSBmdW5jdGlvbmFsaXR5IGludGVyYWN0cyB3aXRoIHVzZXJzcGFjZS4gSSBzZWUgdGhlc2UgY29tcG9uZW50czogd2UgaGF2ZSBgdXZfaGFuZGxlcmAsIHdoaWNoIGlzIHBhcnQgb2YgYSBgcGtleV9oYW5kbGVyYC4gVGhlIGBwa2V5X2hhbmRsZXJgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBgZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jYCBmaWxlLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMsICYjMzQ7Q2FuIHVzZXJzcGFjZSBldmVuIHJlYWNoIHRoaXMgYHBrZXlfYXBpYD8mIzM0OyBBbmQsIHRoYW5rZnVsbHksIHRoZSBhbnN3ZXIgaXMgeWVzLCBiZWNhdXNlIHRoZXJlJiMzOTtzIGFuIGlvY3RsIGludGVyZmFjZSBleHBvc2VkIHRocm91Z2ggYC9kZXYvcGtleWAuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZpbGUsIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlvY3RsIHdvcmtzIGFuZCBob3cgaXQgdHJhbnNsYXRlcyB0byB0aGUgdW5kZXJseWluZyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGtleV9oYW5kbGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNT1zdGF0aWMgaW50IGtleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVx0LyogdHJ5IHRoZSBkaXJlY3Qgd2F5ICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzM6XHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzQtXHRcdFx0XHRcdCBrZXksIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzktXHRpZiAocmMgPT0gLUVOT0RFVikge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjQwOlx0XHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDEtXHRcdFx0XHRcdFx0XHQgIGtleSwga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz01NT1pbnQgcGtleV9rZXkycHJvdGtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cdGlmIChyYyA9PSAtRU5PREVWKSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjM6XHRcdHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXMoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02NC1cdFx0cmMgPSBrZXkycHJvdGtleShOVUxMLCAwLCBrZXksIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTA0LVx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoxMDU6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KFx1MDAyNmFwcW4sIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTA2LVx0XHRcdFx0ICBrZ3Mua2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0xMTY9c3RhdGljIGludCBwa2V5X2lvY3RsX2NscjJzZWNrKHN0cnVjdCBwa2V5X2NscjJzZWNrIF9fdXNlciAqdWNzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXHRrZXlidWZsZW4gPSBzaXplb2Yoa2NzLnNlY2tleS5zZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjEyOTpcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXHUwMDI2YXBxbiwgMSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMzAtXHRcdFx0XHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTE0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2VjMnByb3RrKHN0cnVjdCBwa2V5X3NlYzJwcm90ayBfX3VzZXIgKnVzcClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTUzLVx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcdHJjID0gcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KFx1MDAyNmFwcW4sIDEsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVx0XHRcdFx0XHQga3NwLnNlY2tleS5zZWNrZXksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTIxNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZmluZGNhcmQoc3RydWN0IHBrZXlfZmluZGNhcmQgX191c2VyICp1ZmMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyMzA6XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGtmYy5zZWNrZXkuc2Vja2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cdFx0XHRcdFx0c2l6ZW9mKGtmYy5zZWNrZXkuc2Vja2V5KSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjM0LVx0aWYgKHJjID09IC1FTk9ERVYpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1Olx0XHRyYyA9IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KGtmYy5zZWNrZXkuc2Vja2V5LFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cdFx0XHRcdFx0XHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNTM9c3RhdGljIGludCBwa2V5X2lvY3RsX3NrZXkycGtleShzdHJ1Y3QgcGtleV9za2V5MnBrZXkgX191c2VyICp1c3ApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI2MS1cdGtzcC5wcm90a2V5LmxlbiA9IHNpemVvZihrc3AucHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShOVUxMLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI2My1cdFx0XHRcdFx0IGtzcC5zZWNrZXkuc2Vja2V5LFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTI4Ni1cdGt2ay5kb21haW4gPSAweEZGRkY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6Mjg3Olx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShrdmsuc2Vja2V5LnNlY2tleSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXHRcdFx0XHQgICAgIHNpemVvZihrdmsuc2Vja2V5LnNlY2tleSksXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxMy1cdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMTQ6XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KE5VTEwsIDAsIGtncC5rZXl0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cdFx0XHRcdCAgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KHRtcGJ1Ziwgc2l6ZW9mKCp0KSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zNTctXHRcdFx0XHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0zOTA9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2syKHN0cnVjdCBwa2V5X2dlbnNlY2syIF9fdXNlciAqdWdzKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00MTQtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShhcHFucywga2dzLmFwcW5fZW50cmllcyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00MTYtXHRcdFx0XHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz00NDI9c3RhdGljIGludCBwa2V5X2lvY3RsX2NscjJzZWNrMihzdHJ1Y3QgcGtleV9jbHIyc2VjazIgX191c2VyICp1Y3MpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQ3MC1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XHRyYyA9IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGFwcW5zLCBrY3MuYXBxbl9lbnRyaWVzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQ3Mi1cdFx0XHRcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTUwMz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5a2V5MihzdHJ1Y3QgcGtleV92ZXJpZnlrZXkyIF9fdXNlciAqdXZrKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NTE1Olx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTUxNi1cdFx0XHRcdCAgICAgXHUwMDI2a3ZrLmNhcmRuciwgXHUwMDI2a3ZrLmRvbWFpbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTc4LVx0fVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjU3OTpcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2tleSwga2FrLmtleWxlbiwga2FrLmZsYWdzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cdFx0XHRcdFx0YXBxbnMsIFx1MDAyNm5yX2FwcW5zLCAwKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NjA4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrdChzdHJ1Y3QgcGtleV9hcHFuczRrZXl0eXBlIF9fdXNlciAqdWF0KVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjItXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUoa2F0LnR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjI0LVx0XHRcdFx0XHQgICAga2F0LmN1cl9ta3ZwLCBrYXQuYWx0X21rdnAsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNjppbnQgcGtleV9oYW5kbGVyX3JlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mzg6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTc4LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy04MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6ODE6aW50IHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTkzLX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTk1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEwMS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEwMy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTExNy19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjExODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChlbnVtIHBrZXlfa2V5X3R5cGUga3QpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEyMS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEyMy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTEzNy19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEzODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNDA6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE0MS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE0My1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1NS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE1NjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9wdXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE1ODppbnQgcGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE1OS1cdFx0XHRcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjIte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjQtXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNjUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE2NjpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY3LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNla2V5X3RvX3Byb3RrZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3MS1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTczLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc1LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTc2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2tleV90b19wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTgzLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTg1LVx0XHRcdFx0XHQgc2l6ZV90IG5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTg5LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaCwgKmh0bXBbMTBdO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xOTEtXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIxNS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIxNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjE4OmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXHRcdFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyMi17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyNC1cdGludCByYyA9IC1FTk9ERVY7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIyNS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjI2Olx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjctXHRpZiAoaCBcdTAwMjZcdTAwMjYgaC1cdTAwM2VnZW5fa2V5KSB7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzEtXHR9XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzMy1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzNS19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9nZW5fa2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMzg6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTIzOS1cdFx0XHQgICAgdTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ0LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ1Olx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ2LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDg6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoa2V5c3VidHlwZSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWNscl90b19rZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjU0Olx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU1LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjU4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2Nscl90b19rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjYxLVx0XHRcdCAgICB1MTYgKmNhcmQsIHUxNiAqZG9tLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjY1Olx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2OS1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZXZlcmlmeV9rZXkpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI3Mi1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjczOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc2LX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzgtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3OTppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXHRcdFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjgyLXtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg0LVx0aW50IHJjID0gLUVOT0RFVjtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyODY6XHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4Ny1cdGlmIChoIFx1MDAyNlx1MDAyNiBoLVx1MDAzZWFwcW5zX2Zvcl9rZXkpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODktXHRcdFx0XHQgICAgICB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTEtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yOTMtfVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjk2OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUoZW51bSBwa2V5X2tleV90eXBlIGtleXN1YnR5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5Ny1cdFx0XHRcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDAte1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDItXHRpbnQgcmMgPSAtRU5PREVWO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDMtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMwNDpcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzA1LVx0aWYgKGggXHUwMDI2XHUwMDI2IGgtXHUwMDNlYXBxbnNfZm9yX2tleXR5cGUpIHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwOS1cdH1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlx0cGtleV9oYW5kbGVyX3B1dChoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzExLVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzEzLX1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE0OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTY6dm9pZCBwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxNy17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE5Olx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwa2V5X2hhbmRsZXJfbW9kdWxlc1tdID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzQtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGtleV9oYW5kbGVyX21vZHVsZXMpOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMzY6XHRcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNy1cdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzQxLVx0XHRcdGlmIChoLVx1MDAzZW1vZHVsZSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlx0XHRcdCAgICAhc3RyY21wKGgtXHUwMDNlbW9kdWxlLVx1MDAzZW5hbWUsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKSkge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXHRcdFx0XHRmb3VuZCA9IHRydWU7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXHRcdGlmICghZm91bmQpIHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5Olx0XHRcdHByX2RlYnVnKFwmIzM0O3JlcXVlc3RfbW9kdWxlKCVzKVxcblwmIzM0OywgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozNTA6XHRcdFx0cmVxdWVzdF9tb2R1bGUocGtleV9oYW5kbGVyX21vZHVsZXNbaV0pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXHRcdH1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM1NC19XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1NTpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXMpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaD0xNDU9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBrZXlfYXR0cl9ncm91cHNbXTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE1MC1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MTUxOnN0cnVjdCBwa2V5X2hhbmRsZXIge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXHRzdHJ1Y3QgbW9kdWxlICptb2R1bGU7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5MzppbnQgcGtleV9oYW5kbGVyX3JlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTQ6aW50IHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTktXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDE6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAyOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDQ6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDUtXHRcdFx0XHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjA3LVx0XHRcdFx0dTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwODppbnQgcGtleV9oYW5kbGVyX3Nsb3dwYXRoX2tleV90b19wcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDktXHRcdFx0XHRcdCBzaXplX3QgbnJfYXBxbnMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXHRcdFx0XHRcdCB1MzIgKnByb3RrZXl0eXBlLCB1MzIgeGZsYWdzKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTQtXHRcdFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cdFx0XHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIxNzppbnQgcGtleV9oYW5kbGVyX2Nscl90b19rZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE4LVx0XHRcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjItXHRcdFx0ICAgIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMjM6aW50IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cdFx0XHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNi1cdFx0XHQgICAgdTMyIHhmbGFncyk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjgtXHRcdFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMjktXHRcdFx0ICAgICAgIHUzMiB4ZmxhZ3MpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzMS1cdFx0XHRcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzctICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIzODp2b2lkIHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXModm9pZCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NTU3PXN0YXRpYyBpbnQgY2NhX3Nsb3dwYXRoX2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy01OTUtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM6NTk2OnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGNjYV9oYW5kbGVyID0ge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cdC5tb2R1bGVcdFx0XHQgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjE1LVx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jOjYxNjpcdHJldHVybiBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2Y2NhX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYxNy19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MjQtXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jOjYyNTpcdHBrZXlfaGFuZGxlcl91bnJlZ2lzdGVyKFx1MDAyNmNjYV9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MjYtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0Mi1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQ0LVx0Lm1vZHVsZVx0XHRcdCA9IFRISVNfTU9EVUxFLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTYwPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfZXAxMV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgZXAxMSBzdHVmZiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYzo1NjM6XHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFx1MDAyNmVwMTFfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU2NC19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYz01Njk9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfZXAxMV9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYzo1NzI6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZlcDExX2hhbmRsZXIpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzMtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQzNT1zdGF0aWMgaW50IHBrZXlfcGNrbW9fdmVyaWZ5a2V5KGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM6NDQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHBja21vX2hhbmRsZXIgPSB7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NDQtXHQubW9kdWxlXHRcdCAgICAgID0gVEhJU19NT0RVTEUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM9NDU2PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfcGNrbW9faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cdC8qIHJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciBmb3IgYWxsIHRoZSBwY2ttbyBzdHVmZiAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM6NDcwOlx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcdTAwMjZwY2ttb19oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ3MS19XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM9NDc2PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X3Bja21vX2V4aXQodm9pZClcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmM6NDc5Olx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXHUwMDI2cGNrbW9faGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00ODAtfVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3LS8qXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzoxODogKiBXcmFwcGVyIGFyb3VuZCBwa2V5X2hhbmRsZXJfZ2VuX2tleSgpIHdoaWNoIGRlYWxzIHdpdGggdGhlXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIxLSAqL1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjMtXHRcdFx0XHQgICAgdTMyIGtleWJpdHNpemUsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0yNy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjI4Olx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjktXHRcdFx0XHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzItXHRpZiAocmMgPT0gLUVOT0RFVikge1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XHRcdHBrZXlfaGFuZGxlcl9yZXF1ZXN0X21vZHVsZXMoKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0Olx0XHRyYyA9IHBrZXlfaGFuZGxlcl9nZW5fa2V5KE5VTEwsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cdFx0XHRcdFx0ICBrZXl0eXBlLCBrZXlzdWJ0eXBlLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQ5PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBib29sIGlzX3h0cywgY2hhciAqYnVmLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVx0cHJvdGtleS5sZW4gPSBzaXplb2YocHJvdGtleS5wcm90a2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjY4Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy02OS1cdFx0XHRcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXHUwMDI2cHJvdGtleS5sZW4sXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtODEtXHRcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo4MjpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04My1cdFx0XHRcdFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcdTAwMjZwcm90a2V5Lmxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xMDY9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2Flc194dHNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTMyOlx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXHRcdFx0XHQgICAgICB0LVx1MDAzZXByb3RrZXksIFx1MDAyNnByb3RsZW4sIFx1MDAyNnByb3R0eXBlKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTczLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzUtXHRcdFx0XHQgICAgICB0LVx1MDAzZXByb3RrZXksIFx1MDAyNnByb3RsZW4sIFx1MDAyNnByb3R0eXBlKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0zMDg9c3RhdGljIHNzaXplX3QgcGtleV9jY2FkYXRhX2Flc19hdHRyX3JlYWQodTMyIGtleXR5cGUsIGJvb2wgaXNfeHRzLCBjaGFyICpidWYsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIxLVx0YnVmbGVuID0gc2l6ZW9mKHNlY2tleS1cdTAwM2VzZWNrZXkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzIyOlx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVx0XHRcdFx0ICAgICAgc2Vja2V5LVx1MDAzZXNlY2tleSwgXHUwMDI2YnVmbGVuLCBOVUxMKTtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zMjktXHRcdGJ1ZmxlbiA9IHNpemVvZihzZWNrZXktXHUwMDNlc2Vja2V5KTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcdFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX0NDQV9EQVRBLCAwLCAwLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVx0XHRcdFx0XHQgICAgICBzZWNrZXktXHUwMDNlc2Vja2V5LCBcdTAwMjZidWZsZW4sIE5VTEwpO1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQzMy1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQzNS1cdFx0XHRcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0Mi1cdFx0YnVmICYjNDM7PSBDQ0FDSVBIRVJUT0tFTlNJWkU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo0NDM6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQ0LVx0XHRcdHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTQ4LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5Olx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkocGtleV9hZXNfYml0c2l6ZV90b19rZXl0eXBlKGtleWJpdHMpLFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTUwLVx0XHRcdFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1Ny1cdFx0YnVmICYjNDM7PSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYzo1NTg6XHRcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU5LVx0XHRcdHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzEtXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3My1cdC5tb2R1bGVcdFx0XHQgPSBUSElTX01PRFVMRSxcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yODQ9c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjk4Olx0cmMgPSBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoXHUwMDI2dXZfaGFuZGxlcik7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yOTktXHRpZiAocmMpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MzA4PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X3V2X2V4aXQodm9pZClcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMwOS17XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcdTAwMjZ1dl9oYW5kbGVyKTtcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cdG11dGV4X2xvY2soXHUwMDI2dXZfbGlzdF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDAyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlLCBhcyBJIHVuZGVyc3RhbmQgaXQ6CgoqKlJlYWNoaW5nIGB1dl9maW5kX3NlY3JldGAgaW4gUUVNVSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBwa2V5X3V2X2luaXRgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCBiZWNhdXNlIGl0IHJlZ2lzdGVycyBgdXZfaGFuZGxlcmAuIFRoYXQgYHV2X2hhbmRsZXJgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHN0cnVjdHVyZSwgbGlua2luZyB0aGUga2V5LXRvLXByb3RvY29sIGtleSBjb252ZXJzaW9uIGFuZCBrZXkgdmVyaWZpY2F0aW9uLiBOb3csIGBrZXlfdG9fcHJvdGtleWAgcG9pbnRzIHRvIGB1dl9rZXkycHJvdGtleWAsIGFuZCBgdmVyaWZ5X2tleWAgcG9pbnRzIHRvIGB1dl92ZXJpZnlrZXlgLiBUaGVzZSB0d28gZnVuY3Rpb25zLCBgdXZfa2V5MnByb3RrZXlgIGFuZCBgdXZfdmVyaWZ5a2V5YCwgYXJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhcyB0aGV5IGJvdGggY2FsbCBgZ2V0X3NlY3JldF9tZXRhZGF0YWAuIEFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYGdldF9zZWNyZXRfbWV0YWRhdGFgIGluIHR1cm4gY2FsbHMgYHV2X2ZpbmRfc2VjcmV0YC4KCkFoLCByaWdodCwgdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhlIHBhdGNoIG1vZGlmaWVkLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYHV2X2ZpbmRfc2VjcmV0YCBhY3R1YWxseSAqcmVhY2hhYmxlKiBkdXJpbmcgUUVNVSYjMzk7cyBvcGVyYXRpb24/IEl0JiMzOTtzIGFsbCBhYm91dCBjb250cm9sIGZsb3cuIFdhaXQgYSBtaW51dGUuLi4gYHV2X2ZpbmRfc2VjcmV0YCByZWxpZXMgb24gYHV2X2xpc3Rfc2VjcmV0c2AuIFRoYXQgc3VnZ2VzdHMgYSBwYXRoIHRvIGV4cGxvcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGB1dl9saXN0X3NlY3JldHNgIGRvZXMuIElmIEkgY2FuIGZpZ3VyZSBvdXQgaG93IGB1dl9saXN0X3NlY3JldHNgIGdldHMgY2FsbGVkLCBJJiMzOTtsbCBrbm93IGlmIGB1dl9maW5kX3NlY3JldGAgaXMgb24gYSB2aWFibGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBJJiMzOTtsbCBoYXZlIGEgZ29vZCBoYW5kbGUgb24gdGhlIHZ1bG5lcmFiaWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2X2xpc3Rfc2VjcmV0cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00ODktLyoqXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00OTEtICpcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MTI6c3RhdGljIGlubGluZSBpbnQgdXZfbGlzdF9zZWNyZXRzKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqYnVmLCB1MTYgc3RhcnRfaWR4LFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTEzLVx0XHRcdFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzgwPWludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc5MS1cdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NzkyOlx0XHR1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCBcdTAwMjZsaXN0X3JjLCBOVUxMKTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXHRcdGlmIChsaXN0X3JjICE9IFVWQ19SQ19FWEVDVVRFRCBcdTAwMjZcdTAwMjYgbGlzdF9yYyAhPSBVVkNfUkNfTU9SRV9EQVRBKSB7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0zMTYtXHRkbyB7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjMxNzpcdFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4LCBcdTAwMjZ1dl9pb2N0bC1cdTAwM2V1dl9yYyxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMzE4LVx0XHRcdFx0XHUwMDI2dXZfaW9jdGwtXHUwMDNldXZfcnJjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNDUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFVsdHJhdmlzb3IgQ2FsbCBFeGVjdXRpb24gaW4gUUVNVSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uLCB3aGljaCBJIHNlZSBleGVjdXRlcyBhbiBVbHRyYXZpc29yIENhbGwgKFVWQykuIE15IGZpcnN0IHRob3VnaHQgaXM6IGRvZXMgUUVNVSBldmVuIHN1cHBvcnQgdGhlc2UgdGhpbmdzPyBMdWNraWx5LCBJIGtub3cgUUVNVSBkb2VzIHN1cHBvcnQgczM5MHggUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgdGhyb3VnaCBLVk0sIHdoaWNoIGlzIGEgZ29vZCBzdGFydCBhcyBpdCBtZWFucyBRRU1VICpjYW4qIGludGVyY2VwdCB0aGVzZSBVVkNzLgoKQnV0IHRoZW4gSSBoYWQgYSByZWFsaXphdGlvbi4gSWYgdGhpcyBpcyBhIGd1ZXN0IHJ1bm5pbmcgdW5kZXIgS1ZNIHdpdGggUFYgZW5hYmxlZCwgdGhlIFVsdHJhdmlzb3IgZnVuY3Rpb25hbGl0eSBpcyBlc3NlbnRpYWxseSBpbXBsZW1lbnRlZCBieSB0aGUgSUJNIGZpcm13YXJlLCBvciBpbiBhIHRlc3Rpbmcgc2NlbmFyaW8sIHBlcmhhcHMgS1ZNL1FFTVUgaXRzZWxmLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzPyBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWUgUFYgc3VwcG9ydCBpbiBRRU1VLiBIb3dldmVyLCBpdCYjMzk7cyB1c3VhbGx5IHRpZWQgdG8gS1ZNIGFuZCByZXF1aXJlcyBhIGhvc3QgdGhhdCBhY3R1YWxseSAqc3VwcG9ydHMqIFBWLCBsaWtlIElCTSBaIGhhcmR3YXJlLgoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiBJIGtub3cgc3l6a2FsbGVyIHJ1bnMgb24gR0NFLCBhbmQgR0NFICpkb2VzbiYjMzk7dCogaGF2ZSBzMzkweCBoYXJkd2FyZSwgc28gaXQgdXNlcyBRRU1VIFRDRyBmb3IgczM5MHggZW11bGF0aW9uLiBTbyB0aGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyBRRU1VIFRDRywgdGhlICplbXVsYXRpb24qIG1vZGUsIGFjdHVhbGx5IHN1cHBvcnQgczM5MHggVWx0cmF2aXNvciBjYWxscz8KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gdHJpZ2dlciBgdXZfbGlzdF9zZWNyZXRzYCBpbiBhIFFFTVUgVENHIGVudmlyb25tZW50LiBUaGlzIHdpbGwgcmVxdWlyZSBjbG9zZXIgZXhhbWluYXRpb24uIExldCYjMzk7cyBzdGFydCBieSBjaGVja2luZyB0aGF0IGB1dl9saXN0X3NlY3JldHNgIGNhbGxzIGB1dl9jYWxsYCB3aGljaCB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9jYWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9ib290L3V2LmM9MTU9dm9pZCB1dl9xdWVyeV9pbmZvKHZvaWQpXG4tLVxuYXJjaC9zMzkwL2Jvb3QvdXYuYy0yNS1cdC8qIElnbm9yZSB0aGF0IHRoZXJlIG1pZ2h0IGJlIG1vcmUgZGF0YSB3ZSBkbyBub3QgcHJvY2VzcyAqL1xuYXJjaC9zMzkwL2Jvb3QvdXYuYzoyNjpcdGlmICh1dl9jYWxsKDAsICh1aW50NjRfdClcdTAwMjZ1dmNiKSBcdTAwMjZcdTAwMjYgdXZjYi5oZWFkZXIucmMgIT0gVVZDX1JDX01PUkVfREFUQSlcbmFyY2gvczM5MC9ib290L3V2LmMtMjctXHRcdHJldHVybjtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MzI9c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHV2X3NlY3JldF9saXN0KSA9PSBQQUdFX1NJWkUpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDMzLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDM0OnN0YXRpYyBpbmxpbmUgaW50IF9fdXZfY2FsbCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDM1LXtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NDYtXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NDc6c3RhdGljIGlubGluZSBpbnQgdXZfY2FsbCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDQ4LXtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTEtXHRkbyB7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NTI6XHRcdGNjID0gX191dl9jYWxsKHIxLCByMik7XG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTMtXHR9IHdoaWxlIChjYyBcdTAwM2UgMSk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDU2LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDU3Oi8qIExvdyBsZXZlbCB1dl9jYWxsIHRoYXQgYXZvaWRzIHN0YWxscyBmb3IgbG9uZyBydW5uaW5nIGJ1c3kgY29uZGl0aW9ucyAgKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ1ODpzdGF0aWMgaW5saW5lIGludCB1dl9jYWxsX3NjaGVkKHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTkte1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2Mi1cdGRvIHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ2MzpcdFx0Y2MgPSBfX3V2X2NhbGwocjEsIHIyKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2NC1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDY5LS8qXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NzA6ICogc3BlY2lhbCB2YXJpYW50IG9mIHV2X2NhbGwgdGhhdCBvbmx5IHRyYW5zcG9ydHMgdGhlIGNwdSBvciBndWVzdFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDcxLSAqIGhhbmRsZSBhbmQgdGhlIGNvbW1hbmQsIGxpa2UgZGVzdHJveSBvciB2ZXJpZnkuXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDczPXN0YXRpYyBpbmxpbmUgaW50IHV2X2NtZF9ub2RhdGEodTY0IGhhbmRsZSwgdTE2IGNtZCwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDgyLVx0V0FSTighaGFuZGxlLCBcJiMzNDtObyBoYW5kbGUgcHJvdmlkZWQgdG8gVWx0cmF2aXNvciBjYWxsIGNtZCAleFxcblwmIzM0OywgY21kKTtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ4MzpcdGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDg0LVx0KnJjID0gdXZjYi5oZWFkZXIucmM7XG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NTEyPXN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MjAtXHR9O1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTIxOlx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTIyLVxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTU3MT1zdGF0aWMgaW5saW5lIGludCBzaGFyZSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBjbWQpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTg4LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTg5Olx0aWYgKCF1dl9jYWxsKDAsICh1NjQpXHUwMDI2dXZjYikpXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01OTAtXHRcdHJldHVybiAwO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz00MT1zdGF0aWMgaW50IF9faW5pdCB1dl9pbml0KHBoeXNfYWRkcl90IHN0b3JfYmFzZSwgdW5zaWduZWQgbG9uZyBzdG9yX2xlbilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNDktXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NTA6XHRpZiAodXZfY2FsbCgwLCAodWludDY0X3QpXHUwMDI2dXZjYikpIHtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy01MS1cdFx0cHJfZXJyKFwmIzM0O1VsdHJhdmlzb3IgaW5pdCBmYWlsZWQgd2l0aCByYzogMHgleCBycmM6IDAleFxcblwmIzM0Oyxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9OTE9aW50IHV2X3Bpbl9zaGFyZWQodW5zaWduZWQgbG9uZyBwYWRkcilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtOTgtXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6OTk6XHRpZiAodXZfY2FsbCgwLCAodTY0KVx1MDAyNnV2Y2IpKVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTEwMC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTExMj1zdGF0aWMgaW50IHV2X2Rlc3Ryb3kodW5zaWduZWQgbG9uZyBwYWRkcilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMTE5LVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjEyMDpcdGlmICh1dl9jYWxsKDAsICh1NjQpXHUwMDI2dXZjYikpIHtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xMjEtXHRcdC8qXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTE2OD1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xNzUtXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MTc2Olx0aWYgKHV2X2NhbGwoMCwgKHU2NClcdTAwMjZ1dmNiKSlcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xNzctXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYz0yNTE9aW50IF9fbWFrZV9mb2xpb19zZWN1cmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHV2X2NiX2hlYWRlciAqdXZjYilcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjY4LVx0ICovXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MjY5Olx0Y2MgPSBfX3V2X2NhbGwoMCwgKHU2NCl1dmNiKTtcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0yNzAtXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIGV4cGVjdGVkKTtcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NTk4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHV2X2NiX3F1ZXJ5X2tleXMgdXZfcXVlcnlfa2V5cyh2b2lkKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02MDQtXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6NjA1Olx0dXZfY2FsbCgwLCAodWludDY0X3QpXHUwMDI2dXZjYik7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNjA2LVx0cmV0dXJuIHV2Y2I7XG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTgyNj1pbnQgdXZfcmV0cmlldmVfc2VjcmV0KHUxNiBzZWNyZXRfaWR4LCB1OCAqYnVmLCBzaXplX3QgYnVmX3NpemUpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgzNS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4MzY6XHR1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2dXZjYik7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODM3LVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz0yODQ9aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtMzE1LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjMxNjpcdGNjID0gdXZfY2FsbCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTMxNy1cdCpyYyA9IHV2Y2IuaGVhZGVyLnJjO1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz00MjQ9c3RhdGljIGludCBrdm1fczM5MF9wdl9kZWluaXRfdm1fZmFzdChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy00MzItXG5hcmNoL3MzOTAva3ZtL3B2LmM6NDMzOlx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2dXZjYik7XG5hcmNoL3MzOTAva3ZtL3B2LmMtNDM0LVx0aWYgKHJjKVxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz03MDk9aW50IGt2bV9zMzkwX3B2X2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzQ5LVxuYXJjaC9zMzkwL2t2bS9wdi5jOjc1MDpcdGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTc1MS1cdCpyYyA9IHV2Y2IuaGVhZGVyLnJjO1xuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz03NzI9aW50IGt2bV9zMzkwX3B2X3NldF9zZWNfcGFybXMoc3RydWN0IGt2bSAqa3ZtLCB2b2lkICpoZHIsIHU2NCBsZW5ndGgsIHUxNiAqcmMsXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTc4MS1cdH07XG5hcmNoL3MzOTAva3ZtL3B2LmM6NzgyOlx0aW50IGNjID0gdXZfY2FsbCgwLCAodTY0KVx1MDAyNnV2Y2IpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTc4My1cbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9ODUxPWludCBrdm1fczM5MF9wdl9zZXRfY3B1X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggc3RhdGUpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTg2MC1cbmFyY2gvczM5MC9rdm0vcHYuYzo4NjE6XHRjYyA9IHV2X2NhbGwoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmFyY2gvczM5MC9rdm0vcHYuYy04NjItXHRLVk1fVVZfRVZFTlQodmNwdS1cdTAwM2Vrdm0sIDMsIFwmIzM0O1BST1RWSVJUIFNFVCBDUFUgJWQgU1RBVEUgJWQgcmMgJXggcnJjICV4XCYjMzQ7LFxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYz04Njk9aW50IGt2bV9zMzkwX3B2X2R1bXBfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqYnVmZiwgdTE2ICpyYywgdTE2ICpycmMpXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jLTg3OC1cbmFyY2gvczM5MC9rdm0vcHYuYzo4Nzk6XHRjYyA9IHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmFyY2gvczM5MC9rdm0vcHYuYy04ODAtXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcbi0tXG5hcmNoL3MzOTAva3ZtL3B2LmM9OTE2PWludCBrdm1fczM5MF9wdl9kdW1wX3N0b3Jfc3RhdGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy05NjItXHRcdC8qIEdldCAxTUIgd29ydGggb2YgZ3Vlc3Qgc3RvcmFnZSBzdGF0ZSBkYXRhICovXG5hcmNoL3MzOTAva3ZtL3B2LmM6OTYzOlx0XHRjYyA9IHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmFyY2gvczM5MC9rdm0vcHYuYy05NjQtXG4tLVxuYXJjaC9zMzkwL2t2bS9wdi5jPTEwMjQ9aW50IGt2bV9zMzkwX3B2X2R1bXBfY29tcGxldGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxuLS1cbmFyY2gvczM5MC9rdm0vcHYuYy0xMDQwLVxuYXJjaC9zMzkwL2t2bS9wdi5jOjEwNDE6XHRyZXQgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2Y29tcGxldGUpO1xuYXJjaC9zMzkwL2t2bS9wdi5jLTEwNDItXHQqcmMgPSBjb21wbGV0ZS5oZWFkZXIucmM7XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM9ODc4PXN0YXRpYyBpbmxpbmUgaW50IHV2X25taV9rZGJfcmVhc29uKHZvaWQpXG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmMtODk1LSAqL1xuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM6ODk2OnN0YXRpYyB2b2lkIHV2X2NhbGxfa2dkYl9rZGIoaW50IGNwdSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtYXN0ZXIpXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy04OTcte1xuLS1cbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTkyOC0jZWxzZSAvKiAhQ09ORklHX0tHREIgKi9cbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jOjkyOTpzdGF0aWMgaW5saW5lIHZvaWQgdXZfY2FsbF9rZ2RiX2tkYihpbnQgY3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG1hc3RlcilcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTkzMC17XG4tLVxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM9OTM4PXN0YXRpYyBpbnQgdXZfaGFuZGxlX25taSh1bnNpZ25lZCBpbnQgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy05NzgtXHRjYXNlIG5taV9hY3Rfa2dkYjpcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jOjk3OTpcdFx0dXZfY2FsbF9rZ2RiX2tkYihjcHUsIHJlZ3MsIG1hc3Rlcik7XG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy05ODAtXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM9MTg1PXN0YXRpYyBpbnQgdXZpb19hdHRlc3RhdGlvbihzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yMjYtXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjIyNzpcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NCl1dmNiX2F0dGVzdCk7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTIyOC1cbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTI2OT1zdGF0aWMgaW50IHV2aW9fYWRkX3NlY3JldChzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yOTMtXHR1dmNiLmFkZHIgPSAodTY0KWFzcmNiO1xuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzoyOTQ6XHR1dl9jYWxsX3NjaGVkKDAsICh1NjQpXHUwMDI2dXZjYik7XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTI5NS1cdHV2X2lvY3RsLVx1MDAzZXV2X3JjID0gdXZjYi5oZWFkZXIucmM7XG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz00MDQ9c3RhdGljIGludCB1dmlvX2xvY2tfc2VjcmV0cyhzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqaW9jdGwpXG4tLVxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy00MTMtXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjQxNDpcdHV2X2NhbGwoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDE1LVx0aW9jdGwtXHUwMDNldXZfcmMgPSB1dmNiLmhlYWRlci5yYztcbi0tXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTQzNj1zdGF0aWMgaW50IHV2aW9fcmV0cl9zZWNyZXQoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDU5LVx0dXZjYi5idWZfc2l6ZSA9IGJ1Zl9sZW47XG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jOjQ2MDpcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcdTAwMjZ1dmNiKTtcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDcxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVWQyBJbnN0cnVjdGlvbiBhbmQgSXRzIEltcGxpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdXZfY2FsbGAgZnVuY3Rpb24uIEl0JiMzOTtzIHVzaW5nIHRoZSBgVVZDYCBpbnN0cnVjdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgYSBxdWVzdGlvbjogZG9lcyBRRU1VIFRDRyBhY3R1YWxseSAqZW11bGF0ZSogdGhhdD8gSSBrbm93IGl0IG9mdGVuIGRvZXNuJiMzOTt0IGRlYWwgd2l0aCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSBkaXJlY3RseS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIFVsdHJhdmlzb3IgZmFjaWxpdHkgaXMgZXZlbiBlbmFibGVkIHdpdGhpbiBRRU1VIFRDRy4KCkkgc2VlIHRoZSBrZXJuZWwgY2hlY2tzIGlmIHRoZSBmYWNpbGl0eSBpcyBhdmFpbGFibGUsIHdoaWNoIHN1Z2dlc3RzIGl0IGV4cGVjdHMgaXQgdG8gKnBvdGVudGlhbGx5KiBiZSB0aGVyZS4gSSByZW1lbWJlciBzZWVpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgcmVhbGl6ZSBpdCYjMzk7cyBhIG1vZHVsZS4gVGhpcyBtYWtlcyBtZSB3b25kZXI6IGNhbiB3ZSBnZXQgdG8gYHV2X2ZpbmRfc2VjcmV0YCBldmVuIGlmIGBVVkNgIHJldHVybnMgYW4gZXJyb3I/IEl0IGxvb2tzIGxpa2UgaXQgKmhhbmRsZXMqIGVycm9ycyBjb21pbmcgYmFjayBmcm9tIGB1dl9saXN0X3NlY3JldHNgLiBTcGVjaWZpY2FsbHksIGlmIGB1dl9saXN0X3NlY3JldHNgIGdpdmVzIGBVVkNfUkNfSU5WX0NNRGAsIHRoZW4gaXQgdHJhbnNsYXRlcyB0byBgLUVOT0RFVmAuCgpOb3csIHRoZSBjb2RlIGhhcyByZWNlbnRseSBiZWVuIHBhdGNoZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBmcm9tIGBsaXN0LSZndDt0b3RhbF9udW1fc2VjcmV0c2AgdG8gYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAgaW4gdGhlIGxvb3AuIEFsc28sIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYHN0YXJ0X2lkeCA9IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgaW4gdGhlIGBkby4uLndoaWxlYCBsb29wIGFuZCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHggPSAwYC4gSWYgYHV2X2xpc3Rfc2VjcmV0c2AgZG9lc24mIzM5O3QgKmRvKiBhbnl0aGluZyAocGVyaGFwcyBiZWNhdXNlIHRoZSBVVkMgaXMgbm90IHN1cHBvcnRlZCksIHRoZW4gYGxpc3QtJmd0O251bV9zZWNyX3N0b3JlZGAgd291bGQgYmUgd2hhdGV2ZXIgaXQgd2FzIGluaXRpYWxpemVkIHRvLCB3aGljaCBjb3VsZCBiZSB6ZXJvLgoKU28sIGlmIHRoZSBVVkMgaW5zdHJ1Y3Rpb24gaXNuJiMzOTt0IHN1cHBvcnRlZCBpbiBRRU1VLCBgdXZfY2FsbGAgbGlrZWx5IGp1c3QgdGhyb3dzIGEgU0lHSUxMIG9yLCBhdCBiZXN0LCByZXR1cm5zIGFuIGVycm9yIGNvZGUuIEhvd2V2ZXIsIHRoZSBrZXJuZWwgKnNob3VsZG4mIzM5O3QqIGV2ZW4gYXR0ZW1wdCB0byB1c2UgaXQgaWYgdGhlIGZhY2lsaXR5IGlzIG5vdCBhY3R1YWxseSB0aGVyZS4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBgcGtleV91dl9pbml0YCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BrZXlfdXZfaW5pdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODMtICovXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyODQ6c3RhdGljIGludCBfX2luaXQgcGtleV91dl9pbml0KHZvaWQpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODUte1xuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzE1LVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MzE2Om1vZHVsZV9jcHVfZmVhdHVyZV9tYXRjaChTMzkwX0NQVV9GRUFUVVJFX1VWLCBwa2V5X3V2X2luaXQpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzE3LW1vZHVsZV9leGl0KHBrZXlfdXZfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTI2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzA3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTW9kdWxlIExvYWQgQ29uZGl0aW9uKioKCk9rYXksIHNvIHRoaXMgYG1vZHVsZV9jcHVfZmVhdHVyZV9tYXRjaChTMzkwX0NQVV9GRUFUVVJFX1VWLCBwa2V5X3V2X2luaXQpYCBmdW5jdGlvbiBjYWxsIG1lYW5zIHRoZSBtb2R1bGUgYHBrZXlfdXZfaW5pdGAgd2lsbCAqb25seSogbG9hZCBpZiB0aGUgYFMzOTBfQ1BVX0ZFQVRVUkVfVVZgIENQVSBmZWF0dXJlIGlzIHByZXNlbnQuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZlYXR1cmUsIHNwZWNpZmljYWxseSBmYWNpbGl0eSAxNTgg4oCTIHRoZSBVbHRyYXZpc29yIGZlYXR1cmUg4oCTIGlzIGV2ZW4gYXZhaWxhYmxlIGluIFFFTVUgVENHLiBJIGtub3cgdGhhdCBRRU1VIFRDRyB0eXBpY2FsbHkgZG9lc24mIzM5O3Qgc3VwcG9ydCB0aGF0IGZlYXR1cmU7IGl0JiMzOTtzIGdlbmVyYWxseSByZXNlcnZlZCBmb3IgS1ZNIG1vZGUgb24gYSBob3N0IHdpdGggYW4gVWx0cmF2aXNvci4KCkJ1dCB3YWl0LCBJIG5lZWQgdG8gY29uc2lkZXIgU3l6a2FsbGVyLiBJdCBydW5zIHMzOTB4LCBhbmQgSSBrbm93IGl0IHN1cHBvcnRzIGJvdGggVENHIGFuZCBLVk0uIEkgbmVlZCB0byBiZSBzdXJlLiBJZiBpdCBydW5zIG9uIGEgcmVhbCBzMzkweCBob3N0IChsaWtlIElCTSBDbG91ZCksIGl0ICpjb3VsZCogYmUgdXNpbmcgS1ZNLCB3aGljaCB3b3VsZCBtYWtlIHRoaXMgcG9zc2libGUuIFJpZ2h0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgczM5MHggS1ZNIGluc3RhbmNlcy4gU28gaXQgKmlzKiByZWFjaGFibGUgdmlhIEtWTS4KClRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIGZvdW5kIHRoZSBidWcsIGFuZCB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgdGhlIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YCBlbWFpbCBhZGRyZXNzLCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IFN5emthbGxlciBlaXRoZXIgdHJpZ2dlcmVkIHRoZSBjb2RlIGRpcmVjdGx5IG9yIGl0IHdhcyBhdCBsZWFzdCB2YWxpZGF0ZWQgaW4gdGhlaXIgdGVzdGluZy4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuIEkgdGhpbmsgYENPTkZJR19QS0VZX1VWYCBpcyByZXF1aXJlZCwgeWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEtFWV9VViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnPTEzNz1jb25maWcgUEtFWV9QQ0tNT1xuLS1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU3LVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxNTg6Y29uZmlnIFBLRVlfVVZcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4NzEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ3J5cHRvZ3JhcGhpYyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBLRVlfVVZgLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGVzZSB0eXBlcyBvZiBrZXJuZWwgZmVhdHVyZXMgYXJlIGRlZmluZWQgYW5kIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aGUgYXNzb2NpYXRlZCBidWlsZC10aW1lIGNvbnRyb2xzLiBJIHdhbnQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaXRzIHByZXNlbmNlLCBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbGx5IHJlbGF0ZWQgb3B0aW9ucyBpbiB0aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU1Olx0XHQgIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIHN1cmUgeW91IG5ldmVyIG5lZWQgdG8gZGVyaXZlIHByb3RlY3RlZFxuIDE1NjpcdFx0ICBrZXlzIGZyb20gY2xlYXIga2V5IHZhbHVlcyBkaXJlY3RseSB2aWEgUENLTU8uXG4gMTU3Olx0XG4gMTU4Olx0Y29uZmlnIFBLRVlfVVZcbiAxNTk6XHRcdHRyaXN0YXRlIFwmIzM0O1BLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4gMTYwOlx0XHRkZXBlbmRzIG9uIFBLRVlcbiAxNjE6XHRcdGRlcGVuZHMgb24gUzM5MF9VVl9VQVBJXG4gMTYyOlx0XHRoZWxwXG4gMTYzOlx0XHQgIFRoaXMgaXMgdGhlIFBLRVkgVWx0cmF2aXNvciBzdXBwb3J0IGhhbmRsZXIgZm9yIGRlcml2aW5nIHByb3RlY3RlZFxuIDE2NDpcdFx0ICBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZSBVbHRyYXZpc29yIChVVikuXG4gMTY1Olx0XG4gMTY2Olx0XHQgIFRoaXMgbW9kdWxlIHdvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIFVWIGRldmljZSBhbmQgc3VwcG9ydHMgdGhlXG4gMTY3Olx0XHQgIHJldHJpZXZhbCBvZiBwcm90ZWN0ZWQga2V5cyBmcm9tIHNlY3JldHMgc3RvcmVkIHdpdGhpbiB0aGVcbiAxNjg6XHRcdCAgVVYgZmlybXdhcmUgbGF5ZXIuIFRoaXMgc2VydmljZSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoaW5cbiAxNjk6XHRcdCAgYSBwcm90ZWN0ZWQgZXhlY3V0aW9uIGd1ZXN0IGFuZCB0aHVzIHRoaXMgbW9kdWxlIHdpbGwgZmFpbCB1cG9uXG4gMTcwOlx0XHQgIG1vZHByb2JlIGlmIG5vIHByb3RlY3RlZCBleGVjdXRpb24gZW52aXJvbm1lbnQgaXMgZGV0ZWN0ZWQuXG4gMTcxOlx0XG4gMTcyOlx0XHQgIEVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCB3aXRoIGFuIEtWTVxuIDE3MzpcdFx0ICBndWVzdCB3aXRoIHByb3RlY3RlZCBleGVjdXRpb24gYW5kIHlvdSB3YW50IHRvIHVzZSBVViByZXRyaWV2YWJsZVxuIDE3NDpcdFx0ICBzZWNyZXRzIHZpYSBQS0VZIEFQSS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzNjQKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgdGhpcyBzaXR1YXRpb24gaGluZ2VzIG9uIHR3byBrZXkgZmFjdG9yczogdGhlIGBQS0VZYCBhbmQgYFMzOTBfVVZfVUFQSWAgcGFyYW1ldGVycy4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCwgYW5kIHRoZSBvbmx5IGxvZ2ljYWwgb25lLCBpcyB0byBzeXN0ZW1hdGljYWxseSBleGFtaW5lIHRob3NlIHZhcmlhYmxlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgc3RhdGVzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgd2l0aCBlYWNoIG90aGVyLiBBIGRlZXBlciBkaXZlIGludG8gaG93IHRoZXkmIzM5O3JlIHNldCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIG9uIG90aGVyIHN5c3RlbSBjb21wb25lbnRzIHdpbGwgYmUgY3JpdGljYWwgdG8gcmVzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLiBFc3NlbnRpYWxseSwgYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYCBhcmUgdGhlIGtleXMgdG8gdW5sb2NraW5nIHRoZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz02Nz1jb25maWcgWkNSWVBUXG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6Nzg6Y29uZmlnIFBLRVlcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDQtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEwNTpjb25maWcgUEtFWV9DQ0FcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA2LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBDQ0Egc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEyMTpjb25maWcgUEtFWV9FUDExXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgRVAxMSBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzNi1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTM3OmNvbmZpZyBQS0VZX1BDS01PXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzOC1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgUENLTU8gc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTctXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjg2MwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggc3VtbWFyaXppbmcgdGhlIHByb21wdCwgYXMgaWYgaXQgd2VyZSBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlJldmlld2luZyBgUzM5MF9VVl9VQVBJYCoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBmb2N1cyBvbiB0aGF0IHNwZWNpZmljIHRoaW5nLCBgUzM5MF9VVl9VQVBJYC4gUHJlc3VtYWJseSwgdGhpcyBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGNvZGUsIGRvY3VtZW50YXRpb24sIG9yIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBhIHN5c3RlbSBvciBwcm9qZWN0LiBHaXZlbiBteSBleHBlcnRpc2UsIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBydW5uaW5nIHRocm91Z2ggcG90ZW50aWFsIGNvbnRleHRzOiBpcyB0aGlzIGEgc3BlY2lmaWMgdXNlci1zcGFjZSBBUEkgb24gYW4gczM5MHggYXJjaGl0ZWN0dXJlLCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBVViAoVWx0cmF2aXNvcikgb3Igc29tZSBvdGhlciB2aXJ0dWFsaXphdGlvbiBsYXllcj8gSXQgY291bGQgYmUgYSBkcml2ZXIsIGEgbGlicmFyeSwgb3IgZXZlbiBhIGJ1aWxkIHRhcmdldC4KClRoZSBpbnN0cnVjdGlvbiBpcyB2ZXJ5IGNvbmNpc2UsIHdoaWNoIHN1Z2dlc3RzIHRoZSBjb250ZXh0IGlzIGFscmVhZHkga25vd24sIG9yIGl0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBlbGVtZW50IHdpdGhpbiBhIG11Y2ggbGFyZ2VyIGNvbnZlcnNhdGlvbi4gSSBzaG91bGQgc3RhcnQgYnkgbWVudGFsbHkgY29ubmVjdGluZyB0aGlzIHRvIGFueSByZWNlbnQgZGlzY3Vzc2lvbnMgb3IgY3VycmVudCB0YXNrcyB0byBwcm92aWRlIGEgaGVscGZ1bCBzdW1tYXJ5LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBXaGF0JiMzOTtzIHRoZSAqcHVycG9zZSogb2YgdGhpcyByZXZpZXc/IEFtIEkgY2hlY2tpbmcgZm9yIHNvbWV0aGluZyBzcGVjaWZpYyDigJMgYSBidWcsIGEgcGVyZm9ybWFuY2UgaXNzdWUsIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSwgY29tcGF0aWJpbGl0eSwgb3IgZG9jdW1lbnRhdGlvbiBhY2N1cmFjeT8gSXMgdGhpcyBwYXJ0IG9mIGEgZGVidWdnaW5nIHByb2Nlc3MsIGEgY29kZSByZXZpZXcsIG9yIGRvY3VtZW50YXRpb24gdXBkYXRlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZW50IGJlZm9yZSBJIHN0YXJ0LCBvdGhlcndpc2UsIEkgbWlnaHQgd2FzdGUgdGltZSBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgdGhvcm91Z2ggY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTMzkwX1VWX1VBUEkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZz03NT1jb25maWcgSE1DX0RSVlxuLS1cbmRyaXZlcnMvczM5MC9jaGFyL0tjb25maWctODctXG5kcml2ZXJzL3MzOTAvY2hhci9LY29uZmlnOjg4OmNvbmZpZyBTMzkwX1VWX1VBUElcbmRyaXZlcnMvczM5MC9jaGFyL0tjb25maWctODktXHRkZWZfdHJpc3RhdGUgbVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzI5MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBVViBTdXBwb3J0KioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBTMzkwLCB0aGF0JiMzOTtzIHRoZSBTeXN0ZW0geiBhcmNoaXRlY3R1cmUuIFRoZSBmb2N1cyBpcyBsaWtlbHkgb24gVW5pcHJvY2Vzc29yIFZpcnR1YWxpemF0aW9uIChVVikgVXNlciBBUEkgc3VwcG9ydCwgZ2l2ZW4gdGhlIGBTMzkwX1VWX1VBUElgIHJlZmVyZW5jZS4gTXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IHBvaW50cyBtZSB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIHNwZWNpZmljYWxseSB0byB0aGUgY2hhcmFjdGVyIGRldmljZSBkcml2ZXJzIGluIHRoZSBTMzkwIGFyY2hpdGVjdHVyZS4gVGhpcyBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCwgYXMgVUFQSSBmZWF0dXJlcyBvZnRlbiBpbnZvbHZlIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlcyBmb3IgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIFVWIFVBUEkgc3VwcG9ydCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcHJlc2VudCwgYW5kIGlmIHNvLCB3aGF0IGNvbmRpdGlvbnMgZW5hYmxlIHRoZSBpbmNsdXNpb24gb2YgdGhlIGBTMzkwX1VWX1VBUElgIGZlYXR1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBkZWZpbmVkIHRoZXJlLiBJJiMzOTttIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgaGVscGZ1bCBjb21tZW50cyB0aGF0IHNoZWQgbGlnaHQgb24gaG93IHRoaXMgZmVhdHVyZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCBjb25maWd1cmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvczM5MC9jaGFyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDg1Olx0XHQgIHRyYW5zZmVyIGNhY2hlIHNpemUgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSAwLjVNQiB0byBOIGJ5dGVzLiBJZiBOXG4gIDg2Olx0XHQgIGlzIHplcm8sIHRoZW4gbm8gY2FjaGluZyBpcyBwZXJmb3JtZWQuXG4gIDg3Olx0XG4gIDg4Olx0Y29uZmlnIFMzOTBfVVZfVUFQSVxuICA4OTpcdFx0ZGVmX3RyaXN0YXRlIG1cbiAgOTA6XHRcdHByb21wdCBcJiMzNDtVbHRyYXZpc29yIHVzZXJzcGFjZSBBUElcJiMzNDtcbiAgOTE6XHRcdGRlcGVuZHMgb24gUzM5MFxuICA5MjpcdFx0aGVscFxuICA5MzpcdFx0ICBTZWxlY3RpbmcgZXhwb3NlcyBwYXJ0cyBvZiB0aGUgVVYgaW50ZXJmYWNlIHRvIHVzZXJzcGFjZVxuICA5NDpcdFx0ICBieSBwcm92aWRpbmcgYSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgYXQgL2Rldi91di5cbiAgOTU6XHRcdCAgVXNpbmcgSU9DVExzIG9uZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgVVYuXG4gIDk2Olx0XHQgIFRoZSBkZXZpY2UgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIFVsdHJhdmlzb3JcbiAgOTc6XHRcdCAgRmFjaWxpdHkgKDE1OCkgaXMgcHJlc2VudC5cbiAgOTg6XHRcbiAgOTk6XHRjb25maWcgUzM5MF9UQVBFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBLZXkgRGVmaW5pdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0JiMzOTtzIGNsZWFyIHdlJiMzOTtsbCBuZWVkIGRlZmluaXRpb25zIGZvciBgUEtFWV9VVmAsIGBQS0VZYCwgYW5kIGBTMzkwX1VWX1VBUElgLiBNYWtlcyBzZW5zZSwgdGhlc2UgYXJlIGxpa2VseSBjcml0aWNhbCBmb3Igb3VyIGNvbmZpZ3VyYXRpb24uIFdhaXQgYSBzZWNvbmQsIHdhc24mIzM5O3QgYFBLRVlgIGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBjcnlwdG8gZHJpdmVycz8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBBaCB5ZXMsIGl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBkcml2ZXJzL2NyeXB0by9LY29uZmlnYC4gUmlnaHQsIG5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIFdoYXQgb3RoZXIgcGllY2VzIGRvZXMgYFBLRVlgIHJlbHkgb24sIG9yIHdoaWNoIG9mIGl0cyB1cHN0cmVhbSBlbGVtZW50cyBtaWdodCBhZmZlY3QgbXkgY29uc2lkZXJhdGlvbnM/IExldCYjMzk7cyBjaGVjayB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2NyeXB0by9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NTpcdFx0ICB0byA4IGluIENvcHJvY2Vzc29yIChDRVh4QyksIEVQMTEgQ29wcm9jZXNzb3IgKENFWHhQKVxuICA3NjpcdFx0ICBvciBBY2NlbGVyYXRvciAoQ0VYeEEpIG1vZGUuXG4gIDc3Olx0XG4gIDc4Olx0Y29uZmlnIFBLRVlcbiAgNzk6XHRcdHRyaXN0YXRlIFwmIzM0O0tlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcJiMzNDtcbiAgODA6XHRcdGRlcGVuZHMgb24gUzM5MFxuICA4MTpcdFx0aGVscFxuICA4MjpcdFx0ICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgdGhlIHBrZXkga2VybmVsIG1vZHVsZXMgcHJvdmlkZSBhbiBBUElcbiAgODM6XHRcdCAgZm9yIGNyZWF0aW9uIGFuZCBoYW5kbGluZyBvZiBwcm90ZWN0ZWQga2V5cy4gT3RoZXIgcGFydHMgb2YgdGhlXG4gIDg0Olx0XHQgIGtlcm5lbCBvciB1c2Vyc3BhY2UgYXBwbGljYXRpb25zIG1heSB1c2UgdGhlc2UgZnVuY3Rpb25zLlxuICA4NTpcdFxuICA4NjpcdFx0ICBUaGUgcHJvdGVjdGVkIGtleSBzdXBwb3J0IGlzIGRpc3RyaWJ1dGVkIGludG86XG4gIDg3Olx0XHQgIC0gQSBwa2V5IGJhc2UgYW5kIEFQSSBrZXJuZWwgbW9kdWxlIChwa2V5LmtvKSB3aGljaCBvZmZlcnMgdGhlXG4gIDg4Olx0XHQgICAgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBwa2V5IGhhbmRsZXIga2VybmVsIG1vZHVsZXMsIHRoZSBpb2N0bFxuICA4OTpcdFx0ICAgIGFuZCB0aGUgc3lzZnMgQVBJIGFuZCB0aGUgaW4ta2VybmVsIEFQSSB0byB0aGUgY3J5cHRvIGNpcGhlclxuICA5MDpcdFx0ICAgIGltcGxlbWVudGF0aW9ucyB1c2luZyBwcm90ZWN0ZWQga2V5LlxuICA5MTpcdFx0ICAtIEEgcGtleSBwY2ttbyBrZXJuZWwgbW9kdWxlIChwa2V5LXBja21vLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XG4gIDkyOlx0XHQgICAgbG9hZGVkIHdoZW4gcGNrbW8gc3VwcG9ydCAodGhhdCBpcyBnZW5lcmF0aW9uIG9mIHByb3RlY3RlZCBrZXlzXG4gIDkzOlx0XHQgICAgZnJvbSBjbGVhciBrZXkgdmFsdWVzKSBpcyBhdmFpbGFibGUuXG4gIDk0Olx0XHQgIC0gQSBwa2V5IENDQSBrZXJuZWwgbW9kdWxlIChwa2V5LWNjYS5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQzOQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYFBLRVlgIERlcGVuZGVuY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoZSBgUEtFWWAgZnVuY3Rpb25hbGl0eSBoYXMgYSBkZXBlbmRlbmN5IG9uIHRoZSBgUzM5MGAgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkuIEl0JiMzOTtzIGRyaWxsaW5nIGludG8gdGhlIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZpbGUuIFJpZ2h0LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgYXJvdW5kIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbXBvbmVudCBoZXJlLCBhbmQgaXQmIzM5O3MgYmVpbmcgZXhwb3J0ZWQuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGNyb3NzLXJlZmVyZW5jZXM7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSBgcGtleV91di5jYCBpcyB1c2luZyBpdCwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcG90ZW50aWFsIHVzZXJzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGdldCBpbXBhY3RlZC4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBpbXBhY3RzIG90aGVyIGFyZWFzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dl9maW5kX3NlY3JldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE3LVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTktXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9NzU3PXN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3Mi0vKipcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3NzM6ICogdXZfZmluZF9zZWNyZXQoKSAtIHNlYXJjaCBzZWNyZXQgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc2VjcmV0IGlkLlxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cbi0tXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtNzc5LSAqL1xuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc4MS1cdFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxuLS1cbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDUtfVxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODA3LVxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtzMzkwIHByb3RlY3RlZCBrZXkgVVYgaGFuZGxlclwmIzM0Oyk7XG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjItLypcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjIzOiAqIE9uZSBwcmUtYWxsb2NhdGVkIHV2X3NlY3JldF9saXN0IGZvciB1c2Ugd2l0aCB1dl9maW5kX3NlY3JldCgpXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cbi0tXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz05Mz1zdGF0aWMgaW50IGdldF9zZWNyZXRfbWV0YWRhdGEoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuLS1cbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTk5LVx0bWVtc2V0KHV2X2xpc3QsIDAsIHNpemVvZigqdXZfbGlzdCkpO1xuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlx0cmMgPSB1dl9maW5kX3NlY3JldChzZWNyZXRfaWQsIHV2X2xpc3QsIHNlY3JldCk7XG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDEtXHRtdXRleF91bmxvY2soXHUwMDI2dXZfbGlzdF9tdXRleCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MzkyCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTkyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgVVYgU2VjcmV0IEZpbmRpbmcgQnVnIEZpeCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGFwcHJvYWNoIGZvciBmdXp6aW5nIGl0IHdpdGggU3l6a2FsbGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgaW4gYHV2LmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBzZWNyZXRzIGFyZSBmb3VuZCBhbmQgbGlzdGVkLiBUaGUgY3JpdGljYWwgY29kZSBwYXRoIGlzIGluIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgb25lIHRoYXQgd2FzIG1vZGlmaWVkLgoKRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBjYW4gcmVhY2ggdGhpcyBjb2RlLiBJdCBzZWVtcyBsaWtlIHRoaXMgaW52b2x2ZXMgZW5hYmxpbmcgdGhlIGBQS0VZX1VWYCBtb2R1bGUuIExldCBtZSB2ZXJpZnk6IGBQS0VZX1VWYCBhbmQgYFMzOTBfVVZfVUFQSWAgaXMgdXNlZCBoZXJlPyBZZXMuIEkgc2VlIG5vdyB0aGF0IGBTMzkwX1VWX1VBUElgIGlzIG5lZWRlZCBieSBgUEtFWV9VVmAuIEFuZCBgUEtFWWAgaXRzZWxmLiBBbHJpZ2h0LCBzbyBJJiMzOTtsbCBuZWVkIGBQS0VZX1VWYCwgYFMzOTBfVVZfVUFQSWAsIGFuZCBgUEtFWWAgZW5hYmxlZCBpbiB0aGUgY29uZmlnLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGJ1ZyBpbiB0aGUgbG9vcCBsb2dpYyB3aXRoaW4gYHV2X2ZpbmRfc2VjcmV0YC4gSXQgbG9va3MgbGlrZSBgc3RhcnRfaWR4YCB3YXMgbm90IHVwZGF0ZWQgY29ycmVjdGx5IHdpdGhpbiB0aGUgbG9vcCwgbGVhZGluZyB0byB0aGUgbG9vcCBwb3RlbnRpYWxseSB0ZXJtaW5hdGluZyBhZnRlciBhIHNpbmdsZSBpdGVyYXRpb24gZXZlbiBpZiB0aGVyZSB3ZXJlIG1vcmUgc2VjcmV0cyB0byBiZSBwcm9jZXNzZWQuIFNwZWNpZmljYWxseSwgdGhlIG9sZCBjb2RlJiMzOTtzIGxvZ2ljIG9mIHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCwgdGhlbiBjaGVja2luZyBgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCAod2hlcmUgdGhlIG5ldyBgc3RhcnRfaWR4YCBpcyBlcXVhbCB0byB0aGUgbmV3IGBuZXh0X3NlY3JldF9pZHhgKSwgbWVhbnQgdGhlIGxvb3Agd291bGRuJiMzOTt0IGl0ZXJhdGUgYmV5b25kIHRoZSBmaXJzdCBwYWdlLgoKVGhlIG5ldyBjb2RlLCBieSBtb3ZpbmcgdGhlIGBzdGFydF9pZHhgIHVwZGF0ZSAqdG8gdGhlIGJlZ2lubmluZyogb2YgdGhlIGxvb3AgZml4ZXMgdGhpcy4gSXQgZW5zdXJlcyB0aGUgY2hlY2sgYHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeGAgY29tcGFyZXMgdGhlIGN1cnJlbnQgdmFsdWUgd2l0aCB0aGUgbmV3IHZhbHVlLCBhbGxvd2luZyB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHNlY3JldHMuCgpBbHNvLCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGZpeCByZWxhdGVkIHRvIHVzaW5nIGBudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYHRvdGFsX251bV9zZWNyZXRzYCB3aGljaCBpcyBnb29kIGJlY2F1c2Ugd2UgZG9uJiMzOTt0IHdhbnQgdG8gcmVhZCBwYXN0IGEgcGFnZSBib3VuZGFyeS4KClRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBidWcgZml4LCBzbyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBmdW5jdGlvbiBJIG5lZWQgdG8gZm9jdXMgb24gaXMgYHV2X2ZpbmRfc2VjcmV0YCwgYmVjYXVzZSB0aGF0JiMzOTtzIHRoZSBvbmUgbW9kaWZpZWQsIGFuZCBpdCYjMzk7cyBhbHNvIGV4cG9ydGVkLiBObyBvdGhlciBmdW5jdGlvbnMgbmVlZCB0byBiZSBjYWxsZWQuCgpTbyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZTogYFBLRVlfVVZgLCBgUzM5MF9VVl9VQVBJYCwgYW5kIGBQS0VZYC4gVGhlc2UgbG9vayBsaWtlIHRoZSByZXF1aXJlZCBpbmdyZWRpZW50cy4gTm93IEkmIzM5O20gcmVhZHkgdG8gY3JhZnQgc29tZSBTeXprYWxsZXIgdGFyZ2V0cyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBLRVkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vS2NvbmZpZz02Nz1jb25maWcgWkNSWVBUXG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy03Ny1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6Nzg6Y29uZmlnIFBLRVlcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDQtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEwNTpjb25maWcgUEtFWV9DQ0FcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTA2LVx0dHJpc3RhdGUgXCYjMzQ7UEtFWSBDQ0Egc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjAtXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEyMTpjb25maWcgUEtFWV9FUDExXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMi1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgRVAxMSBzdXBwb3J0IGhhbmRsZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzNi1cbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTM3OmNvbmZpZyBQS0VZX1BDS01PXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzOC1cdHRyaXN0YXRlIFwmIzM0O1BLRVkgUENLTU8gc3VwcG9ydCBoYW5kbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTctXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXHR0cmlzdGF0ZSBcJiMzNDtQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3Mgb2Ygc29tZW9uZSBmYW1pbGlhciB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uOgoKKipBbmFseXppbmcgS2VybmVsIENyeXB0byBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIGtlcm5lbCYjMzk7cyBjcnlwdG9ncmFwaGljIGZlYXR1cmVzIGFyZSBjb25maWd1cmVkLiBJIHNlZSBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AgYW5kIEkgaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGF0IGl0JiMzOTtzIHNvdXJjZWQgZnJvbSBlaXRoZXIgdGhlIG1haW4gYGNyeXB0by9LY29uZmlnYCBmaWxlIG9yIHRoZSB0b3AtbGV2ZWwgYGRyaXZlcnMvS2NvbmZpZ2AuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtjb25maWcgZmlsZXMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoaWNoIG9uZSB0YWtlcyBwcmVjZWRlbmNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgIGF0IGl0cyB0b3AgbGV2ZWwgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gSSB3aWxsIGNoZWNrIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCwgd2hhdCBvdGhlciBLY29uZmlnIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBjcnlwdG8gZHJpdmVycyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIENSWVBUT19IV1xuICAgNDpcdFx0Ym9vbCBcJiMzNDtIYXJkd2FyZSBjcnlwdG8gZGV2aWNlc1wmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCB5XG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciBoYXJkd2FyZSBjcnlwdG8gZGV2aWNlcyBhbmRcbiAgIDg6XHRcdCAgcHJvY2Vzc29ycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC5cbiAgMTE6XHRcbiAgMTI6XHRpZiBDUllQVE9fSFdcbiAgMTM6XHRcbiAgMTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy9jcnlwdG8vYWxsd2lubmVyL0tjb25maWdcJiMzNDtcbiAgMTU6XHRcbiAgMTY6XHRjb25maWcgQ1JZUFRPX0RFVl9QQURMT0NLXG4gIDE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IGZvciBWSUEgUGFkTG9jayBBQ0VcJiMzNDtcbiAgMTg6XHRcdGRlcGVuZHMgb24gWDg2IFx1MDAyNlx1MDAyNiAhVU1MXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFNvbWUgVklBIHByb2Nlc3NvcnMgY29tZSB3aXRoIGFuIGludGVncmF0ZWQgY3J5cHRvIGVuZ2luZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjY5MQoJCQkJCQkJb3V0cHV0OiAyMjIKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFNlY3JldCBSZXRyaWV2YWwgQnVnIEZpeCoqCgpPa2F5LCBzbyB0aGUgZml4IHJlcXVpcmVzIGBDUllQVE9fSFdgLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCBkZWZhdWx0cyB0byAmIzM5O3kmIzM5Oy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgYENSWVBUT2AgaXMgYWxzbyBhIGRlcGVuZGVuY3ksIGFuZCBpdCBzZWVtcyBsaWtlbHkgZ2l2ZW4gdGhhdCBgZHJpdmVycy9jcnlwdG9gIGlzIHVzdWFsbHkgd2l0aGluIGBDUllQVE9gLiBIb3dldmVyLCBgUEtFWV9VVmAgaXMgdGhlIGtleSBjb21wb25lbnQgaGVyZS4KCkhlcmUmIzM5O3MgdGhlIGdpc3Q6IHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gYHV2X2ZpbmRfc2VjcmV0YC4gU3BlY2lmaWNhbGx5LCB0aGUgbG9vcCBsb2dpYyBmb3IgaXRlcmF0aW5nIHRocm91Z2ggc2VjcmV0IHBhZ2VzIHdhcyBmbGF3ZWQsIGNhdXNpbmcgaXQgdG8gZXhpdCBlYXJseS4gVGhpcyB3YXMgZHVlIHRvIGFuIHVwZGF0ZSB0byBgc3RhcnRfaWR4YCB3aXRoaW4gdGhlIGxvb3AgYmVmb3JlIHRoZSBjb25kaXRpb24gY2hlY2ssIGNhdXNpbmcgYW4gZWFybHkgdGVybWluYXRpb24uIFRoZXJlJiMzOTtzIGFsc28gYW4gb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkgYmVpbmcgYWRkcmVzc2VkIGJ5IHVzaW5nIGBsaXN0LSZndDtudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCwgd2hpY2ggY29ycmVjdHMgaG93IHNlY3JldHMgYXJlIGl0ZXJhdGVkIHdpdGhpbiBhIHNpbmdsZSBwYWdlLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzLCBwZXJ0YWluaW5nIHRvIGhvdyB0aGUgczM5MHggVWx0cmF2aXNvciByZXRyaWV2ZXMgc2VjcmV0cy4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ug4oCTIGFzc3VtaW5nIHRoZSBgUEtFWV9VVmAgbW9kdWxlIGlzIGxvYWRlZC4gU2luY2UgdXNlcnNwYWNlIGNhbiBhY2Nlc3MgdGhpcyB0aHJvdWdoIGFuIGlvY3RsLCB0aGlzIHdvdWxkIGJlIGhpZ2hseSB2YWx1YWJsZSB0byBmdXp6LiBJdCYjMzk7cyBjcnVjaWFsIHRvIHZlcmlmeSB0aGUgc2VjcmV0IHJldHJpZXZhbCBsb2dpYyBoYW5kbGVzIG11bHRpLXBhZ2UgcmVzcG9uc2VzIGNvcnJlY3RseS4KClRvIHRlc3QgdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbi4KClRvIGVuYWJsZSB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLCBJIG5lZWQgYFBLRVlfVVZgLCBgUzM5MF9VVl9VQVBJYCBhbmQgYFBLRVlgLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZX1VWJiMzNDssCiAgICAmIzM0O1MzOTBfVVZfVUFQSSYjMzQ7LAogICAgJiMzNDtQS0VZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gd2hlcmUgdGhlIGxvb3AgdG8gaXRlcmF0ZSB0aHJvdWdoIHBhZ2VzIG9mIHNlY3JldHMgd291bGQgdGVybWluYXRlIHByZW1hdHVyZWx5IGFmdGVyIHRoZSBmaXJzdCBpdGVyYXRpb24gYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBzZWNyZXRzIGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTB4IFVsdHJhdmlzb3Igc2VjcmV0IHJldHJpZXZhbCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYC9kZXYvcGtleWAgaW9jdGwgaW50ZXJmYWNlIHdoZW4gdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBGdXp6aW5nIHRoaXMgaXMgdmFsdWFibGUgdG8gZW5zdXJlIHRoZSBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljIGhhbmRsZXMgbXVsdGktcGFnZSByZXNwb25zZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQS0VZX1VWJiMzNDssCiAgICAmIzM0O1MzOTBfVVZfVUFQSSYjMzQ7LAogICAgJiMzNDtQS0VZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZfZmluZF9zZWNyZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gd2hlcmUgdGhlIGxvb3AgdG8gaXRlcmF0ZSB0aHJvdWdoIHBhZ2VzIG9mIHNlY3JldHMgd291bGQgdGVybWluYXRlIHByZW1hdHVyZWx5IGFmdGVyIHRoZSBmaXJzdCBpdGVyYXRpb24gYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCB0byBgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgaW5zdGVhZCBvZiBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBzZWNyZXRzIGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTB4IFVsdHJhdmlzb3Igc2VjcmV0IHJldHJpZXZhbCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYC9kZXYvcGtleWAgaW9jdGwgaW50ZXJmYWNlIHdoZW4gdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBGdXp6aW5nIHRoaXMgaXMgdmFsdWFibGUgdG8gZW5zdXJlIHRoZSBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljIGhhbmRsZXMgbXVsdGktcGFnZSByZXNwb25zZXMgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgKHRvdGFsIHNlY3JldHMgaW4gdGhlIGd1ZXN0KSB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEl0IGZpeGVzIHRoZSBsb29wIGNvbmRpdGlvbiBpbiBgdXZfZmluZF9zZWNyZXRgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cyBieSB1cGRhdGluZyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIHJhdGhlciB0aGFuIHRoZSBlbmQuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmMKaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC91di5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuYwpAQCAtNzYwLDcgJiM0Mzs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogewogCXUxNiBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzOyBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgbGlzdC0mZ3Q7bnVtX3NlY3Jfc3RvcmVkOyBpJiM0MzsmIzQzOykgewogCQlpZiAobWVtY21wKHNlY3JldF9pZCwgbGlzdC0mZ3Q7c2VjcmV0c1tpXS5pZCwgVVZfU0VDUkVUX0lEX0xFTikgPT0gMCkgewogCQkJKnNlY3JldCA9IGxpc3QtJmd0O3NlY3JldHNbaV0uaGRyOwogCQkJcmV0dXJuIDA7CkBAIC03ODEsMTEgJiM0Mzs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSwKIAkJICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LAogCQkgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldCkKIHsKLQl1MTYgc3RhcnRfaWR4ID0gMDsKJiM0MzsJdTE2IHN0YXJ0X2lkeDsKIAl1MTYgbGlzdF9yYzsKIAlpbnQgcmV0OwogCiYjNDM7CWxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCA9IDA7CiYjNDM7CiAJZG8gewomIzQzOwkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCQl1dl9saXN0X3NlY3JldHMobGlzdCwgc3RhcnRfaWR4LCAmYW1wO2xpc3RfcmMsIE5VTEwpOwogCQlpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgJmFtcDsmYW1wOyBsaXN0X3JjICE9IFVWQ19SQ19NT1JFX0RBVEEpIHsKIAkJCWlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKQpAQCAtNzk2LDcgJiM0Mzs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLAogCQlyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0dXJuIHJldDsKLQkJc3RhcnRfaWR4ID0gbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4OwogCX0gd2hpbGUgKGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQSAmYW1wOyZhbXA7IHN0YXJ0X2lkeCAmbHQ7IGxpc3QtJmd0O25leHRfc2VjcmV0X2lkeCk7CiAKIAlyZXR1cm4gLUVOT0VOVDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNTMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBzMzkwIFNlY3JldCBIYW5kbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBgYXJjaC9zMzkwL2tlcm5lbC91di5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc2VjcmV0IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBVViBzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgYnVnIGZpeCwgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBhbnkgKm5ldyogcmlza3MsIGVzcGVjaWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKRmlyc3QsIHRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnVuY3Rpb24gaXMgbW9kaWZpZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGxpc3QtJmd0O3RvdGFsX251bV9zZWNyZXRzYCBpbiB0aGUgbG9vcCBjb25kaXRpb24sIGJ1dCBub3cgdXNlcyBgbGlzdC0mZ3Q7bnVtX3NlY3Jfc3RvcmVkYC4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBgdG90YWxfbnVtX3NlY3JldHNgIHByb2JhYmx5IHJlcHJlc2VudHMgdGhlICp0b3RhbCogbnVtYmVyIG9mIHNlY3JldHMgYXZhaWxhYmxlIGFjcm9zcyBwb3RlbnRpYWxseSBtdWx0aXBsZSBwYWdlcy9saXN0cywgd2hlcmVhcyBgbnVtX3NlY3Jfc3RvcmVkYCBzcGVjaWZpY2FsbHkgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2VjcmV0cyBjdXJyZW50bHkgKnN0b3JlZCogaW4gdGhlIHJlbGV2YW50IHBhZ2UvbGlzdC4gSWYgdGhlIGNvZGUgdXNlZCBgdG90YWxfbnVtX3NlY3JldHNgIGJlZm9yZSwgaXQgd2FzIGxpa2VseSBpdGVyYXRpbmcgcGFzdCB0aGUgaW5pdGlhbGl6ZWQgZGF0YSB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggY291bGQgbGVhZCB0byBhbiBvdXQtb2YtYm91bmRzIHJlYWQgb3IsIGF0IGJlc3QsIGEgcmVhZCBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gdGhlIGBsaXN0LSZndDtzZWNyZXRzYCBhcnJheS4gVGhpcyBjaGFuZ2UgaXMgYSBjbGVhciBmaXggZm9yIHRoaXMuCgpUaGUgbW9yZSBpbnRyaWNhdGUgcGFydCBpcyB0aGUgY2hhbmdlcyB0byBgdXZfZmluZF9zZWNyZXRgLiAgVGhlIGxvb3Agc3RydWN0dXJlIGFwcGVhcnMgdG8gYmUgcmVzcG9uc2libGUgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBzZWNyZXRzLCBwb3RlbnRpYWxseSBhY3Jvc3MgbXVsdGlwbGUgcGFnZXMuICBJbml0aWFsbHksIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHggPSAwO2AgdG8gaW5pdGlhbGl6ZSB0aGUgaW5kZXguIFRoZW4sIHRoZSBpbXBvcnRhbnQgcGFydDogdGhlIGBzdGFydF9pZHhgIGlzIGFzc2lnbmVkICppbnNpZGUqIHRoZSBsb29wLiAgQmVmb3JlIHRoZSBwYXRjaCwgYHN0YXJ0X2lkeGAgd2FzIGFzc2lnbmVkIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCwgd2hpY2ggbWVhbnMgdGhlIGNvbmRpdGlvbiBgc3RhcnRfaWR4ICZsdDsgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCB3b3VsZCAqYWx3YXlzKiBiZSBmYWxzZS4gV2h5PyBCZWNhdXNlIHRoZSBgc3RhcnRfaWR4YCB3b3VsZCBiZSB0aGUgc2FtZSBhcyBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCwgcmVuZGVyaW5nIHRoZSBsb29wIGluZWZmZWN0aXZlIHdoZW4gYGxpc3RfcmMgPT0gVVZDX1JDX01PUkVfREFUQWAuIFRoaXMgaXMgYSBidWcgZml4LCBhcyBpdCBwcmV2ZW50ZWQgaXRlcmF0aW5nIHRocm91Z2ggbXVsdGlwbGUgcGFnZXMgYW5kIHNlY3JldHMuCgpOb3csIHdpdGggdGhlIHBhdGNoLCB0aGUgbG9naWMgaXMgYXMgZm9sbG93czogYHN0YXJ0X2lkeGAgY2FwdHVyZXMgdGhlIGluZGV4ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB1dl9saXN0X3NlY3JldHNgLiBgdXZfbGlzdF9zZWNyZXRzYCB0aGVuIHVwZGF0ZXMgdGhlIGludGVybmFsIGxpc3QgYW5kIGBsaXN0LSZndDtuZXh0X3NlY3JldF9pZHhgLiAgVGhlIGB3aGlsZWAgY29uZGl0aW9uIHRoZW4gY29ycmVjdGx5IGNvbXBhcmVzIHRoZSAqb2xkKiBpbmRleCB0byB0aGUgKm5ldyogaW5kZXguCgpNeSB0aGlua2luZzogVGhlIGB1dl9saXN0X3NlY3JldHNgIGZ1bmN0aW9uIHBvcHVsYXRlcyB0aGUgYGxpc3RgIHdpdGggc2VjcmV0cy4gSWYgaXRzIHJldHVybiBjb2RlIGlzIGBVVkNfUkNfTU9SRV9EQVRBYCwgdGhlbiBgbGlzdC0mZ3Q7bmV4dF9zZWNyZXRfaWR4YCBpcyBsaWtlbHkgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV4dCBzZWNyZXQgaW5kZXggdG8gYmUgcmVhZC4KClJlZ2FyZGluZyB0aGUgcmlzayBvZiB0aGUgcGF0Y2ggaW50cm9kdWNpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIEkmIzM5O20gY29uZmlkZW50IGl0IGRvZXNuJiMzOTt0LiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIHB1cmVseSBsb2dpY2FsIGNvcnJlY3Rpb25zIHRvIHRoZSBpdGVyYXRpb24gYW5kIGxvb3AgY29uZGl0aW9ucy4gVGhlIGludGVudCBpcyB0byBwcmV2ZW50IHJlYWRpbmcgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHZhbGlkIGRhdGEuCgpUaGUgaW1wb3J0YW50IHBvaW50IGlzIHRoYXQgdGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZywgcHJldmVudGluZyBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gSSBkb24mIzM5O3Qgc2VlIGFueSBjb2RlIGludHJvZHVjZWQgaGVyZSB0aGF0ICpjcmVhdGVzKiBhIHJpc2sgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaC4gVGhlIHBhdGNoIGNsZWFucyB1cCB0aGUgbG9naWMuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG5ldyBzdHJ1Y3R1cmVzLCBhZGQgZmllbGRzLCBvciBpbnRyb2R1Y2UgdXNlci1zcGFjZSBjb3BpZXMuIFNvLCBgTmVlZHNLTVNBTiA9IGZhbHNlYC4gSSBzdGlsbCB3YW50IHRvIGRvdWJsZSBjaGVjayB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGFuZCBkb3VibGUgY2hlY2sgbXkgdGhvdWdodCBwcm9jZXNzLCBqdXN0IHRvIGNvbmZpcm0gbXkgdGhpbmtpbmcgdXNpbmcgc29tZXRoaW5nIGxpa2UgYSBncmVwcGVyIG9yIHNpbWlsYXIgdG9vbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHV2X3NlY3JldF9saXN0IFxceyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyMy0gKi9cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQyNDpzdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDI1LVx0dTE2IG51bV9zZWNyX3N0b3JlZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHV2X3NlY3JldF9saXN0YCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgc29tZXRoaW5nIHRoYXQgaW52b2x2ZXMgYHV2X3NlY3JldF9saXN0YC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkga25vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCByZWZlcnMgdG8uIFNvLCB0aGUgZmlyc3QgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGB1dl9zZWNyZXRfbGlzdGAuIE5vIHBvaW50IGluIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMgb3IgbWFraW5nIGFzc3VtcHRpb25zIOKAkyBJIHdhbnQgdG8gZXN0YWJsaXNoIGEgc29saWQgZm91bmRhdGlvbiBvZiB1bmRlcnN0YW5kaW5nIGJlZm9yZSBJIGRpZyBkZWVwZXIuIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGRlZmluaXRpb24gcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg9NDExPXN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtIHtcbi0tXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MjMtICovXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0MjQ6c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDE2OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHMzOTAgVVYgSGFuZGxpbmcqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgYGFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBhcm91bmQgbGluZSA0MjQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0JiMzOTtzIGEgbGlrZWx5IHNwb3QgZm9yIHNvbWUgY29yZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBkZWZpbml0aW9ucyBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJiMzOTtzIFVWIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtsbCBiZSBzb21ldGhpbmcgbG93LWxldmVsIC0gbWVtb3J5IGxheW91dCwgcmVnaXN0ZXIgYXNzaWdubWVudHMsIG9yIGludGVycnVwdCBoYW5kbGluZyDigJMgc3R1ZmYgZGlyZWN0bHkgaW5mbHVlbmNpbmcgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIG1hY3JvIGRlZmluaXRpb25zLCBlbnVtcywgb3Igc3RydWN0dXJlIGRlY2xhcmF0aW9ucyB0aGF0IHNoZWQgbGlnaHQgb24gaG93IFVWIGNhcGFiaWxpdGllcyBhcmUgZXhwb3NlZCBhbmQgdXRpbGl6ZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29udGV4dC4gSSYjMzk7bSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBudWFuY2VzIG9mIHRoZSBVViBlbnZpcm9ubWVudCBvbiBzMzkwLCBnaXZlbiBpdHMgc3BlY2lhbGl6ZWQgbmF0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MTA6XHQgKi9cbiA0MTE6XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XG4gNDEyOlx0XHRzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgaGRyO1xuIDQxMzpcdFx0dTY0IHJlc2VydmVyZDA4O1xuIDQxNDpcdFx0dTggaWRbVVZfU0VDUkVUX0lEX0xFTl07XG4gNDE1Olx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDE2Olx0XG4gNDE3Olx0LyoqXG4gNDE4Olx0ICogdXZfc2VjcmV0X2xpc3QgLSBVViBzZWNyZXQtbWV0YWRhdGEgbGlzdC5cbiA0MTk6XHQgKiBAbnVtX3NlY3Jfc3RvcmVkOiBOdW1iZXIgb2Ygc2VjcmV0cyBzdG9yZWQgaW4gdGhpcyBsaXN0LlxuIDQyMDpcdCAqIEB0b3RhbF9udW1fc2VjcmV0czogTnVtYmVyIG9mIHNlY3JldHMgc3RvcmVkIGluIHRoZSBVViBmb3IgdGhpcyBndWVzdC5cbiA0MjE6XHQgKiBAbmV4dF9zZWNyZXRfaWR4OiBwb3NpdGl2ZSBudW1iZXIgaWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGUgb3IgemVyby5cbiA0MjI6XHQgKiBAc2VjcmV0czogVXAgdG8gODUgVVYtc2VjcmV0IG1ldGFkYXRhIGVudHJpZXMuXG4gNDIzOlx0ICovXG4gNDI0Olx0c3RydWN0IHV2X3NlY3JldF9saXN0IHtcbiA0MjU6XHRcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XG4gNDI2Olx0XHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XG4gNDI3Olx0XHR1MTYgbmV4dF9zZWNyZXRfaWR4O1xuIDQyODpcdFx0dTE2IHJlc2VydmVkXzA2O1xuIDQyOTpcdFx0dTY0IHJlc2VydmVkXzA4O1xuIDQzMDpcdFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07XG4gNDMxOlx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XG4gNDMyOlx0c3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHV2X3NlY3JldF9saXN0KSA9PSBQQUdFX1NJWkUpO1xuIDQzMzpcdFxuIDQzNDpcdHN0YXRpYyBpbmxpbmUgaW50IF9fdXZfY2FsbCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxuIDQzNTpcdHtcbiA0MzY6XHRcdGludCBjYztcbiA0Mzc6XHRcbiA0Mzg6XHRcdGFzbSB2b2xhdGlsZShcbiA0Mzk6XHRcdFx0XCYjMzQ7XHQuaW5zblx0IHJyZiwweGI5YTQwMDAwLCVbcjFdLCVbcjJdLDAsMFxcblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODYyCgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgYWZ0ZXIgcmV2aWV3aW5nIHRoaXMgcGF0Y2gsIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBhbmQgcmVhc29uaW5nLiBUaGUgY29yZSBvZiB0aGUgcGF0Y2ggYWRkcmVzc2VzIHR3byByZWxhdGVkIGJ1Z3Mgd2l0aGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGZ1bmN0aW9uYWxpdHkuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCBjb3JyZWN0aW5nIGhvdyB3ZSB0cmF2ZXJzZSBhbmQgYWNjZXNzIHRoZSBzZWNyZXRzIHdpdGhpbiBhIHNwZWNpZmljIHN0cnVjdHVyZS4KClRoZSBmaXJzdCBpc3N1ZSB3YXMgYSBzaW1wbGUgYm91bmRzIGNoZWNrIGVycm9yLiBJdCB3YXMgdXNpbmcgYHRvdGFsX251bV9zZWNyZXRzYCB3aGVyZSBpdCBzaG91bGQgaGF2ZSBiZWVuIHVzaW5nIGBudW1fc2Vjcl9zdG9yZWRgLiBgdG90YWxfbnVtX3NlY3JldHNgIHJlcHJlc2VudHMgdGhlICpvdmVyYWxsKiBudW1iZXIgb2Ygc2VjcmV0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGd1ZXN0LCB3aGlsZSBgbnVtX3NlY3Jfc3RvcmVkYCBpcyBzcGVjaWZpYyB0byAqdGhpcyogc2VjcmV0IGxpc3QgKGFuZCBjYXBwZWQgYXQgODUpLiBJZiBgdG90YWxfbnVtX3NlY3JldHNgIHdhcyBncmVhdGVyIHRoYW4gODUsIHRoaXMgY2F1c2VkIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBmcm9tIHRoZSBgbGlzdC0mZ3Q7c2VjcmV0c2AgYXJyYXk7IGlmIGl0IHdhcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gODUgYnV0IHN0aWxsIGxhcmdlciB0aGFuIGBudW1fc2Vjcl9zdG9yZWRgLCB3ZSYjMzk7ZCBiZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBhcnJheS4gVGhpcyBpcyBhIGNsZWFyIGJ1ZywgYW5kIHRoZSBwYXRjaCBmaXhlcyBpdCBieSBtYWtpbmcgdGhlIGNvcnJlY3QgY29tcGFyaXNvbi4KClRoZSBzZWNvbmQgYnVnIHdhcyBpbiB0aGUgbG9naWMgb2YgYHV2X2ZpbmRfc2VjcmV0YC4gVGhlIGxvb3Agd2FzIHRlcm1pbmF0aW5nIHByZW1hdHVyZWx5LCBhbmQgbm93IGl0JiMzOTtzIGNvcnJlY3RseSB1cGRhdGVkIHRvIHByb3Blcmx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzLgoKSW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggKmZpeGVzKiB0aGVzZSBpc3N1ZXMuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHBhdGh3YXlzIHRoYXQgY291bGQgbGVhZCB0byBuZXcgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gSXQgaXMgcHVyZWx5IGEgY29ycmVjdGlvbiBvZiBleGlzdGluZyBhY2Nlc3MgcGF0dGVybnMgYW5kIGJvdW5kcy4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBubyByZWFsIG5lZWQgdG8gcnVuIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBmb3IgdGhpcyBjaGFuZ2UuIFRoZSByaXNrIHRoYXQgd291bGQgaGF2ZSBiZWVuIGlkZW50aWZpZWQgYnkgS01TQU4gd2FzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgZXhpc3RpbmcgY29kZSwgYW5kIHRoaXMgcGF0Y2gganVzdCBjbGVhbnMgaXQgdXAuIEEgZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkgYXMgdGhpcyBpcyBhIGJ1ZyBmaXguIFRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGZvciB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0d28gYnVncyBpbiB0aGUgVWx0cmF2aXNvciBzZWNyZXQgbGlzdGluZyBsb2dpYzpcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgICh0b3RhbCBzZWNyZXRzIGluIHRoZSBndWVzdCkgdG8gYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCAoc2VjcmV0cyBzdG9yZWQgaW4gdGhlIGN1cnJlbnQgcGFnZSkuIFRoaXMgcHJldmVudHMgcmVhZGluZyBwYXN0IHRoZSB2YWxpZCBlbnRyaWVzIGluIHRoZSBgbGlzdC1cdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXG4yLiBJdCBmaXhlcyB0aGUgbG9vcCBjb25kaXRpb24gaW4gYHV2X2ZpbmRfc2VjcmV0YCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIG11bHRpcGxlIHBhZ2VzIG9mIHNlY3JldHMgYnkgdXBkYXRpbmcgYHN0YXJ0X2lkeGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCByYXRoZXIgdGhhbiB0aGUgZW5kLlxuXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgKHRvdGFsIHNlY3JldHMgaW4gdGhlIGd1ZXN0KSB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbjIuIEl0IGZpeGVzIHRoZSBsb29wIGNvbmRpdGlvbiBpbiBgdXZfZmluZF9zZWNyZXRgIHRvIGNvcnJlY3RseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cyBieSB1cGRhdGluZyBgc3RhcnRfaWR4YCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wIHJhdGhlciB0aGFuIHRoZSBlbmQuXG5cblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MjozMS44ODY1OTUzOThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4OTEwMjM0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEtFWV9VVlwiLFxuICAgIFwiUzM5MF9VVl9VQVBJXCIsXG4gICAgXCJQS0VZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfZmluZF9zZWNyZXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCAodG90YWwgc2VjcmV0cyBpbiB0aGUgZ3Vlc3QpIHRvIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuMi4gSXQgZml4ZXMgdGhlIGxvb3AgY29uZGl0aW9uIGluIGB1dl9maW5kX3NlY3JldGAgdG8gY29ycmVjdGx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzIGJ5IHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgcmF0aGVyIHRoYW4gdGhlIGVuZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQyOjMxLjg4NjYwMjQ5OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTkzODk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDY1MTBkOWQ0OTIxNjdhYzBlMjY0OTI5ZTNkMDExMGExNDE0YzhhMDJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC91di5jIGIvYXJjaC9zMzkwL2tlcm5lbC91di5jXFxuaW5kZXggYTI4NGY5OGQ5NzE2OC4uZTcwYWNhZDA5Y2Q1ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG4rKysgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcXG5AQCAtNzYwLDcgKzc2MCw3IEBAIHN0YXRpYyBpbnQgZmluZF9zZWNyZXRfaW5fcGFnZShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIHtcXG4gXFx0dTE2IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHM7IGkrKykge1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGlzdC1cXHUwMDNlbnVtX3NlY3Jfc3RvcmVkOyBpKyspIHtcXG4gXFx0XFx0aWYgKG1lbWNtcChzZWNyZXRfaWQsIGxpc3QtXFx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcXG4gXFx0XFx0XFx0KnNlY3JldCA9IGxpc3QtXFx1MDAzZXNlY3JldHNbaV0uaGRyO1xcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG5AQCAtNzgxLDExICs3ODEsMTQgQEAgaW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4gXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbiBcXHRcXHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbV9oZHIgKnNlY3JldClcXG4ge1xcbi1cXHR1MTYgc3RhcnRfaWR4ID0gMDtcXG4rXFx0dTE2IHN0YXJ0X2lkeDtcXG4gXFx0dTE2IGxpc3RfcmM7XFxuIFxcdGludCByZXQ7XFxuIFxcbitcXHRsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHggPSAwO1xcbitcXG4gXFx0ZG8ge1xcbitcXHRcXHRzdGFydF9pZHggPSBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHg7XFxuIFxcdFxcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFxcdTAwMjZsaXN0X3JjLCBOVUxMKTtcXG4gXFx0XFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFxcdTAwMjZcXHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xcbiBcXHRcXHRcXHRpZiAobGlzdF9yYyA9PSBVVkNfUkNfSU5WX0NNRClcXG5AQCAtNzk2LDcgKzc5OSw2IEBAIGludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuIFxcdFxcdHJldCA9IGZpbmRfc2VjcmV0X2luX3BhZ2Uoc2VjcmV0X2lkLCBsaXN0LCBzZWNyZXQpO1xcbiBcXHRcXHRpZiAocmV0ID09IDApXFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdHN0YXJ0X2lkeCA9IGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeDtcXG4gXFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFxcdTAwMjZcXHUwMDI2IHN0YXJ0X2lkeCBcXHUwMDNjIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCk7XFxuIFxcbiBcXHRyZXR1cm4gLUVOT0VOVDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6MzMuMDIzMzA5MTM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIxOTE2MjY0MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBLRVlfVVZcIixcbiAgICBcIlMzOTBfVVZfVUFQSVwiLFxuICAgIFwiUEtFWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2X2ZpbmRfc2VjcmV0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24gd2hlcmUgdGhlIGxvb3AgdG8gaXRlcmF0ZSB0aHJvdWdoIHBhZ2VzIG9mIHNlY3JldHMgd291bGQgdGVybWluYXRlIHByZW1hdHVyZWx5IGFmdGVyIHRoZSBmaXJzdCBpdGVyYXRpb24gYmVjYXVzZSBgc3RhcnRfaWR4YCB3YXMgdXBkYXRlZCB0byBgbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBiZWZvcmUgdGhlIGxvb3AgY29uZGl0aW9uIGNoZWNrLiBJdCBhbHNvIGZpeGVzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBieSB1c2luZyBgbGlzdC1cXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYCBpbnN0ZWFkIG9mIGBsaXN0LVxcdTAwM2V0b3RhbF9udW1fc2VjcmV0c2Agd2hlbiBpdGVyYXRpbmcgb3ZlciBzZWNyZXRzIGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIHMzOTB4IFVsdHJhdmlzb3Igc2VjcmV0IHJldHJpZXZhbCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYC9kZXYvcGtleWAgaW9jdGwgaW50ZXJmYWNlIHdoZW4gdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBGdXp6aW5nIHRoaXMgaXMgdmFsdWFibGUgdG8gZW5zdXJlIHRoZSBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljIGhhbmRsZXMgbXVsdGktcGFnZSByZXNwb25zZXMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIHtcbiBcdHUxNiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0czsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgKzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuIHtcbi1cdHUxNiBzdGFydF9pZHggPSAwO1xuK1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbitcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbitcbiBcdGRvIHtcbitcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6MzMuMDIzMzEwMjk4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg5MzcyNjI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCB0byBzMzkweCBVViBDb2RlKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSBiZWNhdXNlIHRoZSBjaGFuZ2VzIGFyZSBpbiB0aGUgYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGFuZCBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9ucy4gSW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgcmVuYW1lZCBgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0c2AgdG8gYGxpc3QtXHUwMDNlbnVtX3NlY3Jfc3RvcmVkYC4gQSBzaW1wbGUgbmFtZSBjaGFuZ2U7IG5vdGhpbmcgdG9vIGV4Y2l0aW5nIHRoZXJlLiBIb3dldmVyLCB0aGUgY2hhbmdlcyB0byBgdXZfZmluZF9zZWNyZXRgIGFyZSBhIGJpdCBtb3JlIGludGVyZXN0aW5nLiBXZSBoYXZlIGFuIGluaXRpYWxpemF0aW9uIG9mIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDA7YCBhbmQsIGNydWNpYWxseSwgYHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O2AgbW92ZWQgdG8gdGhlICpiZWdpbm5pbmcqIG9mIHRoZSBsb29wLCBhbmQgdGhlIHJlbW92YWwgb2YgdGhlIHNhbWUgbGluZSBmcm9tIHRoZSBlbmQuIFRoaXMgY2xlYXJseSBtb2RpZmllcyB0aGUgc2VjcmV0IHNlYXJjaGluZyBiZWhhdmlvci4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGltcGxpY2F0aW9ucyBvZiB0aGlzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpcyB0aGlzIGNvZGUgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgc2V0dXA/IFRoaXMgYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AgZmlsZSBpcyBjbGVhcmx5IHJlbGF0ZWQgdG8gVWx0cmF2aXNvciwgb3IgVVYsIG9uIHMzOTB4LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHRoaXMgYmUgZnV6emVkPyBXZWxsLCBzeXprYWxsZXIgZG9lcyBzdXBwb3J0IHMzOTB4LCBzbyB0aGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIENhbiBJIHRlc3QgdGhpcyBzcGVjaWZpYyBjb2RlIGNoYW5nZT8gUUVNVSBpcyBwZXJmZWN0bHkgY2FwYWJsZSBvZiBlbXVsYXRpbmcgczM5MHguIEhvd2V2ZXIsIHRoZSBjYXRjaCBpcyBVViBzdXBwb3J0IGluIFFFTVUuIEx1Y2tpbHksIFFFTVUgKmRvZXMqIGhhdmUgc29tZSBzMzkweCBwcm90ZWN0ZWQgdmlydHVhbGl6YXRpb24gKFBWKSBzdXBwb3J0LCBhbmQgUFYgdXNlcyBVVi4gU28sIGl0J3MgdmVyeSBsaWtlbHkgdGhhdCBJIGNhbiBnZXQgYSByZXByb2R1Y2libGUgdGVzdCBjYXNlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gcXVpY2tseSB0cmFjayBkb3duIHdoZXJlIGB1dl9maW5kX3NlY3JldGAgaXMgY2FsbGVkLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUncyBjb250ZXh0IGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MjozOC45MTcwMzg5MjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MzIxMzAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mjo0MC44MTAyNTgzNzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODM0NzQ3NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBDYWxsKipcblxuT2theSwgc28gYHV2X2ZpbmRfc2VjcmV0YCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgZnVuY3Rpb24sIGFuZCB0aGUgY2FsbCBvcmlnaW5hdGVzIGZyb20gYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGF0IGZpbGUuIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgYGdldF9zZWNyZXRfbWV0YWRhdGFgIG5hcnJvd3MgZG93biB0aGUgcG90ZW50aWFsIGFyZWFzIHdpdGhpbiBgcGtleV91di5jYCBJIG5lZWQgdG8gZm9jdXMgb24uIExldCdzIHNlZSB3aGF0IHNlY3JldHMgYXJlIGJlaW5nIGZldGNoZWQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGlzIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzg4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6NDMuNjQ1MDA4MjkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjkzODYzMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X3NlY3JldF9tZXRhZGF0YVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAva2VybmVsL3V2LmM9ODA2PUVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTItICogQGJ1Zl9zaXplOiBTaXplIG9mIHRoZSBidWZmZXIuIFRoZSBjb3JyZWN0IGJ1ZmZlciBzaXplIGlzIHJlcG9ydGVkIGFzIHBhcnQgb2ZcXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODEzOiAqIHRoZSByZXN1bHQgZnJvbSBgdXZfZ2V0X3NlY3JldF9tZXRhZGF0YWAuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgxNC0gKlxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9ODM9c3RhdGljIGJvb2wgaXNfdXZfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga2V5dHlwZSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTkyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjkzOnN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtOTQtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTA2PXN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoxMTI6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTExMy1cXHRpZiAocmMpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0Ny1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNDg6XFx0cmMgPSBnZXRfc2VjcmV0X21ldGFkYXRhKHQtXFx1MDAzZXNlY3JldF9pZCwgXFx1MDAyNnNlY3JldF9tZXRhX2RhdGEpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI0OS1cXHRpZiAocmMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQyOjQ1LjQxNDQwMTE4NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNjcxNDg4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCB0aGUgY29kZWJhc2U6XG5cbioqVHJhY2luZyBEYXRhIEZsb3c6IFVuY292ZXJpbmcgRGVwZW5kZW5jaWVzKipcblxuUmlnaHQsIHNvIGBnZXRfc2VjcmV0X21ldGFkYXRhYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUuIEl0J3Mgb2J2aW91c2x5IHB1bGxpbmcgc29tZSBjcml0aWNhbCBpbmZvcm1hdGlvbiwgbGlrZWx5IGFib3V0IHNlY3JldHMsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0LiBJdCdzIGNhbGxlZCBmcm9tIGJvdGggYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgLiBNeSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY2FsbCBzaXRlcyBvZiAqdGhvc2UqIHR3byBmdW5jdGlvbnMuIEtub3dpbmcgd2hlcmUgYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgIGFyZSBpbnZva2VkIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgYGdldF9zZWNyZXRfbWV0YWRhdGFgIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgbGFyZ2VyIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgb2YgYHJldHJpZXZlX3NlY3JldGAgYW5kIGB1dl92ZXJpZnlrZXlgIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgYGdldF9zZWNyZXRfbWV0YWRhdGFgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTU1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6NDguNTgxNTUyOTU2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0OTAwNjQzMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmV0cmlldmVfc2VjcmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTYxOD1pbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjIwLVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo2MjE6aW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MjItXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9ODA2PUVYUE9SVF9TWU1CT0xfR1BMKHV2X2ZpbmRfc2VjcmV0KTtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MDgtLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwOTogKiB1dl9yZXRyaWV2ZV9zZWNyZXQoKSAtIGdldCB0aGUgc2VjcmV0IHZhbHVlIGZvciB0aGUgc2VjcmV0IGluZGV4LlxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04MTAtICogQHNlY3JldF9pZHg6IFNlY3JldCBpbmRleCBmb3Igd2hpY2ggdGhlIHNlY3JldCBzaG91bGQgYmUgcmV0cmlldmVkLlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgyNS0gKi9cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODI2OmludCB1dl9yZXRyaWV2ZV9zZWNyZXQodTE2IHNlY3JldF9pZHgsIHU4ICpidWYsIHNpemVfdCBidWZfc2l6ZSlcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtODI3LXtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy04NTItfVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo4NTM6RVhQT1JUX1NZTUJPTF9HUEwodXZfcmV0cmlldmVfc2VjcmV0KTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTA2OnN0YXRpYyBpbnQgcmV0cmlldmVfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMDctXFx0XFx0XFx0ICAgdTE2ICpzZWNyZXRfdHlwZSwgdTggKmJ1ZiwgdTMyICpidWZsZW4pXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0xMTgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTE5OlxcdHJjID0gdXZfcmV0cmlldmVfc2VjcmV0KHNlY3JldF9tZXRhX2RhdGEuaW5kZXgsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTIwLVxcdFxcdFxcdFxcdGJ1Ziwgc2VjcmV0X21ldGFfZGF0YS5sZW5ndGgpO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTkwPXN0YXRpYyBpbnQgdXZfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqX2FwcW5zIF9fYWx3YXlzX3VudXNlZCxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIxMS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTI6XFx0cmMgPSByZXRyaWV2ZV9zZWNyZXQodC1cXHUwMDNlc2VjcmV0X2lkLCBcXHUwMDI2c2VjcmV0X3R5cGUsIHByb3RrZXksIHByb3RrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIxMy1cXHRpZiAocmMpIHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyMTQ6XFx0XFx0UEtFWV9EQkZfRVJSKFxcXCIlcyByZXRyaWV2ZV9zZWNyZXQoKSBmYWlsZWQgd2l0aCAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yMTUtXFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcmMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mjo1MC4wNzE2MjE3NDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY2NTg0MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHJldHJpZXZlX3NlY3JldGAgQ2FsbCBDaGFpbioqXG5cblJpZ2h0LCBgcmV0cmlldmVfc2VjcmV0YCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gYHV2X2tleTJwcm90a2V5YC4gVGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBJIG5lZWQgdG8gc2VlICp3aGVyZSogYHV2X2tleTJwcm90a2V5YCBhbmQgYHV2X3ZlcmlmeWtleWAgYXJlICp0aGVtc2VsdmVzKiBiZWluZyBpbnZva2VkLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNhbGxpbmcgY29udGV4dHMgd2lsbCBpbGx1bWluYXRlIHdoYXQgYHJldHJpZXZlX3NlY3JldGAgaXMgdWx0aW1hdGVseSBiZWluZyB1c2VkIGZvciBhbmQgc2hlZCBsaWdodCBvbiBpdHMgY3JpdGljYWxpdHkuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCBoZWxwIGlkZW50aWZ5IHBvc3NpYmxlIHZ1bG5lcmFiaWxpdGllcy4gQSBxdWljayBzZWFyY2ggZm9yIHRob3NlIGZ1bmN0aW9ucyBhbmQgdGhlaXIgdXNhZ2VzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIGByZXRyaWV2ZV9zZWNyZXRgIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NjgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mjo1My4zMzgyMDg3MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzU0MTI3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfa2V5MnByb3RrZXlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MTMwPXN0YXRpYyBpbnQgdXZfZ2V0X3NpemVfYW5kX3R5cGUodTE2IHNlY3JldF90eXBlLCB1MzIgKnBrZXlzaXplLCB1MzIgKnBrZXl0eXBlKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTg5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjE5MDpzdGF0aWMgaW50IHV2X2tleTJwcm90a2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMTkxLVxcdFxcdFxcdCAgc2l6ZV90IF9ucl9hcHFucyBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yNzI9c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3Ni1cXHQuaXNfc3VwcG9ydGVkX2tleXR5cGVcXHQgPSBpc191dl9rZXl0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI3NzpcXHQua2V5X3RvX3Byb3RrZXlcXHRcXHQgPSB1dl9rZXkycHJvdGtleSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzgtXFx0LnZlcmlmeV9rZXlcXHRcXHQgPSB1dl92ZXJpZnlrZXksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQyOjU0Ljg3MzYyOTA2OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA5NzcyMjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHRoaXMuXG5cbioqVHJhY2luZyB0aGUgUGF0aCB0byB0aGUgVXNlciBJbnRlcmZhY2Ugb2YgdGhlIHMzOTAgUEtleSBBUEkqKlxuXG5SaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdGhlIHMzOTAncyBQS2V5IGZ1bmN0aW9uYWxpdHkgaW50ZXJhY3RzIHdpdGggdXNlcnNwYWNlLiBJIHNlZSB0aGVzZSBjb21wb25lbnRzOiB3ZSBoYXZlIGB1dl9oYW5kbGVyYCwgd2hpY2ggaXMgcGFydCBvZiBhIGBwa2V5X2hhbmRsZXJgLiBUaGUgYHBrZXlfaGFuZGxlcmAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgIGZpbGUuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaW4gbXkgbWluZCBpcywgXCJDYW4gdXNlcnNwYWNlIGV2ZW4gcmVhY2ggdGhpcyBgcGtleV9hcGlgP1wiIEFuZCwgdGhhbmtmdWxseSwgdGhlIGFuc3dlciBpcyB5ZXMsIGJlY2F1c2UgdGhlcmUncyBhbiBpb2N0bCBpbnRlcmZhY2UgZXhwb3NlZCB0aHJvdWdoIGAvZGV2L3BrZXlgLiBTbywgSSdsbCBuZWVkIHRvIGRpdmUgaW50byB0aGF0IHNwZWNpZmljIGZpbGUsIGBkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmNgLCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlvY3RsIHdvcmtzIGFuZCBob3cgaXQgdHJhbnNsYXRlcyB0byB0aGUgdW5kZXJseWluZyBrZXkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjA4LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDI6NTguNTgzNDA0Nzg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE5ODg3ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBrZXlfaGFuZGxlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MjU9c3RhdGljIGludCBrZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMyLVxcdC8qIHRyeSB0aGUgZGlyZWN0IHdheSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozMzpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM0LVxcdFxcdFxcdFxcdFxcdCBrZXksIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0zOS1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0MDpcXHRcXHRyYyA9IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShhcHFucywgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU9aW50IHBrZXlfa2V5MnByb3RrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02Mi1cXHRpZiAocmMgPT0gLUVOT0RFVikge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo2MzpcXHRcXHRwa2V5X2hhbmRsZXJfcmVxdWVzdF9tb2R1bGVzKCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTY0LVxcdFxcdHJjID0ga2V5MnByb3RrZXkoTlVMTCwgMCwga2V5LCBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9OTI9c3RhdGljIGludCBwa2V5X2lvY3RsX2dlbnNlY2soc3RydWN0IHBrZXlfZ2Vuc2VjayBfX3VzZXIgKnVncylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMDQtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtncy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTA1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEwNi1cXHRcXHRcXHRcXHQgIGtncy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTE2PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9jbHIyc2VjayhzdHJ1Y3QgcGtleV9jbHIyc2VjayBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0xMjgtXFx0a2V5YnVmbGVuID0gc2l6ZW9mKGtjcy5zZWNrZXkuc2Vja2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MTI5OlxcdHJjID0gcGtleV9oYW5kbGVyX2Nscl90b19rZXkoXFx1MDAyNmFwcW4sIDEsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTEzMC1cXHRcXHRcXHRcXHQgICAgIGtjcy5rZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9MTQyPXN0YXRpYyBpbnQgcGtleV9pb2N0bF9zZWMycHJvdGsoc3RydWN0IHBrZXlfc2VjMnByb3RrIF9fdXNlciAqdXNwKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTE1My1cXHRrc3AucHJvdGtleS5sZW4gPSBzaXplb2Yoa3NwLnByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjE1NDpcXHRyYyA9IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShcXHUwMDI2YXBxbiwgMSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMTU1LVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yMTU9c3RhdGljIGludCBwa2V5X2lvY3RsX2ZpbmRjYXJkKHN0cnVjdCBwa2V5X2ZpbmRjYXJkIF9fdXNlciAqdWZjKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIyOS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjMwOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzMS1cXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNC1cXHRpZiAocmMgPT0gLUVOT0RFVilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MjM1OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoa2ZjLnNlY2tleS5zZWNrZXksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTIzNi1cXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoa2ZjLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTI1Mz1zdGF0aWMgaW50IHBrZXlfaW9jdGxfc2tleTJwa2V5KHN0cnVjdCBwa2V5X3NrZXkycGtleSBfX3VzZXIgKnVzcClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yNjEtXFx0a3NwLnByb3RrZXkubGVuID0gc2l6ZW9mKGtzcC5wcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzoyNjI6XFx0cmMgPSBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBrc3Auc2Vja2V5LnNlY2tleSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz0yNzY9c3RhdGljIGludCBwa2V5X2lvY3RsX3ZlcmlmeWtleShzdHJ1Y3QgcGtleV92ZXJpZnlrZXkgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMjg2LVxcdGt2ay5kb21haW4gPSAweEZGRkY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jOjI4NzpcXHRyYyA9IHBrZXlfaGFuZGxlcl92ZXJpZnlfa2V5KGt2ay5zZWNrZXkuc2Vja2V5LFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy0yODgtXFx0XFx0XFx0XFx0ICAgICBzaXplb2Yoa3ZrLnNlY2tleS5zZWNrZXkpLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMwNT1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2VucHJvdGsoc3RydWN0IHBrZXlfZ2VucHJvdGsgX191c2VyICp1Z3ApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzEzLVxcdGtncC5wcm90a2V5LmxlbiA9IHNpemVvZihrZ3AucHJvdGtleS5wcm90a2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6MzE0OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCwga2dwLmtleXR5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTMxNS1cXHRcXHRcXHRcXHQgIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTMyNj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfdmVyaWZ5cHJvdGsoc3RydWN0IHBrZXlfdmVyaWZ5cHJvdGsgX191c2VyICp1dnApXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtMzU1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzozNTY6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleSh0bXBidWYsIHNpemVvZigqdCksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTM1Ny1cXHRcXHRcXHRcXHQgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTM5MD1zdGF0aWMgaW50IHBrZXlfaW9jdGxfZ2Vuc2VjazIoc3RydWN0IHBrZXlfZ2Vuc2VjazIgX191c2VyICp1Z3MpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDE0LVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NDE1OlxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoYXBxbnMsIGtncy5hcHFuX2VudHJpZXMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTQxNi1cXHRcXHRcXHRcXHQgIHUsIGtncy50eXBlLCBrZ3Muc2l6ZSwga2dzLmtleWdlbmZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jPTQ0Mj1zdGF0aWMgaW50IHBrZXlfaW9jdGxfY2xyMnNlY2syKHN0cnVjdCBwa2V5X2NscjJzZWNrMiBfX3VzZXIgKnVjcylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy00NzAtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo0NzE6XFx0cmMgPSBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShhcHFucywga2NzLmFwcW5fZW50cmllcyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNDcyLVxcdFxcdFxcdFxcdCAgICAgdSwga2NzLnR5cGUsIGtjcy5zaXplLCBrY3Mua2V5Z2VuZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTAzPXN0YXRpYyBpbnQgcGtleV9pb2N0bF92ZXJpZnlrZXkyKHN0cnVjdCBwa2V5X3ZlcmlmeWtleTIgX191c2VyICp1dmspXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNTE0LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1MTU6XFx0cmMgPSBwa2V5X2hhbmRsZXJfdmVyaWZ5X2tleShra2V5LCBrdmsua2V5bGVuLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01MTYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2a3ZrLmNhcmRuciwgXFx1MDAyNmt2ay5kb21haW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM9NTU4PXN0YXRpYyBpbnQgcGtleV9pb2N0bF9hcHFuczRrKHN0cnVjdCBwa2V5X2FwcW5zNGtleSBfX3VzZXIgKnVhaylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy01NzgtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYzo1Nzk6XFx0cmMgPSBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShra2V5LCBrYWsua2V5bGVuLCBrYWsuZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2FwaS5jLTU4MC1cXHRcXHRcXHRcXHRcXHRhcHFucywgXFx1MDAyNm5yX2FwcW5zLCAwKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYz02MDg9c3RhdGljIGludCBwa2V5X2lvY3RsX2FwcW5zNGt0KHN0cnVjdCBwa2V5X2FwcW5zNGtleXR5cGUgX191c2VyICp1YXQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmMtNjIyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYXBpLmM6NjIzOlxcdHJjID0gcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGthdC50eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9hcGkuYy02MjQtXFx0XFx0XFx0XFx0XFx0ICAgIGthdC5jdXJfbWt2cCwga2F0LmFsdF9ta3ZwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYz0zND1zdGF0aWMgTElTVF9IRUFEKGhhbmRsZXJfbGlzdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM2OmludCBwa2V5X2hhbmRsZXJfcmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTM3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM4OlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtNzgtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Nzk6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtODAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzo4MTppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcilcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTgyLXtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTMtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6OTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfdW5yZWdpc3Rlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy05NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtOTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMDA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEwMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTAzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTE4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXliYXNlZCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMTktXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxMjA6Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqcGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQoZW51bSBwa2V5X2tleV90eXBlIGt0KVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjEyMjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTIzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xMzctfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTM4OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dldF9rZXl0eXBlYmFzZWQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTM5LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTQwOnZvaWQgcGtleV9oYW5kbGVyX3B1dChjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQxLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjE0MjpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTQzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTU2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3B1dCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNTg6aW50IHBrZXlfaGFuZGxlcl9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTU5LVxcdFxcdFxcdFxcdGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Mi17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNjM6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2NC1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTY1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTY2OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGtleSwga2V5bGVuKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE2Ny1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VrZXlfdG9fcHJvdGtleSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzEtXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTcyOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xNzMtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE3NS19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxNzY6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMTc3LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoxODQ6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE4NS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0xODkte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MTkwOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmgsICpodG1wWzEwXTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTE5MS1cXHRpbnQgaSwgbiA9IDAsIHJjID0gLUVOT0RFVjtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjE1LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIxNjpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMTg6aW50IHBrZXlfaGFuZGxlcl9nZW5fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMTktXFx0XFx0XFx0IHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjIyLXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIyMzpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI0LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMjUtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyMjY6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGtleXN1YnR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjI3LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZWdlbl9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMxLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjIzMjpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjMzLVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yMzUtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM2OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX2dlbl9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjM4OmludCBwa2V5X2hhbmRsZXJfY2xyX3RvX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjM5LVxcdFxcdFxcdCAgICB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0NC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNDU6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0Ni1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjQ3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjQ4OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI0OS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VjbHJfdG9fa2V5KSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1My1cXHR9XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNTQ6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1NS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjU3LX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI1ODpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI1OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2MDppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI2MS1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY0LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI2NTpcXHRjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpoO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY2LVxcdGludCByYyA9IC1FTk9ERVY7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyNjg6XFx0aCA9IHBrZXlfaGFuZGxlcl9nZXRfa2V5YmFzZWQoa2V5LCBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjY5LVxcdGlmIChoIFxcdTAwMjZcXHUwMDI2IGgtXFx1MDAzZXZlcmlmeV9rZXkpIHtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjcyLVxcdH1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI3MzpcXHRwa2V5X2hhbmRsZXJfcHV0KGgpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yNzYtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc3OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjc4LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6Mjc5OmludCBwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLCB1MzIgZmxhZ3MsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODAtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgKm5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODIte1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MjgzOlxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODQtXFx0aW50IHJjID0gLUVOT0RFVjtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI4NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI4NjpcXHRoID0gcGtleV9oYW5kbGVyX2dldF9rZXliYXNlZChrZXksIGtleWxlbik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0yODctXFx0aWYgKGggXFx1MDAyNlxcdTAwMjYgaC1cXHUwMDNlYXBxbnNfZm9yX2tleSlcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjg5LVxcdFxcdFxcdFxcdCAgICAgIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzoyOTA6XFx0cGtleV9oYW5kbGVyX3B1dChoKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5MS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjkzLX1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NDpFWFBPUlRfU1lNQk9MKHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTI5NS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjI5NjppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXl0eXBlKGVudW0gcGtleV9rZXlfdHlwZSBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMjk3LVxcdFxcdFxcdFxcdCAgIHU4IGN1cl9ta3ZwWzMyXSwgdTggYWx0X21rdnBbMzJdLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMC17XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMDE6XFx0Y29uc3Qgc3RydWN0IHBrZXlfaGFuZGxlciAqaDtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwMi1cXHRpbnQgcmMgPSAtRU5PREVWO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzA0OlxcdGggPSBwa2V5X2hhbmRsZXJfZ2V0X2tleXR5cGViYXNlZChrZXlzdWJ0eXBlKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMwNS1cXHRpZiAoaCBcXHUwMDI2XFx1MDAyNiBoLVxcdTAwM2VhcHFuc19mb3Jfa2V5dHlwZSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMDktXFx0fVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzEwOlxcdHBrZXlfaGFuZGxlcl9wdXQoaCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMTEtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxMy19XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYzozMTQ6RVhQT1JUX1NZTUJPTChwa2V5X2hhbmRsZXJfYXBxbnNfZm9yX2tleXR5cGUpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzE2OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmMtMzE3LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMxOC0jaWZkZWYgQ09ORklHX01PRFVMRVNcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMxOTpcXHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBrZXlfaGFuZGxlcl9tb2R1bGVzW10gPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMjAtI2lmIElTX01PRFVMRShDT05GSUdfUEtFWV9DQ0EpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jLTMzNC1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjMzNTpcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwa2V5X2hhbmRsZXJfbW9kdWxlcyk7IGkrKykge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzM2OlxcdFxcdGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmg7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zMzctXFx0XFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDEtXFx0XFx0XFx0aWYgKGgtXFx1MDAzZW1vZHVsZSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQyOlxcdFxcdFxcdCAgICAhc3RyY21wKGgtXFx1MDAzZW1vZHVsZS1cXHUwMDNlbmFtZSwgcGtleV9oYW5kbGVyX21vZHVsZXNbaV0pKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDMtXFx0XFx0XFx0XFx0Zm91bmQgPSB0cnVlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNDgtXFx0XFx0aWYgKCFmb3VuZCkge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzQ5OlxcdFxcdFxcdHByX2RlYnVnKFxcXCJyZXF1ZXN0X21vZHVsZSglcylcXFxcblxcXCIsIHBrZXlfaGFuZGxlcl9tb2R1bGVzW2ldKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5jOjM1MDpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZShwa2V5X2hhbmRsZXJfbW9kdWxlc1tpXSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTEtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTQtfVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmM6MzU1OkVYUE9SVF9TWU1CT0wocGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuYy0zNTYtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oPTE0NT1leHRlcm4gY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGtleV9hdHRyX2dyb3Vwc1tdO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTAtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxNTE6c3RydWN0IHBrZXlfaGFuZGxlciB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xNTItXFx0c3RydWN0IG1vZHVsZSAqbW9kdWxlO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTItXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoxOTM6aW50IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihzdHJ1Y3QgcGtleV9oYW5kbGVyICpoYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjE5NDppbnQgcGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoc3RydWN0IHBrZXlfaGFuZGxlciAqaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0xOTUtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTE5OS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIwMDpjb25zdCBzdHJ1Y3QgcGtleV9oYW5kbGVyICpwa2V5X2hhbmRsZXJfZ2V0X2tleWJhc2VkKGNvbnN0IHU4ICprZXksIHUzMiBrZXlsZW4pO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjAxOmNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKnBrZXlfaGFuZGxlcl9nZXRfa2V5dHlwZWJhc2VkKGVudW0gcGtleV9rZXlfdHlwZSBrdCk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDI6dm9pZCBwa2V5X2hhbmRsZXJfcHV0KGNvbnN0IHN0cnVjdCBwa2V5X2hhbmRsZXIgKmhhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjAzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjA0OmludCBwa2V5X2hhbmRsZXJfa2V5X3RvX3Byb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsIHNpemVfdCBucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwNS1cXHRcXHRcXHRcXHRjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMDctXFx0XFx0XFx0XFx0dTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMDg6aW50IHBrZXlfaGFuZGxlcl9zbG93cGF0aF9rZXlfdG9fcHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIwOS1cXHRcXHRcXHRcXHRcXHQgc2l6ZV90IG5yX2FwcW5zLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTItXFx0XFx0XFx0XFx0XFx0IHUzMiAqcHJvdGtleXR5cGUsIHUzMiB4ZmxhZ3MpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjEzOmludCBwa2V5X2hhbmRsZXJfZ2VuX2tleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90IG5yX2FwcW5zLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjE0LVxcdFxcdFxcdCB1MzIga2V5dHlwZSwgdTMyIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIxNi1cXHRcXHRcXHQgdTggKmtleWJ1ZiwgdTMyICprZXlidWZsZW4sIHUzMiAqa2V5aW5mbywgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMTc6aW50IHBrZXlfaGFuZGxlcl9jbHJfdG9fa2V5KGNvbnN0IHN0cnVjdCBwa2V5X2FwcW4gKmFwcW5zLCBzaXplX3QgbnJfYXBxbnMsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMTgtXFx0XFx0XFx0ICAgIHUzMiBrZXl0eXBlLCB1MzIga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjIyLVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyMzppbnQgcGtleV9oYW5kbGVyX3ZlcmlmeV9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyNC1cXHRcXHRcXHQgICAgdTE2ICpjYXJkLCB1MTYgKmRvbSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI2LVxcdFxcdFxcdCAgICB1MzIgeGZsYWdzKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oOjIyNzppbnQgcGtleV9oYW5kbGVyX2FwcW5zX2Zvcl9rZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbiwgdTMyIGZsYWdzLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjI4LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGtleV9hcHFuICphcHFucywgc2l6ZV90ICpucl9hcHFucyxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIyOS1cXHRcXHRcXHQgICAgICAgdTMyIHhmbGFncyk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaDoyMzA6aW50IHBrZXlfaGFuZGxlcl9hcHFuc19mb3Jfa2V5dHlwZShlbnVtIHBrZXlfa2V5X3R5cGUga3R5cGUsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2Jhc2UuaC0yMzEtXFx0XFx0XFx0XFx0ICAgdTggY3VyX21rdnBbMzJdLCB1OCBhbHRfbWt2cFszMl0sIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmgtMjM3LSAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9iYXNlLmg6MjM4OnZvaWQgcGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcyh2b2lkKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfYmFzZS5oLTIzOS1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYz01NTc9c3RhdGljIGludCBjY2Ffc2xvd3BhdGhfa2V5MnByb3RrZXkoY29uc3Qgc3RydWN0IHBrZXlfYXBxbiAqYXBxbnMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNTk1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo1OTY6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgY2NhX2hhbmRsZXIgPSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTU5Ny1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmM9NjEzPXN0YXRpYyBpbnQgX19pbml0IHBrZXlfY2NhX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTUtXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGNjYSBzdHVmZiAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MTY6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2Y2NhX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYy02MTctfVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jPTYyMj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9jY2FfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2NjYS5jLTYyNC1cXHQvKiB1bnJlZ2lzdGVyIHRoaXMgbW9kdWxlIGFzIHBrZXkgaGFuZGxlciAqL1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9jY2EuYzo2MjU6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNmNjYV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfY2NhLmMtNjI2LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTA0PXN0YXRpYyBpbnQgZXAxMV9zbG93cGF0aF9rZXkycHJvdGtleShjb25zdCBzdHJ1Y3QgcGtleV9hcHFuICphcHFucyxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM6NTQzOnN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIGVwMTFfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU0NC1cXHQubW9kdWxlXFx0XFx0XFx0ID0gVEhJU19NT0RVTEUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jPTU2MD1zdGF0aWMgaW50IF9faW5pdCBwa2V5X2VwMTFfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NjItXFx0LyogcmVnaXN0ZXIgdGhpcyBtb2R1bGUgYXMgcGtleSBoYW5kbGVyIGZvciBhbGwgdGhlIGVwMTEgc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU2MzpcXHRyZXR1cm4gcGtleV9oYW5kbGVyX3JlZ2lzdGVyKFxcdTAwMjZlcDExX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmMtNTY0LX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9lcDExLmM9NTY5PXN0YXRpYyB2b2lkIF9fZXhpdCBwa2V5X2VwMTFfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X2VwMTEuYy01NzEtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jOjU3MjpcXHRwa2V5X2hhbmRsZXJfdW5yZWdpc3RlcihcXHUwMDI2ZXAxMV9oYW5kbGVyKTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfZXAxMS5jLTU3My19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYz00MzU9c3RhdGljIGludCBwa2V5X3Bja21vX3ZlcmlmeWtleShjb25zdCB1OCAqa2V5LCB1MzIga2V5bGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDQyLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jOjQ0MzpzdGF0aWMgc3RydWN0IHBrZXlfaGFuZGxlciBwY2ttb19oYW5kbGVyID0ge1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ0NC1cXHQubW9kdWxlXFx0XFx0ICAgICAgPSBUSElTX01PRFVMRSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ1Nj1zdGF0aWMgaW50IF9faW5pdCBwa2V5X3Bja21vX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ2OS1cXHQvKiByZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgZm9yIGFsbCB0aGUgcGNrbW8gc3R1ZmYgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0NzA6XFx0cmV0dXJuIHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2cGNrbW9faGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3Bja21vLmMtNDcxLX1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jPTQ3Nj1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV9wY2ttb19leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYy00NzgtXFx0LyogdW5yZWdpc3RlciB0aGlzIG1vZHVsZSBhcyBwa2V5IGhhbmRsZXIgKi9cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfcGNrbW8uYzo0Nzk6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnBja21vX2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9wY2ttby5jLTQ4MC19XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNy0vKlxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjE4OiAqIFdyYXBwZXIgYXJvdW5kIHBrZXlfaGFuZGxlcl9nZW5fa2V5KCkgd2hpY2ggZGVhbHMgd2l0aCB0aGVcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xOS0gKiBFTk9ERVYgcmV0dXJuIGNvZGUgYW5kIHRoZW4gdHJpZXMgdG8gZW5mb3JjZSBhIHBrZXkgaGFuZGxlclxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjEtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MjI6c3RhdGljIGludCBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkodTMyIGtleXR5cGUsIHUzMiBrZXlzdWJ0eXBlLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTIzLVxcdFxcdFxcdFxcdCAgICB1MzIga2V5Yml0c2l6ZSwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMjctXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Mjg6XFx0cmMgPSBwa2V5X2hhbmRsZXJfZ2VuX2tleShOVUxMLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTI5LVxcdFxcdFxcdFxcdCAga2V5dHlwZSwga2V5c3VidHlwZSxcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyLVxcdGlmIChyYyA9PSAtRU5PREVWKSB7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MzM6XFx0XFx0cGtleV9oYW5kbGVyX3JlcXVlc3RfbW9kdWxlcygpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjM0OlxcdFxcdHJjID0gcGtleV9oYW5kbGVyX2dlbl9rZXkoTlVMTCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0zNS1cXHRcXHRcXHRcXHRcXHQgIGtleXR5cGUsIGtleXN1YnR5cGUsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz00OT1zdGF0aWMgc3NpemVfdCBwa2V5X3Byb3RrZXlfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTY3LVxcdHByb3RrZXkubGVuID0gc2l6ZW9mKHByb3RrZXkucHJvdGtleSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6Njg6XFx0cmMgPSBzeXNfcGtleV9oYW5kbGVyX2dlbl9rZXkoa2V5dHlwZSwgUEtFWV9UWVBFX1BST1RLRVksIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNjktXFx0XFx0XFx0XFx0ICAgICAgcHJvdGtleS5wcm90a2V5LCBcXHUwMDI2cHJvdGtleS5sZW4sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy04MS1cXHRcXHRwcm90a2V5LmxlbiA9IHNpemVvZihwcm90a2V5LnByb3RrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjgyOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTgzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHByb3RrZXkucHJvdGtleSwgXFx1MDAyNnByb3RrZXkubGVuLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IHBrZXlfcHJvdGtleV9hZXNfeHRzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgY2hhciAqYnVmLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMTMxLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjEzMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfUFJPVEtFWSwgMCwgMCxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xMzMtXFx0XFx0XFx0XFx0ICAgICAgdC1cXHUwMDNlcHJvdGtleSwgXFx1MDAyNnByb3RsZW4sIFxcdTAwMjZwcm90dHlwZSk7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz0xNDg9c3RhdGljIHNzaXplX3QgcGtleV9wcm90a2V5X2htYWNfYXR0cl9yZWFkKHUzMiBrZXl0eXBlLCBjaGFyICpidWYsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy0xNzMtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6MTc0OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KGtleXR5cGUsIFBLRVlfVFlQRV9QUk9US0VZLCAwLCAwLFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICB0LVxcdTAwM2Vwcm90a2V5LCBcXHUwMDI2cHJvdGxlbiwgXFx1MDAyNnByb3R0eXBlKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTMwOD1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWRhdGFfYWVzX2F0dHJfcmVhZCh1MzIga2V5dHlwZSwgYm9vbCBpc194dHMsIGNoYXIgKmJ1ZixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyMS1cXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMyMjpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzIzLVxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTMyOS1cXHRcXHRidWZsZW4gPSBzaXplb2Yoc2Vja2V5LVxcdTAwM2VzZWNrZXkpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjMzMDpcXHRcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShrZXl0eXBlLCBQS0VZX1RZUEVfQ0NBX0RBVEEsIDAsIDAsXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtMzMxLVxcdFxcdFxcdFxcdFxcdCAgICAgIHNlY2tleS1cXHUwMDNlc2Vja2V5LCBcXHUwMDI2YnVmbGVuLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jPTQxOT1zdGF0aWMgc3NpemVfdCBwa2V5X2NjYWNpcGhlcl9hZXNfYXR0cl9yZWFkKGVudW0gcGtleV9rZXlfc2l6ZSBrZXliaXRzLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDMzLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jOjQzNDpcXHRyYyA9IHN5c19wa2V5X2hhbmRsZXJfZ2VuX2tleShwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDM1LVxcdFxcdFxcdFxcdCAgICAgIFBLRVlfVFlQRV9DQ0FfQ0lQSEVSLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNDQyLVxcdFxcdGJ1ZiArPSBDQ0FDSVBIRVJUT0tFTlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NDQzOlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTQ0NC1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYz01MzQ9c3RhdGljIHNzaXplX3QgcGtleV9lcDExX2Flc19hdHRyX3JlYWQoZW51bSBwa2V5X2tleV9zaXplIGtleWJpdHMsXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NDgtXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTQ5OlxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KHBrZXlfYWVzX2JpdHNpemVfdG9fa2V5dHlwZShrZXliaXRzKSxcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfc3lzZnMuYy01NTAtXFx0XFx0XFx0XFx0ICAgICAgUEtFWV9UWVBFX0VQMTFfQUVTLCBrZXliaXRzLCAwLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmMtNTU3LVxcdFxcdGJ1ZiArPSBNQVhFUDExQUVTS0VZQkxPQlNJWkU7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3N5c2ZzLmM6NTU4OlxcdFxcdHJjID0gc3lzX3BrZXlfaGFuZGxlcl9nZW5fa2V5KFxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV9zeXNmcy5jLTU1OS1cXHRcXHRcXHRwa2V5X2Flc19iaXRzaXplX3RvX2tleXR5cGUoa2V5Yml0cyksXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0yMzM9c3RhdGljIGludCB1dl92ZXJpZnlrZXkoY29uc3QgdTggKmtleSwgdTMyIGtleWxlbixcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI3MS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzoyNzI6c3RhdGljIHN0cnVjdCBwa2V5X2hhbmRsZXIgdXZfaGFuZGxlciA9IHtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNzMtXFx0Lm1vZHVsZVxcdFxcdFxcdCA9IFRISVNfTU9EVUxFLFxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9Mjg0PXN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk3LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjI5ODpcXHRyYyA9IHBrZXlfaGFuZGxlcl9yZWdpc3RlcihcXHUwMDI2dXZfaGFuZGxlcik7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMjk5LVxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTMwOD1zdGF0aWMgdm9pZCBfX2V4aXQgcGtleV91dl9leGl0KHZvaWQpXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzA5LXtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYzozMTA6XFx0cGtleV9oYW5kbGVyX3VucmVnaXN0ZXIoXFx1MDAyNnV2X2hhbmRsZXIpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTMxMS1cXHRtdXRleF9sb2NrKFxcdTAwMjZ1dl9saXN0X211dGV4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MDAuMTAzMzAyMjYyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MjE1MTA5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSwgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKlJlYWNoaW5nIGB1dl9maW5kX3NlY3JldGAgaW4gUUVNVSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBwa2V5X3V2X2luaXRgIGlzIHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50LCBiZWNhdXNlIGl0IHJlZ2lzdGVycyBgdXZfaGFuZGxlcmAuIFRoYXQgYHV2X2hhbmRsZXJgIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHN0cnVjdHVyZSwgbGlua2luZyB0aGUga2V5LXRvLXByb3RvY29sIGtleSBjb252ZXJzaW9uIGFuZCBrZXkgdmVyaWZpY2F0aW9uLiBOb3csIGBrZXlfdG9fcHJvdGtleWAgcG9pbnRzIHRvIGB1dl9rZXkycHJvdGtleWAsIGFuZCBgdmVyaWZ5X2tleWAgcG9pbnRzIHRvIGB1dl92ZXJpZnlrZXlgLiBUaGVzZSB0d28gZnVuY3Rpb25zLCBgdXZfa2V5MnByb3RrZXlgIGFuZCBgdXZfdmVyaWZ5a2V5YCwgYXJlIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhcyB0aGV5IGJvdGggY2FsbCBgZ2V0X3NlY3JldF9tZXRhZGF0YWAuIEFuZCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgYmVjYXVzZSBgZ2V0X3NlY3JldF9tZXRhZGF0YWAgaW4gdHVybiBjYWxscyBgdXZfZmluZF9zZWNyZXRgLlxuXG5BaCwgcmlnaHQsIHRoYXQncyB0aGUgZnVuY3Rpb24gdGhlIHBhdGNoIG1vZGlmaWVkLiBTbyB0aGUgcXVlc3Rpb24gYmVjb21lcywgaXMgYHV2X2ZpbmRfc2VjcmV0YCBhY3R1YWxseSAqcmVhY2hhYmxlKiBkdXJpbmcgUUVNVSdzIG9wZXJhdGlvbj8gSXQncyBhbGwgYWJvdXQgY29udHJvbCBmbG93LiBXYWl0IGEgbWludXRlLi4uIGB1dl9maW5kX3NlY3JldGAgcmVsaWVzIG9uIGB1dl9saXN0X3NlY3JldHNgLiBUaGF0IHN1Z2dlc3RzIGEgcGF0aCB0byBleHBsb3JhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgdXZfbGlzdF9zZWNyZXRzYCBkb2VzLiBJZiBJIGNhbiBmaWd1cmUgb3V0IGhvdyBgdXZfbGlzdF9zZWNyZXRzYCBnZXRzIGNhbGxlZCwgSSdsbCBrbm93IGlmIGB1dl9maW5kX3NlY3JldGAgaXMgb24gYSB2aWFibGUgZXhlY3V0aW9uIHBhdGgsIGFuZCBJJ2xsIGhhdmUgYSBnb29kIGhhbmRsZSBvbiB0aGUgdnVsbmVyYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMDIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MDUuNTI0ODE1MzgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ3MzIxNzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2X2xpc3Rfc2VjcmV0c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4OS0vKipcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0OTA6ICogdXZfbGlzdF9zZWNyZXRzKCkgLSBEbyBhIExpc3QgU2VjcmV0cyBVVkMuXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDkxLSAqXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTEtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NTEyOnN0YXRpYyBpbmxpbmUgaW50IHV2X2xpc3Rfc2VjcmV0cyhzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmJ1ZiwgdTE2IHN0YXJ0X2lkeCxcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MTMtXFx0XFx0XFx0XFx0ICB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03ODA9aW50IHV2X2ZpbmRfc2VjcmV0KGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTEtXFx0XFx0c3RhcnRfaWR4ID0gbGlzdC1cXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo3OTI6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIHN0YXJ0X2lkeCwgXFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03OTMtXFx0XFx0aWYgKGxpc3RfcmMgIT0gVVZDX1JDX0VYRUNVVEVEIFxcdTAwMjZcXHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0zMDc9c3RhdGljIGludCB1dmlvX2dldF9saXN0KHZvaWQgKnpwYWdlLCBzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxNi1cXHRkbyB7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzozMTc6XFx0XFx0dXZfbGlzdF9zZWNyZXRzKGxpc3QsIGxpc3QtXFx1MDAzZW5leHRfc2VjcmV0X2lkeCwgXFx1MDAyNnV2X2lvY3RsLVxcdTAwM2V1dl9yYyxcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTMxOC1cXHRcXHRcXHRcXHRcXHUwMDI2dXZfaW9jdGwtXFx1MDAzZXV2X3JyYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjA3LjA3MjE0MzI2OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDkwNTc1ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBVbHRyYXZpc29yIENhbGwgRXhlY3V0aW9uIGluIFFFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYHV2X2xpc3Rfc2VjcmV0c2AgZnVuY3Rpb24sIHdoaWNoIEkgc2VlIGV4ZWN1dGVzIGFuIFVsdHJhdmlzb3IgQ2FsbCAoVVZDKS4gTXkgZmlyc3QgdGhvdWdodCBpczogZG9lcyBRRU1VIGV2ZW4gc3VwcG9ydCB0aGVzZSB0aGluZ3M/IEx1Y2tpbHksIEkga25vdyBRRU1VIGRvZXMgc3VwcG9ydCBzMzkweCBQcm90ZWN0ZWQgVmlydHVhbGl6YXRpb24gKFBWKSB0aHJvdWdoIEtWTSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0IGFzIGl0IG1lYW5zIFFFTVUgKmNhbiogaW50ZXJjZXB0IHRoZXNlIFVWQ3MuXG5cbkJ1dCB0aGVuIEkgaGFkIGEgcmVhbGl6YXRpb24uIElmIHRoaXMgaXMgYSBndWVzdCBydW5uaW5nIHVuZGVyIEtWTSB3aXRoIFBWIGVuYWJsZWQsIHRoZSBVbHRyYXZpc29yIGZ1bmN0aW9uYWxpdHkgaXMgZXNzZW50aWFsbHkgaW1wbGVtZW50ZWQgYnkgdGhlIElCTSBmaXJtd2FyZSwgb3IgaW4gYSB0ZXN0aW5nIHNjZW5hcmlvLCBwZXJoYXBzIEtWTS9RRU1VIGl0c2VsZi5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogY2FuIHRoaXMgYmUgcmVhY2hlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgd2l0aG91dCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzPyBJIHRoaW5rIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWUgUFYgc3VwcG9ydCBpbiBRRU1VLiBIb3dldmVyLCBpdCdzIHVzdWFsbHkgdGllZCB0byBLVk0gYW5kIHJlcXVpcmVzIGEgaG9zdCB0aGF0IGFjdHVhbGx5ICpzdXBwb3J0cyogUFYsIGxpa2UgSUJNIFogaGFyZHdhcmUuXG5cblRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gSSBrbm93IHN5emthbGxlciBydW5zIG9uIEdDRSwgYW5kIEdDRSAqZG9lc24ndCogaGF2ZSBzMzkweCBoYXJkd2FyZSwgc28gaXQgdXNlcyBRRU1VIFRDRyBmb3IgczM5MHggZW11bGF0aW9uLiBTbyB0aGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyBRRU1VIFRDRywgdGhlICplbXVsYXRpb24qIG1vZGUsIGFjdHVhbGx5IHN1cHBvcnQgczM5MHggVWx0cmF2aXNvciBjYWxscz9cblxuQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBMZXQncyBzZWUgaWYgd2UgY2FuIHRyaWdnZXIgYHV2X2xpc3Rfc2VjcmV0c2AgaW4gYSBRRU1VIFRDRyBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIHJlcXVpcmUgY2xvc2VyIGV4YW1pbmF0aW9uLiBMZXQncyBzdGFydCBieSBjaGVja2luZyB0aGF0IGB1dl9saXN0X3NlY3JldHNgIGNhbGxzIGB1dl9jYWxsYCB3aGljaCB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA0NSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MzoxMy41NjI3MjE0MTlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDc2MzQ3NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZfY2FsbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvYm9vdC91di5jPTE1PXZvaWQgdXZfcXVlcnlfaW5mbyh2b2lkKVxcbi0tXFxuYXJjaC9zMzkwL2Jvb3QvdXYuYy0yNS1cXHQvKiBJZ25vcmUgdGhhdCB0aGVyZSBtaWdodCBiZSBtb3JlIGRhdGEgd2UgZG8gbm90IHByb2Nlc3MgKi9cXG5hcmNoL3MzOTAvYm9vdC91di5jOjI2OlxcdGlmICh1dl9jYWxsKDAsICh1aW50NjRfdClcXHUwMDI2dXZjYikgXFx1MDAyNlxcdTAwMjYgdXZjYi5oZWFkZXIucmMgIT0gVVZDX1JDX01PUkVfREFUQSlcXG5hcmNoL3MzOTAvYm9vdC91di5jLTI3LVxcdFxcdHJldHVybjtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQzMj1zdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QpID09IFBBR0VfU0laRSk7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDMzLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQzNDpzdGF0aWMgaW5saW5lIGludCBfX3V2X2NhbGwodW5zaWduZWQgbG9uZyByMSwgdW5zaWduZWQgbG9uZyByMilcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MzUte1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDQ2LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ0NzpzdGF0aWMgaW5saW5lIGludCB1dl9jYWxsKHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDQ4LXtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ1MS1cXHRkbyB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDUyOlxcdFxcdGNjID0gX191dl9jYWxsKHIxLCByMik7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDUzLVxcdH0gd2hpbGUgKGNjIFxcdTAwM2UgMSk7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NTYtXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDU3Oi8qIExvdyBsZXZlbCB1dl9jYWxsIHRoYXQgYXZvaWRzIHN0YWxscyBmb3IgbG9uZyBydW5uaW5nIGJ1c3kgY29uZGl0aW9ucyAgKi9cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0NTg6c3RhdGljIGlubGluZSBpbnQgdXZfY2FsbF9zY2hlZCh1bnNpZ25lZCBsb25nIHIxLCB1bnNpZ25lZCBsb25nIHIyKVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ1OS17XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00NjItXFx0ZG8ge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ2MzpcXHRcXHRjYyA9IF9fdXZfY2FsbChyMSwgcjIpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2NC1cXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ2OS0vKlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQ3MDogKiBzcGVjaWFsIHZhcmlhbnQgb2YgdXZfY2FsbCB0aGF0IG9ubHkgdHJhbnNwb3J0cyB0aGUgY3B1IG9yIGd1ZXN0XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDcxLSAqIGhhbmRsZSBhbmQgdGhlIGNvbW1hbmQsIGxpa2UgZGVzdHJveSBvciB2ZXJpZnkuXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00NzM9c3RhdGljIGlubGluZSBpbnQgdXZfY21kX25vZGF0YSh1NjQgaGFuZGxlLCB1MTYgY21kLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4Mi1cXHRXQVJOKCFoYW5kbGUsIFxcXCJObyBoYW5kbGUgcHJvdmlkZWQgdG8gVWx0cmF2aXNvciBjYWxsIGNtZCAleFxcXFxuXFxcIiwgY21kKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo0ODM6XFx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQ4NC1cXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTUxMj1zdGF0aWMgaW5saW5lIGludCB1dl9saXN0X3NlY3JldHMoc3RydWN0IHV2X3NlY3JldF9saXN0ICpidWYsIHUxNiBzdGFydF9pZHgsXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MjAtXFx0fTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaDo1MjE6XFx0aW50IGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC01MjItXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD01NzE9c3RhdGljIGlubGluZSBpbnQgc2hhcmUodW5zaWduZWQgbG9uZyBhZGRyLCB1MTYgY21kKVxcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTg4LVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjU4OTpcXHRpZiAoIXV2X2NhbGwoMCwgKHU2NClcXHUwMDI2dXZjYikpXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNTkwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTQxPXN0YXRpYyBpbnQgX19pbml0IHV2X2luaXQocGh5c19hZGRyX3Qgc3Rvcl9iYXNlLCB1bnNpZ25lZCBsb25nIHN0b3JfbGVuKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTQ5LVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzo1MDpcXHRpZiAodXZfY2FsbCgwLCAodWludDY0X3QpXFx1MDAyNnV2Y2IpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTUxLVxcdFxcdHByX2VycihcXFwiVWx0cmF2aXNvciBpbml0IGZhaWxlZCB3aXRoIHJjOiAweCV4IHJyYzogMCV4XFxcXG5cXFwiLFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTkxPWludCB1dl9waW5fc2hhcmVkKHVuc2lnbmVkIGxvbmcgcGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtOTgtXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjk5OlxcdGlmICh1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xMDAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9MTEyPXN0YXRpYyBpbnQgdXZfZGVzdHJveSh1bnNpZ25lZCBsb25nIHBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTExOS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MTIwOlxcdGlmICh1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpKSB7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTEyMS1cXHRcXHQvKlxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTE2OD1pbnQgdXZfY29udmVydF9mcm9tX3NlY3VyZSh1bnNpZ25lZCBsb25nIHBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTE3NS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6MTc2OlxcdGlmICh1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpKVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy0xNzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM9MjUxPWludCBfX21ha2VfZm9saW9fc2VjdXJlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB1dl9jYl9oZWFkZXIgKnV2Y2IpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjY4LVxcdCAqL1xcbmFyY2gvczM5MC9rZXJuZWwvdXYuYzoyNjk6XFx0Y2MgPSBfX3V2X2NhbGwoMCwgKHU2NCl1dmNiKTtcXG5hcmNoL3MzOTAva2VybmVsL3V2LmMtMjcwLVxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgZXhwZWN0ZWQpO1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jPTU5OD1zdGF0aWMgaW5saW5lIHN0cnVjdCB1dl9jYl9xdWVyeV9rZXlzIHV2X3F1ZXJ5X2tleXModm9pZClcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy02MDQtXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjYwNTpcXHR1dl9jYWxsKDAsICh1aW50NjRfdClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTYwNi1cXHRyZXR1cm4gdXZjYjtcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz04MjY9aW50IHV2X3JldHJpZXZlX3NlY3JldCh1MTYgc2VjcmV0X2lkeCwgdTggKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgzNS1cXG5hcmNoL3MzOTAva2VybmVsL3V2LmM6ODM2OlxcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgzNy1cXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz0yODQ9aW50IGt2bV9zMzkwX3B2X2NyZWF0ZV9jcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy0zMTUtXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjMxNjpcXHRjYyA9IHV2X2NhbGwoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2t2bS9wdi5jLTMxNy1cXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz00MjQ9c3RhdGljIGludCBrdm1fczM5MF9wdl9kZWluaXRfdm1fZmFzdChzdHJ1Y3Qga3ZtICprdm0sIHUxNiAqcmMsIHUxNiAqcnJjKVxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTQzMi1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6NDMzOlxcdGNjID0gdXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtNDM0LVxcdGlmIChyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz03MDk9aW50IGt2bV9zMzkwX3B2X2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1MTYgKnJjLCB1MTYgKnJyYylcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYy03NDktXFxuYXJjaC9zMzkwL2t2bS9wdi5jOjc1MDpcXHRjYyA9IHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuYXJjaC9zMzkwL2t2bS9wdi5jLTc1MS1cXHQqcmMgPSB1dmNiLmhlYWRlci5yYztcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz03NzI9aW50IGt2bV9zMzkwX3B2X3NldF9zZWNfcGFybXMoc3RydWN0IGt2bSAqa3ZtLCB2b2lkICpoZHIsIHU2NCBsZW5ndGgsIHUxNiAqcmMsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtNzgxLVxcdH07XFxuYXJjaC9zMzkwL2t2bS9wdi5jOjc4MjpcXHRpbnQgY2MgPSB1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy03ODMtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9ODUxPWludCBrdm1fczM5MF9wdl9zZXRfY3B1X3N0YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTggc3RhdGUpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtODYwLVxcbmFyY2gvczM5MC9rdm0vcHYuYzo4NjE6XFx0Y2MgPSB1dl9jYWxsKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy04NjItXFx0S1ZNX1VWX0VWRU5UKHZjcHUtXFx1MDAzZWt2bSwgMywgXFxcIlBST1RWSVJUIFNFVCBDUFUgJWQgU1RBVEUgJWQgcmMgJXggcnJjICV4XFxcIixcXG4tLVxcbmFyY2gvczM5MC9rdm0vcHYuYz04Njk9aW50IGt2bV9zMzkwX3B2X2R1bXBfY3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqYnVmZiwgdTE2ICpyYywgdTE2ICpycmMpXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtODc4LVxcbmFyY2gvczM5MC9rdm0vcHYuYzo4Nzk6XFx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy04ODAtXFx0KnJjID0gdXZjYi5oZWFkZXIucmM7XFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9OTE2PWludCBrdm1fczM5MF9wdl9kdW1wX3N0b3Jfc3RhdGUoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYnVmZl91c2VyLFxcbi0tXFxuYXJjaC9zMzkwL2t2bS9wdi5jLTk2Mi1cXHRcXHQvKiBHZXQgMU1CIHdvcnRoIG9mIGd1ZXN0IHN0b3JhZ2Ugc3RhdGUgZGF0YSAqL1xcbmFyY2gvczM5MC9rdm0vcHYuYzo5NjM6XFx0XFx0Y2MgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNnV2Y2IpO1xcbmFyY2gvczM5MC9rdm0vcHYuYy05NjQtXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmM9MTAyND1pbnQga3ZtX3MzOTBfcHZfZHVtcF9jb21wbGV0ZShzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICpidWZmX3VzZXIsXFxuLS1cXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTA0MC1cXG5hcmNoL3MzOTAva3ZtL3B2LmM6MTA0MTpcXHRyZXQgPSB1dl9jYWxsX3NjaGVkKDAsICh1NjQpXFx1MDAyNmNvbXBsZXRlKTtcXG5hcmNoL3MzOTAva3ZtL3B2LmMtMTA0Mi1cXHQqcmMgPSBjb21wbGV0ZS5oZWFkZXIucmM7XFxuLS1cXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYz04Nzg9c3RhdGljIGlubGluZSBpbnQgdXZfbm1pX2tkYl9yZWFzb24odm9pZClcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTg5NS0gKi9cXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYzo4OTY6c3RhdGljIHZvaWQgdXZfY2FsbF9rZ2RiX2tkYihpbnQgY3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG1hc3RlcilcXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy04OTcte1xcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmMtOTI4LSNlbHNlIC8qICFDT05GSUdfS0dEQiAqL1xcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jOjkyOTpzdGF0aWMgaW5saW5lIHZvaWQgdXZfY2FsbF9rZ2RiX2tkYihpbnQgY3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG1hc3RlcilcXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYy05MzAte1xcbi0tXFxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmM9OTM4PXN0YXRpYyBpbnQgdXZfaGFuZGxlX25taSh1bnNpZ25lZCBpbnQgcmVhc29uLCBzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gveDg2L3BsYXRmb3JtL3V2L3V2X25taS5jLTk3OC1cXHRjYXNlIG5taV9hY3Rfa2dkYjpcXG5hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl9ubWkuYzo5Nzk6XFx0XFx0dXZfY2FsbF9rZ2RiX2tkYihjcHUsIHJlZ3MsIG1hc3Rlcik7XFxuYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfbm1pLmMtOTgwLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYz0xODU9c3RhdGljIGludCB1dmlvX2F0dGVzdGF0aW9uKHN0cnVjdCB1dmlvX2lvY3RsX2NiICp1dl9pb2N0bClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtMjI2LVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6MjI3OlxcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NCl1dmNiX2F0dGVzdCk7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yMjgtXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTI2OT1zdGF0aWMgaW50IHV2aW9fYWRkX3NlY3JldChzdHJ1Y3QgdXZpb19pb2N0bF9jYiAqdXZfaW9jdGwpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTI5My1cXHR1dmNiLmFkZHIgPSAodTY0KWFzcmNiO1xcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6Mjk0OlxcdHV2X2NhbGxfc2NoZWQoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy0yOTUtXFx0dXZfaW9jdGwtXFx1MDAzZXV2X3JjID0gdXZjYi5oZWFkZXIucmM7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTQwND1zdGF0aWMgaW50IHV2aW9fbG9ja19zZWNyZXRzKHN0cnVjdCB1dmlvX2lvY3RsX2NiICppb2N0bClcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmMtNDEzLVxcbmRyaXZlcnMvczM5MC9jaGFyL3V2ZGV2aWNlLmM6NDE0OlxcdHV2X2NhbGwoMCwgKHU2NClcXHUwMDI2dXZjYik7XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy00MTUtXFx0aW9jdGwtXFx1MDAzZXV2X3JjID0gdXZjYi5oZWFkZXIucmM7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jPTQzNj1zdGF0aWMgaW50IHV2aW9fcmV0cl9zZWNyZXQoc3RydWN0IHV2aW9faW9jdGxfY2IgKnV2X2lvY3RsKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYy00NTktXFx0dXZjYi5idWZfc2l6ZSA9IGJ1Zl9sZW47XFxuZHJpdmVycy9zMzkwL2NoYXIvdXZkZXZpY2UuYzo0NjA6XFx0dXZfY2FsbF9zY2hlZCgwLCAodTY0KVxcdTAwMjZ1dmNiKTtcXG5kcml2ZXJzL3MzOTAvY2hhci91dmRldmljZS5jLTQ2MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MTUuMTEwMzU5NjU1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTg3NzM5NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVVZDIEluc3RydWN0aW9uIGFuZCBJdHMgSW1wbGljYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdXZfY2FsbGAgZnVuY3Rpb24uIEl0J3MgdXNpbmcgdGhlIGBVVkNgIGluc3RydWN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhIHF1ZXN0aW9uOiBkb2VzIFFFTVUgVENHIGFjdHVhbGx5ICplbXVsYXRlKiB0aGF0PyBJIGtub3cgaXQgb2Z0ZW4gZG9lc24ndCBkZWFsIHdpdGggUHJvdGVjdGVkIFZpcnR1YWxpemF0aW9uIChQVikgZGlyZWN0bHkuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBVbHRyYXZpc29yIGZhY2lsaXR5IGlzIGV2ZW4gZW5hYmxlZCB3aXRoaW4gUUVNVSBUQ0cuXG5cbkkgc2VlIHRoZSBrZXJuZWwgY2hlY2tzIGlmIHRoZSBmYWNpbGl0eSBpcyBhdmFpbGFibGUsIHdoaWNoIHN1Z2dlc3RzIGl0IGV4cGVjdHMgaXQgdG8gKnBvdGVudGlhbGx5KiBiZSB0aGVyZS4gSSByZW1lbWJlciBzZWVpbmcgYGRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jYCBhbmQgcmVhbGl6ZSBpdCdzIGEgbW9kdWxlLiBUaGlzIG1ha2VzIG1lIHdvbmRlcjogY2FuIHdlIGdldCB0byBgdXZfZmluZF9zZWNyZXRgIGV2ZW4gaWYgYFVWQ2AgcmV0dXJucyBhbiBlcnJvcj8gSXQgbG9va3MgbGlrZSBpdCAqaGFuZGxlcyogZXJyb3JzIGNvbWluZyBiYWNrIGZyb20gYHV2X2xpc3Rfc2VjcmV0c2AuIFNwZWNpZmljYWxseSwgaWYgYHV2X2xpc3Rfc2VjcmV0c2AgZ2l2ZXMgYFVWQ19SQ19JTlZfQ01EYCwgdGhlbiBpdCB0cmFuc2xhdGVzIHRvIGAtRU5PREVWYC5cblxuTm93LCB0aGUgY29kZSBoYXMgcmVjZW50bHkgYmVlbiBwYXRjaGVkLiBJJ20gZm9jdXNpbmcgb24gdGhlIGNoYW5nZSBmcm9tIGBsaXN0LVx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB0byBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluIHRoZSBsb29wLiBBbHNvLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBzdGFydF9pZHggPSBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgaW4gdGhlIGBkby4uLndoaWxlYCBsb29wIGFuZCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeCA9IDBgLiBJZiBgdXZfbGlzdF9zZWNyZXRzYCBkb2Vzbid0ICpkbyogYW55dGhpbmcgKHBlcmhhcHMgYmVjYXVzZSB0aGUgVVZDIGlzIG5vdCBzdXBwb3J0ZWQpLCB0aGVuIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAgd291bGQgYmUgd2hhdGV2ZXIgaXQgd2FzIGluaXRpYWxpemVkIHRvLCB3aGljaCBjb3VsZCBiZSB6ZXJvLlxuXG5TbywgaWYgdGhlIFVWQyBpbnN0cnVjdGlvbiBpc24ndCBzdXBwb3J0ZWQgaW4gUUVNVSwgYHV2X2NhbGxgIGxpa2VseSBqdXN0IHRocm93cyBhIFNJR0lMTCBvciwgYXQgYmVzdCwgcmV0dXJucyBhbiBlcnJvciBjb2RlLiBIb3dldmVyLCB0aGUga2VybmVsICpzaG91bGRuJ3QqIGV2ZW4gYXR0ZW1wdCB0byB1c2UgaXQgaWYgdGhlIGZhY2lsaXR5IGlzIG5vdCBhY3R1YWxseSB0aGVyZS4gSSBzaG91bGQgbG9vayBpbnRvIHRoZSBgcGtleV91dl9pbml0YCBmdW5jdGlvbiB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzA4LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjI1LjI5ODEwMTQ4MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3NTgxNjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwa2V5X3V2X2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM9MjcyPXN0YXRpYyBzdHJ1Y3QgcGtleV9oYW5kbGVyIHV2X2hhbmRsZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yODMtICovXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6Mjg0OnN0YXRpYyBpbnQgX19pbml0IHBrZXlfdXZfaW5pdCh2b2lkKVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTI4NS17XFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYz0zMDg9c3RhdGljIHZvaWQgX19leGl0IHBrZXlfdXZfZXhpdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmMtMzE1LVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jOjMxNjptb2R1bGVfY3B1X2ZlYXR1cmVfbWF0Y2goUzM5MF9DUFVfRkVBVFVSRV9VViwgcGtleV91dl9pbml0KTtcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0zMTctbW9kdWxlX2V4aXQocGtleV91dl9leGl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6MjYuODczOTI4MzQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NzQ1Nzg3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNb2R1bGUgTG9hZCBDb25kaXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGBtb2R1bGVfY3B1X2ZlYXR1cmVfbWF0Y2goUzM5MF9DUFVfRkVBVFVSRV9VViwgcGtleV91dl9pbml0KWAgZnVuY3Rpb24gY2FsbCBtZWFucyB0aGUgbW9kdWxlIGBwa2V5X3V2X2luaXRgIHdpbGwgKm9ubHkqIGxvYWQgaWYgdGhlIGBTMzkwX0NQVV9GRUFUVVJFX1VWYCBDUFUgZmVhdHVyZSBpcyBwcmVzZW50LiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBmZWF0dXJlLCBzcGVjaWZpY2FsbHkgZmFjaWxpdHkgMTU4IOKAkyB0aGUgVWx0cmF2aXNvciBmZWF0dXJlIOKAkyBpcyBldmVuIGF2YWlsYWJsZSBpbiBRRU1VIFRDRy4gSSBrbm93IHRoYXQgUUVNVSBUQ0cgdHlwaWNhbGx5IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZlYXR1cmU7IGl0J3MgZ2VuZXJhbGx5IHJlc2VydmVkIGZvciBLVk0gbW9kZSBvbiBhIGhvc3Qgd2l0aCBhbiBVbHRyYXZpc29yLlxuXG5CdXQgd2FpdCwgSSBuZWVkIHRvIGNvbnNpZGVyIFN5emthbGxlci4gSXQgcnVucyBzMzkweCwgYW5kIEkga25vdyBpdCBzdXBwb3J0cyBib3RoIFRDRyBhbmQgS1ZNLiBJIG5lZWQgdG8gYmUgc3VyZS4gSWYgaXQgcnVucyBvbiBhIHJlYWwgczM5MHggaG9zdCAobGlrZSBJQk0gQ2xvdWQpLCBpdCAqY291bGQqIGJlIHVzaW5nIEtWTSwgd2hpY2ggd291bGQgbWFrZSB0aGlzIHBvc3NpYmxlLiBSaWdodCwgU3l6a2FsbGVyICpkb2VzKiBoYXZlIHMzOTB4IEtWTSBpbnN0YW5jZXMuIFNvIGl0ICppcyogcmVhY2hhYmxlIHZpYSBLVk0uXG5cblRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIGZvdW5kIHRoZSBidWcsIGFuZCB0aGUgcGF0Y2ggd2FzIGFwcGxpZWQgYnkgdGhlIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAgZW1haWwgYWRkcmVzcywgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBTeXprYWxsZXIgZWl0aGVyIHRyaWdnZXJlZCB0aGUgY29kZSBkaXJlY3RseSBvciBpdCB3YXMgYXQgbGVhc3QgdmFsaWRhdGVkIGluIHRoZWlyIHRlc3RpbmcuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlnIG9wdGlvbnMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIHRvIHdvcmsuIEkgdGhpbmsgYENPTkZJR19QS0VZX1VWYCBpcyByZXF1aXJlZCwgeWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTEyNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MzozMy4zNDg1MDk4NjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzUyMjE3NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBLRVlfVVZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZz0xMzc9Y29uZmlnIFBLRVlfUENLTU9cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU3LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTU4OmNvbmZpZyBQS0VZX1VWXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTktXFx0dHJpc3RhdGUgXFxcIlBLRVkgVVYgc3VwcG9ydCBoYW5kbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0MzozNC44ODM3NDA2NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3Mjc0MTU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENyeXB0b2dyYXBoaWMgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBLRVlfVVZgLiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBjcnlwdG9ncmFwaGljIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgZHJpdmVycy9jcnlwdG8vS2NvbmZpZ2AuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHR5cGVzIG9mIGtlcm5lbCBmZWF0dXJlcyBhcmUgZGVmaW5lZCBhbmQgd2hlcmUgSSdkIGV4cGVjdCB0byBzZWUgdGhlIGFzc29jaWF0ZWQgYnVpbGQtdGltZSBjb250cm9scy4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGl0cyBwcmVzZW5jZSwgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWxseSByZWxhdGVkIG9wdGlvbnMgaW4gdGhhdCBwYXJ0IG9mIHRoZSBrZXJuZWwgc291cmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTg3MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjM4LjE1NjQ4NDUyNVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1NTpcXHRcXHQgIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgYXJlIHN1cmUgeW91IG5ldmVyIG5lZWQgdG8gZGVyaXZlIHByb3RlY3RlZFxcbiAxNTY6XFx0XFx0ICBrZXlzIGZyb20gY2xlYXIga2V5IHZhbHVlcyBkaXJlY3RseSB2aWEgUENLTU8uXFxuIDE1NzpcXHRcXG4gMTU4OlxcdGNvbmZpZyBQS0VZX1VWXFxuIDE1OTpcXHRcXHR0cmlzdGF0ZSBcXFwiUEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuIDE2MDpcXHRcXHRkZXBlbmRzIG9uIFBLRVlcXG4gMTYxOlxcdFxcdGRlcGVuZHMgb24gUzM5MF9VVl9VQVBJXFxuIDE2MjpcXHRcXHRoZWxwXFxuIDE2MzpcXHRcXHQgIFRoaXMgaXMgdGhlIFBLRVkgVWx0cmF2aXNvciBzdXBwb3J0IGhhbmRsZXIgZm9yIGRlcml2aW5nIHByb3RlY3RlZFxcbiAxNjQ6XFx0XFx0ICBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZSBVbHRyYXZpc29yIChVVikuXFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdCAgVGhpcyBtb2R1bGUgd29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgVVYgZGV2aWNlIGFuZCBzdXBwb3J0cyB0aGVcXG4gMTY3OlxcdFxcdCAgcmV0cmlldmFsIG9mIHByb3RlY3RlZCBrZXlzIGZyb20gc2VjcmV0cyBzdG9yZWQgd2l0aGluIHRoZVxcbiAxNjg6XFx0XFx0ICBVViBmaXJtd2FyZSBsYXllci4gVGhpcyBzZXJ2aWNlIGlzIG9ubHkgYXZhaWxhYmxlIHdpdGhpblxcbiAxNjk6XFx0XFx0ICBhIHByb3RlY3RlZCBleGVjdXRpb24gZ3Vlc3QgYW5kIHRodXMgdGhpcyBtb2R1bGUgd2lsbCBmYWlsIHVwb25cXG4gMTcwOlxcdFxcdCAgbW9kcHJvYmUgaWYgbm8gcHJvdGVjdGVkIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBpcyBkZXRlY3RlZC5cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0ICBFbmFibGUgdGhpcyBvcHRpb24gaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgd2l0aCBhbiBLVk1cXG4gMTczOlxcdFxcdCAgZ3Vlc3Qgd2l0aCBwcm90ZWN0ZWQgZXhlY3V0aW9uIGFuZCB5b3Ugd2FudCB0byB1c2UgVVYgcmV0cmlldmFibGVcXG4gMTc0OlxcdFxcdCAgc2VjcmV0cyB2aWEgUEtFWSBBUEkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjM4LjE1NjU1ODU4NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU1NDQ0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoaXMgc2l0dWF0aW9uIGhpbmdlcyBvbiB0d28ga2V5IGZhY3RvcnM6IHRoZSBgUEtFWWAgYW5kIGBTMzkwX1VWX1VBUElgIHBhcmFtZXRlcnMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAsIGFuZCB0aGUgb25seSBsb2dpY2FsIG9uZSwgaXMgdG8gc3lzdGVtYXRpY2FsbHkgZXhhbWluZSB0aG9zZSB2YXJpYWJsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIHN0YXRlcyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggZWFjaCBvdGhlci4gQSBkZWVwZXIgZGl2ZSBpbnRvIGhvdyB0aGV5J3JlIHNldCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBtaWdodCBoYXZlIG9uIG90aGVyIHN5c3RlbSBjb21wb25lbnRzIHdpbGwgYmUgY3JpdGljYWwgdG8gcmVzb2x2aW5nIHRoZSB1bmRlcmx5aW5nIGlzc3VlLiBFc3NlbnRpYWxseSwgYFBLRVlgIGFuZCBgUzM5MF9VVl9VQVBJYCBhcmUgdGhlIGtleXMgdG8gdW5sb2NraW5nIHRoZSBzb2x1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNjQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjQxLjIxMjAwNTg0NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NzY4Njg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUEtFWVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnPTY3PWNvbmZpZyBaQ1JZUFRcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzctXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzo3ODpjb25maWcgUEtFWVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctNzktXFx0dHJpc3RhdGUgXFxcIktlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEwNC1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjEwNTpjb25maWcgUEtFWV9DQ0FcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEwNi1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBDQ0Egc3VwcG9ydCBoYW5kbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMjE6Y29uZmlnIFBLRVlfRVAxMVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTIyLVxcdHRyaXN0YXRlIFxcXCJQS0VZIEVQMTEgc3VwcG9ydCBoYW5kbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMzYtXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMzc6Y29uZmlnIFBLRVlfUENLTU9cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEzOC1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBQQ0tNTyBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1Ny1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnOjE1ODpjb25maWcgUEtFWV9VVlxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTU5LVxcdHRyaXN0YXRlIFxcXCJQS0VZIFVWIHN1cHBvcnQgaGFuZGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDM6NDIuNzk5Njk4MTUxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTY1MDMyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCBzdW1tYXJpemluZyB0aGUgcHJvbXB0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgYFMzOTBfVVZfVUFQSWAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgc3RyYWlnaHRmb3J3YXJkOiBmb2N1cyBvbiB0aGF0IHNwZWNpZmljIHRoaW5nLCBgUzM5MF9VVl9VQVBJYC4gUHJlc3VtYWJseSwgdGhpcyBpcyBhIHBhcnRpY3VsYXIgc2V0IG9mIGNvZGUsIGRvY3VtZW50YXRpb24sIG9yIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBhIHN5c3RlbSBvciBwcm9qZWN0LiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCBwb3RlbnRpYWwgY29udGV4dHM6IGlzIHRoaXMgYSBzcGVjaWZpYyB1c2VyLXNwYWNlIEFQSSBvbiBhbiBzMzkweCBhcmNoaXRlY3R1cmUsIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIFVWIChVbHRyYXZpc29yKSBvciBzb21lIG90aGVyIHZpcnR1YWxpemF0aW9uIGxheWVyPyBJdCBjb3VsZCBiZSBhIGRyaXZlciwgYSBsaWJyYXJ5LCBvciBldmVuIGEgYnVpbGQgdGFyZ2V0LlxuXG5UaGUgaW5zdHJ1Y3Rpb24gaXMgdmVyeSBjb25jaXNlLCB3aGljaCBzdWdnZXN0cyB0aGUgY29udGV4dCBpcyBhbHJlYWR5IGtub3duLCBvciBpdCdzIGEgdmVyeSBzcGVjaWZpYyBlbGVtZW50IHdpdGhpbiBhIG11Y2ggbGFyZ2VyIGNvbnZlcnNhdGlvbi4gSSBzaG91bGQgc3RhcnQgYnkgbWVudGFsbHkgY29ubmVjdGluZyB0aGlzIHRvIGFueSByZWNlbnQgZGlzY3Vzc2lvbnMgb3IgY3VycmVudCB0YXNrcyB0byBwcm92aWRlIGEgaGVscGZ1bCBzdW1tYXJ5LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBXaGF0J3MgdGhlICpwdXJwb3NlKiBvZiB0aGlzIHJldmlldz8gQW0gSSBjaGVja2luZyBmb3Igc29tZXRoaW5nIHNwZWNpZmljIOKAkyBhIGJ1ZywgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBjb21wYXRpYmlsaXR5LCBvciBkb2N1bWVudGF0aW9uIGFjY3VyYWN5PyBJcyB0aGlzIHBhcnQgb2YgYSBkZWJ1Z2dpbmcgcHJvY2VzcywgYSBjb2RlIHJldmlldywgb3IgZG9jdW1lbnRhdGlvbiB1cGRhdGU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYmVmb3JlIEkgc3RhcnQsIG90aGVyd2lzZSwgSSBtaWdodCB3YXN0ZSB0aW1lIGdvaW5nIGRvd24gYSByYWJiaXQgaG9sZS4gTGV0J3Mgc3RhcnQgd2l0aCBhIHRob3JvdWdoIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjg2MywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjQ2Ljg1NjIwNDYwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NTAzMDUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUzM5MF9VVl9VQVBJXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvczM5MC9jaGFyL0tjb25maWc9NzU9Y29uZmlnIEhNQ19EUlZcXG4tLVxcbmRyaXZlcnMvczM5MC9jaGFyL0tjb25maWctODctXFxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZzo4ODpjb25maWcgUzM5MF9VVl9VQVBJXFxuZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZy04OS1cXHRkZWZfdHJpc3RhdGUgbVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo0OC40NDEyMzk3MTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAyNTAwNjc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgVVYgU3VwcG9ydCoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IFMzOTAsIHRoYXQncyB0aGUgU3lzdGVtIHogYXJjaGl0ZWN0dXJlLiBUaGUgZm9jdXMgaXMgbGlrZWx5IG9uIFVuaXByb2Nlc3NvciBWaXJ0dWFsaXphdGlvbiAoVVYpIFVzZXIgQVBJIHN1cHBvcnQsIGdpdmVuIHRoZSBgUzM5MF9VVl9VQVBJYCByZWZlcmVuY2UuIE15IGludHVpdGlvbiBpbW1lZGlhdGVseSBwb2ludHMgbWUgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCBzcGVjaWZpY2FsbHkgdG8gdGhlIGNoYXJhY3RlciBkZXZpY2UgZHJpdmVycyBpbiB0aGUgUzM5MCBhcmNoaXRlY3R1cmUuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGFzIFVBUEkgZmVhdHVyZXMgb2Z0ZW4gaW52b2x2ZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZXMgZm9yIGludGVyYWN0aW9uIGJldHdlZW4gdXNlciBzcGFjZSBhbmQgdGhlIGtlcm5lbC4gTGV0J3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIFVWIFVBUEkgc3VwcG9ydCBkdXJpbmcgdGhlIGtlcm5lbCBidWlsZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcHJlc2VudCwgYW5kIGlmIHNvLCB3aGF0IGNvbmRpdGlvbnMgZW5hYmxlIHRoZSBpbmNsdXNpb24gb2YgdGhlIGBTMzkwX1VWX1VBUElgIGZlYXR1cmUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGRlZmluZWQgdGhlcmUuIEknbSBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgYW55IGhlbHBmdWwgY29tbWVudHMgdGhhdCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQgY29uZmlndXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyOTIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo1Mi40NjYyNTI4OTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9zMzkwL2NoYXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4NTpcXHRcXHQgIHRyYW5zZmVyIGNhY2hlIHNpemUgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSAwLjVNQiB0byBOIGJ5dGVzLiBJZiBOXFxuICA4NjpcXHRcXHQgIGlzIHplcm8sIHRoZW4gbm8gY2FjaGluZyBpcyBwZXJmb3JtZWQuXFxuICA4NzpcXHRcXG4gIDg4OlxcdGNvbmZpZyBTMzkwX1VWX1VBUElcXG4gIDg5OlxcdFxcdGRlZl90cmlzdGF0ZSBtXFxuICA5MDpcXHRcXHRwcm9tcHQgXFxcIlVsdHJhdmlzb3IgdXNlcnNwYWNlIEFQSVxcXCJcXG4gIDkxOlxcdFxcdGRlcGVuZHMgb24gUzM5MFxcbiAgOTI6XFx0XFx0aGVscFxcbiAgOTM6XFx0XFx0ICBTZWxlY3RpbmcgZXhwb3NlcyBwYXJ0cyBvZiB0aGUgVVYgaW50ZXJmYWNlIHRvIHVzZXJzcGFjZVxcbiAgOTQ6XFx0XFx0ICBieSBwcm92aWRpbmcgYSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgYXQgL2Rldi91di5cXG4gIDk1OlxcdFxcdCAgVXNpbmcgSU9DVExzIG9uZSBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgVVYuXFxuICA5NjpcXHRcXHQgIFRoZSBkZXZpY2UgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIFVsdHJhdmlzb3JcXG4gIDk3OlxcdFxcdCAgRmFjaWxpdHkgKDE1OCkgaXMgcHJlc2VudC5cXG4gIDk4OlxcdFxcbiAgOTk6XFx0Y29uZmlnIFMzOTBfVEFQRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo1Mi40NjYzNDk4MzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNDE5ODgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEtleSBEZWZpbml0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0J3MgY2xlYXIgd2UnbGwgbmVlZCBkZWZpbml0aW9ucyBmb3IgYFBLRVlfVVZgLCBgUEtFWWAsIGFuZCBgUzM5MF9VVl9VQVBJYC4gTWFrZXMgc2Vuc2UsIHRoZXNlIGFyZSBsaWtlbHkgY3JpdGljYWwgZm9yIG91ciBjb25maWd1cmF0aW9uLiBXYWl0IGEgc2Vjb25kLCB3YXNuJ3QgYFBLRVlgIGRlZmluZWQgc29tZXdoZXJlIGluIHRoZSBjcnlwdG8gZHJpdmVycz8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBBaCB5ZXMsIGl0J3MgcmlnaHQgdGhlcmUgaW4gYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgLiBSaWdodCwgbm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gV2hhdCBvdGhlciBwaWVjZXMgZG9lcyBgUEtFWWAgcmVseSBvbiwgb3Igd2hpY2ggb2YgaXRzIHVwc3RyZWFtIGVsZW1lbnRzIG1pZ2h0IGFmZmVjdCBteSBjb25zaWRlcmF0aW9ucz8gTGV0J3MgY2hlY2sgdGhvc2UgZGVwZW5kZW5jaWVzIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc4NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQzOjU2LjU5MDU1MTI3NVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc1OlxcdFxcdCAgdG8gOCBpbiBDb3Byb2Nlc3NvciAoQ0VYeEMpLCBFUDExIENvcHJvY2Vzc29yIChDRVh4UClcXG4gIDc2OlxcdFxcdCAgb3IgQWNjZWxlcmF0b3IgKENFWHhBKSBtb2RlLlxcbiAgNzc6XFx0XFxuICA3ODpcXHRjb25maWcgUEtFWVxcbiAgNzk6XFx0XFx0dHJpc3RhdGUgXFxcIktlcm5lbCBBUEkgZm9yIHByb3RlY3RlZCBrZXkgaGFuZGxpbmdcXFwiXFxuICA4MDpcXHRcXHRkZXBlbmRzIG9uIFMzOTBcXG4gIDgxOlxcdFxcdGhlbHBcXG4gIDgyOlxcdFxcdCAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkIHRoZSBwa2V5IGtlcm5lbCBtb2R1bGVzIHByb3ZpZGUgYW4gQVBJXFxuICA4MzpcXHRcXHQgIGZvciBjcmVhdGlvbiBhbmQgaGFuZGxpbmcgb2YgcHJvdGVjdGVkIGtleXMuIE90aGVyIHBhcnRzIG9mIHRoZVxcbiAgODQ6XFx0XFx0ICBrZXJuZWwgb3IgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBtYXkgdXNlIHRoZXNlIGZ1bmN0aW9ucy5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBUaGUgcHJvdGVjdGVkIGtleSBzdXBwb3J0IGlzIGRpc3RyaWJ1dGVkIGludG86XFxuICA4NzpcXHRcXHQgIC0gQSBwa2V5IGJhc2UgYW5kIEFQSSBrZXJuZWwgbW9kdWxlIChwa2V5LmtvKSB3aGljaCBvZmZlcnMgdGhlXFxuICA4ODpcXHRcXHQgICAgaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBwa2V5IGhhbmRsZXIga2VybmVsIG1vZHVsZXMsIHRoZSBpb2N0bFxcbiAgODk6XFx0XFx0ICAgIGFuZCB0aGUgc3lzZnMgQVBJIGFuZCB0aGUgaW4ta2VybmVsIEFQSSB0byB0aGUgY3J5cHRvIGNpcGhlclxcbiAgOTA6XFx0XFx0ICAgIGltcGxlbWVudGF0aW9ucyB1c2luZyBwcm90ZWN0ZWQga2V5LlxcbiAgOTE6XFx0XFx0ICAtIEEgcGtleSBwY2ttbyBrZXJuZWwgbW9kdWxlIChwa2V5LXBja21vLmtvKSB3aGljaCBpcyBhdXRvbWF0aWNhbGx5XFxuICA5MjpcXHRcXHQgICAgbG9hZGVkIHdoZW4gcGNrbW8gc3VwcG9ydCAodGhhdCBpcyBnZW5lcmF0aW9uIG9mIHByb3RlY3RlZCBrZXlzXFxuICA5MzpcXHRcXHQgICAgZnJvbSBjbGVhciBrZXkgdmFsdWVzKSBpcyBhdmFpbGFibGUuXFxuICA5NDpcXHRcXHQgIC0gQSBwa2V5IENDQSBrZXJuZWwgbW9kdWxlIChwa2V5LWNjYS5rbykgd2hpY2ggaXMgYXV0b21hdGljYWxseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0Mzo1Ni41OTA2Mjk1NTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NzUyMDEyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBQS0VZYCBEZXBlbmRlbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGUgYFBLRVlgIGZ1bmN0aW9uYWxpdHkgaGFzIGEgZGVwZW5kZW5jeSBvbiB0aGUgYFMzOTBgIGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5LiBJdCdzIGRyaWxsaW5nIGludG8gdGhlIGBhcmNoL3MzOTAva2VybmVsL3V2LmNgIGZpbGUuIFJpZ2h0LCBJIHNlZSB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgYXJvdW5kIHRoZSBgdXZfZmluZF9zZWNyZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0byBiZSB0aGUga2V5IGNvbXBvbmVudCBoZXJlLCBhbmQgaXQncyBiZWluZyBleHBvcnRlZC4gTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgY3Jvc3MtcmVmZXJlbmNlczsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLiBJdCBsb29rcyBsaWtlIGBwa2V5X3V2LmNgIGlzIHVzaW5nIGl0LCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHBvdGVudGlhbCB1c2VycyBvciBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBnZXQgaW1wYWN0ZWQuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaW1wYWN0cyBvdGhlciBhcmVhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg0MzksIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjAwLjI3ODE1MTkzMVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTA4NzU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dl9maW5kX3NlY3JldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD02MTM9c3RhdGljIGlubGluZSBpbnQgdXZfcmVtb3ZlX3NoYXJlZCh1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC02MTctXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NjE4OmludCB1dl9maW5kX3NlY3JldChjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNjE5LVxcdFxcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdCAqbGlzdCxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYz03NTc9c3RhdGljIGludCBmaW5kX3NlY3JldF9pbl9wYWdlKGNvbnN0IHU4IHNlY3JldF9pZFtVVl9TRUNSRVRfSURfTEVOXSxcXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzItLyoqXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc3MzogKiB1dl9maW5kX3NlY3JldCgpIC0gc2VhcmNoIHNlY3JldCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzZWNyZXQgaWQuXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTc3NC0gKiBAc2VjcmV0X2lkOiBzZWFyY2ggcGF0dGVybi5cXG4tLVxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03NzktICovXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjc4MDppbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxcbmFyY2gvczM5MC9rZXJuZWwvdXYuYy03ODEtXFx0XFx0ICAgc3RydWN0IHV2X3NlY3JldF9saXN0ICpsaXN0LFxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNS19XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jOjgwNjpFWFBPUlRfU1lNQk9MX0dQTCh1dl9maW5kX3NlY3JldCk7XFxuYXJjaC9zMzkwL2tlcm5lbC91di5jLTgwNy1cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTIwPU1PRFVMRV9ERVNDUklQVElPTihcXFwiczM5MCBwcm90ZWN0ZWQga2V5IFVWIGhhbmRsZXJcXFwiKTtcXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTIyLS8qXFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MjM6ICogT25lIHByZS1hbGxvY2F0ZWQgdXZfc2VjcmV0X2xpc3QgZm9yIHVzZSB3aXRoIHV2X2ZpbmRfc2VjcmV0KClcXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy0yNC0gKi9cXG4tLVxcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jPTkzPXN0YXRpYyBpbnQgZ2V0X3NlY3JldF9tZXRhZGF0YShjb25zdCB1OCBzZWNyZXRfaWRbVVZfU0VDUkVUX0lEX0xFTl0sXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3BrZXlfdXYuYy05OS1cXHRtZW1zZXQodXZfbGlzdCwgMCwgc2l6ZW9mKCp1dl9saXN0KSk7XFxuZHJpdmVycy9zMzkwL2NyeXB0by9wa2V5X3V2LmM6MTAwOlxcdHJjID0gdXZfZmluZF9zZWNyZXQoc2VjcmV0X2lkLCB1dl9saXN0LCBzZWNyZXQpO1xcbmRyaXZlcnMvczM5MC9jcnlwdG8vcGtleV91di5jLTEwMS1cXHRtdXRleF91bmxvY2soXFx1MDAyNnV2X2xpc3RfbXV0ZXgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDowMS43ODcyNDQ1NzhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTkxOTY0NjAyMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFVWIFNlY3JldCBGaW5kaW5nIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQgd2l0aCBTeXprYWxsZXIuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBpbiBgdXYuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IHNlY3JldHMgYXJlIGZvdW5kIGFuZCBsaXN0ZWQuIFRoZSBjcml0aWNhbCBjb2RlIHBhdGggaXMgaW4gdGhlIGB1dl9maW5kX3NlY3JldGAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBvbmUgdGhhdCB3YXMgbW9kaWZpZWQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIHJlYWNoIHRoaXMgY29kZS4gSXQgc2VlbXMgbGlrZSB0aGlzIGludm9sdmVzIGVuYWJsaW5nIHRoZSBgUEtFWV9VVmAgbW9kdWxlLiBMZXQgbWUgdmVyaWZ5OiBgUEtFWV9VVmAgYW5kIGBTMzkwX1VWX1VBUElgIGlzIHVzZWQgaGVyZT8gWWVzLiBJIHNlZSBub3cgdGhhdCBgUzM5MF9VVl9VQVBJYCBpcyBuZWVkZWQgYnkgYFBLRVlfVVZgLiBBbmQgYFBLRVlgIGl0c2VsZi4gQWxyaWdodCwgc28gSSdsbCBuZWVkIGBQS0VZX1VWYCwgYFMzOTBfVVZfVUFQSWAsIGFuZCBgUEtFWWAgZW5hYmxlZCBpbiB0aGUgY29uZmlnLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBidWcgaW4gdGhlIGxvb3AgbG9naWMgd2l0aGluIGB1dl9maW5kX3NlY3JldGAuIEl0IGxvb2tzIGxpa2UgYHN0YXJ0X2lkeGAgd2FzIG5vdCB1cGRhdGVkIGNvcnJlY3RseSB3aXRoaW4gdGhlIGxvb3AsIGxlYWRpbmcgdG8gdGhlIGxvb3AgcG90ZW50aWFsbHkgdGVybWluYXRpbmcgYWZ0ZXIgYSBzaW5nbGUgaXRlcmF0aW9uIGV2ZW4gaWYgdGhlcmUgd2VyZSBtb3JlIHNlY3JldHMgdG8gYmUgcHJvY2Vzc2VkLiBTcGVjaWZpY2FsbHksIHRoZSBvbGQgY29kZSdzIGxvZ2ljIG9mIHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSAqZW5kKiBvZiB0aGUgbG9vcCwgdGhlbiBjaGVja2luZyBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgKHdoZXJlIHRoZSBuZXcgYHN0YXJ0X2lkeGAgaXMgZXF1YWwgdG8gdGhlIG5ldyBgbmV4dF9zZWNyZXRfaWR4YCksIG1lYW50IHRoZSBsb29wIHdvdWxkbid0IGl0ZXJhdGUgYmV5b25kIHRoZSBmaXJzdCBwYWdlLlxuXG5UaGUgbmV3IGNvZGUsIGJ5IG1vdmluZyB0aGUgYHN0YXJ0X2lkeGAgdXBkYXRlICp0byB0aGUgYmVnaW5uaW5nKiBvZiB0aGUgbG9vcCBmaXhlcyB0aGlzLiBJdCBlbnN1cmVzIHRoZSBjaGVjayBgc3RhcnRfaWR4IFx1MDAzYyBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAgY29tcGFyZXMgdGhlIGN1cnJlbnQgdmFsdWUgd2l0aCB0aGUgbmV3IHZhbHVlLCBhbGxvd2luZyB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHNlY3JldHMuXG5cbkFsc28sIGl0IGxvb2tzIGxpa2UgdGhlcmUncyBhIHBvdGVudGlhbCBmaXggcmVsYXRlZCB0byB1c2luZyBgbnVtX3NlY3Jfc3RvcmVkYCBpbnN0ZWFkIG9mIGB0b3RhbF9udW1fc2VjcmV0c2Agd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVhZCBwYXN0IGEgcGFnZSBib3VuZGFyeS5cblxuVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGJ1ZyBmaXgsIHNvIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgdXZfZmluZF9zZWNyZXRgLCBiZWNhdXNlIHRoYXQncyB0aGUgb25lIG1vZGlmaWVkLCBhbmQgaXQncyBhbHNvIGV4cG9ydGVkLiBObyBvdGhlciBmdW5jdGlvbnMgbmVlZCB0byBiZSBjYWxsZWQuXG5cblNvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlOiBgUEtFWV9VVmAsIGBTMzkwX1VWX1VBUElgLCBhbmQgYFBLRVlgLiBUaGVzZSBsb29rIGxpa2UgdGhlIHJlcXVpcmVkIGluZ3JlZGllbnRzLiBOb3cgSSdtIHJlYWR5IHRvIGNyYWZ0IHNvbWUgU3l6a2FsbGVyIHRhcmdldHMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MzkyLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDoyMC45ODM3MDcwMjNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTMzODQ0MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBLRVlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9jcnlwdG8vS2NvbmZpZz02Nz1jb25maWcgWkNSWVBUXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTc3LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6Nzg6Y29uZmlnIFBLRVlcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTc5LVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwgQVBJIGZvciBwcm90ZWN0ZWQga2V5IGhhbmRsaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDQtXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxMDU6Y29uZmlnIFBLRVlfQ0NBXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMDYtXFx0dHJpc3RhdGUgXFxcIlBLRVkgQ0NBIHN1cHBvcnQgaGFuZGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTIwLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTIxOmNvbmZpZyBQS0VZX0VQMTFcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTEyMi1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBFUDExIHN1cHBvcnQgaGFuZGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWctMTM2LVxcbmRyaXZlcnMvY3J5cHRvL0tjb25maWc6MTM3OmNvbmZpZyBQS0VZX1BDS01PXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xMzgtXFx0dHJpc3RhdGUgXFxcIlBLRVkgUENLTU8gc3VwcG9ydCBoYW5kbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZy0xNTctXFxuZHJpdmVycy9jcnlwdG8vS2NvbmZpZzoxNTg6Y29uZmlnIFBLRVlfVVZcXG5kcml2ZXJzL2NyeXB0by9LY29uZmlnLTE1OS1cXHR0cmlzdGF0ZSBcXFwiUEtFWSBVViBzdXBwb3J0IGhhbmRsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjIyLjQ5NzA5OTM5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzA4MjMzNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyBvZiBzb21lb25lIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIEtlcm5lbCBDcnlwdG8gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUga2VybmVsJ3MgY3J5cHRvZ3JhcGhpYyBmZWF0dXJlcyBhcmUgY29uZmlndXJlZC4gSSBzZWUgYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgIGFuZCBJIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgdGhhdCBpdCdzIHNvdXJjZWQgZnJvbSBlaXRoZXIgdGhlIG1haW4gYGNyeXB0by9LY29uZmlnYCBmaWxlIG9yIHRoZSB0b3AtbGV2ZWwgYGRyaXZlcnMvS2NvbmZpZ2AuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEtjb25maWcgZmlsZXMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoaWNoIG9uZSB0YWtlcyBwcmVjZWRlbmNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgYGRyaXZlcnMvY3J5cHRvL0tjb25maWdgIGF0IGl0cyB0b3AgbGV2ZWwgdG8gZGV0ZXJtaW5lIGl0cyByb2xlIHdpdGhpbiB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGZyYW1ld29yay4gSSB3aWxsIGNoZWNrIHdoYXQgb3B0aW9ucyBhcmUgZGVmaW5lZCwgd2hhdCBvdGhlciBLY29uZmlnIGZpbGVzIGFyZSBpbmNsdWRlZCwgYW5kIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFyZSBzdHJ1Y3R1cmVkLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyBjcnlwdG8gZHJpdmVycyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTkwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDQ6MjYuMjA1MzM1NjM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudWNvbmZpZyBDUllQVE9fSFdcXG4gICA0OlxcdFxcdGJvb2wgXFxcIkhhcmR3YXJlIGNyeXB0byBkZXZpY2VzXFxcIlxcbiAgIDU6XFx0XFx0ZGVmYXVsdCB5XFxuICAgNjpcXHRcXHRoZWxwXFxuICAgNzpcXHRcXHQgIFNheSBZIGhlcmUgdG8gZ2V0IHRvIHNlZSBvcHRpb25zIGZvciBoYXJkd2FyZSBjcnlwdG8gZGV2aWNlcyBhbmRcXG4gICA4OlxcdFxcdCAgcHJvY2Vzc29ycy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS5cXG4gICA5OlxcdFxcbiAgMTA6XFx0XFx0ICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kIGRpc2FibGVkLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRpZiBDUllQVE9fSFdcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0c291cmNlIFxcXCJkcml2ZXJzL2NyeXB0by9hbGx3aW5uZXIvS2NvbmZpZ1xcXCJcXG4gIDE1OlxcdFxcbiAgMTY6XFx0Y29uZmlnIENSWVBUT19ERVZfUEFETE9DS1xcbiAgMTc6XFx0XFx0dHJpc3RhdGUgXFxcIlN1cHBvcnQgZm9yIFZJQSBQYWRMb2NrIEFDRVxcXCJcXG4gIDE4OlxcdFxcdGRlcGVuZHMgb24gWDg2IFxcdTAwMjZcXHUwMDI2ICFVTUxcXG4gIDE5OlxcdFxcdGhlbHBcXG4gIDIwOlxcdFxcdCAgU29tZSBWSUEgcHJvY2Vzc29ycyBjb21lIHdpdGggYW4gaW50ZWdyYXRlZCBjcnlwdG8gZW5naW5lXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjI2LjIwNTQyMzAzNVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjYzODIxNzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTZWNyZXQgUmV0cmlldmFsIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGUgZml4IHJlcXVpcmVzIGBDUllQVE9fSFdgLCB3aGljaCBtYWtlcyBzZW5zZSBzaW5jZSBpdCBkZWZhdWx0cyB0byAneScuIEkgbmVlZCB0byBjb25maXJtIGlmIGBDUllQVE9gIGlzIGFsc28gYSBkZXBlbmRlbmN5LCBhbmQgaXQgc2VlbXMgbGlrZWx5IGdpdmVuIHRoYXQgYGRyaXZlcnMvY3J5cHRvYCBpcyB1c3VhbGx5IHdpdGhpbiBgQ1JZUFRPYC4gSG93ZXZlciwgYFBLRVlfVVZgIGlzIHRoZSBrZXkgY29tcG9uZW50IGhlcmUuXG5cbkhlcmUncyB0aGUgZ2lzdDogdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGJ1ZyBpbiBgdXZfZmluZF9zZWNyZXRgLiBTcGVjaWZpY2FsbHksIHRoZSBsb29wIGxvZ2ljIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBzZWNyZXQgcGFnZXMgd2FzIGZsYXdlZCwgY2F1c2luZyBpdCB0byBleGl0IGVhcmx5LiBUaGlzIHdhcyBkdWUgdG8gYW4gdXBkYXRlIHRvIGBzdGFydF9pZHhgIHdpdGhpbiB0aGUgbG9vcCBiZWZvcmUgdGhlIGNvbmRpdGlvbiBjaGVjaywgY2F1c2luZyBhbiBlYXJseSB0ZXJtaW5hdGlvbi4gVGhlcmUncyBhbHNvIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5IGJlaW5nIGFkZHJlc3NlZCBieSB1c2luZyBgbGlzdC1cdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgLCB3aGljaCBjb3JyZWN0cyBob3cgc2VjcmV0cyBhcmUgaXRlcmF0ZWQgd2l0aGluIGEgc2luZ2xlIHBhZ2UuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMsIHBlcnRhaW5pbmcgdG8gaG93IHRoZSBzMzkweCBVbHRyYXZpc29yIHJldHJpZXZlcyBzZWNyZXRzLiBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGAvZGV2L3BrZXlgIGlvY3RsIGludGVyZmFjZSDigJMgYXNzdW1pbmcgdGhlIGBQS0VZX1VWYCBtb2R1bGUgaXMgbG9hZGVkLiBTaW5jZSB1c2Vyc3BhY2UgY2FuIGFjY2VzcyB0aGlzIHRocm91Z2ggYW4gaW9jdGwsIHRoaXMgd291bGQgYmUgaGlnaGx5IHZhbHVhYmxlIHRvIGZ1enouIEl0J3MgY3J1Y2lhbCB0byB2ZXJpZnkgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXG5cblRvIHRlc3QgdGhpcywgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbi5cblxuVG8gZW5hYmxlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24sIEkgbmVlZCBgUEtFWV9VVmAsIGBTMzkwX1VWX1VBUElgIGFuZCBgUEtFWWAuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjY5MSwiT3V0cHV0VG9rZW5zIjoyMjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDozNC44NjkyNDgxNDdaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDMyMjkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEtFWV9VVlwiLFxuICAgIFwiUzM5MF9VVl9VQVBJXCIsXG4gICAgXCJQS0VZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfZmluZF9zZWNyZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEtFWV9VVlwiLFxuICAgIFwiUzM5MF9VVl9VQVBJXCIsXG4gICAgXCJQS0VZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZfZmluZF9zZWNyZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiB0aGUgYHV2X2ZpbmRfc2VjcmV0YCBmdW5jdGlvbiB3aGVyZSB0aGUgbG9vcCB0byBpdGVyYXRlIHRocm91Z2ggcGFnZXMgb2Ygc2VjcmV0cyB3b3VsZCB0ZXJtaW5hdGUgcHJlbWF0dXJlbHkgYWZ0ZXIgdGhlIGZpcnN0IGl0ZXJhdGlvbiBiZWNhdXNlIGBzdGFydF9pZHhgIHdhcyB1cGRhdGVkIHRvIGBsaXN0LVxcdTAwM2VuZXh0X3NlY3JldF9pZHhgIGJlZm9yZSB0aGUgbG9vcCBjb25kaXRpb24gY2hlY2suIEl0IGFsc28gZml4ZXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGJ5IHVzaW5nIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIGluc3RlYWQgb2YgYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCB3aGVuIGl0ZXJhdGluZyBvdmVyIHNlY3JldHMgaW4gYSBzaW5nbGUgcGFnZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgczM5MHggVWx0cmF2aXNvciBzZWNyZXQgcmV0cmlldmFsIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgL2Rldi9wa2V5YCBpb2N0bCBpbnRlcmZhY2Ugd2hlbiB0aGUgYFBLRVlfVVZgIG1vZHVsZSBpcyBsb2FkZWQuIEZ1enppbmcgdGhpcyBpcyB2YWx1YWJsZSB0byBlbnN1cmUgdGhlIHNlY3JldCByZXRyaWV2YWwgbG9naWMgaGFuZGxlcyBtdWx0aS1wYWdlIHJlc3BvbnNlcyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjM0LjkzOTU3NzcwNloiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM4MzgwMjk4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDozNC45NDAwODA3NDZaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzM4Mzc1MjExNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCAodG90YWwgc2VjcmV0cyBpbiB0aGUgZ3Vlc3QpIHRvIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuMi4gSXQgZml4ZXMgdGhlIGxvb3AgY29uZGl0aW9uIGluIGB1dl9maW5kX3NlY3JldGAgdG8gY29ycmVjdGx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzIGJ5IHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgcmF0aGVyIHRoYW4gdGhlIGVuZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTEwZDlkNDkyMTY3YWMwZTI2NDkyOWUzZDAxMTBhMTQxNGM4YTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMTY6NDI6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3V2LmMgYi9hcmNoL3MzOTAva2VybmVsL3V2LmNcbmluZGV4IGEyODRmOThkOTcxNjguLmU3MGFjYWQwOWNkNWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3MzOTAva2VybmVsL3V2LmNcbisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdXYuY1xuQEAgLTc2MCw3ICs3NjAsNyBAQCBzdGF0aWMgaW50IGZpbmRfc2VjcmV0X2luX3BhZ2UoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIHtcbiBcdHUxNiBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGlzdC1cdTAwM2V0b3RhbF9udW1fc2VjcmV0czsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZDsgaSsrKSB7XG4gXHRcdGlmIChtZW1jbXAoc2VjcmV0X2lkLCBsaXN0LVx1MDAzZXNlY3JldHNbaV0uaWQsIFVWX1NFQ1JFVF9JRF9MRU4pID09IDApIHtcbiBcdFx0XHQqc2VjcmV0ID0gbGlzdC1cdTAwM2VzZWNyZXRzW2ldLmhkcjtcbiBcdFx0XHRyZXR1cm4gMDtcbkBAIC03ODEsMTEgKzc4MSwxNCBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHQgICBzdHJ1Y3QgdXZfc2VjcmV0X2xpc3QgKmxpc3QsXG4gXHRcdCAgIHN0cnVjdCB1dl9zZWNyZXRfbGlzdF9pdGVtX2hkciAqc2VjcmV0KVxuIHtcbi1cdHUxNiBzdGFydF9pZHggPSAwO1xuK1x0dTE2IHN0YXJ0X2lkeDtcbiBcdHUxNiBsaXN0X3JjO1xuIFx0aW50IHJldDtcbiBcbitcdGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtcbitcbiBcdGRvIHtcbitcdFx0c3RhcnRfaWR4ID0gbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHg7XG4gXHRcdHV2X2xpc3Rfc2VjcmV0cyhsaXN0LCBzdGFydF9pZHgsIFx1MDAyNmxpc3RfcmMsIE5VTEwpO1xuIFx0XHRpZiAobGlzdF9yYyAhPSBVVkNfUkNfRVhFQ1VURUQgXHUwMDI2XHUwMDI2IGxpc3RfcmMgIT0gVVZDX1JDX01PUkVfREFUQSkge1xuIFx0XHRcdGlmIChsaXN0X3JjID09IFVWQ19SQ19JTlZfQ01EKVxuQEAgLTc5Niw3ICs3OTksNiBAQCBpbnQgdXZfZmluZF9zZWNyZXQoY29uc3QgdTggc2VjcmV0X2lkW1VWX1NFQ1JFVF9JRF9MRU5dLFxuIFx0XHRyZXQgPSBmaW5kX3NlY3JldF9pbl9wYWdlKHNlY3JldF9pZCwgbGlzdCwgc2VjcmV0KTtcbiBcdFx0aWYgKHJldCA9PSAwKVxuIFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdHN0YXJ0X2lkeCA9IGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4O1xuIFx0fSB3aGlsZSAobGlzdF9yYyA9PSBVVkNfUkNfTU9SRV9EQVRBIFx1MDAyNlx1MDAyNiBzdGFydF9pZHggXHUwMDNjIGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4KTtcbiBcbiBcdHJldHVybiAtRU5PRU5UO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDQ6MzQuOTQwMDgxNTM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTYxMzA1NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBzMzkwIFNlY3JldCBIYW5kbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgb24gYGFyY2gvczM5MC9rZXJuZWwvdXYuY2AsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHNlY3JldCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVVYgc3lzdGVtLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIGJ1ZyBmaXgsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgYW55ICpuZXcqIHJpc2tzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuRmlyc3QsIHRoZSBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnVuY3Rpb24gaXMgbW9kaWZpZWQuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQgYGxpc3QtXHUwMDNldG90YWxfbnVtX3NlY3JldHNgIGluIHRoZSBsb29wIGNvbmRpdGlvbiwgYnV0IG5vdyB1c2VzIGBsaXN0LVx1MDAzZW51bV9zZWNyX3N0b3JlZGAuIE15IGltbWVkaWF0ZSBhc3N1bXB0aW9uIGlzIHRoYXQgYHRvdGFsX251bV9zZWNyZXRzYCBwcm9iYWJseSByZXByZXNlbnRzIHRoZSAqdG90YWwqIG51bWJlciBvZiBzZWNyZXRzIGF2YWlsYWJsZSBhY3Jvc3MgcG90ZW50aWFsbHkgbXVsdGlwbGUgcGFnZXMvbGlzdHMsIHdoZXJlYXMgYG51bV9zZWNyX3N0b3JlZGAgc3BlY2lmaWNhbGx5IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNlY3JldHMgY3VycmVudGx5ICpzdG9yZWQqIGluIHRoZSByZWxldmFudCBwYWdlL2xpc3QuIElmIHRoZSBjb2RlIHVzZWQgYHRvdGFsX251bV9zZWNyZXRzYCBiZWZvcmUsIGl0IHdhcyBsaWtlbHkgaXRlcmF0aW5nIHBhc3QgdGhlIGluaXRpYWxpemVkIGRhdGEgd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYW4gb3V0LW9mLWJvdW5kcyByZWFkIG9yLCBhdCBiZXN0LCBhIHJlYWQgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgd2l0aGluIHRoZSBgbGlzdC1cdTAwM2VzZWNyZXRzYCBhcnJheS4gVGhpcyBjaGFuZ2UgaXMgYSBjbGVhciBmaXggZm9yIHRoaXMuXG5cblRoZSBtb3JlIGludHJpY2F0ZSBwYXJ0IGlzIHRoZSBjaGFuZ2VzIHRvIGB1dl9maW5kX3NlY3JldGAuICBUaGUgbG9vcCBzdHJ1Y3R1cmUgYXBwZWFycyB0byBiZSByZXNwb25zaWJsZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHNlY3JldHMsIHBvdGVudGlhbGx5IGFjcm9zcyBtdWx0aXBsZSBwYWdlcy4gIEluaXRpYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4ID0gMDtgIHRvIGluaXRpYWxpemUgdGhlIGluZGV4LiBUaGVuLCB0aGUgaW1wb3J0YW50IHBhcnQ6IHRoZSBgc3RhcnRfaWR4YCBpcyBhc3NpZ25lZCAqaW5zaWRlKiB0aGUgbG9vcC4gIEJlZm9yZSB0aGUgcGF0Y2gsIGBzdGFydF9pZHhgIHdhcyBhc3NpZ25lZCBhdCB0aGUgKmVuZCogb2YgdGhlIGxvb3AsIHdoaWNoIG1lYW5zIHRoZSBjb25kaXRpb24gYHN0YXJ0X2lkeCBcdTAwM2MgbGlzdC1cdTAwM2VuZXh0X3NlY3JldF9pZHhgIHdvdWxkICphbHdheXMqIGJlIGZhbHNlLiBXaHk/IEJlY2F1c2UgdGhlIGBzdGFydF9pZHhgIHdvdWxkIGJlIHRoZSBzYW1lIGFzIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAsIHJlbmRlcmluZyB0aGUgbG9vcCBpbmVmZmVjdGl2ZSB3aGVuIGBsaXN0X3JjID09IFVWQ19SQ19NT1JFX0RBVEFgLiBUaGlzIGlzIGEgYnVnIGZpeCwgYXMgaXQgcHJldmVudGVkIGl0ZXJhdGluZyB0aHJvdWdoIG11bHRpcGxlIHBhZ2VzIGFuZCBzZWNyZXRzLlxuXG5Ob3csIHdpdGggdGhlIHBhdGNoLCB0aGUgbG9naWMgaXMgYXMgZm9sbG93czogYHN0YXJ0X2lkeGAgY2FwdHVyZXMgdGhlIGluZGV4ICpiZWZvcmUqIHRoZSBjYWxsIHRvIGB1dl9saXN0X3NlY3JldHNgLiBgdXZfbGlzdF9zZWNyZXRzYCB0aGVuIHVwZGF0ZXMgdGhlIGludGVybmFsIGxpc3QgYW5kIGBsaXN0LVx1MDAzZW5leHRfc2VjcmV0X2lkeGAuICBUaGUgYHdoaWxlYCBjb25kaXRpb24gdGhlbiBjb3JyZWN0bHkgY29tcGFyZXMgdGhlICpvbGQqIGluZGV4IHRvIHRoZSAqbmV3KiBpbmRleC5cblxuTXkgdGhpbmtpbmc6IFRoZSBgdXZfbGlzdF9zZWNyZXRzYCBmdW5jdGlvbiBwb3B1bGF0ZXMgdGhlIGBsaXN0YCB3aXRoIHNlY3JldHMuIElmIGl0cyByZXR1cm4gY29kZSBpcyBgVVZDX1JDX01PUkVfREFUQWAsIHRoZW4gYGxpc3QtXHUwMDNlbmV4dF9zZWNyZXRfaWR4YCBpcyBsaWtlbHkgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV4dCBzZWNyZXQgaW5kZXggdG8gYmUgcmVhZC5cblxuUmVnYXJkaW5nIHRoZSByaXNrIG9mIHRoZSBwYXRjaCBpbnRyb2R1Y2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgSSdtIGNvbmZpZGVudCBpdCBkb2Vzbid0LiAgVGhlIG1vZGlmaWNhdGlvbnMgYXJlIHB1cmVseSBsb2dpY2FsIGNvcnJlY3Rpb25zIHRvIHRoZSBpdGVyYXRpb24gYW5kIGxvb3AgY29uZGl0aW9ucy4gVGhlIGludGVudCBpcyB0byBwcmV2ZW50IHJlYWRpbmcgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIHZhbGlkIGRhdGEuXG5cblRoZSBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGEgYnVnLCBwcmV2ZW50aW5nIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJIGRvbid0IHNlZSBhbnkgY29kZSBpbnRyb2R1Y2VkIGhlcmUgdGhhdCAqY3JlYXRlcyogYSByaXNrIHRoYXQgS01TQU4gd291bGQgY2F0Y2guIFRoZSBwYXRjaCBjbGVhbnMgdXAgdGhlIGxvZ2ljLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBuZXcgc3RydWN0dXJlcywgYWRkIGZpZWxkcywgb3IgaW50cm9kdWNlIHVzZXItc3BhY2UgY29waWVzLiBTbywgYE5lZWRzS01TQU4gPSBmYWxzZWAuIEkgc3RpbGwgd2FudCB0byBkb3VibGUgY2hlY2sgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBhbmQgZG91YmxlIGNoZWNrIG15IHRob3VnaHQgcHJvY2VzcywganVzdCB0byBjb25maXJtIG15IHRoaW5raW5nIHVzaW5nIHNvbWV0aGluZyBsaWtlIGEgZ3JlcHBlciBvciBzaW1pbGFyIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTMxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDQ6NTAuOTAxMzkwODMxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjcyMDAzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB1dl9zZWNyZXRfbGlzdCBcXFxce1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaD00MTE9c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xcbi0tXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDIzLSAqL1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oOjQyNDpzdHJ1Y3QgdXZfc2VjcmV0X2xpc3Qge1xcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oLTQyNS1cXHR1MTYgbnVtX3NlY3Jfc3RvcmVkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NDo1My4xNzM0MDM0N1oiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTY4MzMzMjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGB1dl9zZWNyZXRfbGlzdGAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBpbnZvbHZlcyBgdXZfc2VjcmV0X2xpc3RgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IHJlZmVycyB0by4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHV2X3NlY3JldF9saXN0YC4gTm8gcG9pbnQgaW4ganVtcGluZyB0byBjb25jbHVzaW9ucyBvciBtYWtpbmcgYXNzdW1wdGlvbnMg4oCTIEkgd2FudCB0byBlc3RhYmxpc2ggYSBzb2xpZCBmb3VuZGF0aW9uIG9mIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgZGlnIGRlZXBlci4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBkZWZpbml0aW9uIHJldmVhbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjU2LjE0MTczODkzM1oiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA3NzQ1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHV2X3NlY3JldF9saXN0IFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9pbmNsdWRlL2FzbS91di5oPTQxMT1zdHJ1Y3QgdXZfc2VjcmV0X2xpc3RfaXRlbSB7XFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaC00MjMtICovXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2Lmg6NDI0OnN0cnVjdCB1dl9zZWNyZXRfbGlzdCB7XFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmgtNDI1LVxcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ0OjU2LjE5MjUxODM0M1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk2NDE3Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHMzOTAgVVYgSGFuZGxpbmcqKlxuXG5BbHJpZ2h0LCBsZXQncyBwdWxsIHVwIGBhcmNoL3MzOTAvaW5jbHVkZS9hc20vdXYuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgNDI0LiBNeSBpbnR1aXRpb24gdGVsbHMgbWUgdGhhdCdzIGEgbGlrZWx5IHNwb3QgZm9yIHNvbWUgY29yZSBVViAoVW5pdmVyc2FsIFZpcnR1YWxpemF0aW9uKSBkZWZpbml0aW9ucyBvciBwZXJoYXBzIHNvbWUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIHJlbGF0ZWQgdG8gdGhlIHMzOTAgYXJjaGl0ZWN0dXJlJ3MgVVYgaW1wbGVtZW50YXRpb24uIEknbSBndWVzc2luZyBpdCdsbCBiZSBzb21ldGhpbmcgbG93LWxldmVsIC0gbWVtb3J5IGxheW91dCwgcmVnaXN0ZXIgYXNzaWdubWVudHMsIG9yIGludGVycnVwdCBoYW5kbGluZyDigJMgc3R1ZmYgZGlyZWN0bHkgaW5mbHVlbmNpbmcgaG93IHRoZSBoeXBlcnZpc29yIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgbWFjcm8gZGVmaW5pdGlvbnMsIGVudW1zLCBvciBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIHRoYXQgc2hlZCBsaWdodCBvbiBob3cgVVYgY2FwYWJpbGl0aWVzIGFyZSBleHBvc2VkIGFuZCB1dGlsaXplZCB3aXRoaW4gdGhlIGtlcm5lbCdzIGNvbnRleHQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgY29kZSBoYW5kbGVzIHRoZSBudWFuY2VzIG9mIHRoZSBVViBlbnZpcm9ubWVudCBvbiBzMzkwLCBnaXZlbiBpdHMgc3BlY2lhbGl6ZWQgbmF0dXJlLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNzMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxNjo0NTowMC4wODg5Mzg0ODdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3V2LmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDEwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDEwOlxcdCAqL1xcbiA0MTE6XFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0ge1xcbiA0MTI6XFx0XFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW1faGRyIGhkcjtcXG4gNDEzOlxcdFxcdHU2NCByZXNlcnZlcmQwODtcXG4gNDE0OlxcdFxcdHU4IGlkW1VWX1NFQ1JFVF9JRF9MRU5dO1xcbiA0MTU6XFx0fSBfX3BhY2tlZCBfX2FsaWduZWQoOCk7XFxuIDQxNjpcXHRcXG4gNDE3OlxcdC8qKlxcbiA0MTg6XFx0ICogdXZfc2VjcmV0X2xpc3QgLSBVViBzZWNyZXQtbWV0YWRhdGEgbGlzdC5cXG4gNDE5OlxcdCAqIEBudW1fc2Vjcl9zdG9yZWQ6IE51bWJlciBvZiBzZWNyZXRzIHN0b3JlZCBpbiB0aGlzIGxpc3QuXFxuIDQyMDpcXHQgKiBAdG90YWxfbnVtX3NlY3JldHM6IE51bWJlciBvZiBzZWNyZXRzIHN0b3JlZCBpbiB0aGUgVVYgZm9yIHRoaXMgZ3Vlc3QuXFxuIDQyMTpcXHQgKiBAbmV4dF9zZWNyZXRfaWR4OiBwb3NpdGl2ZSBudW1iZXIgaWYgdGhlcmUgYXJlIG1vcmUgc2VjcmV0cyBhdmFpbGFibGUgb3IgemVyby5cXG4gNDIyOlxcdCAqIEBzZWNyZXRzOiBVcCB0byA4NSBVVi1zZWNyZXQgbWV0YWRhdGEgZW50cmllcy5cXG4gNDIzOlxcdCAqL1xcbiA0MjQ6XFx0c3RydWN0IHV2X3NlY3JldF9saXN0IHtcXG4gNDI1OlxcdFxcdHUxNiBudW1fc2Vjcl9zdG9yZWQ7XFxuIDQyNjpcXHRcXHR1MTYgdG90YWxfbnVtX3NlY3JldHM7XFxuIDQyNzpcXHRcXHR1MTYgbmV4dF9zZWNyZXRfaWR4O1xcbiA0Mjg6XFx0XFx0dTE2IHJlc2VydmVkXzA2O1xcbiA0Mjk6XFx0XFx0dTY0IHJlc2VydmVkXzA4O1xcbiA0MzA6XFx0XFx0c3RydWN0IHV2X3NlY3JldF9saXN0X2l0ZW0gc2VjcmV0c1s4NV07XFxuIDQzMTpcXHR9IF9fcGFja2VkIF9fYWxpZ25lZCg4KTtcXG4gNDMyOlxcdHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCB1dl9zZWNyZXRfbGlzdCkgPT0gUEFHRV9TSVpFKTtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0c3RhdGljIGlubGluZSBpbnQgX191dl9jYWxsKHVuc2lnbmVkIGxvbmcgcjEsIHVuc2lnbmVkIGxvbmcgcjIpXFxuIDQzNTpcXHR7XFxuIDQzNjpcXHRcXHRpbnQgY2M7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdGFzbSB2b2xhdGlsZShcXG4gNDM5OlxcdFxcdFxcdFxcXCJcXHQuaW5zblxcdCBycmYsMHhiOWE0MDAwMCwlW3IxXSwlW3IyXSwwLDBcXFxcblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTY6NDU6MDAuMDg5MDM0OTM3WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2ODg1Mzg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBhZnRlciByZXZpZXdpbmcgdGhpcyBwYXRjaCwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgYW5kIHJlYXNvbmluZy4gVGhlIGNvcmUgb2YgdGhlIHBhdGNoIGFkZHJlc3NlcyB0d28gcmVsYXRlZCBidWdzIHdpdGhpbiB0aGUgVWx0cmF2aXNvciBzZWNyZXQgbGlzdGluZyBmdW5jdGlvbmFsaXR5LiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCBjb3JyZWN0aW5nIGhvdyB3ZSB0cmF2ZXJzZSBhbmQgYWNjZXNzIHRoZSBzZWNyZXRzIHdpdGhpbiBhIHNwZWNpZmljIHN0cnVjdHVyZS5cblxuVGhlIGZpcnN0IGlzc3VlIHdhcyBhIHNpbXBsZSBib3VuZHMgY2hlY2sgZXJyb3IuIEl0IHdhcyB1c2luZyBgdG90YWxfbnVtX3NlY3JldHNgIHdoZXJlIGl0IHNob3VsZCBoYXZlIGJlZW4gdXNpbmcgYG51bV9zZWNyX3N0b3JlZGAuIGB0b3RhbF9udW1fc2VjcmV0c2AgcmVwcmVzZW50cyB0aGUgKm92ZXJhbGwqIG51bWJlciBvZiBzZWNyZXRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ3Vlc3QsIHdoaWxlIGBudW1fc2Vjcl9zdG9yZWRgIGlzIHNwZWNpZmljIHRvICp0aGlzKiBzZWNyZXQgbGlzdCAoYW5kIGNhcHBlZCBhdCA4NSkuIElmIGB0b3RhbF9udW1fc2VjcmV0c2Agd2FzIGdyZWF0ZXIgdGhhbiA4NSwgdGhpcyBjYXVzZWQgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGZyb20gdGhlIGBsaXN0LVx1MDAzZXNlY3JldHNgIGFycmF5OyBpZiBpdCB3YXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDg1IGJ1dCBzdGlsbCBsYXJnZXIgdGhhbiBgbnVtX3NlY3Jfc3RvcmVkYCwgd2UnZCBiZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoZSBhcnJheS4gVGhpcyBpcyBhIGNsZWFyIGJ1ZywgYW5kIHRoZSBwYXRjaCBmaXhlcyBpdCBieSBtYWtpbmcgdGhlIGNvcnJlY3QgY29tcGFyaXNvbi5cblxuVGhlIHNlY29uZCBidWcgd2FzIGluIHRoZSBsb2dpYyBvZiBgdXZfZmluZF9zZWNyZXRgLiBUaGUgbG9vcCB3YXMgdGVybWluYXRpbmcgcHJlbWF0dXJlbHksIGFuZCBub3cgaXQncyBjb3JyZWN0bHkgdXBkYXRlZCB0byBwcm9wZXJseSBpdGVyYXRlIG92ZXIgbXVsdGlwbGUgcGFnZXMgb2Ygc2VjcmV0cy5cblxuSW1wb3J0YW50bHksIHRoaXMgcGF0Y2ggKmZpeGVzKiB0aGVzZSBpc3N1ZXMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgcGF0aHdheXMgdGhhdCBjb3VsZCBsZWFkIHRvIG5ldyBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBJdCBpcyBwdXJlbHkgYSBjb3JyZWN0aW9uIG9mIGV4aXN0aW5nIGFjY2VzcyBwYXR0ZXJucyBhbmQgYm91bmRzLiBUaGlzIG1lYW5zIHRoZXJlJ3Mgbm8gcmVhbCBuZWVkIHRvIHJ1biBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gZm9yIHRoaXMgY2hhbmdlLiBUaGUgcmlzayB0aGF0IHdvdWxkIGhhdmUgYmVlbiBpZGVudGlmaWVkIGJ5IEtNU0FOIHdhcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIGV4aXN0aW5nIGNvZGUsIGFuZCB0aGlzIHBhdGNoIGp1c3QgY2xlYW5zIGl0IHVwLiBBIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5IGFzIHRoaXMgaXMgYSBidWcgZml4LiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIGZhbHNlIGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODYyLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDE2OjQ1OjA4Ljc3NzU3NzIzOFoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdHdvIGJ1Z3MgaW4gdGhlIFVsdHJhdmlzb3Igc2VjcmV0IGxpc3RpbmcgbG9naWM6XFxuMS4gSXQgY2hhbmdlcyB0aGUgbG9vcCBib3VuZCBpbiBgZmluZF9zZWNyZXRfaW5fcGFnZWAgZnJvbSBgbGlzdC1cXHUwMDNldG90YWxfbnVtX3NlY3JldHNgICh0b3RhbCBzZWNyZXRzIGluIHRoZSBndWVzdCkgdG8gYGxpc3QtXFx1MDAzZW51bV9zZWNyX3N0b3JlZGAgKHNlY3JldHMgc3RvcmVkIGluIHRoZSBjdXJyZW50IHBhZ2UpLiBUaGlzIHByZXZlbnRzIHJlYWRpbmcgcGFzdCB0aGUgdmFsaWQgZW50cmllcyBpbiB0aGUgYGxpc3QtXFx1MDAzZXNlY3JldHNgIGFycmF5LCB3aGljaCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIG91dC1vZi1ib3VuZHMgcmVhZHMgKGNhdWdodCBieSBLQVNBTikgb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cXG4yLiBJdCBmaXhlcyB0aGUgbG9vcCBjb25kaXRpb24gaW4gYHV2X2ZpbmRfc2VjcmV0YCB0byBjb3JyZWN0bHkgaXRlcmF0ZSBvdmVyIG11bHRpcGxlIHBhZ2VzIG9mIHNlY3JldHMgYnkgdXBkYXRpbmcgYHN0YXJ0X2lkeGAgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCByYXRoZXIgdGhhbiB0aGUgZW5kLlxcblxcblRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBidWcgZml4ZXMgZm9yIGl0ZXJhdGlvbiBsb2dpYyBhbmQgYm91bmRzIGNoZWNraW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgc3RydWN0dXJlcywgb3IgZGF0YSBwYXRocyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHR3byBidWdzIGluIHRoZSBVbHRyYXZpc29yIHNlY3JldCBsaXN0aW5nIGxvZ2ljOlxcbjEuIEl0IGNoYW5nZXMgdGhlIGxvb3AgYm91bmQgaW4gYGZpbmRfc2VjcmV0X2luX3BhZ2VgIGZyb20gYGxpc3QtXFx1MDAzZXRvdGFsX251bV9zZWNyZXRzYCAodG90YWwgc2VjcmV0cyBpbiB0aGUgZ3Vlc3QpIHRvIGBsaXN0LVxcdTAwM2VudW1fc2Vjcl9zdG9yZWRgIChzZWNyZXRzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBwYWdlKS4gVGhpcyBwcmV2ZW50cyByZWFkaW5nIHBhc3QgdGhlIHZhbGlkIGVudHJpZXMgaW4gdGhlIGBsaXN0LVxcdTAwM2VzZWNyZXRzYCBhcnJheSwgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBvdXQtb2YtYm91bmRzIHJlYWRzIChjYXVnaHQgYnkgS0FTQU4pIG9yIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuXFxuMi4gSXQgZml4ZXMgdGhlIGxvb3AgY29uZGl0aW9uIGluIGB1dl9maW5kX3NlY3JldGAgdG8gY29ycmVjdGx5IGl0ZXJhdGUgb3ZlciBtdWx0aXBsZSBwYWdlcyBvZiBzZWNyZXRzIGJ5IHVwZGF0aW5nIGBzdGFydF9pZHhgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AgcmF0aGVyIHRoYW4gdGhlIGVuZC5cXG5cXG5UaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgYnVnIGZpeGVzIGZvciBpdGVyYXRpb24gbG9naWMgYW5kIGJvdW5kcyBjaGVja2luZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZXMsIG9yIGRhdGEgcGF0aHMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowtlnmm[1] Phase: Succeeded StartedAt: 2026-08-11 16:45:19 +0000 UTC FinishedAt: 2026-08-11 16:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 16:45:19 +0000 UTC FinishedAt: 2026-08-11 16:45:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2] Phase: Succeeded StartedAt: 2026-08-11 16:45:19 +0000 UTC FinishedAt: 2026-08-11 17:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 16:45:19 +0000 UTC FinishedAt: 2026-08-11 17:26:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 16:45:19 +0000 UTC FinishedAt: 2026-08-11 16:45:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 16:45:19 +0000 UTC FinishedAt: 2026-08-11 16:45:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtlnmm/series-workflowtlnmm-convert-artifact-56420550/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 16:45:29 +0000 UTC FinishedAt: 2026-08-11 17:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 16:45:29 +0000 UTC FinishedAt: 2026-08-11 17:03:14 +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:*bc18dcce-621e-43df-86a4-51ad562ddbf7,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-workflowtlnmm/series-workflowtlnmm-convert-artifact-56420550/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": "a56fdc8e-ec44-4b0a-b4bf-5764c5d85385", "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-workflowtlnmm/series-workflowtlnmm-build-action-1330230876/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 16:45:29 +0000 UTC FinishedAt: 2026-08-11 17:03:04 +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:*bc18dcce-621e-43df-86a4-51ad562ddbf7,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-workflowtlnmm/series-workflowtlnmm-convert-artifact-56420550/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": "a56fdc8e-ec44-4b0a-b4bf-5764c5d85385", "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-workflowtlnmm/series-workflowtlnmm-build-action-1330230876/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 17:03:14 +0000 UTC FinishedAt: 2026-08-11 17:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 17:03:14 +0000 UTC FinishedAt: 2026-08-11 17:03:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 17:03:14 +0000 UTC FinishedAt: 2026-08-11 17:03:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 17:03:14 +0000 UTC FinishedAt: 2026-08-11 17:03:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowtlnmm/series-workflowtlnmm-convert-artifact-585222425/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 17:03:25 +0000 UTC FinishedAt: 2026-08-11 17:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 17:03:25 +0000 UTC FinishedAt: 2026-08-11 17:05:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a56fdc8e-ec44-4b0a-b4bf-5764c5d85385,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-workflowtlnmm/series-workflowtlnmm-build-action-1330230876/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-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 17:05:33 +0000 UTC FinishedAt: 2026-08-11 17:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 17:05:33 +0000 UTC FinishedAt: 2026-08-11 17:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 17:05:33 +0000 UTC FinishedAt: 2026-08-11 17:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 17:05:33 +0000 UTC FinishedAt: 2026-08-11 17:21:54 +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:*bc18dcce-621e-43df-86a4-51ad562ddbf7,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-workflowtlnmm/series-workflowtlnmm-convert-artifact-585222425/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": "c93c4f06-4777-424d-b638-b74d1f6fdce4", "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-workflowtlnmm/series-workflowtlnmm-build-action-2529941621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 17:05:33 +0000 UTC FinishedAt: 2026-08-11 17:21:44 +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:*bc18dcce-621e-43df-86a4-51ad562ddbf7,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-workflowtlnmm/series-workflowtlnmm-convert-artifact-585222425/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": "c93c4f06-4777-424d-b638-b74d1f6fdce4", "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-workflowtlnmm/series-workflowtlnmm-build-action-2529941621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 17:21:54 +0000 UTC FinishedAt: 2026-08-11 17:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 17:21:54 +0000 UTC FinishedAt: 2026-08-11 17:21:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 17:21:54 +0000 UTC FinishedAt: 2026-08-11 17:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 17:21:54 +0000 UTC FinishedAt: 2026-08-11 17:23:43 +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:*c93c4f06-4777-424d-b638-b74d1f6fdce4,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-workflowtlnmm/series-workflowtlnmm-build-action-2529941621/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-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 17:23:53 +0000 UTC FinishedAt: 2026-08-11 17:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 17:23:53 +0000 UTC FinishedAt: 2026-08-11 17:26:35 +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":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a56fdc8e-ec44-4b0a-b4bf-5764c5d85385,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c93c4f06-4777-424d-b638-b74d1f6fdce4,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-workflowtlnmm/series-workflowtlnmm-build-action-1330230876/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-workflowtlnmm/series-workflowtlnmm-build-action-2529941621/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 17:23:53 +0000 UTC FinishedAt: 2026-08-11 17:24:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 17:23:53 +0000 UTC FinishedAt: 2026-08-11 17:23:58 +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":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowtlnmm/series-workflowtlnmm-convert-artifact-2742372878/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 17:23:53 +0000 UTC FinishedAt: 2026-08-11 17:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 17:23:53 +0000 UTC FinishedAt: 2026-08-11 17:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 17:23:53 +0000 UTC FinishedAt: 2026-08-11 17:23:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 17:24:03 +0000 UTC FinishedAt: 2026-08-11 17:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtlnmm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["uv_find_secret"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d58772d8520c7ef247c4b95c9bd76d3a25da9ff5","config_name":"upstream-apparmor-kasan.config","enable_configs":["PKEY_UV","S390_UV_UAPI","PKEY"],"series_id":"3dc16253-adb6-4085-afef-d14301a4a113","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 17:24:03 +0000 UTC FinishedAt: 2026-08-11 17:26:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a56fdc8e-ec44-4b0a-b4bf-5764c5d85385,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c93c4f06-4777-424d-b638-b74d1f6fdce4,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-workflowtlnmm/series-workflowtlnmm-build-action-1330230876/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-workflowtlnmm/series-workflowtlnmm-build-action-2529941621/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-workflowtlnmm/series-workflowtlnmm-convert-artifact-2742372878/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,}