Name: series-workflowmpn6b Phase: Succeeded StartedAt: 2026-08-04 09:39:05 +0000 UTC FinishedAt: 2026-08-04 12:13:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[0] Phase: Succeeded StartedAt: 2026-08-04 09:39:05 +0000 UTC FinishedAt: 2026-08-04 10:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 09:39:05 +0000 UTC FinishedAt: 2026-08-04 10:23:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2a33516f9ef59ad11844d4fc152f889449b5daf3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2a33516f9ef59ad11844d4fc152f889449b5daf3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "7004afe6-562b-4e74-8715-cd4cb0ea9113" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_auth_calculate_hmac", "sctp_packet_transmit", "sctp_sf_do_5_1D_ce", "sctp_sf_do_5_2_4_dupcook", "sctp_sf_eat_auth" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMmIzM0OywKICAgICYjMzQ7c2N0cF9wYWNrZXRfdHJhbnNtaXQmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzFEX2NlJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2VhdF9hdXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1RQIGF1dGhlbnRpY2F0aW9uIEhNQUMgY2FsY3VsYXRpb24gdG8gcHJvcGVybHkgaGFuZGxlIGFuZCBwcm9wYWdhdGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9NRU0pLiBUaGlzIGFmZmVjdHMgdGhlIHBhY2tldCBwYWNraW5nIGFuZCBjaHVuayB2ZXJpZmljYXRpb24gcGF0aHMgaW4gdGhlIFNDVFAgc3RhdGUgbWFjaGluZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgcGF0aHMgdG8gZW5zdXJlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGU1MjU0NTdmZDk0NDg5ZmNjN2Q4M2E5Y2U3Y2MwYjY3NTg4MzBhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMDoyMjoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaCBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5pbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5AQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuICAqICAgIHplcm8gKGFzIHNob3duIGluIEZpZ3VyZSA2KSBmb2xsb3dlZCBieSBhbGwgY2h1bmtzIHRoYXQgYXJlIHBsYWNlZFxuICAqICAgIGFmdGVyIHRoZSBBVVRIIGNodW5rIGluIHRoZSBTQ1RQIHBhY2tldC5cbiAgKi9cbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxuJiM0MztpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4ge1xuIFx0c3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7XG4gXHRfX3UxNiBrZXlfaWQsIGhtYWNfaWQ7XG5AQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0LyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0XHRmcmVlX2tleSA9IDE7XG4gXHR9XG5AQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcbiBcdGlmIChmcmVlX2tleSlcbiBcdFx0c2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQVBJIEhlbHBlcnMgKi9cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jXG5pbmRleCAyM2U5NjMwNWNhZDdjLi4zZDdlYWQ5ZDQwZTE5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL291dHB1dC5jXG5AQCAtNTE3LDggJiM0Mzs1MTcsMTQgQEAgc3RhdGljIGludCBzY3RwX3BhY2tldF9wYWNrKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LFxuIFx0XHR9XG4gXG4gXHRcdGlmIChhdXRoKSB7XG4tXHRcdFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4tXHRcdFx0XHRcdFx0IHBhY2tldC1cdTAwM2VhdXRoLVx1MDAzZXNoa2V5LCBnZnApO1xuJiM0MztcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcGFja2V0LVx1MDAzZWF1dGgtXHUwMDNlc2hrZXksIGdmcCkpIHtcbiYjNDM7XHRcdFx0XHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVx1MDAzZWF1dGgpO1xuJiM0MztcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRpZiAoZ3NvKVxuJiM0MztcdFx0XHRcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0LyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqL1xuIFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnBhY2tldC1cdTAwM2VjaHVua19saXN0KSlcbiBcdFx0XHRcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXHUwMDNlYXV0aCk7XG5AQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcClcbiBcbiBcdC8qIHBhY2sgdXAgY2h1bmtzICovXG4gXHRwa3RfY291bnQgPSBzY3RwX3BhY2tldF9wYWNrKHBhY2tldCwgaGVhZCwgZ3NvLCBnZnApO1xuLVx0aWYgKCFwa3RfY291bnQpIHtcbiYjNDM7XHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuJiM0MztzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgYXV0aDtcbiBcbi1cdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaylcbi1cdFx0cmV0dXJuICFzY3RwX2F1dGhfcmVjdl9jaWQoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUsIGFzb2MpO1xuJiM0MztcdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaykge1xuJiM0MztcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuJiM0MztcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuIFxuIFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cbiBcdGlmICghbmV0LVx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXHUwMDNlcGVlci5hdXRoX2NhcGFibGUpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuIFxuIFx0Lyogc2V0LXVwIG91ciBmYWtlIGNodW5rIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgaXQgKi9cbiBcdGF1dGguc2tiID0gY2h1bmstXHUwMDNlYXV0aF9jaHVuaztcbkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcdTAwMjZhdXRoKTtcbiB9XG4gXG4gLypcbkBAIC04MjYsOCAmIzQzOzgzMCwxMSBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBub21lbV9pbml0O1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkge1xuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4mIzQzO1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4gXHRcdHNjdHBfYXNzb2NpYXRpb25fZnJlZShuZXdfYXNvYyk7XG4mIzQzO1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7XG4gXHRlbnVtIHNjdHBfZGlzcG9zaXRpb24gZGlzcG9zaXRpb247XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmVycjtcbkBAIC0xOTA0LDggJiM0MzsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogTWFrZSBzdXJlIG5vIG5ldyBhZGRyZXNzZXMgYXJlIGJlaW5nIGFkZGVkIGR1cmluZyB0aGVcbiBcdCAqIHJlc3RhcnQuICBUaG91Z2ggdGhpcyBpcyBhIHByZXR0eSBjb21wbGljYXRlZCBhdHRhY2tcbkBAIC0yMDExLDYgJiM0MzsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiYjNDM7XHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XG4gXG4gXHQvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXRcbkBAIC0yMDI0LDggJiM0MzsyMDM3LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0c2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsXG4gXHRcdFx0U0NUUF9TVEFURShTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSk7XG5AQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJiMzOTtzIEd1aWRlOlxuQEAgLTIxMjcsOCAmIzQzOzIxNDUsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcbiBcdCAqIGEgQ09PS0lFIEFDSy5cbiBcdCAqL1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKVxuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogRG9uJiMzOTt0IGFjY2lkZW50YWxseSBtb3ZlIGJhY2sgaW50byBlc3RhYmxpc2hlZCBzdGF0ZS4gKi9cbiBcdGlmIChhc29jLVx1MDAzZXN0YXRlIFx1MDAzYyBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSB7XG5AQCAtNDQ1NSw5ICYjNDM7NDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstXHUwMDNlc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cdTAwM2VjaHVua19oZHIsXG4mIzQzO1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4mIzQzO1x0XHRrZnJlZShzYXZlX2RpZ2VzdCk7XG4mIzQzO1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIFRoaXMgYWZmZWN0cyB0aGUgcGFja2V0IHBhY2tpbmcgYW5kIGNodW5rIHZlcmlmaWNhdGlvbiBwYXRocyBpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBwYXRocyB0byBlbnN1cmUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkZTUyNTQ1N2ZkOTQ0ODlmY2M3ZDgzYTljZTdjYzBiNjc1ODgzMGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjIyOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAppbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaApAQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwotdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAotCQkJICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfcmVsZWFzZShzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hdXRoLmMgYi9uZXQvc2N0cC9hdXRoLmMKaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2F1dGguYwpAQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkCiAgKiAgICBhZnRlciB0aGUgQVVUSCBjaHVuayBpbiB0aGUgU0NUUCBwYWNrZXQuCiAgKi8KLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKQomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7CiAJX191MTYga2V5X2lkLCBobWFjX2lkOwpAQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJLyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi8KIAkJYXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTsKIAkJaWYgKCFhc29jX2tleSkKLQkJCXJldHVybjsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlmcmVlX2tleSA9IDE7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAogCWlmIChmcmVlX2tleSkKIAkJc2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyogQVBJIEhlbHBlcnMgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggMjNlOTYzMDVjYWQ3Yy4uM2Q3ZWFkOWQ0MGUxOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTUxNyw4ICYjNDM7NTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKIAkJfQogCiAJCWlmIChhdXRoKSB7Ci0JCQlzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtJmd0O2Fzb2MsIG5za2IsIGF1dGgsCi0JCQkJCQkgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKTsKJiM0MzsJCQlpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLSZndDthc29jLCBuc2tiLCBhdXRoLAomIzQzOwkJCQkJCSAgICAgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKSkgewomIzQzOwkJCQlzY3RwX2NodW5rX2ZyZWUocGFja2V0LSZndDthdXRoKTsKJiM0MzsJCQkJcGFja2V0LSZndDthdXRoID0gTlVMTDsKJiM0MzsJCQkJaWYgKGdzbykKJiM0MzsJCQkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJfQogCQkJLyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqLwogCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtwYWNrZXQtJmd0O2NodW5rX2xpc3QpKQogCQkJCXNjdHBfY2h1bmtfZnJlZShwYWNrZXQtJmd0O2F1dGgpOwpAQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcCkKIAogCS8qIHBhY2sgdXAgY2h1bmtzICovCiAJcGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTsKLQlpZiAoIXBrdF9jb3VudCkgewomIzQzOwlpZiAocGt0X2NvdW50ICZsdDs9IDApIHsKIAkJa2ZyZWVfc2tiKGhlYWQpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CiAKLXN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCi0JCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiYjNDM7c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAomIzQzOwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewogCXN0cnVjdCBzY3RwX2NodW5rIGF1dGg7CiAKLQlpZiAoIWNodW5rLSZndDthdXRoX2NodW5rKQotCQlyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKTsKJiM0MzsJaWYgKCFjaHVuay0mZ3Q7YXV0aF9jaHVuaykgewomIzQzOwkJaWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRzsKJiM0MzsJCXJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjsKJiM0MzsJfQogCiAJLyogU0NUUC1BVVRIOiAgYXV0aF9jaHVuayBwb2ludGVyIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGNvb2tpZS1lY2hvCiAJICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkCkBAIC02NTQsNyAmIzQzOzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqLwogCWlmICghbmV0LSZndDtzY3RwLmF1dGhfZW5hYmxlIHx8ICFhc29jLSZndDtwZWVyLmF1dGhfY2FwYWJsZSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7CiAKIAkvKiBzZXQtdXAgb3VyIGZha2UgY2h1bmsgc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyBpdCAqLwogCWF1dGguc2tiID0gY2h1bmstJmd0O2F1dGhfY2h1bms7CkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAJc2tiX3B1bGwoY2h1bmstJmd0O2F1dGhfY2h1bmssIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOwogCWF1dGgudHJhbnNwb3J0ID0gY2h1bmstJmd0O3RyYW5zcG9ydDsKIAotCXJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCAmYW1wO2F1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SOwomIzQzOwlyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgJmFtcDthdXRoKTsKIH0KIAogLyoKQEAgLTgyNiw4ICYjNDM7ODMwLDExIEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMURfY2Uoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnJvcikKIAkJZ290byBub21lbV9pbml0OwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkgewomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpOwomIzQzOwlpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHsKIAkJc2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTsKJiM0MzsJCWlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQobmV0LCBlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAJfQogCkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYSgKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiAJZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uOwomIzQzOwllbnVtIHNjdHBfaWVycm9yIGVycm9yOwogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyOwpAQCAtMTkwNCw4ICYjNDM7MTkxMiwxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKAogCWlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtOwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkKJiM0MzsJZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTsKJiM0MzsJaWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7CiYjNDM7CQlpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pCiYjNDM7CQkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlCiAJICogcmVzdGFydC4gIFRob3VnaCB0aGlzIGlzIGEgcHJldHR5IGNvbXBsaWNhdGVkIGF0dGFjawpAQCAtMjAxMSw2ICYjNDM7MjAyMyw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXQKQEAgLTIwMjQsOCAmIzQzOzIwMzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYigKIAlpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbTsKIAotCWlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpCiYjNDM7CWVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSwKIAkJCVNDVFBfU1RBVEUoU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkpOwpAQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBDbGFyaWZpY2F0aW9uIGZyb20gSW1wbGVtZW50b3ImIzM5O3MgR3VpZGU6CkBAIC0yMTI3LDggJiM0MzsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJICogYSBDT09LSUUgQUNLLgogCSAqLwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKQomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAkvKiBEb24mIzM5O3QgYWNjaWRlbnRhbGx5IG1vdmUgYmFjayBpbnRvIGVzdGFibGlzaGVkIHN0YXRlLiAqLwogCWlmIChhc29jLSZndDtzdGF0ZSAmbHQ7IFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpIHsKQEAgLTQ0NTUsOSAmIzQzOzQ0NzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoCiAKIAltZW1zZXQoZGlnZXN0LCAwLCBzaWdfbGVuKTsKIAotCXNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay0mZ3Q7c2tiLAotCQkJCSAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCi0JCQkJIHNoX2tleSwgR0ZQX0FUT01JQyk7CiYjNDM7CWlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstJmd0O3NrYiwKJiM0MzsJCQkJICAgICAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCiYjNDM7CQkJCSAgICAgc2hfa2V5LCBHRlBfQVRPTUlDKSkgewomIzQzOwkJa2ZyZWUoc2F2ZV9kaWdlc3QpOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNOwomIzQzOwl9CiAKIAkvKiBEaXNjYXJkIHRoZSBwYWNrZXQgaWYgdGhlIGRpZ2VzdHMgZG8gbm90IG1hdGNoICovCiAJaWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NAoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgSE1BQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0d2Vha2luZyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uLiBUaGUgc2lnbmlmaWNhbnQgdGhpbmcgaXMgdGhlIGNoYW5nZSBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYDsgaXQmIzM5O3Mgbm93IHJldHVybmluZyBhbiBgaW50YCB0byBzaWduYWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzIChgLUVOT01FTWApLCB3aGljaCBpcyBhIHByZXR0eSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBlcnJvciBwcm9wYWdhdGlvbiB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGlzIHdoYXQgaW50ZXJlc3RzIG1lLgoKVGhlIHBhdGNoJiMzOTtzIGVmZmVjdHMgcmlwcGxlIHVwd2FyZHMgdGhyb3VnaCBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBzY3RwX3BhY2tldF9wYWNrYCwgYHNjdHBfYXV0aF9jaHVua192ZXJpZnlgLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgc3BlY2lmaWNhbGx5IHRvIHNlZSBob3cgdGhlIFNDVFAgc3Vic3lzdGVtIGhhbmRsZXMgdGhvc2UgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIHRoZSBITUFDIGNvbXB1dGF0aW9uLgoKSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIHRoZSBkaXJlY3QgZm9jdXMgb2YgdGhpcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGl0c2VsZiwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCAoYWZ0ZXIgYHNjdHBfcGFja2V0X3BhY2tgKSwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAgKGFsbCBhZnRlciBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWApLCBhbmQgYHNjdHBfc2ZfZWF0X2F1dGhgIChhZnRlciBgc2N0cF9zZl9hdXRoZW50aWNhdGVgKS4KClJpZ2h0LCBuZWVkIHRvIGNoZWNrIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9lYXRfYXV0aGAsIGFuZCB0aGUgb3RoZXIgZG9fZHVwY29vayBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGVudW0gc2N0cF9kaXNwb3NpdGlvbikgc2N0cF9zZl9kb18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0xOTA9c3RhdGljIGlubGluZSBib29sIHNjdHBfZXJyX2NodW5rX3ZhbGlkKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaylcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzMtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNF9DKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMxOC0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjMxOTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFCX2luaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzIwLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTIwLSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTIxOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUNfYWNrKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyMi1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NjQwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTcwNi0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjcwNzplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTcwOC1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy05NDQtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo5NDU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRV9jYShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy05NDYtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTUzNj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fdW5leHBlY3RlZF9pbml0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE3NjMtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxNzY0OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8xX3NpbWluaXQoXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNzY1LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTgxOC0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE4MTk6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdChcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE4MjAtXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODQyLSovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxODQzOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8zX2luaXRhY2soXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODQ0LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MjEyOT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIyNDUtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMjQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2soXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMjQ3LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MjU5OT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzZfc3RhbGUoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjcxNS0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjI3MTY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8xX2Fib3J0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjcxNy1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI4NjM9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI5MTctICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyOTE4OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9zaHV0ZG93bihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI5MTktXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMDA3LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzAwODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc2h1dF9jdHNuKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzAwOS1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTMxMDE9c2N0cF9zZl9kb185XzJfcmVzaHV0YWNrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMxNDQtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozMTQ1OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2Vjbl9jd3Ioc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzE0Ni1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMjAwLSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzIwMTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19lY25lKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMyMDItXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzYzNT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9vcGVycl9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM2NzItICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozNjczOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9maW5hbChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zNjc0LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9Mzg1MT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2Zfc2h1dF84XzRfNShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zOTA3LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzkwODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb184XzVfMV9FX3NhKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM5MDktXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkzNS0vKiBBRERJUCBTZWN0aW9uIDQuMiBVcG9uIHJlY2VwdGlvbiBvZiBhbiBBU0NPTkYgQ2h1bmsuICAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzkzNjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19hc2NvbmYoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkzNy1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQwNDk9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NlbmRfbmV4dF9hc2NvbmYoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDA3Ni0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQwNzc6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fYXNjb25mX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MDc4LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQxOTEtLyogUkUtQ09ORklHIFNlY3Rpb24gNS4yIFVwb24gcmVjZXB0aW9uIG9mIGFuIFJFQ09ORiBDaHVuay4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQxOTI6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQxOTMtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00OTcwPXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl92aW9sYXRpb25fY2h1bmsoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTA0Mi0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUwNDM6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2Fzb2Moc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTA0NC1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTE1NC0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxNTU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX3NlbmQoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTE1Ni1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTE5My0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxOTQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8yX3BybV9zaHV0ZG93bihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUxOTUtXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MjUwLSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTI1MTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzFfcHJtX2Fib3J0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTI1Mi1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU1MjY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2Zfc2h1dGRvd25fYWNrX3NlbnRfcHJtX2Fib3J0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU1NjEtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NTYyOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9yZXF1ZXN0aGVhcnRiZWF0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU2My1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU1OTQtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NTk1OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9hc2NvbmYoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU5Ni1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NjExLS8qIFJFLUNPTkZJRyBTZWN0aW9uIDUuMSBSRUNPTkYgQ2h1bmsgUHJvY2VkdXJlcyAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTYxMjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19wcm1fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2MTMtXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTYzMD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9pZ25vcmVfcHJpbWl0aXZlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2NTMtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NjU0OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX25vX3BlbmRpbmdfdHNuKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTY1NS1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2ODUtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1Njg2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9zdGFydF9zaHV0ZG93bihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2ODctXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NzU1LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTc1NjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc2h1dGRvd25fYWNrKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTc1Ny1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU4MzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfaWdub3JlX290aGVyKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01ODU3LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTg1ODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb182XzNfM19ydHgoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTg1OS1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU5NDUtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1OTQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzZfMl9zYWNrKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU5NDctXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNDVFAgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgbW9kaWZpZWQgU0NUUCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUsIHRoZSBvbmVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGFyZTogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2Ag4oCTIHdoaWNoIEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBub3QsIG1lYW5pbmcgaXMgaXQgbm9uLXN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbmV0L3NjdHAvYXV0aC5jYC4gVGhlbiwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHNvIG5vIG5lZWQgdG8gbG9vayB0aGVyZS4gQW5kIGBzY3RwX3NmX2RvXzVfMURfY2VgIGlzIGFsc28gbm9uLXN0YXRpYy4gSG1tLCBub3cgd2UgaGF2ZSBhIGZldyBzdGF0aWMgb25lczogYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gdGhhdCBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCBmdW5jdGlvbiBpbiBgbmV0L3NjdHAvYXV0aC5jYCBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIG5vbi1zdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL2F1dGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hdXRoLmM9NTk1PWludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4tLVxubmV0L3NjdHAvYXV0aC5jLTYxNS0gKi9cbm5ldC9zY3RwL2F1dGguYzo2MTY6aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2F1dGguYy02MTctXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTc4CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipFeGFtaW5pbmcgU0NUUCBGdW5jdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBTQ1RQIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlaXIgdmlzaWJpbGl0eS4gRmlyc3QsIEkgd2FzIHdvbmRlcmluZyBhYm91dCBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYC4gSXMgaXQgZXhwb3J0ZWQsIG9yIGp1c3Qgbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgbGF0dGVyLCBqdXN0IG5vbi1zdGF0aWMuIFRoZW4sIEkgd2FzIGN1cmlvdXMgYWJvdXQgYHNjdHBfcGFja2V0X3RyYW5zbWl0YC4gQWdhaW4sIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGJ1dCBjcnVjaWFsbHksIGl0JiMzOTtzIGFsc28gZ2xvYmFsbHkgdmlzaWJsZS4gVGhhdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdG8gY2FsbCBkaXJlY3RseS4KCk5leHQsIEkgd2VudCBvbiB0byBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiBgc2N0cF9zZl9kb181XzFEX2NlYC4gQW5kIGl0JiMzOTtzIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbi4KCk5vdywgYSBiaXQgb2YgYSB3cmlua2xlIGhhcyBzdXJmYWNlZC4gSSByZWFsaXplZCB0aGF0IGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAgaXMgY2FsbGVkICpmcm9tKiBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBsYXR0ZXIgZnVuY3Rpb24sIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGFydHMgb2YgdGhlIFNDVFAgc3RhdGUgbWFjaGluZSBpbnRlcmFjdCwgYW5kIHRoaXMgY2FsbCByZWxhdGlvbnNoaXAgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0yMTI5PXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjI0NS0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIyNDY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIyNDctXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBDb2RlIGZvciBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHNwZWNpZmljIGZvY3VzIHN5bWJvbHM6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYW5kIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLiBUaGVzZSBhcmUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNDVFAgb3BlcmF0aW9uLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGVpciBiZWhhdmlvciBvciBldmVuIHRoZWlyIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQuIEl0JiMzOTtzIGNydWNpYWwsIGFzIEkgYWx3YXlzIHNheSwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgdG8gcHJvcGVybHkgYXVkaXQgb3IgZGVidWcgYW55IG9mIHRoZXNlIGFyZWFzLgoKTm93LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIHByaW1hcnkgZmVhdHVyZSBlbmFibGUgZmxhZy4gTGV0JiMzOTtzIHNlZS4uLiBTQ1RQIGlzIGVuYWJsZWQgd2l0aCBgSVBfU0NUUGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQgdGhhdCYjMzk7cyBqdXN0IHRoZSB0b3AtbGV2ZWwgc3dpdGNoLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTQ1RQIHN1YnN5c3RlbSBzaG91bGQgYmUgZGVmaW5lZC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGZsYWdzLCBtb2R1bGVzLCBvciBmZWF0dXJlcyBtaWdodCBhZmZlY3QgdGhlc2UgZnVuY3Rpb25zLiBOZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGFzIGNsZWFuIGFzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbiAgNDI6XHRcdGJvb2wgXCYjMzQ7U0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1wmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDQ0Olx0XHRoZWxwXG4gIDQ1Olx0XHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXG4gIDQ2Olx0XHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDQ3Olx0XHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XG4gIDQ4Olx0XHQgICYjMzk7Y2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCYjMzk7XG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE5cbiAgNTE6XHRcbiAgNTI6XHRjaG9pY2VcbiAgNTM6XHRcdHByb21wdCBcJiMzNDtEZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFwmIzM0O1xuICA1NDpcdFx0ZGVmYXVsdCBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kLCBmb3JcbiAgNTc6XHRcdCAgd2hlbiBhIG1ldGhvZCBoYXNuJiMzOTt0IGJlZW4gZXhwbGljaXRseSBzZWxlY3RlZCB2aWEgdGhlXG4gIDU4Olx0XHQgIG5ldC5zY3RwLmNvb2tpZV9obWFjX2FsZyBzeXNjdGwuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIElmIHVuc3VyZSwgY2hvb3NlIHRoZSBkZWZhdWx0IChITUFDLVNIQTI1NikuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbiAgNjM6XHRcdGJvb2wgXCYjMzQ7SE1BQy1TSEEyNTZcJiMzNDtcbiAgNjQ6XHRcbiAgNjU6XHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcbiAgNjY6XHRcdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuICA2NzpcdFxuICA2ODpcdGVuZGNob2ljZVxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBJTkVUX1NDVFBfRElBR1xuICA3MTpcdFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbiAgNzI6XHRcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcbiAgNzM6XHRcbiAgNzQ6XHRcbiAgNzU6XHRlbmRpZiAjIElQX1NDVFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIEF1dGhlbnRpY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBzZWVtcyB0byBiZSBgSVBfU0NUUGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgc3BlY2lmaWNhbGx5IHRvIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLiBXYWl0IGEgbWludXRlLCBpc24mIzM5O3QgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaW5oZXJlbnRseSBwYXJ0IG9mIFNDVFAgQVVUSCwgd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGhpbiBTQ1RQPyBSaWdodC4gU28sIGluIGVzc2VuY2UsIGBJUF9TQ1RQYCBjb3ZlcnMgaXQuIE5vIHNlcGFyYXRlIGZsYWdzIG9yIGNvbmZpZ3MgZm9yIFNDVFAgQVVUSCBpdHNlbGYuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCByZXZpZXcgdGhpcyBwYXRjaCBjYXJlZnVsbHkuIEl0IG1vZGlmaWVzIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIHRvIHJldHVybiBhbiBlcnJvciwgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGlzIHBvdGVudGlhbCBlcnJvciBpcyBpbXBsZW1lbnRlZCBpbiBgc2N0cF9wYWNrZXRfcGFja2AgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWAsIHdoaWNoIGdldHMgaW52b2tlZCBieSBzZXZlcmFsIGNyaXRpY2FsIGZ1bmN0aW9uczogYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLiBBbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgd2hlbiBTQ1RQIGlzIGVuYWJsZWQuCgpJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiBhIGZldyBrZXkgc3ltYm9sczogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2Ag4oCTIG9idmlvdXNseSwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSDigJMgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGFuZCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4KCkFoLCByaWdodCwgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgcm9vdCBmdW5jdGlvbiBmb3IgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAuIEkgaGF2ZSB0byBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyeSBwb2ludHMsIHNvIEkmIzM5O2xsIGFsc28gYW5hbHl6ZSBgc2N0cF9zZl9lYXRfYXV0aGAuIFRoaXMgc2VlbXMgdG8gY292ZXIgdGhlIGNvbXBsZXRlIHNldCBvZiByZWFjaGFibGUgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NmX2VhdF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQyMz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTAwLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDUwMTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTAyLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2OTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBhZGQgYHNjdHBfc2ZfZWF0X2F1dGhgIHRvIG91ciBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIFJpZ2h0IG5vdywgd2UmIzM5O3ZlIGdvdDoKCiogICBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYAoqICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YAoqICAgYHNjdHBfc2ZfZG9fNV8xRF9jZWAKKiAgIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgCiogICBgc2N0cF9zZl9lYXRfYXV0aGAKCkFuZCBvdXIgY29uZmlndXJhdGlvbiBpcywgYXMgdXN1YWwsIGBJUF9TQ1RQYC4KClRoZSBwYXRjaCBpcyBhYm91dCBmaXhpbmcgU0NUUCBhdXRoZW50aWNhdGlvbiYjMzk7cyBITUFDIGNhbGN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhhbmRsaW5nIGFuZCBwcm9wYWdhdGluZyBgLUVOT01FTWAgKG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzKS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBvbiBob3cgcGFja2V0cyBhcmUgcGFja2VkIGFuZCBob3cgY2h1bmsgdmVyaWZpY2F0aW9uIHdvcmtzIHdpdGhpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBUaGlzIGlzIGNyaXRpY2FsLCBvYnZpb3VzbHksIGJlY2F1c2UgbWlzaGFuZGxpbmcgbWVtb3J5IGVycm9ycyBpbiB0aG9zZSByb3V0aW5lcyBjb3VsZCBsZWFkIHRvIGxlYWtzLCBjb3JydXB0aW9uLCBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiBIZW5jZSwgd2UgaGF2ZSB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgYXJlYXMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBub3QganVzdCBhIGxvY2FsIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCYjMzk7cyBpbiBgaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvc2N0cC9hdXRoLmNgIHdpdGhvdXQgYmVpbmcgc3RhdGljLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBUaGF0IG1ha2VzIHNlbnNlLgoKQW5kIGp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGNoZWNrIHRoZSBzYW1lIGZvciBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLiBHb29kLCBpdCYjMzk7cyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHNjdHBfcGFja2V0X3RyYW5zbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvb3V0cHV0LmM9NDM2PXN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbi0tXG5uZXQvc2N0cC9vdXRwdXQuYy01NzQtICovXG5uZXQvc2N0cC9vdXRwdXQuYzo1NzU6aW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXG5uZXQvc2N0cC9vdXRwdXQuYy01NzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3MQoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBOb24tU3RhdGljIEZ1bmN0aW9ucyBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIHRoZSBrZXkgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvciByaWdodCBub3cgaXMgaWRlbnRpZnlpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIG5vbi1zdGF0aWMgY29udGV4dC4gVGhlbiwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIGFuZCB2ZXJpZmllZCB0aGF0IGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYCwgYW5kIGBzY3RwX3NmX2VhdF9hdXRoYCBhcmUgaW5kZWVkICpub3QqIHN0YXRpYy4gR29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpOZXh0LCBJIG5lZWRlZCB0byBlbnN1cmUgSSBoYWRuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSBjaGVja2VkIGEgZmV3IG90aGVyIGZ1bmN0aW9ucywgYW5kIHllcywgYHNjdHBfc2ZfYXV0aGVudGljYXRlYCwgYHNjdHBfYXV0aF9jaHVua192ZXJpZnlgLCBgc2N0cF9wYWNrZXRfcGFja2AsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgYmAsIGBkYCBhcmUgYWxsIGNsZWFybHkgc3RhdGljLiBJIGZlZWwgY29uZmlkZW50IHRoYXQgbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzIG5vdyBjb21wbGV0ZSBhbmQgYWNjdXJhdGU7IEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgSSBuZWVkZWQgdG8gY2hlY2suCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgSVBfU0NUUGAgYmVjYXVzZSB0aGF0JiMzOTtzIGxpa2VseSB0aGUgY29yZS4gQW5kIGl0IGlzIHNlbGVjdGVkLiBIb3dldmVyLCBgSVBfU0NUUGAgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBhIG5vbi1pc3N1ZS4gSSB0aGVuIGV4cGFuZGVkIG15IHNlYXJjaCB0byBzZWUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHdlcmUgbmVjZXNzYXJ5LCBzdWNoIGFzIGBDUllQVE9fSE1BQ2Agb3IgYENSWVBUT19TSEExYC4gRXhhbWluaW5nIHRoZSBLY29uZmlnIGZvciBgSVBfU0NUUGAsIGl0IGFwcGVhcnMgdG8gc2VsZWN0IGEgc2V0IG9mIGNyeXB0byBhbmQgdXRpbGl0eSBjb25maWd1cmF0aW9uczogYENSWVBUT19MSUJfU0hBMWAsIGBDUllQVE9fTElCX1NIQTI1NmAsIGBDUllQVE9fTElCX1VUSUxTYCwgYE5FVF9DUkMzMkNgLCBhbmQgYE5FVF9VRFBfVFVOTkVMYC4gVGhlc2Ugc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHNvIGBJUF9TQ1RQYCBieSBpdHNlbGYgaXMgYWxsIEkgbmVlZC4gSSBhbSBjb250ZW50IHRoYXQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLgoKTm93LCBJIHRoaW5rIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjJiMzNDssCiAgICAmIzM0O3NjdHBfcGFja2V0X3RyYW5zbWl0JiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8xRF9jZSYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2smIzM0OywKICAgICYjMzQ7c2N0cF9zZl9lYXRfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjJiMzNDssCiAgICAmIzM0O3NjdHBfcGFja2V0X3RyYW5zbWl0JiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8xRF9jZSYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2smIzM0OywKICAgICYjMzQ7c2N0cF9zZl9lYXRfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6MjkuODg0MjczNjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNzcyOTM1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICAgIFwic2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8xRF9jZVwiLFxuICAgIFwic2N0cF9zZl9kb181XzJfNF9kdXBjb29rXCIsXG4gICAgXCJzY3RwX3NmX2VhdF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIFRoaXMgYWZmZWN0cyB0aGUgcGFja2V0IHBhY2tpbmcgYW5kIGNodW5rIHZlcmlmaWNhdGlvbiBwYXRocyBpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBwYXRocyB0byBlbnN1cmUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDoyMjoyOS44ODQyODI5ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzU3ODg2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZGU1MjU0NTdmZDk0NDg5ZmNjN2Q4M2E5Y2U3Y2MwYjY3NTg4MzBhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTA6MjI6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxcbmluZGV4IDZmMmNkNTYyYjFkZTYuLmVlYjMyOTdmZTk3ZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxcbkBAIC04Myw5ICs4Myw5IEBAIGludCBzY3RwX2F1dGhfc2VuZF9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcXG4gaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApO1xcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApO1xcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XFxuIHZvaWQgc2N0cF9hdXRoX3Noa2V5X2hvbGQoc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqc2hfa2V5KTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xcbmluZGV4IGM5MDFkMzczYWY4MDMuLjZkZTY2ZjU2YzQxY2UgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvYXV0aC5jXFxuKysrIGIvbmV0L3NjdHAvYXV0aC5jXFxuQEAgLTYxMyw5ICs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbiAgKiAgICB6ZXJvIChhcyBzaG93biBpbiBGaWd1cmUgNikgZm9sbG93ZWQgYnkgYWxsIGNodW5rcyB0aGF0IGFyZSBwbGFjZWRcXG4gICogICAgYWZ0ZXIgdGhlIEFVVEggY2h1bmsgaW4gdGhlIFNDVFAgcGFja2V0LlxcbiAgKi9cXG4tdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7XFxuIFxcdF9fdTE2IGtleV9pZCwgaG1hY19pZDtcXG5AQCAtNjM2LDcgKzYzNiw3IEBAIHZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXHRcXHQvKiBlcF9rZXkgY2FuJ3QgYmUgTlVMTCBoZXJlICovXFxuIFxcdFxcdGFzb2Nfa2V5ID0gc2N0cF9hdXRoX2Fzb2NfY3JlYXRlX3NlY3JldChhc29jLCBlcF9rZXksIGdmcCk7XFxuIFxcdFxcdGlmICghYXNvY19rZXkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRcXHRmcmVlX2tleSA9IDE7XFxuIFxcdH1cXG5AQCAtNjU0LDYgKzY1NCw4IEBAIHZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXG4gXFx0aWYgKGZyZWVfa2V5KVxcbiBcXHRcXHRzY3RwX2F1dGhfa2V5X3B1dChhc29jX2tleSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyogQVBJIEhlbHBlcnMgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cHV0LmMgYi9uZXQvc2N0cC9vdXRwdXQuY1xcbmluZGV4IDIzZTk2MzA1Y2FkN2MuLjNkN2VhZDlkNDBlMTkgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmNcXG4rKysgYi9uZXQvc2N0cC9vdXRwdXQuY1xcbkBAIC01MTcsOCArNTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGF1dGgpIHtcXG4tXFx0XFx0XFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVxcdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgcGFja2V0LVxcdTAwM2VhdXRoLVxcdTAwM2VzaGtleSwgZ2ZwKTtcXG4rXFx0XFx0XFx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cXHUwMDNlYXNvYywgbnNrYiwgYXV0aCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwYWNrZXQtXFx1MDAzZWF1dGgtXFx1MDAzZXNoa2V5LCBnZnApKSB7XFxuK1xcdFxcdFxcdFxcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXFx1MDAzZWF1dGgpO1xcbitcXHRcXHRcXHRcXHRwYWNrZXQtXFx1MDAzZWF1dGggPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRpZiAoZ3NvKVxcbitcXHRcXHRcXHRcXHRcXHRrZnJlZV9za2IobnNrYik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdC8qIGZyZWUgYXV0aCBpZiBubyBtb3JlIGNodW5rcywgb3IgYWRkIGl0IGJhY2sgKi9cXG4gXFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnBhY2tldC1cXHUwMDNlY2h1bmtfbGlzdCkpXFxuIFxcdFxcdFxcdFxcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXFx1MDAzZWF1dGgpO1xcbkBAIC02MTksNyArNjI1LDcgQEAgaW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXFxuIFxcbiBcXHQvKiBwYWNrIHVwIGNodW5rcyAqL1xcbiBcXHRwa3RfY291bnQgPSBzY3RwX3BhY2tldF9wYWNrKHBhY2tldCwgaGVhZCwgZ3NvLCBnZnApO1xcbi1cXHRpZiAoIXBrdF9jb3VudCkge1xcbitcXHRpZiAocGt0X2NvdW50IFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKGhlYWQpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jXFxuaW5kZXggNzA4ZmEwN2Q1ZmZmYy4uZTE5ODgxYzkwYjQ5OSAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xcbisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jXFxuQEAgLTYzNywxMyArNjM3LDE3IEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUNfYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4tXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuK3N0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgYXV0aDtcXG4gXFxuLVxcdGlmICghY2h1bmstXFx1MDAzZWF1dGhfY2h1bmspXFxuLVxcdFxcdHJldHVybiAhc2N0cF9hdXRoX3JlY3ZfY2lkKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUsIGFzb2MpO1xcbitcXHRpZiAoIWNodW5rLVxcdTAwM2VhdXRoX2NodW5rKSB7XFxuK1xcdFxcdGlmIChzY3RwX2F1dGhfcmVjdl9jaWQoY2h1bmstXFx1MDAzZWNodW5rX2hkci1cXHUwMDNldHlwZSwgYXNvYykpXFxuK1xcdFxcdFxcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xcbitcXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfTk9fRVJST1I7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xcbiBcXHQgKiBpcyBzdXBwb3NlZCB0byBiZSBhdXRoZW50aWNhdGVkIGFuZCB3ZSBoYXZlIHRvIGRvIGRlbGF5ZWRcXG5AQCAtNjU0LDcgKzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqL1xcbiBcXHRpZiAoIW5ldC1cXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSB8fCAhYXNvYy1cXHUwMDNlcGVlci5hdXRoX2NhcGFibGUpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7XFxuIFxcbiBcXHQvKiBzZXQtdXAgb3VyIGZha2UgY2h1bmsgc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyBpdCAqL1xcbiBcXHRhdXRoLnNrYiA9IGNodW5rLVxcdTAwM2VhdXRoX2NodW5rO1xcbkBAIC02NjYsNyArNjcwLDcgQEAgc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4gXFx0c2tiX3B1bGwoY2h1bmstXFx1MDAzZWF1dGhfY2h1bmssIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpO1xcbiBcXHRhdXRoLnRyYW5zcG9ydCA9IGNodW5rLVxcdTAwM2V0cmFuc3BvcnQ7XFxuIFxcbi1cXHRyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgXFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xcbitcXHRyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgXFx1MDAyNmF1dGgpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC04MjYsOCArODMwLDExIEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMURfY2Uoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gbm9tZW1faW5pdDtcXG4gXFxuLVxcdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpIHtcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuIFxcdFxcdHNjdHBfYXNzb2NpYXRpb25fZnJlZShuZXdfYXNvYyk7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBzY3RwX3NmX3BkaXNjYXJkKG5ldCwgZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpO1xcbiBcXHR9XFxuIFxcbkBAIC0xODg5LDYgKzE4OTYsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcXG4gXFx0ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uO1xcbitcXHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXY7XFxuIFxcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyO1xcbkBAIC0xOTA0LDggKzE5MTIsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcXG4gXFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxcbitcXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xcbitcXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcXG4rXFx0XFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcXG4gXFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIG5vIG5ldyBhZGRyZXNzZXMgYXJlIGJlaW5nIGFkZGVkIGR1cmluZyB0aGVcXG4gXFx0ICogcmVzdGFydC4gIFRob3VnaCB0aGlzIGlzIGEgcHJldHR5IGNvbXBsaWNhdGVkIGF0dGFja1xcbkBAIC0yMDExLDYgKzIwMjMsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfaW5pdF9jaHVuayAqcGVlcl9pbml0O1xcbitcXHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcXG4gXFxuIFxcdC8qIG5ld19hc29jIGlzIGEgYnJhbmQtbmV3IGFzc29jaWF0aW9uLCBzbyB0aGVzZSBhcmUgbm90IHlldFxcbkBAIC0yMDI0LDggKzIwMzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcXG4gXFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxcbitcXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xcbitcXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcXG4rXFx0XFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcXG4gXFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcXG4rXFx0fVxcbiBcXG4gXFx0c2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsXFxuIFxcdFxcdFxcdFNDVFBfU1RBVEUoU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkpO1xcbkBAIC0yMTE4LDYgKzIxMzUsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ID0gTlVMTCwgKmFpX2V2ID0gTlVMTCwgKmF1dGhfZXYgPSBOVUxMO1xcbitcXHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcXG4gXFxuIFxcdC8qIENsYXJpZmljYXRpb24gZnJvbSBJbXBsZW1lbnRvcidzIEd1aWRlOlxcbkBAIC0yMTI3LDggKzIxNDUsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcXG4gXFx0ICogYSBDT09LSUUgQUNLLlxcbiBcXHQgKi9cXG4gXFxuLVxcdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKSlcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpO1xcbitcXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcXG4rXFx0XFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcXG4gXFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogRG9uJ3QgYWNjaWRlbnRhbGx5IG1vdmUgYmFjayBpbnRvIGVzdGFibGlzaGVkIHN0YXRlLiAqL1xcbiBcXHRpZiAoYXNvYy1cXHUwMDNlc3RhdGUgXFx1MDAzYyBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSB7XFxuQEAgLTQ0NTUsOSArNDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG4gXFxuIFxcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xcbiBcXG4tXFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVxcdTAwM2Vza2IsXFxuLVxcdFxcdFxcdFxcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVxcdTAwM2VjaHVua19oZHIsXFxuLVxcdFxcdFxcdFxcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVxcdTAwM2Vza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cXHUwMDNlY2h1bmtfaGRyLFxcbitcXHRcXHRcXHRcXHQgICAgIHNoX2tleSwgR0ZQX0FUT01JQykpIHtcXG4rXFx0XFx0a2ZyZWUoc2F2ZV9kaWdlc3QpO1xcbitcXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdC8qIERpc2NhcmQgdGhlIHBhY2tldCBpZiB0aGUgZGlnZXN0cyBkbyBub3QgbWF0Y2ggKi9cXG4gXFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6MzEuMjIxMDI3MzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTk0MDUzMTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjXCIsXG4gICAgXCJzY3RwX3BhY2tldF90cmFuc21pdFwiLFxuICAgIFwic2N0cF9zZl9kb181XzFEX2NlXCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tcIixcbiAgICBcInNjdHBfc2ZfZWF0X2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkZTUyNTQ1N2ZkOTQ0ODlmY2M3ZDgzYTljZTdjYzBiNjc1ODgzMGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjIyOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuaW5kZXggNmYyY2Q1NjJiMWRlNi4uZWViMzI5N2ZlOTdkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuQEAgLTgzLDkgKzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuK1x0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcbitcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuKysrIGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgKzYxMyw5IEBAIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkXG4gICogICAgYWZ0ZXIgdGhlIEFVVEggY2h1bmsgaW4gdGhlIFNDVFAgcGFja2V0LlxuICAqL1xuLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4tXHRcdFx0ICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbitcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4rXHRcdFx0ICAgICBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICplcF9rZXksIGdmcF90IGdmcClcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9hdXRoX2J5dGVzICphc29jX2tleTtcbiBcdF9fdTE2IGtleV9pZCwgaG1hY19pZDtcbkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdC8qIGVwX2tleSBjYW4ndCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRcdGZyZWVfa2V5ID0gMTtcbiBcdH1cbkBAIC02NTQsNiArNjU0LDggQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXG4gXHRpZiAoZnJlZV9rZXkpXG4gXHRcdHNjdHBfYXV0aF9rZXlfcHV0KGFzb2Nfa2V5KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKiBBUEkgSGVscGVycyAqL1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmNcbmluZGV4IDIzZTk2MzA1Y2FkN2MuLjNkN2VhZDlkNDBlMTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9vdXRwdXQuY1xuKysrIGIvbmV0L3NjdHAvb3V0cHV0LmNcbkBAIC01MTcsOCArNTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoYXV0aCkge1xuLVx0XHRcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxuLVx0XHRcdFx0XHRcdCBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKTtcbitcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4rXHRcdFx0XHRcdFx0ICAgICBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKSkge1xuK1x0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbitcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbitcdFx0XHRcdGlmIChnc28pXG4rXHRcdFx0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbiBcdFx0XHQvKiBmcmVlIGF1dGggaWYgbm8gbW9yZSBjaHVua3MsIG9yIGFkZCBpdCBiYWNrICovXG4gXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cGFja2V0LVx1MDAzZWNodW5rX2xpc3QpKVxuIFx0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbkBAIC02MTksNyArNjI1LDcgQEAgaW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXG4gXG4gXHQvKiBwYWNrIHVwIGNodW5rcyAqL1xuIFx0cGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTtcbi1cdGlmICghcGt0X2NvdW50KSB7XG4rXHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgKzYzNywxNyBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFDX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4rc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4rXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayBhdXRoO1xuIFxuLVx0aWYgKCFjaHVuay1cdTAwM2VhdXRoX2NodW5rKVxuLVx0XHRyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYyk7XG4rXHRpZiAoIWNodW5rLVx1MDAzZWF1dGhfY2h1bmspIHtcbitcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4rXHRcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7XG4rXHRcdHJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcbitcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgKzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqL1xuIFx0aWYgKCFuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSB8fCAhYXNvYy1cdTAwM2VwZWVyLmF1dGhfY2FwYWJsZSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcbiBcbiBcdC8qIHNldC11cCBvdXIgZmFrZSBjaHVuayBzbyB0aGF0IHdlIGNhbiBwcm9jZXNzIGl0ICovXG4gXHRhdXRoLnNrYiA9IGNodW5rLVx1MDAzZWF1dGhfY2h1bms7XG5AQCAtNjY2LDcgKzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuK1x0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpO1xuIH1cbiBcbiAvKlxuQEAgLTgyNiw4ICs4MzAsMTEgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gbm9tZW1faW5pdDtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpIHtcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4rXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiBcdFx0c2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTtcbitcdFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxuK1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgKzE4OTYsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiBcdGVudW0gc2N0cF9kaXNwb3NpdGlvbiBkaXNwb3NpdGlvbjtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXY7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICplcnI7XG5AQCAtMTkwNCw4ICsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4rXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xuK1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4rXHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbitcdFx0XHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcbiBcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlXG4gXHQgKiByZXN0YXJ0LiAgVGhvdWdoIHRoaXMgaXMgYSBwcmV0dHkgY29tcGxpY2F0ZWQgYXR0YWNrXG5AQCAtMjAxMSw2ICsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcbiBcdC8qIG5ld19hc29jIGlzIGEgYnJhbmQtbmV3IGFzc29jaWF0aW9uLCBzbyB0aGVzZSBhcmUgbm90IHlldFxuQEAgLTIwMjQsOCArMjAzNywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxuIFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXG4gXHRcdGdvdG8gbm9tZW07XG4gXG4tXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxuK1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHRzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSxcbiBcdFx0XHRTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpKTtcbkBAIC0yMTE4LDYgKzIxMzUsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ID0gTlVMTCwgKmFpX2V2ID0gTlVMTCwgKmF1dGhfZXYgPSBOVUxMO1xuK1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJ3MgR3VpZGU6XG5AQCAtMjEyNyw4ICsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHQgKiBhIENPT0tJRSBBQ0suXG4gXHQgKi9cbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKSlcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHQvKiBEb24ndCBhY2NpZGVudGFsbHkgbW92ZSBiYWNrIGludG8gZXN0YWJsaXNoZWQgc3RhdGUuICovXG4gXHRpZiAoYXNvYy1cdTAwM2VzdGF0ZSBcdTAwM2MgU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkge1xuQEAgLTQ0NTUsOSArNDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cdTAwM2Vza2IsXG4rXHRcdFx0XHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXHUwMDNlY2h1bmtfaGRyLFxuK1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4rXHRcdGtmcmVlKHNhdmVfZGlnZXN0KTtcbitcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNO1xuK1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjMxLjIyMTAyOTc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0MzQyMTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgSE1BQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbi4gVGhlIHNpZ25pZmljYW50IHRoaW5nIGlzIHRoZSBjaGFuZ2UgaW4gYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2A7IGl0J3Mgbm93IHJldHVybmluZyBhbiBgaW50YCB0byBzaWduYWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzIChgLUVOT01FTWApLCB3aGljaCBpcyBhIHByZXR0eSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBlcnJvciBwcm9wYWdhdGlvbiB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGlzIHdoYXQgaW50ZXJlc3RzIG1lLlxuXG5UaGUgcGF0Y2gncyBlZmZlY3RzIHJpcHBsZSB1cHdhcmRzIHRocm91Z2ggc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgc2N0cF9wYWNrZXRfcGFja2AsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAsIGFuZCBgc2N0cF9zZl9hdXRoZW50aWNhdGVgLiBUaGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcg4oCTIHNwZWNpZmljYWxseSB0byBzZWUgaG93IHRoZSBTQ1RQIHN1YnN5c3RlbSBoYW5kbGVzIHRob3NlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyB0aGUgSE1BQyBjb21wdXRhdGlvbi5cblxuSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIHRoZSBkaXJlY3QgZm9jdXMgb2YgdGhpcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGl0c2VsZiwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCAoYWZ0ZXIgYHNjdHBfcGFja2V0X3BhY2tgKSwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAgKGFsbCBhZnRlciBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWApLCBhbmQgYHNjdHBfc2ZfZWF0X2F1dGhgIChhZnRlciBgc2N0cF9zZl9hdXRoZW50aWNhdGVgKS5cblxuUmlnaHQsIG5lZWQgdG8gY2hlY2sgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2VhdF9hdXRoYCwgYW5kIHRoZSBvdGhlciBkb19kdXBjb29rIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQ0LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6MzguOTY0NDUzMzEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODUyNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uKSBzY3RwX3NmX2RvX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0xOTA9c3RhdGljIGlubGluZSBib29sIHNjdHBfZXJyX2NodW5rX3ZhbGlkKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaylcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzMy0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNF9DKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzUtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMTgtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzE5OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzIwLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyMC0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1MjE6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyMi1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTY0MD1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTcwNi0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo3MDc6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNzA4LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy05NDQtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6OTQ1OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUVfY2Eoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTk0Ni1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTUzNj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fdW5leHBlY3RlZF9pbml0KFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTc2My0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxNzY0OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8xX3NpbWluaXQoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTc2NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODE4LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE4MTk6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdChcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODIwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE4NDItKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxODQzOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8zX2luaXRhY2soXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg0NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0yMTI5PXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMjQ1LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIyNDY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMjQ3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI1OTk9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl82X3N0YWxlKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjcxNS0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyNzE2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMV9hYm9ydChcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yNzE3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI4NjM9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjkxNy0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyOTE4OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9zaHV0ZG93bihcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yOTE5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMwMDctICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzAwODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc2h1dF9jdHNuKFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMwMDktXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzEwMT1zY3RwX3NmX2RvXzlfMl9yZXNodXRhY2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMTQ0LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjMxNDU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZWNuX2N3cihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzE0Ni1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzIwMC0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozMjAxOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2VjbmUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMyMDItXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzYzNT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9vcGVycl9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzY3Mi0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozNjczOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9maW5hbChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzY3NC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0zODUxPXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9zaHV0XzhfNF81KFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkwNy0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozOTA4OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzhfNV8xX0Vfc2Eoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM5MDktXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM5MzUtLyogQURESVAgU2VjdGlvbiA0LjIgVXBvbiByZWNlcHRpb24gb2YgYW4gQVNDT05GIENodW5rLiAgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozOTM2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2FzY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkzNy1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MDQ5PXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZW5kX25leHRfYXNjb25mKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDA3Ni0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MDc3OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2FzY29uZl9hY2soc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQwNzgtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQxOTEtLyogUkUtQ09ORklHIFNlY3Rpb24gNS4yIFVwb24gcmVjZXB0aW9uIG9mIGFuIFJFQ09ORiBDaHVuay4gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MTkyOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDE5My1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00OTcwPXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl92aW9sYXRpb25fY2h1bmsoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MDQyLSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUwNDM6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2Fzb2Moc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUwNDQtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MTU0LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxNTU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX3NlbmQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUxNTYtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MTkzLSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxOTQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8yX3BybV9zaHV0ZG93bihcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MTk1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyNTAtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTI1MTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzFfcHJtX2Fib3J0KFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyNTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTUyNj1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9zaHV0ZG93bl9hY2tfc2VudF9wcm1fYWJvcnQoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NTYxLSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU1NjI6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU2My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NTk0LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU1OTU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2FzY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU5Ni1cXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTYxMS0vKiBSRS1DT05GSUcgU2VjdGlvbiA1LjEgUkVDT05GIENodW5rIFByb2NlZHVyZXMgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NjEyOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2MTMtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU2MzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfaWdub3JlX3ByaW1pdGl2ZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2NTMtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTY1NDplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19ub19wZW5kaW5nX3RzbihcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NjU1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2ODUtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTY4NjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc3RhcnRfc2h1dGRvd24oXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTY4Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NzU1LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU3NTY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8yX3NodXRkb3duX2FjayhcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NzU3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU4MzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfaWdub3JlX290aGVyKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU4NTctICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTg1ODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb182XzNfM19ydHgoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU4NTktXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTk0NS0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1OTQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzZfMl9zYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01OTQ3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDoyMjozOS4wNjIzMTA1OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA0ODM4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTQ1RQIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGVzZSBtb2RpZmllZCBTQ1RQIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLCB0aGUgb25lcyB0aGF0IGhhdmUgY2hhbmdlZCBhcmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIOKAkyB3aGljaCBJIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBleHBvcnRlZCBvciBub3QsIG1lYW5pbmcgaXMgaXQgbm9uLXN0YXRpYy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvc2N0cC9hdXRoLmNgLiBUaGVuLCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgc28gbm8gbmVlZCB0byBsb29rIHRoZXJlLiBBbmQgYHNjdHBfc2ZfZG9fNV8xRF9jZWAgaXMgYWxzbyBub24tc3RhdGljLiBIbW0sIG5vdyB3ZSBoYXZlIGEgZmV3IHN0YXRpYyBvbmVzOiBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4gUmlnaHQsIHNvIEkgbmVlZCB0byBmb2N1cyBvbiB0aGF0IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGZ1bmN0aW9uIGluIGBuZXQvc2N0cC9hdXRoLmNgIGFuZCBtYWtlIHN1cmUgaXQncyBub24tc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjQzLjY2NzE1MDYyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjM1Mzk5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL2F1dGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hdXRoLmM9NTk1PWludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNjE1LSAqL1xcbm5ldC9zY3RwL2F1dGguYzo2MTY6aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9hdXRoLmMtNjE3LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6NDMuNzU5NTA4OTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5Mjc3MzkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkV4YW1pbmluZyBTQ1RQIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBTQ1RQIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlaXIgdmlzaWJpbGl0eS4gRmlyc3QsIEkgd2FzIHdvbmRlcmluZyBhYm91dCBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYC4gSXMgaXQgZXhwb3J0ZWQsIG9yIGp1c3Qgbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBpdCdzIHRoZSBsYXR0ZXIsIGp1c3Qgbm9uLXN0YXRpYy4gVGhlbiwgSSB3YXMgY3VyaW91cyBhYm91dCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLiBBZ2FpbiwgaXQncyBub24tc3RhdGljLCBidXQgY3J1Y2lhbGx5LCBpdCdzIGFsc28gZ2xvYmFsbHkgdmlzaWJsZS4gVGhhdCBtZWFucyBpdCdzIGF2YWlsYWJsZSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0byBjYWxsIGRpcmVjdGx5LlxuXG5OZXh0LCBJIHdlbnQgb24gdG8gY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgYHNjdHBfc2ZfZG9fNV8xRF9jZWAuIEFuZCBpdCdzIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbi5cblxuTm93LCBhIGJpdCBvZiBhIHdyaW5rbGUgaGFzIHN1cmZhY2VkLiBJIHJlYWxpemVkIHRoYXQgYHNjdHBfc2ZfZG9fZHVwY29va19hYCBpcyBjYWxsZWQgKmZyb20qIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgbGF0dGVyIGZ1bmN0aW9uLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhcnRzIG9mIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUgaW50ZXJhY3QsIGFuZCB0aGlzIGNhbGwgcmVsYXRpb25zaGlwIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzgsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6NTAuNzUyMjg1MzI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDMwMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MjEyOT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjI0NS0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMjQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2soXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjI0Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjUwLjgyMTMyMDUwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjAxNTg0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgQ29kZSBmb3IgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc3BlY2lmaWMgZm9jdXMgc3ltYm9sczogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AsIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBhbmQgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AuIFRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gU0NUUCBvcGVyYXRpb24sIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yIG9yIGV2ZW4gdGhlaXIgaW5jbHVzaW9uIGluIHRoZSBidWlsZC4gSXQncyBjcnVjaWFsLCBhcyBJIGFsd2F5cyBzYXksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGF1ZGl0IG9yIGRlYnVnIGFueSBvZiB0aGVzZSBhcmVhcy5cblxuTm93LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIHByaW1hcnkgZmVhdHVyZSBlbmFibGUgZmxhZy4gTGV0J3Mgc2VlLi4uIFNDVFAgaXMgZW5hYmxlZCB3aXRoIGBJUF9TQ1RQYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGF0J3MganVzdCB0aGUgdG9wLWxldmVsIHN3aXRjaC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFNDVFAgc3Vic3lzdGVtIHNob3VsZCBiZSBkZWZpbmVkLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgZmxhZ3MsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIG1pZ2h0IGFmZmVjdCB0aGVzZSBmdW5jdGlvbnMuIE5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYXMgY2xlYW4gYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjU0Ljg4MTQ4MTc3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU0NUUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBfU0NUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gIDExOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZyb20gUkZDIDI5NjAgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBcXFwiU0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcXG4gIDIwOlxcdFxcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXFxuICAyMTpcXHRcXHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXFxuICAyNDpcXHRcXHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcXG4gIDI1OlxcdFxcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXFxuICAyNjpcXHRcXHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxcbiAgMjc6XFx0XFx0ICBtZXNzYWdlcyxcXG4gIDI4OlxcdFxcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcXG4gIDI5OlxcdFxcdCAgcGFja2V0LCBhbmRcXG4gIDMwOlxcdFxcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxcbiAgMzE6XFx0XFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGtlcm5lbCdzIGR5bmFtaWMgZGVidWdnaW5nIGZyYW1ld29yay5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGlmIElQX1NDVFBcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIFNDVFBfREJHX09CSkNOVFxcbiAgNDI6XFx0XFx0Ym9vbCBcXFwiU0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1xcXCJcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgNDQ6XFx0XFx0aGVscFxcbiAgNDU6XFx0XFx0ICBJZiB5b3Ugc2F5IFksIHRoaXMgd2lsbCBlbmFibGUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIGNvdW50aW5nIHRoZVxcbiAgNDY6XFx0XFx0ICB0eXBlIG9mIG9iamVjdHMgdGhhdCBhcmUgY3VycmVudGx5IGFsbG9jYXRlZC4gIFRoaXMgaXMgdXNlZnVsIGZvclxcbiAgNDc6XFx0XFx0ICBpZGVudGlmeWluZyBtZW1vcnkgbGVha3MuIFRoaXMgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHZpZXdlZCBieVxcbiAgNDg6XFx0XFx0ICAnY2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCdcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNob2ljZVxcbiAgNTM6XFx0XFx0cHJvbXB0IFxcXCJEZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFxcXCJcXG4gIDU0OlxcdFxcdGRlZmF1bHQgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX1NIQTI1NlxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgZm9yXFxuICA1NzpcXHRcXHQgIHdoZW4gYSBtZXRob2QgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZWxlY3RlZCB2aWEgdGhlXFxuICA1ODpcXHRcXHQgIG5ldC5zY3RwLmNvb2tpZV9obWFjX2FsZyBzeXNjdGwuXFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdCAgSWYgdW5zdXJlLCBjaG9vc2UgdGhlIGRlZmF1bHQgKEhNQUMtU0hBMjU2KS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcXG4gIDYzOlxcdFxcdGJvb2wgXFxcIkhNQUMtU0hBMjU2XFxcIlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcXG4gIDY2OlxcdFxcdGJvb2wgXFxcIk5vbmVcXFwiXFxuICA2NzpcXHRcXG4gIDY4OlxcdGVuZGNob2ljZVxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICA3MjpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcbiAgNzU6XFx0ZW5kaWYgIyBJUF9TQ1RQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjU0Ljg4MTYwOTg0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg0NzI3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBzZWVtcyB0byBiZSBgSVBfU0NUUGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCBzcGVjaWZpY2FsbHkgdG8gYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AuIFdhaXQgYSBtaW51dGUsIGlzbid0IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGluaGVyZW50bHkgcGFydCBvZiBTQ1RQIEFVVEgsIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aXRoaW4gU0NUUD8gUmlnaHQuIFNvLCBpbiBlc3NlbmNlLCBgSVBfU0NUUGAgY292ZXJzIGl0LiBObyBzZXBhcmF0ZSBmbGFncyBvciBjb25maWdzIGZvciBTQ1RQIEFVVEggaXRzZWxmLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIHJldmlldyB0aGlzIHBhdGNoIGNhcmVmdWxseS4gSXQgbW9kaWZpZXMgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgdG8gcmV0dXJuIGFuIGVycm9yLCBhbmQgdGhlIGhhbmRsaW5nIG9mIHRoaXMgcG90ZW50aWFsIGVycm9yIGlzIGltcGxlbWVudGVkIGluIGBzY3RwX3BhY2tldF9wYWNrYCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4gYHNjdHBfc2ZfYXV0aGVudGljYXRlYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCwgd2hpY2ggZ2V0cyBpbnZva2VkIGJ5IHNldmVyYWwgY3JpdGljYWwgZnVuY3Rpb25zOiBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAuIEFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIFNDVFAgaXMgZW5hYmxlZC5cblxuSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIOKAkyBvYnZpb3VzbHksIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ug4oCTIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBhbmQgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AuXG5cbkFoLCByaWdodCwgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgcm9vdCBmdW5jdGlvbiBmb3IgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAuIEkgaGF2ZSB0byBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyeSBwb2ludHMsIHNvIEknbGwgYWxzbyBhbmFseXplIGBzY3RwX3NmX2VhdF9hdXRoYC4gVGhpcyBzZWVtcyB0byBjb3ZlciB0aGUgY29tcGxldGUgc2V0IG9mIHJlYWNoYWJsZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjM6MDIuMjY2MzQwMDcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE5NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3NmX2VhdF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQ0MjM9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTAwLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ1MDE6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZWF0X2F1dGgoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDItXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjM6MDIuMzQ0NTQyNzk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTQ2NTA1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gYWRkIGBzY3RwX3NmX2VhdF9hdXRoYCB0byBvdXIgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBSaWdodCBub3csIHdlJ3ZlIGdvdDpcblxuKiAgIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgXG4qICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YFxuKiAgIGBzY3RwX3NmX2RvXzVfMURfY2VgXG4qICAgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2BcbiogICBgc2N0cF9zZl9lYXRfYXV0aGBcblxuQW5kIG91ciBjb25maWd1cmF0aW9uIGlzLCBhcyB1c3VhbCwgYElQX1NDVFBgLlxuXG5UaGUgcGF0Y2ggaXMgYWJvdXQgZml4aW5nIFNDVFAgYXV0aGVudGljYXRpb24ncyBITUFDIGNhbGN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhhbmRsaW5nIGFuZCBwcm9wYWdhdGluZyBgLUVOT01FTWAgKG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzKS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBvbiBob3cgcGFja2V0cyBhcmUgcGFja2VkIGFuZCBob3cgY2h1bmsgdmVyaWZpY2F0aW9uIHdvcmtzIHdpdGhpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBUaGlzIGlzIGNyaXRpY2FsLCBvYnZpb3VzbHksIGJlY2F1c2UgbWlzaGFuZGxpbmcgbWVtb3J5IGVycm9ycyBpbiB0aG9zZSByb3V0aW5lcyBjb3VsZCBsZWFkIHRvIGxlYWtzLCBjb3JydXB0aW9uLCBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiBIZW5jZSwgd2UgaGF2ZSB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgYXJlYXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIG5vdCBqdXN0IGEgbG9jYWwgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0J3MgaW4gYGluY2x1ZGUvbmV0L3NjdHAvYXV0aC5oYCBhbmQgZGVmaW5lZCBpbiBgbmV0L3NjdHAvYXV0aC5jYCB3aXRob3V0IGJlaW5nIHN0YXRpYywgc28gaXQncyBhY2Nlc3NpYmxlLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5BbmQganVzdCB0byBiZSBzdXJlLCBsZXQgbWUgY2hlY2sgdGhlIHNhbWUgZm9yIGBzY3RwX3BhY2tldF90cmFuc21pdGAuIEdvb2QsIGl0J3MgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjk5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIzOjA5LjQ5OTE5NjQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIyNjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvb3V0cHV0LmM9NDM2PXN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcXG4tLVxcbm5ldC9zY3RwL291dHB1dC5jLTU3NC0gKi9cXG5uZXQvc2N0cC9vdXRwdXQuYzo1NzU6aW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXFxubmV0L3NjdHAvb3V0cHV0LmMtNTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjM6MDkuNTY1NDI3NjQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MTE1NTY4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBOb24tU3RhdGljIEZ1bmN0aW9ucyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUga2V5IHRoaW5nIEknbSBsb29raW5nIGZvciByaWdodCBub3cgaXMgaWRlbnRpZnlpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIG5vbi1zdGF0aWMgY29udGV4dC4gVGhlbiwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIGFuZCB2ZXJpZmllZCB0aGF0IGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYCwgYW5kIGBzY3RwX3NmX2VhdF9hdXRoYCBhcmUgaW5kZWVkICpub3QqIHN0YXRpYy4gR29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuXG5cbk5leHQsIEkgbmVlZGVkIHRvIGVuc3VyZSBJIGhhZG4ndCBtaXNzZWQgYW55dGhpbmcuIEkgY2hlY2tlZCBhIGZldyBvdGhlciBmdW5jdGlvbnMsIGFuZCB5ZXMsIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCwgYHNjdHBfcGFja2V0X3BhY2tgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYGJgLCBgZGAgYXJlIGFsbCBjbGVhcmx5IHN0YXRpYy4gSSBmZWVsIGNvbmZpZGVudCB0aGF0IG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyBub3cgY29tcGxldGUgYW5kIGFjY3VyYXRlOyBJJ3ZlIGNvdmVyZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgSSBuZWVkZWQgdG8gY2hlY2suXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbSBmb2N1c2luZyBvbiBgSVBfU0NUUGAgYmVjYXVzZSB0aGF0J3MgbGlrZWx5IHRoZSBjb3JlLiBBbmQgaXQgaXMgc2VsZWN0ZWQuIEhvd2V2ZXIsIGBJUF9TQ1RQYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0J3MgYSBub24taXNzdWUuIEkgdGhlbiBleHBhbmRlZCBteSBzZWFyY2ggdG8gc2VlIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB3ZXJlIG5lY2Vzc2FyeSwgc3VjaCBhcyBgQ1JZUFRPX0hNQUNgIG9yIGBDUllQVE9fU0hBMWAuIEV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgYElQX1NDVFBgLCBpdCBhcHBlYXJzIHRvIHNlbGVjdCBhIHNldCBvZiBjcnlwdG8gYW5kIHV0aWxpdHkgY29uZmlndXJhdGlvbnM6IGBDUllQVE9fTElCX1NIQTFgLCBgQ1JZUFRPX0xJQl9TSEEyNTZgLCBgQ1JZUFRPX0xJQl9VVElMU2AsIGBORVRfQ1JDMzJDYCwgYW5kIGBORVRfVURQX1RVTk5FTGAuIFRoZXNlIHNob3VsZCBiZSBzdWZmaWNpZW50LCBzbyBgSVBfU0NUUGAgYnkgaXRzZWxmIGlzIGFsbCBJIG5lZWQuIEkgYW0gY29udGVudCB0aGF0IEkgaGF2ZSBpZGVudGlmaWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cblxuTm93LCBJIHRoaW5rIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIGFuZCBwcm9jZWVkIHdpdGggdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzEsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIzOjE3LjA3Njk4NzExNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTY4Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjXCIsXG4gICAgXCJzY3RwX3BhY2tldF90cmFuc21pdFwiLFxuICAgIFwic2N0cF9zZl9kb181XzFEX2NlXCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tcIixcbiAgICBcInNjdHBfc2ZfZWF0X2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICAgIFwic2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8xRF9jZVwiLFxuICAgIFwic2N0cF9zZl9kb181XzJfNF9kdXBjb29rXCIsXG4gICAgXCJzY3RwX3NmX2VhdF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIFRoaXMgYWZmZWN0cyB0aGUgcGFja2V0IHBhY2tpbmcgYW5kIGNodW5rIHZlcmlmaWNhdGlvbiBwYXRocyBpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBwYXRocyB0byBlbnN1cmUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmpn6b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 09:39:05 +0000 UTC FinishedAt: 2026-08-04 10:23:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2a33516f9ef59ad11844d4fc152f889449b5daf3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "2a33516f9ef59ad11844d4fc152f889449b5daf3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "7004afe6-562b-4e74-8715-cd4cb0ea9113" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_auth_calculate_hmac", "sctp_packet_transmit", "sctp_sf_do_5_1D_ce", "sctp_sf_do_5_2_4_dupcook", "sctp_sf_eat_auth" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMmIzM0OywKICAgICYjMzQ7c2N0cF9wYWNrZXRfdHJhbnNtaXQmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzFEX2NlJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2VhdF9hdXRoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTQ1RQIGF1dGhlbnRpY2F0aW9uIEhNQUMgY2FsY3VsYXRpb24gdG8gcHJvcGVybHkgaGFuZGxlIGFuZCBwcm9wYWdhdGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgKC1FTk9NRU0pLiBUaGlzIGFmZmVjdHMgdGhlIHBhY2tldCBwYWNraW5nIGFuZCBjaHVuayB2ZXJpZmljYXRpb24gcGF0aHMgaW4gdGhlIFNDVFAgc3RhdGUgbWFjaGluZS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlc2UgcGF0aHMgdG8gZW5zdXJlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0ZGU1MjU0NTdmZDk0NDg5ZmNjN2Q4M2E5Y2U3Y2MwYjY3NTg4MzBhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxMDoyMjoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaCBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5pbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG5AQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuICAqICAgIHplcm8gKGFzIHNob3duIGluIEZpZ3VyZSA2KSBmb2xsb3dlZCBieSBhbGwgY2h1bmtzIHRoYXQgYXJlIHBsYWNlZFxuICAqICAgIGFmdGVyIHRoZSBBVVRIIGNodW5rIGluIHRoZSBTQ1RQIHBhY2tldC5cbiAgKi9cbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxuJiM0MztpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4ge1xuIFx0c3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7XG4gXHRfX3UxNiBrZXlfaWQsIGhtYWNfaWQ7XG5AQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0LyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIFx0XHRmcmVlX2tleSA9IDE7XG4gXHR9XG5AQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcbiBcdGlmIChmcmVlX2tleSlcbiBcdFx0c2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogQVBJIEhlbHBlcnMgKi9cbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9vdXRwdXQuYyBiL25ldC9zY3RwL291dHB1dC5jXG5pbmRleCAyM2U5NjMwNWNhZDdjLi4zZDdlYWQ5ZDQwZTE5IDEwMDY0NFxuLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL291dHB1dC5jXG5AQCAtNTE3LDggJiM0Mzs1MTcsMTQgQEAgc3RhdGljIGludCBzY3RwX3BhY2tldF9wYWNrKHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LFxuIFx0XHR9XG4gXG4gXHRcdGlmIChhdXRoKSB7XG4tXHRcdFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4tXHRcdFx0XHRcdFx0IHBhY2tldC1cdTAwM2VhdXRoLVx1MDAzZXNoa2V5LCBnZnApO1xuJiM0MztcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgcGFja2V0LVx1MDAzZWF1dGgtXHUwMDNlc2hrZXksIGdmcCkpIHtcbiYjNDM7XHRcdFx0XHRzY3RwX2NodW5rX2ZyZWUocGFja2V0LVx1MDAzZWF1dGgpO1xuJiM0MztcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbiYjNDM7XHRcdFx0XHRpZiAoZ3NvKVxuJiM0MztcdFx0XHRcdFx0a2ZyZWVfc2tiKG5za2IpO1xuJiM0MztcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHR9XG4gXHRcdFx0LyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqL1xuIFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNnBhY2tldC1cdTAwM2VjaHVua19saXN0KSlcbiBcdFx0XHRcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXHUwMDNlYXV0aCk7XG5AQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcClcbiBcbiBcdC8qIHBhY2sgdXAgY2h1bmtzICovXG4gXHRwa3RfY291bnQgPSBzY3RwX3BhY2tldF9wYWNrKHBhY2tldCwgaGVhZCwgZ3NvLCBnZnApO1xuLVx0aWYgKCFwa3RfY291bnQpIHtcbiYjNDM7XHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcbi1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuJiM0MztzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgYXV0aDtcbiBcbi1cdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaylcbi1cdFx0cmV0dXJuICFzY3RwX2F1dGhfcmVjdl9jaWQoY2h1bmstXHUwMDNlY2h1bmtfaGRyLVx1MDAzZXR5cGUsIGFzb2MpO1xuJiM0MztcdGlmICghY2h1bmstXHUwMDNlYXV0aF9jaHVuaykge1xuJiM0MztcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuJiM0MztcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgJiM0Mzs2NTgsNyBAQCBzdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuIFxuIFx0LyogTWFrZSBzdXJlIHRoYXQgd2UgYW5kIHRoZSBwZWVyIGFyZSBBVVRIIGNhcGFibGUgKi9cbiBcdGlmICghbmV0LVx1MDAzZXNjdHAuYXV0aF9lbmFibGUgfHwgIWFzb2MtXHUwMDNlcGVlci5hdXRoX2NhcGFibGUpXG4tXHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xuIFxuIFx0Lyogc2V0LXVwIG91ciBmYWtlIGNodW5rIHNvIHRoYXQgd2UgY2FuIHByb2Nlc3MgaXQgKi9cbiBcdGF1dGguc2tiID0gY2h1bmstXHUwMDNlYXV0aF9jaHVuaztcbkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuJiM0MztcdHJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCBcdTAwMjZhdXRoKTtcbiB9XG4gXG4gLypcbkBAIC04MjYsOCAmIzQzOzgzMCwxMSBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBub21lbV9pbml0O1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkge1xuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4mIzQzO1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4gXHRcdHNjdHBfYXNzb2NpYXRpb25fZnJlZShuZXdfYXNvYyk7XG4mIzQzO1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4mIzQzO1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7XG4gXHRlbnVtIHNjdHBfZGlzcG9zaXRpb24gZGlzcG9zaXRpb247XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmVycjtcbkBAIC0xOTA0LDggJiM0MzsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogTWFrZSBzdXJlIG5vIG5ldyBhZGRyZXNzZXMgYXJlIGJlaW5nIGFkZGVkIGR1cmluZyB0aGVcbiBcdCAqIHJlc3RhcnQuICBUaG91Z2ggdGhpcyBpcyBhIHByZXR0eSBjb21wbGljYXRlZCBhdHRhY2tcbkBAIC0yMDExLDYgJiM0MzsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiYjNDM7XHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7XG4gXG4gXHQvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXRcbkBAIC0yMDI0LDggJiM0MzsyMDM3LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4mIzQzO1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0c2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsXG4gXHRcdFx0U0NUUF9TVEFURShTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSk7XG5AQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHRcdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7XG4mIzQzO1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJiMzOTtzIEd1aWRlOlxuQEAgLTIxMjcsOCAmIzQzOzIxNDUsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcbiBcdCAqIGEgQ09PS0lFIEFDSy5cbiBcdCAqL1xuIFxuLVx0aWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKVxuJiM0MztcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbiYjNDM7XHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiYjNDM7XHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbiYjNDM7XHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4mIzQzO1x0fVxuIFxuIFx0LyogRG9uJiMzOTt0IGFjY2lkZW50YWxseSBtb3ZlIGJhY2sgaW50byBlc3RhYmxpc2hlZCBzdGF0ZS4gKi9cbiBcdGlmIChhc29jLVx1MDAzZXN0YXRlIFx1MDAzYyBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSB7XG5AQCAtNDQ1NSw5ICYjNDM7NDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuJiM0MztcdGlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstXHUwMDNlc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cdTAwM2VjaHVua19oZHIsXG4mIzQzO1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4mIzQzO1x0XHRrZnJlZShzYXZlX2RpZ2VzdCk7XG4mIzQzO1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfTk9NRU07XG4mIzQzO1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICAgJiMzNDtzY3RwX3BhY2tldF90cmFuc21pdCYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMURfY2UmIzM0OywKICAgICYjMzQ7c2N0cF9zZl9kb181XzJfNF9kdXBjb29rJiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZWF0X2F1dGgmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIFRoaXMgYWZmZWN0cyB0aGUgcGFja2V0IHBhY2tpbmcgYW5kIGNodW5rIHZlcmlmaWNhdGlvbiBwYXRocyBpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBwYXRocyB0byBlbnN1cmUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgbWVtb3J5IGxlYWtzIG9yIHN0YXRlIGluY29uc2lzdGVuY2llcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDRkZTUyNTQ1N2ZkOTQ0ODlmY2M3ZDgzYTljZTdjYzBiNjc1ODgzMGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjIyOjI4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAppbmRleCA2ZjJjZDU2MmIxZGU2Li5lZWIzMjk3ZmU5N2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2F1dGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaApAQCAtODMsOSAmIzQzOzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwotdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAotCQkJICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfcmVsZWFzZShzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hdXRoLmMgYi9uZXQvc2N0cC9hdXRoLmMKaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXV0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL2F1dGguYwpAQCAtNjEzLDkgJiM0Mzs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkCiAgKiAgICBhZnRlciB0aGUgQVVUSCBjaHVuayBpbiB0aGUgU0NUUCBwYWNrZXQuCiAgKi8KLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKQomIzQzO2ludCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiYjNDM7CQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAomIzQzOwkJCSAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7CiAJX191MTYga2V5X2lkLCBobWFjX2lkOwpAQCAtNjM2LDcgJiM0Mzs2MzYsNyBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJLyogZXBfa2V5IGNhbiYjMzk7dCBiZSBOVUxMIGhlcmUgKi8KIAkJYXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTsKIAkJaWYgKCFhc29jX2tleSkKLQkJCXJldHVybjsKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlmcmVlX2tleSA9IDE7CiAJfQpAQCAtNjU0LDYgJiM0Mzs2NTQsOCBAQCB2b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAogCWlmIChmcmVlX2tleSkKIAkJc2N0cF9hdXRoX2tleV9wdXQoYXNvY19rZXkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogLyogQVBJIEhlbHBlcnMgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggMjNlOTYzMDVjYWQ3Yy4uM2Q3ZWFkOWQ0MGUxOSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTUxNyw4ICYjNDM7NTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCwKIAkJfQogCiAJCWlmIChhdXRoKSB7Ci0JCQlzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWModHAtJmd0O2Fzb2MsIG5za2IsIGF1dGgsCi0JCQkJCQkgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKTsKJiM0MzsJCQlpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLSZndDthc29jLCBuc2tiLCBhdXRoLAomIzQzOwkJCQkJCSAgICAgcGFja2V0LSZndDthdXRoLSZndDtzaGtleSwgZ2ZwKSkgewomIzQzOwkJCQlzY3RwX2NodW5rX2ZyZWUocGFja2V0LSZndDthdXRoKTsKJiM0MzsJCQkJcGFja2V0LSZndDthdXRoID0gTlVMTDsKJiM0MzsJCQkJaWYgKGdzbykKJiM0MzsJCQkJCWtmcmVlX3NrYihuc2tiKTsKJiM0MzsJCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJfQogCQkJLyogZnJlZSBhdXRoIGlmIG5vIG1vcmUgY2h1bmtzLCBvciBhZGQgaXQgYmFjayAqLwogCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDtwYWNrZXQtJmd0O2NodW5rX2xpc3QpKQogCQkJCXNjdHBfY2h1bmtfZnJlZShwYWNrZXQtJmd0O2F1dGgpOwpAQCAtNjE5LDcgJiM0Mzs2MjUsNyBAQCBpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXQoc3RydWN0IHNjdHBfcGFja2V0ICpwYWNrZXQsIGdmcF90IGdmcCkKIAogCS8qIHBhY2sgdXAgY2h1bmtzICovCiAJcGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTsKLQlpZiAoIXBrdF9jb3VudCkgewomIzQzOwlpZiAocGt0X2NvdW50ICZsdDs9IDApIHsKIAkJa2ZyZWVfc2tiKGhlYWQpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jCkBAIC02MzcsMTMgJiM0Mzs2MzcsMTcgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LAogCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiB9CiAKLXN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCi0JCQkJICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiYjNDM7c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLAomIzQzOwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewogCXN0cnVjdCBzY3RwX2NodW5rIGF1dGg7CiAKLQlpZiAoIWNodW5rLSZndDthdXRoX2NodW5rKQotCQlyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKTsKJiM0MzsJaWYgKCFjaHVuay0mZ3Q7YXV0aF9jaHVuaykgewomIzQzOwkJaWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay0mZ3Q7Y2h1bmtfaGRyLSZndDt0eXBlLCBhc29jKSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRzsKJiM0MzsJCXJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjsKJiM0MzsJfQogCiAJLyogU0NUUC1BVVRIOiAgYXV0aF9jaHVuayBwb2ludGVyIGlzIG9ubHkgc2V0IHdoZW4gdGhlIGNvb2tpZS1lY2hvCiAJICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkCkBAIC02NTQsNyAmIzQzOzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqLwogCWlmICghbmV0LSZndDtzY3RwLmF1dGhfZW5hYmxlIHx8ICFhc29jLSZndDtwZWVyLmF1dGhfY2FwYWJsZSkKLQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7CiAKIAkvKiBzZXQtdXAgb3VyIGZha2UgY2h1bmsgc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyBpdCAqLwogCWF1dGguc2tiID0gY2h1bmstJmd0O2F1dGhfY2h1bms7CkBAIC02NjYsNyAmIzQzOzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssCiAJc2tiX3B1bGwoY2h1bmstJmd0O2F1dGhfY2h1bmssIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOwogCWF1dGgudHJhbnNwb3J0ID0gY2h1bmstJmd0O3RyYW5zcG9ydDsKIAotCXJldHVybiBzY3RwX3NmX2F1dGhlbnRpY2F0ZShhc29jLCAmYW1wO2F1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SOwomIzQzOwlyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgJmFtcDthdXRoKTsKIH0KIAogLyoKQEAgLTgyNiw4ICYjNDM7ODMwLDExIEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMURfY2Uoc3RydWN0IG5ldCAqbmV0LAogCWlmIChlcnJvcikKIAkJZ290byBub21lbV9pbml0OwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkgewomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpOwomIzQzOwlpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHsKIAkJc2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTsKJiM0MzsJCWlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSkKJiM0MzsJCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKIAkJcmV0dXJuIHNjdHBfc2ZfcGRpc2NhcmQobmV0LCBlcCwgYXNvYywgdHlwZSwgYXJnLCBjb21tYW5kcyk7CiAJfQogCkBAIC0xODg5LDYgJiM0MzsxODk2LDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYSgKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiAJZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uOwomIzQzOwllbnVtIHNjdHBfaWVycm9yIGVycm9yOwogCXN0cnVjdCBzY3RwX3VscGV2ZW50ICpldjsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyOwpAQCAtMTkwNCw4ICYjNDM7MTkxMiwxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKAogCWlmIChzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkobmV3X2Fzb2MsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG5vbWVtOwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKSkKJiM0MzsJZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTsKJiM0MzsJaWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7CiYjNDM7CQlpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pCiYjNDM7CQkJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07CiAJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7CiYjNDM7CX0KIAogCS8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlCiAJICogcmVzdGFydC4gIFRob3VnaCB0aGlzIGlzIGEgcHJldHR5IGNvbXBsaWNhdGVkIGF0dGFjawpAQCAtMjAxMSw2ICYjNDM7MjAyMyw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2IoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpwZWVyX2luaXQ7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBuZXdfYXNvYyBpcyBhIGJyYW5kLW5ldyBhc3NvY2lhdGlvbiwgc28gdGhlc2UgYXJlIG5vdCB5ZXQKQEAgLTIwMjQsOCAmIzQzOzIwMzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYigKIAlpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSkKIAkJZ290byBub21lbTsKIAotCWlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpCiYjNDM7CWVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSwKIAkJCVNDVFBfU1RBVEUoU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkpOwpAQCAtMjExOCw2ICYjNDM7MjEzNSw3IEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJCQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICpuZXdfYXNvYykKIHsKIAlzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXYgPSBOVUxMLCAqYWlfZXYgPSBOVUxMLCAqYXV0aF9ldiA9IE5VTEw7CiYjNDM7CWVudW0gc2N0cF9pZXJyb3IgZXJyb3I7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJlcGw7CiAKIAkvKiBDbGFyaWZpY2F0aW9uIGZyb20gSW1wbGVtZW50b3ImIzM5O3MgR3VpZGU6CkBAIC0yMTI3LDggJiM0MzsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoCiAJICogYSBDT09LSUUgQUNLLgogCSAqLwogCi0JaWYgKCFzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpKQomIzQzOwllcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgYXNvYyk7CiYjNDM7CWlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikgewomIzQzOwkJaWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKQomIzQzOwkJCXJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwogCQlyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9ESVNDQVJEOwomIzQzOwl9CiAKIAkvKiBEb24mIzM5O3QgYWNjaWRlbnRhbGx5IG1vdmUgYmFjayBpbnRvIGVzdGFibGlzaGVkIHN0YXRlLiAqLwogCWlmIChhc29jLSZndDtzdGF0ZSAmbHQ7IFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpIHsKQEAgLTQ0NTUsOSAmIzQzOzQ0NzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoCiAKIAltZW1zZXQoZGlnZXN0LCAwLCBzaWdfbGVuKTsKIAotCXNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay0mZ3Q7c2tiLAotCQkJCSAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCi0JCQkJIHNoX2tleSwgR0ZQX0FUT01JQyk7CiYjNDM7CWlmIChzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoYXNvYywgY2h1bmstJmd0O3NrYiwKJiM0MzsJCQkJICAgICAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLSZndDtjaHVua19oZHIsCiYjNDM7CQkJCSAgICAgc2hfa2V5LCBHRlBfQVRPTUlDKSkgewomIzQzOwkJa2ZyZWUoc2F2ZV9kaWdlc3QpOwomIzQzOwkJcmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNOwomIzQzOwl9CiAKIAkvKiBEaXNjYXJkIHRoZSBwYWNrZXQgaWYgdGhlIGRpZ2VzdHMgZG8gbm90IG1hdGNoICovCiAJaWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM0NAoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDQ1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgSE1BQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF04oCZcyB0d2Vha2luZyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uLiBUaGUgc2lnbmlmaWNhbnQgdGhpbmcgaXMgdGhlIGNoYW5nZSBpbiBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYDsgaXQmIzM5O3Mgbm93IHJldHVybmluZyBhbiBgaW50YCB0byBzaWduYWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzIChgLUVOT01FTWApLCB3aGljaCBpcyBhIHByZXR0eSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBlcnJvciBwcm9wYWdhdGlvbiB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGlzIHdoYXQgaW50ZXJlc3RzIG1lLgoKVGhlIHBhdGNoJiMzOTtzIGVmZmVjdHMgcmlwcGxlIHVwd2FyZHMgdGhyb3VnaCBzZXZlcmFsIGtleSBmdW5jdGlvbnM6IGBzY3RwX3BhY2tldF9wYWNrYCwgYHNjdHBfYXV0aF9jaHVua192ZXJpZnlgLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFRoaXMgbG9va3MgbGlrZSBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZyDigJMgc3BlY2lmaWNhbGx5IHRvIHNlZSBob3cgdGhlIFNDVFAgc3Vic3lzdGVtIGhhbmRsZXMgdGhvc2UgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMgZHVyaW5nIHRoZSBITUFDIGNvbXB1dGF0aW9uLgoKSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIHRoZSBkaXJlY3QgZm9jdXMgb2YgdGhpcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGl0c2VsZiwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCAoYWZ0ZXIgYHNjdHBfcGFja2V0X3BhY2tgKSwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAgKGFsbCBhZnRlciBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWApLCBhbmQgYHNjdHBfc2ZfZWF0X2F1dGhgIChhZnRlciBgc2N0cF9zZl9hdXRoZW50aWNhdGVgKS4KClJpZ2h0LCBuZWVkIHRvIGNoZWNrIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zLCBzdGFydGluZyB3aXRoIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9lYXRfYXV0aGAsIGFuZCB0aGUgb3RoZXIgZG9fZHVwY29vayBmdW5jdGlvbnMgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfGVudW0gc2N0cF9kaXNwb3NpdGlvbikgc2N0cF9zZl9kb18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0xOTA9c3RhdGljIGlubGluZSBib29sIHNjdHBfZXJyX2NodW5rX3ZhbGlkKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaylcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzMtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNF9DKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzNS1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMxOC0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjMxOTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFCX2luaXQoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzIwLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTIwLSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTIxOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUNfYWNrKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyMi1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NjQwPXN0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTcwNi0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjcwNzplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFEX2NlKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTcwOC1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy05NDQtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo5NDU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRV9jYShzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy05NDYtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTUzNj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fdW5leHBlY3RlZF9pbml0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE3NjMtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxNzY0OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8xX3NpbWluaXQoXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xNzY1LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTgxOC0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE4MTk6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdChcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE4MjAtXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODQyLSovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxODQzOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8zX2luaXRhY2soXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODQ0LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MjEyOT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIyNDUtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMjQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2soXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMjQ3LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MjU5OT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzZfc3RhbGUoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjcxNS0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjI3MTY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8xX2Fib3J0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjcxNy1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI4NjM9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI5MTctICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyOTE4OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9zaHV0ZG93bihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTI5MTktXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMDA3LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzAwODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc2h1dF9jdHNuKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzAwOS1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTMxMDE9c2N0cF9zZl9kb185XzJfcmVzaHV0YWNrKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMxNDQtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozMTQ1OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2Vjbl9jd3Ioc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzE0Ni1cdFx0XHRcdFx0IGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMjAwLSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzIwMTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19lY25lKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMyMDItXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzYzNT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9vcGVycl9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM2NzItICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozNjczOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9maW5hbChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zNjc0LVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9Mzg1MT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2Zfc2h1dF84XzRfNShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zOTA3LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzkwODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb184XzVfMV9FX3NhKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM5MDktXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkzNS0vKiBBRERJUCBTZWN0aW9uIDQuMiBVcG9uIHJlY2VwdGlvbiBvZiBhbiBBU0NPTkYgQ2h1bmsuICAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzkzNjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19hc2NvbmYoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkzNy1cdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQwNDk9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NlbmRfbmV4dF9hc2NvbmYoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDA3Ni0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQwNzc6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fYXNjb25mX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MDc4LVx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQxOTEtLyogUkUtQ09ORklHIFNlY3Rpb24gNS4yIFVwb24gcmVjZXB0aW9uIG9mIGFuIFJFQ09ORiBDaHVuay4gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQxOTI6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQxOTMtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00OTcwPXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl92aW9sYXRpb25fY2h1bmsoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTA0Mi0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUwNDM6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2Fzb2Moc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTA0NC1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTE1NC0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxNTU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX3NlbmQoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTE1Ni1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTE5My0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxOTQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8yX3BybV9zaHV0ZG93bihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUxOTUtXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MjUwLSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTI1MTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzFfcHJtX2Fib3J0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTI1Mi1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU1MjY9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2Zfc2h1dGRvd25fYWNrX3NlbnRfcHJtX2Fib3J0KFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU1NjEtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NTYyOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9yZXF1ZXN0aGVhcnRiZWF0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU2My1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU1OTQtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NTk1OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9hc2NvbmYoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU5Ni1cdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NjExLS8qIFJFLUNPTkZJRyBTZWN0aW9uIDUuMSBSRUNPTkYgQ2h1bmsgUHJvY2VkdXJlcyAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTYxMjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19wcm1fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2MTMtXHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTYzMD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9pZ25vcmVfcHJpbWl0aXZlKFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2NTMtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NjU0OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX25vX3BlbmRpbmdfdHNuKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTY1NS1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2ODUtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1Njg2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9zdGFydF9zaHV0ZG93bihcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2ODctXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NzU1LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTc1NjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc2h1dGRvd25fYWNrKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTc1Ny1cdFx0XHRcdFx0c3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU4MzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfaWdub3JlX290aGVyKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01ODU3LSAqL1xubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTg1ODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb182XzNfM19ydHgoc3RydWN0IG5ldCAqbmV0LFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTg1OS1cdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU5NDUtICovXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1OTQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzZfMl9zYWNrKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU5NDctXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NjgKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNDVFAgRnVuY3Rpb24gTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhlc2UgbW9kaWZpZWQgU0NUUCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWUsIHRoZSBvbmVzIHRoYXQgaGF2ZSBjaGFuZ2VkIGFyZTogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2Ag4oCTIHdoaWNoIEkgbmVlZCB0byBjaGVjayBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBub3QsIG1lYW5pbmcgaXMgaXQgbm9uLXN0YXRpYy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBpbiBgbmV0L3NjdHAvYXV0aC5jYC4gVGhlbiwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCBpcyBkZWZpbml0ZWx5IG5vbi1zdGF0aWMsIHNvIG5vIG5lZWQgdG8gbG9vayB0aGVyZS4gQW5kIGBzY3RwX3NmX2RvXzVfMURfY2VgIGlzIGFsc28gbm9uLXN0YXRpYy4gSG1tLCBub3cgd2UgaGF2ZSBhIGZldyBzdGF0aWMgb25lczogYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYHNjdHBfc2ZfZG9fZHVwY29va19kYCwgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIFJpZ2h0LCBzbyBJIG5lZWQgdG8gZm9jdXMgb24gdGhhdCBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYCBmdW5jdGlvbiBpbiBgbmV0L3NjdHAvYXV0aC5jYCBhbmQgbWFrZSBzdXJlIGl0JiMzOTtzIG5vbi1zdGF0aWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwL2F1dGguYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9hdXRoLmM9NTk1PWludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4tLVxubmV0L3NjdHAvYXV0aC5jLTYxNS0gKi9cbm5ldC9zY3RwL2F1dGguYzo2MTY6aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL2F1dGguYy02MTctXHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTc4CgkJCQkJCQlvdXRwdXQ6IDU3CgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSB1bmRlcnN0YW5kIGl0OgoKKipFeGFtaW5pbmcgU0NUUCBGdW5jdGlvbiBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBTQ1RQIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlaXIgdmlzaWJpbGl0eS4gRmlyc3QsIEkgd2FzIHdvbmRlcmluZyBhYm91dCBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYC4gSXMgaXQgZXhwb3J0ZWQsIG9yIGp1c3Qgbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgbGF0dGVyLCBqdXN0IG5vbi1zdGF0aWMuIFRoZW4sIEkgd2FzIGN1cmlvdXMgYWJvdXQgYHNjdHBfcGFja2V0X3RyYW5zbWl0YC4gQWdhaW4sIGl0JiMzOTtzIG5vbi1zdGF0aWMsIGJ1dCBjcnVjaWFsbHksIGl0JiMzOTtzIGFsc28gZ2xvYmFsbHkgdmlzaWJsZS4gVGhhdCBtZWFucyBpdCYjMzk7cyBhdmFpbGFibGUgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gdG8gY2FsbCBkaXJlY3RseS4KCk5leHQsIEkgd2VudCBvbiB0byBjaGVjayB0aGUgdmlzaWJpbGl0eSBvZiBgc2N0cF9zZl9kb181XzFEX2NlYC4gQW5kIGl0JiMzOTtzIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbi4KCk5vdywgYSBiaXQgb2YgYSB3cmlua2xlIGhhcyBzdXJmYWNlZC4gSSByZWFsaXplZCB0aGF0IGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAgaXMgY2FsbGVkICpmcm9tKiBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4gT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoZSBsYXR0ZXIgZnVuY3Rpb24sIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGFydHMgb2YgdGhlIFNDVFAgc3RhdGUgbWFjaGluZSBpbnRlcmFjdCwgYW5kIHRoaXMgY2FsbCByZWxhdGlvbnNoaXAgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0yMTI5PXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4tLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjI0NS0gKi9cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIyNDY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIyNDctXHRcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIwOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEwOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBDb2RlIGZvciBQb3RlbnRpYWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIHNwZWNpZmljIGZvY3VzIHN5bWJvbHM6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLCBgc2N0cF9zZl9kb181XzFEX2NlYCwgYW5kIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLiBUaGVzZSBhcmUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIFNDVFAgb3BlcmF0aW9uLCBhbmQgSSBuZWVkIHRvIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGluZmx1ZW5jZSB0aGVpciBiZWhhdmlvciBvciBldmVuIHRoZWlyIGluY2x1c2lvbiBpbiB0aGUgYnVpbGQuIEl0JiMzOTtzIGNydWNpYWwsIGFzIEkgYWx3YXlzIHNheSwgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgdG8gcHJvcGVybHkgYXVkaXQgb3IgZGVidWcgYW55IG9mIHRoZXNlIGFyZWFzLgoKTm93LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIHByaW1hcnkgZmVhdHVyZSBlbmFibGUgZmxhZy4gTGV0JiMzOTtzIHNlZS4uLiBTQ1RQIGlzIGVuYWJsZWQgd2l0aCBgSVBfU0NUUGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQgdGhhdCYjMzk7cyBqdXN0IHRoZSB0b3AtbGV2ZWwgc3dpdGNoLiBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBkZXRhaWxlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTQ1RQIHN1YnN5c3RlbSBzaG91bGQgYmUgZGVmaW5lZC4gRnJvbSB0aGVyZSBJIGNhbiBkZXRlcm1pbmUgaWYgYW55IHNwZWNpZmljIGZsYWdzLCBtb2R1bGVzLCBvciBmZWF0dXJlcyBtaWdodCBhZmZlY3QgdGhlc2UgZnVuY3Rpb25zLiBOZWVkIHRvIGVuc3VyZSB0aGlzIGlzIGFzIGNsZWFuIGFzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY3RwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgU0NUUCBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgSVBfU0NUUFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VGhlIFNDVFAgUHJvdG9jb2xcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgOTpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMVxuICAxMDpcdFx0c2VsZWN0IENSWVBUT19MSUJfU0hBMjU2XG4gIDExOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9VVElMU1xuICAxMjpcdFx0c2VsZWN0IE5FVF9DUkMzMkNcbiAgMTM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuICAxNDpcdFx0aGVscFxuICAxNTpcdFx0ICBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2xcbiAgMTY6XHRcbiAgMTc6XHRcdCAgRnJvbSBSRkMgMjk2MCBcdTAwM2NodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgXCYjMzQ7U0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcbiAgMjA6XHRcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXG4gIDIxOlx0XHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcbiAgMjI6XHRcbiAgMjM6XHRcdCAgLS0gYWNrbm93bGVkZ2VkIGVycm9yLWZyZWUgbm9uLWR1cGxpY2F0ZWQgdHJhbnNmZXIgb2YgdXNlciBkYXRhLFxuICAyNDpcdFx0ICAtLSBkYXRhIGZyYWdtZW50YXRpb24gdG8gY29uZm9ybSB0byBkaXNjb3ZlcmVkIHBhdGggTVRVIHNpemUsXG4gIDI1Olx0XHQgIC0tIHNlcXVlbmNlZCBkZWxpdmVyeSBvZiB1c2VyIG1lc3NhZ2VzIHdpdGhpbiBtdWx0aXBsZSBzdHJlYW1zLFxuICAyNjpcdFx0ICB3aXRoIGFuIG9wdGlvbiBmb3Igb3JkZXItb2YtYXJyaXZhbCBkZWxpdmVyeSBvZiBpbmRpdmlkdWFsIHVzZXJcbiAgMjc6XHRcdCAgbWVzc2FnZXMsXG4gIDI4Olx0XHQgIC0tIG9wdGlvbmFsIGJ1bmRsaW5nIG9mIG11bHRpcGxlIHVzZXIgbWVzc2FnZXMgaW50byBhIHNpbmdsZSBTQ1RQXG4gIDI5Olx0XHQgIHBhY2tldCwgYW5kXG4gIDMwOlx0XHQgIC0tIG5ldHdvcmstbGV2ZWwgZmF1bHQgdG9sZXJhbmNlIHRocm91Z2ggc3VwcG9ydGluZyBvZiBtdWx0aS1cbiAgMzE6XHRcdCAgaG9taW5nIGF0IGVpdGhlciBvciBib3RoIGVuZHMgb2YgYW4gYXNzb2NpYXRpb24uXCYjMzQ7XG4gIDMyOlx0XG4gIDMzOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBwcm90b2NvbCBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgMzQ6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNjdHAuIERlYnVnIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZVxuICAzNTpcdFx0ICBrZXJuZWwmIzM5O3MgZHluYW1pYyBkZWJ1Z2dpbmcgZnJhbWV3b3JrLlxuICAzNjpcdFxuICAzNzpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDM4Olx0XG4gIDM5Olx0aWYgSVBfU0NUUFxuICA0MDpcdFxuICA0MTpcdGNvbmZpZyBTQ1RQX0RCR19PQkpDTlRcbiAgNDI6XHRcdGJvb2wgXCYjMzQ7U0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1wmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG4gIDQ0Olx0XHRoZWxwXG4gIDQ1Olx0XHQgIElmIHlvdSBzYXkgWSwgdGhpcyB3aWxsIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBmb3IgY291bnRpbmcgdGhlXG4gIDQ2Olx0XHQgIHR5cGUgb2Ygb2JqZWN0cyB0aGF0IGFyZSBjdXJyZW50bHkgYWxsb2NhdGVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yXG4gIDQ3Olx0XHQgIGlkZW50aWZ5aW5nIG1lbW9yeSBsZWFrcy4gVGhpcyBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgdmlld2VkIGJ5XG4gIDQ4Olx0XHQgICYjMzk7Y2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCYjMzk7XG4gIDQ5Olx0XG4gIDUwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE5cbiAgNTE6XHRcbiAgNTI6XHRjaG9pY2VcbiAgNTM6XHRcdHByb21wdCBcJiMzNDtEZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFwmIzM0O1xuICA1NDpcdFx0ZGVmYXVsdCBTQ1RQX0RFRkFVTFRfQ09PS0lFX0hNQUNfU0hBMjU2XG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFRoaXMgb3B0aW9uIHNldHMgdGhlIGRlZmF1bHQgU0NUUCBjb29raWUgYXV0aGVudGljYXRpb24gbWV0aG9kLCBmb3JcbiAgNTc6XHRcdCAgd2hlbiBhIG1ldGhvZCBoYXNuJiMzOTt0IGJlZW4gZXhwbGljaXRseSBzZWxlY3RlZCB2aWEgdGhlXG4gIDU4Olx0XHQgIG5ldC5zY3RwLmNvb2tpZV9obWFjX2FsZyBzeXNjdGwuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIElmIHVuc3VyZSwgY2hvb3NlIHRoZSBkZWZhdWx0IChITUFDLVNIQTI1NikuXG4gIDYxOlx0XG4gIDYyOlx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcbiAgNjM6XHRcdGJvb2wgXCYjMzQ7SE1BQy1TSEEyNTZcJiMzNDtcbiAgNjQ6XHRcbiAgNjU6XHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcbiAgNjY6XHRcdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuICA2NzpcdFxuICA2ODpcdGVuZGNob2ljZVxuICA2OTpcdFxuICA3MDpcdGNvbmZpZyBJTkVUX1NDVFBfRElBR1xuICA3MTpcdFx0ZGVwZW5kcyBvbiBJTkVUX0RJQUdcbiAgNzI6XHRcdGRlZl90cmlzdGF0ZSBJTkVUX0RJQUdcbiAgNzM6XHRcbiAgNzQ6XHRcbiAgNzU6XHRlbmRpZiAjIElQX1NDVFBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MTcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTQ1RQIEF1dGhlbnRpY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBzZWVtcyB0byBiZSBgSVBfU0NUUGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgaGlkZGVuIGRlcGVuZGVuY2llcyBvciBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgc3BlY2lmaWNhbGx5IHRvIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgLiBXYWl0IGEgbWludXRlLCBpc24mIzM5O3QgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaW5oZXJlbnRseSBwYXJ0IG9mIFNDVFAgQVVUSCwgd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGhpbiBTQ1RQPyBSaWdodC4gU28sIGluIGVzc2VuY2UsIGBJUF9TQ1RQYCBjb3ZlcnMgaXQuIE5vIHNlcGFyYXRlIGZsYWdzIG9yIGNvbmZpZ3MgZm9yIFNDVFAgQVVUSCBpdHNlbGYuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCByZXZpZXcgdGhpcyBwYXRjaCBjYXJlZnVsbHkuIEl0IG1vZGlmaWVzIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIHRvIHJldHVybiBhbiBlcnJvciwgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGlzIHBvdGVudGlhbCBlcnJvciBpcyBpbXBsZW1lbnRlZCBpbiBgc2N0cF9wYWNrZXRfcGFja2AgYW5kIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAuIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAgaXMsIGluIHR1cm4sIGNhbGxlZCBieSBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWAsIHdoaWNoIGdldHMgaW52b2tlZCBieSBzZXZlcmFsIGNyaXRpY2FsIGZ1bmN0aW9uczogYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLiBBbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgd2hlbiBTQ1RQIGlzIGVuYWJsZWQuCgpJIG5lZWQgdG8ga2VlcCBhIGNsb3NlIGV5ZSBvbiBhIGZldyBrZXkgc3ltYm9sczogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2Ag4oCTIG9idmlvdXNseSwgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSDigJMgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGFuZCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4KCkFoLCByaWdodCwgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgcm9vdCBmdW5jdGlvbiBmb3IgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAuIEkgaGF2ZSB0byBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyeSBwb2ludHMsIHNvIEkmIzM5O2xsIGFsc28gYW5hbHl6ZSBgc2N0cF9zZl9lYXRfYXV0aGAuIFRoaXMgc2VlbXMgdG8gY292ZXIgdGhlIGNvbXBsZXRlIHNldCBvZiByZWFjaGFibGUgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NmX2VhdF9hdXRoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDQyMz1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTAwLVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDUwMTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9lYXRfYXV0aChzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTAyLVx0XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2OTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCBGdXp6aW5nIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBhZGQgYHNjdHBfc2ZfZWF0X2F1dGhgIHRvIG91ciBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIFJpZ2h0IG5vdywgd2UmIzM5O3ZlIGdvdDoKCiogICBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYAoqICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YAoqICAgYHNjdHBfc2ZfZG9fNV8xRF9jZWAKKiAgIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgCiogICBgc2N0cF9zZl9lYXRfYXV0aGAKCkFuZCBvdXIgY29uZmlndXJhdGlvbiBpcywgYXMgdXN1YWwsIGBJUF9TQ1RQYC4KClRoZSBwYXRjaCBpcyBhYm91dCBmaXhpbmcgU0NUUCBhdXRoZW50aWNhdGlvbiYjMzk7cyBITUFDIGNhbGN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhhbmRsaW5nIGFuZCBwcm9wYWdhdGluZyBgLUVOT01FTWAgKG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzKS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBvbiBob3cgcGFja2V0cyBhcmUgcGFja2VkIGFuZCBob3cgY2h1bmsgdmVyaWZpY2F0aW9uIHdvcmtzIHdpdGhpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBUaGlzIGlzIGNyaXRpY2FsLCBvYnZpb3VzbHksIGJlY2F1c2UgbWlzaGFuZGxpbmcgbWVtb3J5IGVycm9ycyBpbiB0aG9zZSByb3V0aW5lcyBjb3VsZCBsZWFkIHRvIGxlYWtzLCBjb3JydXB0aW9uLCBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiBIZW5jZSwgd2UgaGF2ZSB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgYXJlYXMuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIGFuZCBub3QganVzdCBhIGxvY2FsIHN0YXRpYyBmdW5jdGlvbi4gWWVwLCBpdCYjMzk7cyBpbiBgaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhgIGFuZCBkZWZpbmVkIGluIGBuZXQvc2N0cC9hdXRoLmNgIHdpdGhvdXQgYmVpbmcgc3RhdGljLCBzbyBpdCYjMzk7cyBhY2Nlc3NpYmxlLiBUaGF0IG1ha2VzIHNlbnNlLgoKQW5kIGp1c3QgdG8gYmUgc3VyZSwgbGV0IG1lIGNoZWNrIHRoZSBzYW1lIGZvciBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLiBHb29kLCBpdCYjMzk7cyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTA6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IHNjdHBfcGFja2V0X3RyYW5zbWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvb3V0cHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvb3V0cHV0LmM9NDM2PXN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbi0tXG5uZXQvc2N0cC9vdXRwdXQuYy01NzQtICovXG5uZXQvc2N0cC9vdXRwdXQuYzo1NzU6aW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXG5uZXQvc2N0cC9vdXRwdXQuYy01NzYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxMDoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ3MQoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBOb24tU3RhdGljIEZ1bmN0aW9ucyBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgYW5kIHRoZSBrZXkgdGhpbmcgSSYjMzk7bSBsb29raW5nIGZvciByaWdodCBub3cgaXMgaWRlbnRpZnlpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIG5vbi1zdGF0aWMgY29udGV4dC4gVGhlbiwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIGFuZCB2ZXJpZmllZCB0aGF0IGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYCwgYW5kIGBzY3RwX3NmX2VhdF9hdXRoYCBhcmUgaW5kZWVkICpub3QqIHN0YXRpYy4gR29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpOZXh0LCBJIG5lZWRlZCB0byBlbnN1cmUgSSBoYWRuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSBjaGVja2VkIGEgZmV3IG90aGVyIGZ1bmN0aW9ucywgYW5kIHllcywgYHNjdHBfc2ZfYXV0aGVudGljYXRlYCwgYHNjdHBfYXV0aF9jaHVua192ZXJpZnlgLCBgc2N0cF9wYWNrZXRfcGFja2AsIGFuZCBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgYmAsIGBkYCBhcmUgYWxsIGNsZWFybHkgc3RhdGljLiBJIGZlZWwgY29uZmlkZW50IHRoYXQgbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGlzIG5vdyBjb21wbGV0ZSBhbmQgYWNjdXJhdGU7IEkmIzM5O3ZlIGNvdmVyZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgSSBuZWVkZWQgdG8gY2hlY2suCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgSVBfU0NUUGAgYmVjYXVzZSB0aGF0JiMzOTtzIGxpa2VseSB0aGUgY29yZS4gQW5kIGl0IGlzIHNlbGVjdGVkLiBIb3dldmVyLCBgSVBfU0NUUGAgZGVwZW5kcyBvbiBgSU5FVGAsIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBhIG5vbi1pc3N1ZS4gSSB0aGVuIGV4cGFuZGVkIG15IHNlYXJjaCB0byBzZWUgaWYgYW55IG90aGVyIGNvbmZpZ3VyYXRpb25zIHdlcmUgbmVjZXNzYXJ5LCBzdWNoIGFzIGBDUllQVE9fSE1BQ2Agb3IgYENSWVBUT19TSEExYC4gRXhhbWluaW5nIHRoZSBLY29uZmlnIGZvciBgSVBfU0NUUGAsIGl0IGFwcGVhcnMgdG8gc2VsZWN0IGEgc2V0IG9mIGNyeXB0byBhbmQgdXRpbGl0eSBjb25maWd1cmF0aW9uczogYENSWVBUT19MSUJfU0hBMWAsIGBDUllQVE9fTElCX1NIQTI1NmAsIGBDUllQVE9fTElCX1VUSUxTYCwgYE5FVF9DUkMzMkNgLCBhbmQgYE5FVF9VRFBfVFVOTkVMYC4gVGhlc2Ugc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHNvIGBJUF9TQ1RQYCBieSBpdHNlbGYgaXMgYWxsIEkgbmVlZC4gSSBhbSBjb250ZW50IHRoYXQgSSBoYXZlIGlkZW50aWZpZWQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLgoKTm93LCBJIHRoaW5rIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBJIGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiBhbmQgcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDEwOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjJiMzNDssCiAgICAmIzM0O3NjdHBfcGFja2V0X3RyYW5zbWl0JiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8xRF9jZSYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2smIzM0OywKICAgICYjMzQ7c2N0cF9zZl9lYXRfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjJiMzNDssCiAgICAmIzM0O3NjdHBfcGFja2V0X3RyYW5zbWl0JiMzNDssCiAgICAmIzM0O3NjdHBfc2ZfZG9fNV8xRF9jZSYjMzQ7LAogICAgJiMzNDtzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2smIzM0OywKICAgICYjMzQ7c2N0cF9zZl9lYXRfYXV0aCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6MjkuODg0MjczNjA0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyNzcyOTM1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICAgIFwic2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8xRF9jZVwiLFxuICAgIFwic2N0cF9zZl9kb181XzJfNF9kdXBjb29rXCIsXG4gICAgXCJzY3RwX3NmX2VhdF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIFRoaXMgYWZmZWN0cyB0aGUgcGFja2V0IHBhY2tpbmcgYW5kIGNodW5rIHZlcmlmaWNhdGlvbiBwYXRocyBpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBwYXRocyB0byBlbnN1cmUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDoyMjoyOS44ODQyODI5ODRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzU3ODg2MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ZGU1MjU0NTdmZDk0NDg5ZmNjN2Q4M2E5Y2U3Y2MwYjY3NTg4MzBhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTA6MjI6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxcbmluZGV4IDZmMmNkNTYyYjFkZTYuLmVlYjMyOTdmZTk3ZDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmhcXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxcbkBAIC04Myw5ICs4Myw5IEBAIGludCBzY3RwX2F1dGhfc2VuZF9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcXG4gXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcXG4gaW50IHNjdHBfYXV0aF9yZWN2X2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxcbiBcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApO1xcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApO1xcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XFxuIHZvaWQgc2N0cF9hdXRoX3Noa2V5X2hvbGQoc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqc2hfa2V5KTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xcbmluZGV4IGM5MDFkMzczYWY4MDMuLjZkZTY2ZjU2YzQxY2UgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvYXV0aC5jXFxuKysrIGIvbmV0L3NjdHAvYXV0aC5jXFxuQEAgLTYxMyw5ICs2MTMsOSBAQCBpbnQgc2N0cF9hdXRoX3JlY3ZfY2lkKGVudW0gc2N0cF9jaWQgY2h1bmssIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbiAgKiAgICB6ZXJvIChhcyBzaG93biBpbiBGaWd1cmUgNikgZm9sbG93ZWQgYnkgYWxsIGNodW5rcyB0aGF0IGFyZSBwbGFjZWRcXG4gICogICAgYWZ0ZXIgdGhlIEFVVEggY2h1bmsgaW4gdGhlIFNDVFAgcGFja2V0LlxcbiAgKi9cXG4tdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKVxcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfYXV0aF9ieXRlcyAqYXNvY19rZXk7XFxuIFxcdF9fdTE2IGtleV9pZCwgaG1hY19pZDtcXG5AQCAtNjM2LDcgKzYzNiw3IEBAIHZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXHRcXHQvKiBlcF9rZXkgY2FuJ3QgYmUgTlVMTCBoZXJlICovXFxuIFxcdFxcdGFzb2Nfa2V5ID0gc2N0cF9hdXRoX2Fzb2NfY3JlYXRlX3NlY3JldChhc29jLCBlcF9rZXksIGdmcCk7XFxuIFxcdFxcdGlmICghYXNvY19rZXkpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRcXHRmcmVlX2tleSA9IDE7XFxuIFxcdH1cXG5AQCAtNjU0LDYgKzY1NCw4IEBAIHZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXG4gXFx0aWYgKGZyZWVfa2V5KVxcbiBcXHRcXHRzY3RwX2F1dGhfa2V5X3B1dChhc29jX2tleSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyogQVBJIEhlbHBlcnMgKi9cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cHV0LmMgYi9uZXQvc2N0cC9vdXRwdXQuY1xcbmluZGV4IDIzZTk2MzA1Y2FkN2MuLjNkN2VhZDlkNDBlMTkgMTAwNjQ0XFxuLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmNcXG4rKysgYi9uZXQvc2N0cC9vdXRwdXQuY1xcbkBAIC01MTcsOCArNTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKGF1dGgpIHtcXG4tXFx0XFx0XFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVxcdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgcGFja2V0LVxcdTAwM2VhdXRoLVxcdTAwM2VzaGtleSwgZ2ZwKTtcXG4rXFx0XFx0XFx0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cXHUwMDNlYXNvYywgbnNrYiwgYXV0aCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBwYWNrZXQtXFx1MDAzZWF1dGgtXFx1MDAzZXNoa2V5LCBnZnApKSB7XFxuK1xcdFxcdFxcdFxcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXFx1MDAzZWF1dGgpO1xcbitcXHRcXHRcXHRcXHRwYWNrZXQtXFx1MDAzZWF1dGggPSBOVUxMO1xcbitcXHRcXHRcXHRcXHRpZiAoZ3NvKVxcbitcXHRcXHRcXHRcXHRcXHRrZnJlZV9za2IobnNrYik7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdC8qIGZyZWUgYXV0aCBpZiBubyBtb3JlIGNodW5rcywgb3IgYWRkIGl0IGJhY2sgKi9cXG4gXFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnBhY2tldC1cXHUwMDNlY2h1bmtfbGlzdCkpXFxuIFxcdFxcdFxcdFxcdHNjdHBfY2h1bmtfZnJlZShwYWNrZXQtXFx1MDAzZWF1dGgpO1xcbkBAIC02MTksNyArNjI1LDcgQEAgaW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXFxuIFxcbiBcXHQvKiBwYWNrIHVwIGNodW5rcyAqL1xcbiBcXHRwa3RfY291bnQgPSBzY3RwX3BhY2tldF9wYWNrKHBhY2tldCwgaGVhZCwgZ3NvLCBnZnApO1xcbi1cXHRpZiAoIXBrdF9jb3VudCkge1xcbitcXHRpZiAocGt0X2NvdW50IFxcdTAwM2M9IDApIHtcXG4gXFx0XFx0a2ZyZWVfc2tiKGhlYWQpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jXFxuaW5kZXggNzA4ZmEwN2Q1ZmZmYy4uZTE5ODgxYzkwYjQ5OSAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xcbisrKyBiL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jXFxuQEAgLTYzNywxMyArNjM3LDE3IEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUNfYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTtcXG4gfVxcbiBcXG4tc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4tXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuK3N0YXRpYyBlbnVtIHNjdHBfaWVycm9yIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfY2h1bmsgYXV0aDtcXG4gXFxuLVxcdGlmICghY2h1bmstXFx1MDAzZWF1dGhfY2h1bmspXFxuLVxcdFxcdHJldHVybiAhc2N0cF9hdXRoX3JlY3ZfY2lkKGNodW5rLVxcdTAwM2VjaHVua19oZHItXFx1MDAzZXR5cGUsIGFzb2MpO1xcbitcXHRpZiAoIWNodW5rLVxcdTAwM2VhdXRoX2NodW5rKSB7XFxuK1xcdFxcdGlmIChzY3RwX2F1dGhfcmVjdl9jaWQoY2h1bmstXFx1MDAzZWNodW5rX2hkci1cXHUwMDNldHlwZSwgYXNvYykpXFxuK1xcdFxcdFxcdHJldHVybiBTQ1RQX0lFUlJPUl9CQURfU0lHO1xcbitcXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfTk9fRVJST1I7XFxuK1xcdH1cXG4gXFxuIFxcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xcbiBcXHQgKiBpcyBzdXBwb3NlZCB0byBiZSBhdXRoZW50aWNhdGVkIGFuZCB3ZSBoYXZlIHRvIGRvIGRlbGF5ZWRcXG5AQCAtNjU0LDcgKzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXFxuIFxcbiBcXHQvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqL1xcbiBcXHRpZiAoIW5ldC1cXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSB8fCAhYXNvYy1cXHUwMDNlcGVlci5hdXRoX2NhcGFibGUpXFxuLVxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0cmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7XFxuIFxcbiBcXHQvKiBzZXQtdXAgb3VyIGZha2UgY2h1bmsgc28gdGhhdCB3ZSBjYW4gcHJvY2VzcyBpdCAqL1xcbiBcXHRhdXRoLnNrYiA9IGNodW5rLVxcdTAwM2VhdXRoX2NodW5rO1xcbkBAIC02NjYsNyArNjcwLDcgQEAgc3RhdGljIGJvb2wgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzY3RwX2NodW5rICpjaHVuayxcXG4gXFx0c2tiX3B1bGwoY2h1bmstXFx1MDAzZWF1dGhfY2h1bmssIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpO1xcbiBcXHRhdXRoLnRyYW5zcG9ydCA9IGNodW5rLVxcdTAwM2V0cmFuc3BvcnQ7XFxuIFxcbi1cXHRyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgXFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xcbitcXHRyZXR1cm4gc2N0cF9zZl9hdXRoZW50aWNhdGUoYXNvYywgXFx1MDAyNmF1dGgpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC04MjYsOCArODMwLDExIEBAIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMURfY2Uoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoZXJyb3IpXFxuIFxcdFxcdGdvdG8gbm9tZW1faW5pdDtcXG4gXFxuLVxcdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpIHtcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcXG4rXFx0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XFxuIFxcdFxcdHNjdHBfYXNzb2NpYXRpb25fZnJlZShuZXdfYXNvYyk7XFxuK1xcdFxcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcXG4rXFx0XFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XFxuIFxcdFxcdHJldHVybiBzY3RwX3NmX3BkaXNjYXJkKG5ldCwgZXAsIGFzb2MsIHR5cGUsIGFyZywgY29tbWFuZHMpO1xcbiBcXHR9XFxuIFxcbkBAIC0xODg5LDYgKzE4OTYsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxcbiB7XFxuIFxcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcXG4gXFx0ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uO1xcbitcXHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXY7XFxuIFxcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqZXJyO1xcbkBAIC0xOTA0LDggKzE5MTIsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYShcXG4gXFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxcbitcXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xcbitcXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcXG4rXFx0XFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcXG4gXFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogTWFrZSBzdXJlIG5vIG5ldyBhZGRyZXNzZXMgYXJlIGJlaW5nIGFkZGVkIGR1cmluZyB0aGVcXG4gXFx0ICogcmVzdGFydC4gIFRob3VnaCB0aGlzIGlzIGEgcHJldHR5IGNvbXBsaWNhdGVkIGF0dGFja1xcbkBAIC0yMDExLDYgKzIwMjMsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfaW5pdF9jaHVuayAqcGVlcl9pbml0O1xcbitcXHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcXG4gXFxuIFxcdC8qIG5ld19hc29jIGlzIGEgYnJhbmQtbmV3IGFzc29jaWF0aW9uLCBzbyB0aGVzZSBhcmUgbm90IHlldFxcbkBAIC0yMDI0LDggKzIwMzcsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcXG4gXFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbi1cXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxcbitcXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xcbitcXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcXG4rXFx0XFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcXG4gXFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcXG4rXFx0fVxcbiBcXG4gXFx0c2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9ORVdfU1RBVEUsXFxuIFxcdFxcdFxcdFNDVFBfU1RBVEUoU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkpO1xcbkBAIC0yMTE4LDYgKzIxMzUsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXFxuIHtcXG4gXFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ID0gTlVMTCwgKmFpX2V2ID0gTlVMTCwgKmF1dGhfZXYgPSBOVUxMO1xcbitcXHRlbnVtIHNjdHBfaWVycm9yIGVycm9yO1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcXG4gXFxuIFxcdC8qIENsYXJpZmljYXRpb24gZnJvbSBJbXBsZW1lbnRvcidzIEd1aWRlOlxcbkBAIC0yMTI3LDggKzIxNDUsMTIgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfZChcXG4gXFx0ICogYSBDT09LSUUgQUNLLlxcbiBcXHQgKi9cXG4gXFxuLVxcdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKSlcXG4rXFx0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIGFzb2MpO1xcbitcXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcXG4rXFx0XFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxcbitcXHRcXHRcXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcXG4gXFx0XFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcXG4rXFx0fVxcbiBcXG4gXFx0LyogRG9uJ3QgYWNjaWRlbnRhbGx5IG1vdmUgYmFjayBpbnRvIGVzdGFibGlzaGVkIHN0YXRlLiAqL1xcbiBcXHRpZiAoYXNvYy1cXHUwMDNlc3RhdGUgXFx1MDAzYyBTQ1RQX1NUQVRFX0VTVEFCTElTSEVEKSB7XFxuQEAgLTQ0NTUsOSArNDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcXG4gXFxuIFxcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xcbiBcXG4tXFx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVxcdTAwM2Vza2IsXFxuLVxcdFxcdFxcdFxcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVxcdTAwM2VjaHVua19oZHIsXFxuLVxcdFxcdFxcdFxcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVxcdTAwM2Vza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaHVuay1cXHUwMDNlY2h1bmtfaGRyLFxcbitcXHRcXHRcXHRcXHQgICAgIHNoX2tleSwgR0ZQX0FUT01JQykpIHtcXG4rXFx0XFx0a2ZyZWUoc2F2ZV9kaWdlc3QpO1xcbitcXHRcXHRyZXR1cm4gU0NUUF9JRVJST1JfTk9NRU07XFxuK1xcdH1cXG4gXFxuIFxcdC8qIERpc2NhcmQgdGhlIHBhY2tldCBpZiB0aGUgZGlnZXN0cyBkbyBub3QgbWF0Y2ggKi9cXG4gXFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6MzEuMjIxMDI3MzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTk0MDUzMTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjXCIsXG4gICAgXCJzY3RwX3BhY2tldF90cmFuc21pdFwiLFxuICAgIFwic2N0cF9zZl9kb181XzFEX2NlXCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tcIixcbiAgICBcInNjdHBfc2ZfZWF0X2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDRkZTUyNTQ1N2ZkOTQ0ODlmY2M3ZDgzYTljZTdjYzBiNjc1ODgzMGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDEwOjIyOjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9hdXRoLmggYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuaW5kZXggNmYyY2Q1NjJiMWRlNi4uZWViMzI5N2ZlOTdkMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvYXV0aC5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL2F1dGguaFxuQEAgLTgzLDkgKzgzLDkgQEAgaW50IHNjdHBfYXV0aF9zZW5kX2NpZChlbnVtIHNjdHBfY2lkIGNodW5rLFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpO1xuIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuayxcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTtcbi12b2lkIHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbitpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuK1x0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcbitcdFx0XHQgICAgIHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKmVwX2tleSwgZ2ZwX3QgZ2ZwKTtcbiB2b2lkIHNjdHBfYXV0aF9zaGtleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3NoYXJlZF9rZXkgKnNoX2tleSk7XG4gdm9pZCBzY3RwX2F1dGhfc2hrZXlfaG9sZChzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICpzaF9rZXkpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL2F1dGguYyBiL25ldC9zY3RwL2F1dGguY1xuaW5kZXggYzkwMWQzNzNhZjgwMy4uNmRlNjZmNTZjNDFjZSAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL2F1dGguY1xuKysrIGIvbmV0L3NjdHAvYXV0aC5jXG5AQCAtNjEzLDkgKzYxMyw5IEBAIGludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4gICogICAgemVybyAoYXMgc2hvd24gaW4gRmlndXJlIDYpIGZvbGxvd2VkIGJ5IGFsbCBjaHVua3MgdGhhdCBhcmUgcGxhY2VkXG4gICogICAgYWZ0ZXIgdGhlIEFVVEggY2h1bmsgaW4gdGhlIFNDVFAgcGFja2V0LlxuICAqL1xuLXZvaWQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuLVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4tXHRcdFx0ICAgICAgc3RydWN0IHNjdHBfc2hhcmVkX2tleSAqZXBfa2V5LCBnZnBfdCBnZnApXG4raW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbitcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsXG4rXHRcdFx0ICAgICBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5ICplcF9rZXksIGdmcF90IGdmcClcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9hdXRoX2J5dGVzICphc29jX2tleTtcbiBcdF9fdTE2IGtleV9pZCwgaG1hY19pZDtcbkBAIC02MzYsNyArNjM2LDcgQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdC8qIGVwX2tleSBjYW4ndCBiZSBOVUxMIGhlcmUgKi9cbiBcdFx0YXNvY19rZXkgPSBzY3RwX2F1dGhfYXNvY19jcmVhdGVfc2VjcmV0KGFzb2MsIGVwX2tleSwgZ2ZwKTtcbiBcdFx0aWYgKCFhc29jX2tleSlcbi1cdFx0XHRyZXR1cm47XG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRcdGZyZWVfa2V5ID0gMTtcbiBcdH1cbkBAIC02NTQsNiArNjU0LDggQEAgdm9pZCBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWMoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXG4gXHRpZiAoZnJlZV9rZXkpXG4gXHRcdHNjdHBfYXV0aF9rZXlfcHV0KGFzb2Nfa2V5KTtcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbiAvKiBBUEkgSGVscGVycyAqL1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmNcbmluZGV4IDIzZTk2MzA1Y2FkN2MuLjNkN2VhZDlkNDBlMTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9vdXRwdXQuY1xuKysrIGIvbmV0L3NjdHAvb3V0cHV0LmNcbkBAIC01MTcsOCArNTE3LDE0IEBAIHN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcbiBcdFx0fVxuIFxuIFx0XHRpZiAoYXV0aCkge1xuLVx0XHRcdHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyh0cC1cdTAwM2Vhc29jLCBuc2tiLCBhdXRoLFxuLVx0XHRcdFx0XHRcdCBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKTtcbitcdFx0XHRpZiAoc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKHRwLVx1MDAzZWFzb2MsIG5za2IsIGF1dGgsXG4rXHRcdFx0XHRcdFx0ICAgICBwYWNrZXQtXHUwMDNlYXV0aC1cdTAwM2VzaGtleSwgZ2ZwKSkge1xuK1x0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbitcdFx0XHRcdHBhY2tldC1cdTAwM2VhdXRoID0gTlVMTDtcbitcdFx0XHRcdGlmIChnc28pXG4rXHRcdFx0XHRcdGtmcmVlX3NrYihuc2tiKTtcbitcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRcdH1cbiBcdFx0XHQvKiBmcmVlIGF1dGggaWYgbm8gbW9yZSBjaHVua3MsIG9yIGFkZCBpdCBiYWNrICovXG4gXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2cGFja2V0LVx1MDAzZWNodW5rX2xpc3QpKVxuIFx0XHRcdFx0c2N0cF9jaHVua19mcmVlKHBhY2tldC1cdTAwM2VhdXRoKTtcbkBAIC02MTksNyArNjI1LDcgQEAgaW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXG4gXG4gXHQvKiBwYWNrIHVwIGNodW5rcyAqL1xuIFx0cGt0X2NvdW50ID0gc2N0cF9wYWNrZXRfcGFjayhwYWNrZXQsIGhlYWQsIGdzbywgZ2ZwKTtcbi1cdGlmICghcGt0X2NvdW50KSB7XG4rXHRpZiAocGt0X2NvdW50IFx1MDAzYz0gMCkge1xuIFx0XHRrZnJlZV9za2IoaGVhZCk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3N0YXRlZnVucy5jIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbmluZGV4IDcwOGZhMDdkNWZmZmMuLmUxOTg4MWM5MGI0OTkgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1xuKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcbkBAIC02MzcsMTMgKzYzNywxNyBAQCBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb181XzFDX2FjayhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FO1xuIH1cbiBcbi1zdGF0aWMgYm9vbCBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rLFxuLVx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXG4rc3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShzdHJ1Y3QgbmV0ICpuZXQsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4rXHRcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayBhdXRoO1xuIFxuLVx0aWYgKCFjaHVuay1cdTAwM2VhdXRoX2NodW5rKVxuLVx0XHRyZXR1cm4gIXNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYyk7XG4rXHRpZiAoIWNodW5rLVx1MDAzZWF1dGhfY2h1bmspIHtcbitcdFx0aWYgKHNjdHBfYXV0aF9yZWN2X2NpZChjaHVuay1cdTAwM2VjaHVua19oZHItXHUwMDNldHlwZSwgYXNvYykpXG4rXHRcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX0JBRF9TSUc7XG4rXHRcdHJldHVybiBTQ1RQX0lFUlJPUl9OT19FUlJPUjtcbitcdH1cbiBcbiBcdC8qIFNDVFAtQVVUSDogIGF1dGhfY2h1bmsgcG9pbnRlciBpcyBvbmx5IHNldCB3aGVuIHRoZSBjb29raWUtZWNob1xuIFx0ICogaXMgc3VwcG9zZWQgdG8gYmUgYXV0aGVudGljYXRlZCBhbmQgd2UgaGF2ZSB0byBkbyBkZWxheWVkXG5AQCAtNjU0LDcgKzY1OCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXG4gXHQvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbmQgdGhlIHBlZXIgYXJlIEFVVEggY2FwYWJsZSAqL1xuIFx0aWYgKCFuZXQtXHUwMDNlc2N0cC5hdXRoX2VuYWJsZSB8fCAhYXNvYy1cdTAwM2VwZWVyLmF1dGhfY2FwYWJsZSlcbi1cdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRyZXR1cm4gU0NUUF9JRVJST1JfQkFEX1NJRztcbiBcbiBcdC8qIHNldC11cCBvdXIgZmFrZSBjaHVuayBzbyB0aGF0IHdlIGNhbiBwcm9jZXNzIGl0ICovXG4gXHRhdXRoLnNrYiA9IGNodW5rLVx1MDAzZWF1dGhfY2h1bms7XG5AQCAtNjY2LDcgKzY3MCw3IEBAIHN0YXRpYyBib29sIHNjdHBfYXV0aF9jaHVua192ZXJpZnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssXG4gXHRza2JfcHVsbChjaHVuay1cdTAwM2VhdXRoX2NodW5rLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTtcbiBcdGF1dGgudHJhbnNwb3J0ID0gY2h1bmstXHUwMDNldHJhbnNwb3J0O1xuIFxuLVx0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpID09IFNDVFBfSUVSUk9SX05PX0VSUk9SO1xuK1x0cmV0dXJuIHNjdHBfc2ZfYXV0aGVudGljYXRlKGFzb2MsIFx1MDAyNmF1dGgpO1xuIH1cbiBcbiAvKlxuQEAgLTgyNiw4ICs4MzAsMTEgQEAgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gbm9tZW1faW5pdDtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpIHtcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYyk7XG4rXHRpZiAoZXJyb3IgIT0gU0NUUF9JRVJST1JfTk9fRVJST1IpIHtcbiBcdFx0c2N0cF9hc3NvY2lhdGlvbl9mcmVlKG5ld19hc29jKTtcbitcdFx0aWYgKGVycm9yID09IFNDVFBfSUVSUk9SX05PTUVNKVxuK1x0XHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNO1xuIFx0XHRyZXR1cm4gc2N0cF9zZl9wZGlzY2FyZChuZXQsIGVwLCBhc29jLCB0eXBlLCBhcmcsIGNvbW1hbmRzKTtcbiBcdH1cbiBcbkBAIC0xODg5LDYgKzE4OTYsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19hKFxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbiBcdGVudW0gc2N0cF9kaXNwb3NpdGlvbiBkaXNwb3NpdGlvbjtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF91bHBldmVudCAqZXY7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICplcnI7XG5AQCAtMTkwNCw4ICsxOTEyLDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2EoXG4gXHRpZiAoc2N0cF9hdXRoX2Fzb2NfaW5pdF9hY3RpdmVfa2V5KG5ld19hc29jLCBHRlBfQVRPTUlDKSlcbiBcdFx0Z290byBub21lbTtcbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBuZXdfYXNvYykpXG4rXHRlcnJvciA9IHNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpO1xuK1x0aWYgKGVycm9yICE9IFNDVFBfSUVSUk9SX05PX0VSUk9SKSB7XG4rXHRcdGlmIChlcnJvciA9PSBTQ1RQX0lFUlJPUl9OT01FTSlcbitcdFx0XHRyZXR1cm4gU0NUUF9ESVNQT1NJVElPTl9OT01FTTtcbiBcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fRElTQ0FSRDtcbitcdH1cbiBcbiBcdC8qIE1ha2Ugc3VyZSBubyBuZXcgYWRkcmVzc2VzIGFyZSBiZWluZyBhZGRlZCBkdXJpbmcgdGhlXG4gXHQgKiByZXN0YXJ0LiAgVGhvdWdoIHRoaXMgaXMgYSBwcmV0dHkgY29tcGxpY2F0ZWQgYXR0YWNrXG5AQCAtMjAxMSw2ICsyMDIzLDcgQEAgc3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2R1cGNvb2tfYihcbiBcdFx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKm5ld19hc29jKVxuIHtcbiBcdHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKnBlZXJfaW5pdDtcbitcdGVudW0gc2N0cF9pZXJyb3IgZXJyb3I7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqcmVwbDtcbiBcbiBcdC8qIG5ld19hc29jIGlzIGEgYnJhbmQtbmV3IGFzc29jaWF0aW9uLCBzbyB0aGVzZSBhcmUgbm90IHlldFxuQEAgLTIwMjQsOCArMjAzNywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19iKFxuIFx0aWYgKHNjdHBfYXV0aF9hc29jX2luaXRfYWN0aXZlX2tleShuZXdfYXNvYywgR0ZQX0FUT01JQykpXG4gXHRcdGdvdG8gbm9tZW07XG4gXG4tXHRpZiAoIXNjdHBfYXV0aF9jaHVua192ZXJpZnkobmV0LCBjaHVuaywgbmV3X2Fzb2MpKVxuK1x0ZXJyb3IgPSBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KG5ldCwgY2h1bmssIG5ld19hc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHRzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX05FV19TVEFURSxcbiBcdFx0XHRTQ1RQX1NUQVRFKFNDVFBfU1RBVEVfRVNUQUJMSVNIRUQpKTtcbkBAIC0yMTE4LDYgKzIxMzUsNyBAQCBzdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxuIFx0XHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqbmV3X2Fzb2MpXG4ge1xuIFx0c3RydWN0IHNjdHBfdWxwZXZlbnQgKmV2ID0gTlVMTCwgKmFpX2V2ID0gTlVMTCwgKmF1dGhfZXYgPSBOVUxMO1xuK1x0ZW51bSBzY3RwX2llcnJvciBlcnJvcjtcbiBcdHN0cnVjdCBzY3RwX2NodW5rICpyZXBsO1xuIFxuIFx0LyogQ2xhcmlmaWNhdGlvbiBmcm9tIEltcGxlbWVudG9yJ3MgR3VpZGU6XG5AQCAtMjEyNyw4ICsyMTQ1LDEyIEBAIHN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXG4gXHQgKiBhIENPT0tJRSBBQ0suXG4gXHQgKi9cbiBcbi1cdGlmICghc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKSlcbitcdGVycm9yID0gc2N0cF9hdXRoX2NodW5rX3ZlcmlmeShuZXQsIGNodW5rLCBhc29jKTtcbitcdGlmIChlcnJvciAhPSBTQ1RQX0lFUlJPUl9OT19FUlJPUikge1xuK1x0XHRpZiAoZXJyb3IgPT0gU0NUUF9JRVJST1JfTk9NRU0pXG4rXHRcdFx0cmV0dXJuIFNDVFBfRElTUE9TSVRJT05fTk9NRU07XG4gXHRcdHJldHVybiBTQ1RQX0RJU1BPU0lUSU9OX0RJU0NBUkQ7XG4rXHR9XG4gXG4gXHQvKiBEb24ndCBhY2NpZGVudGFsbHkgbW92ZSBiYWNrIGludG8gZXN0YWJsaXNoZWQgc3RhdGUuICovXG4gXHRpZiAoYXNvYy1cdTAwM2VzdGF0ZSBcdTAwM2MgU0NUUF9TVEFURV9FU1RBQkxJU0hFRCkge1xuQEAgLTQ0NTUsOSArNDQ3NywxMiBAQCBzdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX3NmX2F1dGhlbnRpY2F0ZShcbiBcbiBcdG1lbXNldChkaWdlc3QsIDAsIHNpZ19sZW4pO1xuIFxuLVx0c2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjKGFzb2MsIGNodW5rLVx1MDAzZXNrYixcbi1cdFx0XHRcdCAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKWNodW5rLVx1MDAzZWNodW5rX2hkcixcbi1cdFx0XHRcdCBzaF9rZXksIEdGUF9BVE9NSUMpO1xuK1x0aWYgKHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhhc29jLCBjaHVuay1cdTAwM2Vza2IsXG4rXHRcdFx0XHQgICAgIChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopY2h1bmstXHUwMDNlY2h1bmtfaGRyLFxuK1x0XHRcdFx0ICAgICBzaF9rZXksIEdGUF9BVE9NSUMpKSB7XG4rXHRcdGtmcmVlKHNhdmVfZGlnZXN0KTtcbitcdFx0cmV0dXJuIFNDVFBfSUVSUk9SX05PTUVNO1xuK1x0fVxuIFxuIFx0LyogRGlzY2FyZCB0aGUgcGFja2V0IGlmIHRoZSBkaWdlc3RzIGRvIG5vdCBtYXRjaCAqL1xuIFx0aWYgKGNyeXB0b19tZW1uZXEoc2F2ZV9kaWdlc3QsIGRpZ2VzdCwgc2lnX2xlbikpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjMxLjIyMTAyOTc3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc0MzQyMTY1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNDVFAgSE1BQyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdOKAmXMgdHdlYWtpbmcgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbi4gVGhlIHNpZ25pZmljYW50IHRoaW5nIGlzIHRoZSBjaGFuZ2UgaW4gYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2A7IGl0J3Mgbm93IHJldHVybmluZyBhbiBgaW50YCB0byBzaWduYWwgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3JzIChgLUVOT01FTWApLCB3aGljaCBpcyBhIHByZXR0eSBjcml0aWNhbCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhpcyBlcnJvciBwcm9wYWdhdGlvbiB0aHJvdWdoIHRoZSBjYWxsIHN0YWNrIGlzIHdoYXQgaW50ZXJlc3RzIG1lLlxuXG5UaGUgcGF0Y2gncyBlZmZlY3RzIHJpcHBsZSB1cHdhcmRzIHRocm91Z2ggc2V2ZXJhbCBrZXkgZnVuY3Rpb25zOiBgc2N0cF9wYWNrZXRfcGFja2AsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAsIGFuZCBgc2N0cF9zZl9hdXRoZW50aWNhdGVgLiBUaGlzIGxvb2tzIGxpa2UgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcg4oCTIHNwZWNpZmljYWxseSB0byBzZWUgaG93IHRoZSBTQ1RQIHN1YnN5c3RlbSBoYW5kbGVzIHRob3NlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzIGR1cmluZyB0aGUgSE1BQyBjb21wdXRhdGlvbi5cblxuSeKAmW0gdGhpbmtpbmcgYWJvdXQgd2hpY2ggcGFydHMgb2YgdGhlIGNvZGUgYXJlIHRoZSBkaXJlY3QgZm9jdXMgb2YgdGhpcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGl0c2VsZiwgYHNjdHBfcGFja2V0X3RyYW5zbWl0YCAoYWZ0ZXIgYHNjdHBfcGFja2V0X3BhY2tgKSwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYWAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfYmAsIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAgKGFsbCBhZnRlciBgc2N0cF9hdXRoX2NodW5rX3ZlcmlmeWApLCBhbmQgYHNjdHBfc2ZfZWF0X2F1dGhgIChhZnRlciBgc2N0cF9zZl9hdXRoZW50aWNhdGVgKS5cblxuUmlnaHQsIG5lZWQgdG8gY2hlY2sgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHN0YXJ0aW5nIHdpdGggYHNjdHBfcGFja2V0X3RyYW5zbWl0YCwgYHNjdHBfc2ZfZG9fNV8xRF9jZWAsIGBzY3RwX3NmX2VhdF9hdXRoYCwgYW5kIHRoZSBvdGhlciBkb19kdXBjb29rIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgaGFuZGxlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzQ0LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6MzguOTY0NDUzMzEyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3ODUyNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHZvaWR8ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uKSBzY3RwX3NmX2RvX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0xOTA9c3RhdGljIGlubGluZSBib29sIHNjdHBfZXJyX2NodW5rX3ZhbGlkKHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaylcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTIzMy0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMzQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNF9DKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMzUtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMTgtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzE5OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzIwLVxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyMC0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1MjE6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xQ19hY2soc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyMi1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTY0MD1zdGF0aWMgZW51bSBzY3RwX2llcnJvciBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTcwNi0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo3MDc6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8xRF9jZShzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNzA4LVxcdFxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy05NDQtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6OTQ1OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMUVfY2Eoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTk0Ni1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MTUzNj1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fdW5leHBlY3RlZF9pbml0KFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTc2My0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxNzY0OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8xX3NpbWluaXQoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTc2NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODE4LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjE4MTk6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzJfZHVwaW5pdChcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0xODIwLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTE4NDItKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoxODQzOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl8zX2luaXRhY2soXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMTg0NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0yMTI5PXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19kdXBjb29rX2QoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMjQ1LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjIyNDY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29vayhcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yMjQ3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI1OTk9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl82X3N0YWxlKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjcxNS0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyNzE2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMV9hYm9ydChcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yNzE3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTI4NjM9c3RhdGljIGVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3N0b3BfdDFfYW5kX2Fib3J0KFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjkxNy0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyOTE4OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9zaHV0ZG93bihcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0yOTE5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMwMDctICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6MzAwODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc2h1dF9jdHNuKFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMwMDktXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzEwMT1zY3RwX3NmX2RvXzlfMl9yZXNodXRhY2soc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy0zMTQ0LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjMxNDU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZWNuX2N3cihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzE0Ni1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzIwMC0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozMjAxOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2VjbmUoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTMyMDItXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MzYzNT1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9vcGVycl9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzY3Mi0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozNjczOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzlfMl9maW5hbChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzY3NC1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz0zODUxPXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9zaHV0XzhfNF81KFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkwNy0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozOTA4OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzhfNV8xX0Vfc2Eoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM5MDktXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTM5MzUtLyogQURESVAgU2VjdGlvbiA0LjIgVXBvbiByZWNlcHRpb24gb2YgYW4gQVNDT05GIENodW5rLiAgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzozOTM2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2FzY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMzkzNy1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MDQ5PXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZW5kX25leHRfYXNjb25mKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDA3Ni0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MDc3OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX2FzY29uZl9hY2soc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQwNzgtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQxOTEtLyogUkUtQ09ORklHIFNlY3Rpb24gNS4yIFVwb24gcmVjZXB0aW9uIG9mIGFuIFJFQ09ORiBDaHVuay4gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MTkyOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDE5My1cXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00OTcwPXN0YXRpYyBlbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl92aW9sYXRpb25fY2h1bmsoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MDQyLSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUwNDM6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2Fzb2Moc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUwNDQtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MTU0LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxNTU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX3NlbmQoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUxNTYtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXAsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MTkzLSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjUxOTQ6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8yX3BybV9zaHV0ZG93bihcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01MTk1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyNTAtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTI1MTplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzFfcHJtX2Fib3J0KFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTUyNTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NTUyNj1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9zaHV0ZG93bl9hY2tfc2VudF9wcm1fYWJvcnQoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NTYxLSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU1NjI6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX3JlcXVlc3RoZWFydGJlYXQoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU2My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NTk0LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU1OTU6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcHJtX2FzY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTU5Ni1cXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTYxMS0vKiBSRS1DT05GSUcgU2VjdGlvbiA1LjEgUkVDT05GIENodW5rIFByb2NlZHVyZXMgKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1NjEyOmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3BybV9yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2MTMtXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU2MzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfaWdub3JlX3ByaW1pdGl2ZShcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2NTMtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTY1NDplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19ub19wZW5kaW5nX3RzbihcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NjU1LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU2ODUtICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTY4NjplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb185XzJfc3RhcnRfc2h1dGRvd24oXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTY4Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NzU1LSAqL1xcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjU3NTY6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fOV8yX3NodXRkb3duX2FjayhcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01NzU3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTU4MzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfaWdub3JlX290aGVyKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU4NTctICovXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NTg1ODplbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb182XzNfM19ydHgoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTU4NTktXFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNTk0NS0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo1OTQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzZfMl9zYWNrKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy01OTQ3LVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxMDoyMjozOS4wNjIzMTA1OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjA0ODM4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTQ1RQIEZ1bmN0aW9uIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGVzZSBtb2RpZmllZCBTQ1RQIGZ1bmN0aW9ucy4gTGV0J3Mgc2VlLCB0aGUgb25lcyB0aGF0IGhhdmUgY2hhbmdlZCBhcmU6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIOKAkyB3aGljaCBJIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBleHBvcnRlZCBvciBub3QsIG1lYW5pbmcgaXMgaXQgbm9uLXN0YXRpYy4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGluIGBuZXQvc2N0cC9hdXRoLmNgLiBUaGVuLCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYywgc28gbm8gbmVlZCB0byBsb29rIHRoZXJlLiBBbmQgYHNjdHBfc2ZfZG9fNV8xRF9jZWAgaXMgYWxzbyBub24tc3RhdGljLiBIbW0sIG5vdyB3ZSBoYXZlIGEgZmV3IHN0YXRpYyBvbmVzOiBgc2N0cF9zZl9kb19kdXBjb29rX2FgLCBgc2N0cF9zZl9kb19kdXBjb29rX2JgLCBgc2N0cF9zZl9kb19kdXBjb29rX2RgLCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4gUmlnaHQsIHNvIEkgbmVlZCB0byBmb2N1cyBvbiB0aGF0IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGZ1bmN0aW9uIGluIGBuZXQvc2N0cC9hdXRoLmNgIGFuZCBtYWtlIHN1cmUgaXQncyBub24tc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjQzLjY2NzE1MDYyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjM1Mzk5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL2F1dGguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9hdXRoLmM9NTk1PWludCBzY3RwX2F1dGhfcmVjdl9jaWQoZW51bSBzY3RwX2NpZCBjaHVuaywgY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpXFxuLS1cXG5uZXQvc2N0cC9hdXRoLmMtNjE1LSAqL1xcbm5ldC9zY3RwL2F1dGguYzo2MTY6aW50IHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hYyhjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9hdXRoLmMtNjE3LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6NDMuNzU5NTA4OTMyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5Mjc3MzkwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgSSB1bmRlcnN0YW5kIGl0OlxuXG4qKkV4YW1pbmluZyBTQ1RQIEZ1bmN0aW9uIFZpc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBTQ1RQIGZ1bmN0aW9ucyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlaXIgdmlzaWJpbGl0eS4gRmlyc3QsIEkgd2FzIHdvbmRlcmluZyBhYm91dCBgc2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjYC4gSXMgaXQgZXhwb3J0ZWQsIG9yIGp1c3Qgbm9uLXN0YXRpYz8gTG9va3MgbGlrZSBpdCdzIHRoZSBsYXR0ZXIsIGp1c3Qgbm9uLXN0YXRpYy4gVGhlbiwgSSB3YXMgY3VyaW91cyBhYm91dCBgc2N0cF9wYWNrZXRfdHJhbnNtaXRgLiBBZ2FpbiwgaXQncyBub24tc3RhdGljLCBidXQgY3J1Y2lhbGx5LCBpdCdzIGFsc28gZ2xvYmFsbHkgdmlzaWJsZS4gVGhhdCBtZWFucyBpdCdzIGF2YWlsYWJsZSBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSB0byBjYWxsIGRpcmVjdGx5LlxuXG5OZXh0LCBJIHdlbnQgb24gdG8gY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgYHNjdHBfc2ZfZG9fNV8xRF9jZWAuIEFuZCBpdCdzIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbi5cblxuTm93LCBhIGJpdCBvZiBhIHdyaW5rbGUgaGFzIHN1cmZhY2VkLiBJIHJlYWxpemVkIHRoYXQgYHNjdHBfc2ZfZG9fZHVwY29va19hYCBpcyBjYWxsZWQgKmZyb20qIGBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tgLiBPa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgbGF0dGVyIGZ1bmN0aW9uLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBhcnRzIG9mIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUgaW50ZXJhY3QsIGFuZCB0aGlzIGNhbGwgcmVsYXRpb25zaGlwIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1NzgsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjI6NTAuNzUyMjg1MzI3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MDMwMDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9MjEyOT1zdGF0aWMgZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fZHVwY29va19kKFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjI0NS0gKi9cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzoyMjQ2OmVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2soXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtMjI0Ny1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjUwLjgyMTMyMDUwM1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjAxNTg0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgQ29kZSBmb3IgUG90ZW50aWFsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Ugc3BlY2lmaWMgZm9jdXMgc3ltYm9sczogYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AsIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBhbmQgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AuIFRoZXNlIGFyZSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gU0NUUCBvcGVyYXRpb24sIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZWlyIGJlaGF2aW9yIG9yIGV2ZW4gdGhlaXIgaW5jbHVzaW9uIGluIHRoZSBidWlsZC4gSXQncyBjcnVjaWFsLCBhcyBJIGFsd2F5cyBzYXksIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGF1ZGl0IG9yIGRlYnVnIGFueSBvZiB0aGVzZSBhcmVhcy5cblxuTm93LCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIHByaW1hcnkgZmVhdHVyZSBlbmFibGUgZmxhZy4gTGV0J3Mgc2VlLi4uIFNDVFAgaXMgZW5hYmxlZCB3aXRoIGBJUF9TQ1RQYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEJ1dCB0aGF0J3MganVzdCB0aGUgdG9wLWxldmVsIHN3aXRjaC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9zY3RwL0tjb25maWdgIGZpbGUgaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGRldGFpbGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFNDVFAgc3Vic3lzdGVtIHNob3VsZCBiZSBkZWZpbmVkLiBGcm9tIHRoZXJlIEkgY2FuIGRldGVybWluZSBpZiBhbnkgc3BlY2lmaWMgZmxhZ3MsIG1vZHVsZXMsIG9yIGZlYXR1cmVzIG1pZ2h0IGFmZmVjdCB0aGVzZSBmdW5jdGlvbnMuIE5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYXMgY2xlYW4gYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjU0Ljg4MTQ4MTc3NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjdHAvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgU0NUUCBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG1lbnVjb25maWcgSVBfU0NUUFxcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlRoZSBTQ1RQIFByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUXFxuICAgOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEExXFxuICAxMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9TSEEyNTZcXG4gIDExOlxcdFxcdHNlbGVjdCBDUllQVE9fTElCX1VUSUxTXFxuICAxMjpcXHRcXHRzZWxlY3QgTkVUX0NSQzMyQ1xcbiAgMTM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAxNDpcXHRcXHRoZWxwXFxuICAxNTpcXHRcXHQgIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHQgIEZyb20gUkZDIDI5NjAgXFx1MDAzY2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI5NjAudHh0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBcXFwiU0NUUCBpcyBhIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2NvbCBvcGVyYXRpbmcgb24gdG9wIG9mIGFcXG4gIDIwOlxcdFxcdCAgY29ubmVjdGlvbmxlc3MgcGFja2V0IG5ldHdvcmsgc3VjaCBhcyBJUC4gIEl0IG9mZmVycyB0aGUgZm9sbG93aW5nXFxuICAyMTpcXHRcXHQgIHNlcnZpY2VzIHRvIGl0cyB1c2VyczpcXG4gIDIyOlxcdFxcbiAgMjM6XFx0XFx0ICAtLSBhY2tub3dsZWRnZWQgZXJyb3ItZnJlZSBub24tZHVwbGljYXRlZCB0cmFuc2ZlciBvZiB1c2VyIGRhdGEsXFxuICAyNDpcXHRcXHQgIC0tIGRhdGEgZnJhZ21lbnRhdGlvbiB0byBjb25mb3JtIHRvIGRpc2NvdmVyZWQgcGF0aCBNVFUgc2l6ZSxcXG4gIDI1OlxcdFxcdCAgLS0gc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIHVzZXIgbWVzc2FnZXMgd2l0aGluIG11bHRpcGxlIHN0cmVhbXMsXFxuICAyNjpcXHRcXHQgIHdpdGggYW4gb3B0aW9uIGZvciBvcmRlci1vZi1hcnJpdmFsIGRlbGl2ZXJ5IG9mIGluZGl2aWR1YWwgdXNlclxcbiAgMjc6XFx0XFx0ICBtZXNzYWdlcyxcXG4gIDI4OlxcdFxcdCAgLS0gb3B0aW9uYWwgYnVuZGxpbmcgb2YgbXVsdGlwbGUgdXNlciBtZXNzYWdlcyBpbnRvIGEgc2luZ2xlIFNDVFBcXG4gIDI5OlxcdFxcdCAgcGFja2V0LCBhbmRcXG4gIDMwOlxcdFxcdCAgLS0gbmV0d29yay1sZXZlbCBmYXVsdCB0b2xlcmFuY2UgdGhyb3VnaCBzdXBwb3J0aW5nIG9mIG11bHRpLVxcbiAgMzE6XFx0XFx0ICBob21pbmcgYXQgZWl0aGVyIG9yIGJvdGggZW5kcyBvZiBhbiBhc3NvY2lhdGlvbi5cXFwiXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIHByb3RvY29sIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAgMzQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2N0cC4gRGVidWcgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGtlcm5lbCdzIGR5bmFtaWMgZGVidWdnaW5nIGZyYW1ld29yay5cXG4gIDM2OlxcdFxcbiAgMzc6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuICAzODpcXHRcXG4gIDM5OlxcdGlmIElQX1NDVFBcXG4gIDQwOlxcdFxcbiAgNDE6XFx0Y29uZmlnIFNDVFBfREJHX09CSkNOVFxcbiAgNDI6XFx0XFx0Ym9vbCBcXFwiU0NUUDogRGVidWcgb2JqZWN0IGNvdW50c1xcXCJcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gUFJPQ19GU1xcbiAgNDQ6XFx0XFx0aGVscFxcbiAgNDU6XFx0XFx0ICBJZiB5b3Ugc2F5IFksIHRoaXMgd2lsbCBlbmFibGUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIGNvdW50aW5nIHRoZVxcbiAgNDY6XFx0XFx0ICB0eXBlIG9mIG9iamVjdHMgdGhhdCBhcmUgY3VycmVudGx5IGFsbG9jYXRlZC4gIFRoaXMgaXMgdXNlZnVsIGZvclxcbiAgNDc6XFx0XFx0ICBpZGVudGlmeWluZyBtZW1vcnkgbGVha3MuIFRoaXMgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHZpZXdlZCBieVxcbiAgNDg6XFx0XFx0ICAnY2F0IC9wcm9jL25ldC9zY3RwL3NjdHBfZGJnX29iamNudCdcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNob2ljZVxcbiAgNTM6XFx0XFx0cHJvbXB0IFxcXCJEZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZFxcXCJcXG4gIDU0OlxcdFxcdGRlZmF1bHQgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX1NIQTI1NlxcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IFNDVFAgY29va2llIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgZm9yXFxuICA1NzpcXHRcXHQgIHdoZW4gYSBtZXRob2QgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZWxlY3RlZCB2aWEgdGhlXFxuICA1ODpcXHRcXHQgIG5ldC5zY3RwLmNvb2tpZV9obWFjX2FsZyBzeXNjdGwuXFxuICA1OTpcXHRcXG4gIDYwOlxcdFxcdCAgSWYgdW5zdXJlLCBjaG9vc2UgdGhlIGRlZmF1bHQgKEhNQUMtU0hBMjU2KS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0Y29uZmlnIFNDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEEyNTZcXG4gIDYzOlxcdFxcdGJvb2wgXFxcIkhNQUMtU0hBMjU2XFxcIlxcbiAgNjQ6XFx0XFxuICA2NTpcXHRjb25maWcgU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkVcXG4gIDY2OlxcdFxcdGJvb2wgXFxcIk5vbmVcXFwiXFxuICA2NzpcXHRcXG4gIDY4OlxcdGVuZGNob2ljZVxcbiAgNjk6XFx0XFxuICA3MDpcXHRjb25maWcgSU5FVF9TQ1RQX0RJQUdcXG4gIDcxOlxcdFxcdGRlcGVuZHMgb24gSU5FVF9ESUFHXFxuICA3MjpcXHRcXHRkZWZfdHJpc3RhdGUgSU5FVF9ESUFHXFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcbiAgNzU6XFx0ZW5kaWYgIyBJUF9TQ1RQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIyOjU0Ljg4MTYwOTg0NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzg0NzI3MzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaW52b2x2ZWQgaGVyZSBzZWVtcyB0byBiZSBgSVBfU0NUUGAuIEkgbmVlZCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzIG9yIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCBzcGVjaWZpY2FsbHkgdG8gYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AuIFdhaXQgYSBtaW51dGUsIGlzbid0IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIGluaGVyZW50bHkgcGFydCBvZiBTQ1RQIEFVVEgsIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aXRoaW4gU0NUUD8gUmlnaHQuIFNvLCBpbiBlc3NlbmNlLCBgSVBfU0NUUGAgY292ZXJzIGl0LiBObyBzZXBhcmF0ZSBmbGFncyBvciBjb25maWdzIGZvciBTQ1RQIEFVVEggaXRzZWxmLlxuXG5Ob3csIGxldCdzIGdvIGJhY2sgYW5kIHJldmlldyB0aGlzIHBhdGNoIGNhcmVmdWxseS4gSXQgbW9kaWZpZXMgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgdG8gcmV0dXJuIGFuIGVycm9yLCBhbmQgdGhlIGhhbmRsaW5nIG9mIHRoaXMgcG90ZW50aWFsIGVycm9yIGlzIGltcGxlbWVudGVkIGluIGBzY3RwX3BhY2tldF9wYWNrYCBhbmQgYHNjdHBfc2ZfYXV0aGVudGljYXRlYC4gYHNjdHBfc2ZfYXV0aGVudGljYXRlYCBpcywgaW4gdHVybiwgY2FsbGVkIGJ5IGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCwgd2hpY2ggZ2V0cyBpbnZva2VkIGJ5IHNldmVyYWwgY3JpdGljYWwgZnVuY3Rpb25zOiBgc2N0cF9zZl9kb181XzFEX2NlYCwgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAuIEFsbCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSB3aGVuIFNDVFAgaXMgZW5hYmxlZC5cblxuSSBuZWVkIHRvIGtlZXAgYSBjbG9zZSBleWUgb24gYSBmZXcga2V5IHN5bWJvbHM6IGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgIOKAkyBvYnZpb3VzbHksIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ug4oCTIGBzY3RwX3BhY2tldF90cmFuc21pdGAsIGBzY3RwX3NmX2RvXzVfMURfY2VgLCBhbmQgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AuXG5cbkFoLCByaWdodCwgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2AgaXMgdGhlIGVudHJ5IHBvaW50LCB0aGUgcm9vdCBmdW5jdGlvbiBmb3IgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYHNjdHBfc2ZfZG9fZHVwY29va19iYCwgYW5kIGBzY3RwX3NmX2RvX2R1cGNvb2tfZGAuIEkgaGF2ZSB0byBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBvdGhlciBlbnRyeSBwb2ludHMsIHNvIEknbGwgYWxzbyBhbmFseXplIGBzY3RwX3NmX2VhdF9hdXRoYC4gVGhpcyBzZWVtcyB0byBjb3ZlciB0aGUgY29tcGxldGUgc2V0IG9mIHJlYWNoYWJsZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjM6MDIuMjY2MzQwMDcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODE5NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3NmX2VhdF9hdXRoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQ0MjM9c3RhdGljIGVudW0gc2N0cF9pZXJyb3Igc2N0cF9zZl9hdXRoZW50aWNhdGUoXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00NTAwLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQ1MDE6ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZWF0X2F1dGgoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQ1MDItXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjM6MDIuMzQ0NTQyNzk3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTQ2NTA1MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU0NUUCBBdXRoZW50aWNhdGlvbiBQYXRjaCBGdXp6aW5nIEZvY3VzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gYWRkIGBzY3RwX3NmX2VhdF9hdXRoYCB0byBvdXIgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBSaWdodCBub3csIHdlJ3ZlIGdvdDpcblxuKiAgIGBzY3RwX2F1dGhfY2FsY3VsYXRlX2htYWNgXG4qICAgYHNjdHBfcGFja2V0X3RyYW5zbWl0YFxuKiAgIGBzY3RwX3NmX2RvXzVfMURfY2VgXG4qICAgYHNjdHBfc2ZfZG9fNV8yXzRfZHVwY29va2BcbiogICBgc2N0cF9zZl9lYXRfYXV0aGBcblxuQW5kIG91ciBjb25maWd1cmF0aW9uIGlzLCBhcyB1c3VhbCwgYElQX1NDVFBgLlxuXG5UaGUgcGF0Y2ggaXMgYWJvdXQgZml4aW5nIFNDVFAgYXV0aGVudGljYXRpb24ncyBITUFDIGNhbGN1bGF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhhbmRsaW5nIGFuZCBwcm9wYWdhdGluZyBgLUVOT01FTWAgKG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzKS4gVGhpcyBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBvbiBob3cgcGFja2V0cyBhcmUgcGFja2VkIGFuZCBob3cgY2h1bmsgdmVyaWZpY2F0aW9uIHdvcmtzIHdpdGhpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBUaGlzIGlzIGNyaXRpY2FsLCBvYnZpb3VzbHksIGJlY2F1c2UgbWlzaGFuZGxpbmcgbWVtb3J5IGVycm9ycyBpbiB0aG9zZSByb3V0aW5lcyBjb3VsZCBsZWFkIHRvIGxlYWtzLCBjb3JydXB0aW9uLCBvciBpbmNvbnNpc3RlbnQgc3RhdGVzLiBIZW5jZSwgd2UgaGF2ZSB0byBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgYXJlYXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYHNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgYW5kIG5vdCBqdXN0IGEgbG9jYWwgc3RhdGljIGZ1bmN0aW9uLiBZZXAsIGl0J3MgaW4gYGluY2x1ZGUvbmV0L3NjdHAvYXV0aC5oYCBhbmQgZGVmaW5lZCBpbiBgbmV0L3NjdHAvYXV0aC5jYCB3aXRob3V0IGJlaW5nIHN0YXRpYywgc28gaXQncyBhY2Nlc3NpYmxlLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5BbmQganVzdCB0byBiZSBzdXJlLCBsZXQgbWUgY2hlY2sgdGhlIHNhbWUgZm9yIGBzY3RwX3BhY2tldF90cmFuc21pdGAuIEdvb2QsIGl0J3MgYXMgZXhwZWN0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjk5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIzOjA5LjQ5OTE5NjQ1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjIyNjM5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgc2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvb3V0cHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvb3V0cHV0LmM9NDM2PXN0YXRpYyBpbnQgc2N0cF9wYWNrZXRfcGFjayhzdHJ1Y3Qgc2N0cF9wYWNrZXQgKnBhY2tldCxcXG4tLVxcbm5ldC9zY3RwL291dHB1dC5jLTU3NC0gKi9cXG5uZXQvc2N0cC9vdXRwdXQuYzo1NzU6aW50IHNjdHBfcGFja2V0X3RyYW5zbWl0KHN0cnVjdCBzY3RwX3BhY2tldCAqcGFja2V0LCBnZnBfdCBnZnApXFxubmV0L3NjdHAvb3V0cHV0LmMtNTc2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTA6MjM6MDkuNTY1NDI3NjQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MTE1NTY4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBOb24tU3RhdGljIEZ1bmN0aW9ucyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUsIGFuZCB0aGUga2V5IHRoaW5nIEknbSBsb29raW5nIGZvciByaWdodCBub3cgaXMgaWRlbnRpZnlpbmcgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIG5vbi1zdGF0aWMgY29udGV4dC4gVGhlbiwgSSBtZXRob2RpY2FsbHkgd2VudCB0aHJvdWdoIGFuZCB2ZXJpZmllZCB0aGF0IGBzY3RwX3NmX2RvXzVfMURfY2VgLCBgc2N0cF9zZl9kb181XzJfNF9kdXBjb29rYCwgYW5kIGBzY3RwX3NmX2VhdF9hdXRoYCBhcmUgaW5kZWVkICpub3QqIHN0YXRpYy4gR29vZCwgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuXG5cbk5leHQsIEkgbmVlZGVkIHRvIGVuc3VyZSBJIGhhZG4ndCBtaXNzZWQgYW55dGhpbmcuIEkgY2hlY2tlZCBhIGZldyBvdGhlciBmdW5jdGlvbnMsIGFuZCB5ZXMsIGBzY3RwX3NmX2F1dGhlbnRpY2F0ZWAsIGBzY3RwX2F1dGhfY2h1bmtfdmVyaWZ5YCwgYHNjdHBfcGFja2V0X3BhY2tgLCBhbmQgYHNjdHBfc2ZfZG9fZHVwY29va19hYCwgYGJgLCBgZGAgYXJlIGFsbCBjbGVhcmx5IHN0YXRpYy4gSSBmZWVsIGNvbmZpZGVudCB0aGF0IG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyBub3cgY29tcGxldGUgYW5kIGFjY3VyYXRlOyBJJ3ZlIGNvdmVyZWQgYWxsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgSSBuZWVkZWQgdG8gY2hlY2suXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIEknbSBmb2N1c2luZyBvbiBgSVBfU0NUUGAgYmVjYXVzZSB0aGF0J3MgbGlrZWx5IHRoZSBjb3JlLiBBbmQgaXQgaXMgc2VsZWN0ZWQuIEhvd2V2ZXIsIGBJUF9TQ1RQYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0J3MgYSBub24taXNzdWUuIEkgdGhlbiBleHBhbmRlZCBteSBzZWFyY2ggdG8gc2VlIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB3ZXJlIG5lY2Vzc2FyeSwgc3VjaCBhcyBgQ1JZUFRPX0hNQUNgIG9yIGBDUllQVE9fU0hBMWAuIEV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgYElQX1NDVFBgLCBpdCBhcHBlYXJzIHRvIHNlbGVjdCBhIHNldCBvZiBjcnlwdG8gYW5kIHV0aWxpdHkgY29uZmlndXJhdGlvbnM6IGBDUllQVE9fTElCX1NIQTFgLCBgQ1JZUFRPX0xJQl9TSEEyNTZgLCBgQ1JZUFRPX0xJQl9VVElMU2AsIGBORVRfQ1JDMzJDYCwgYW5kIGBORVRfVURQX1RVTk5FTGAuIFRoZXNlIHNob3VsZCBiZSBzdWZmaWNpZW50LCBzbyBgSVBfU0NUUGAgYnkgaXRzZWxmIGlzIGFsbCBJIG5lZWQuIEkgYW0gY29udGVudCB0aGF0IEkgaGF2ZSBpZGVudGlmaWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbi5cblxuTm93LCBJIHRoaW5rIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEkgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIGFuZCBwcm9jZWVkIHdpdGggdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NzEsIk91dHB1dFRva2VucyI6MTcyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDEwOjIzOjE3LjA3Njk4NzExNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTY4Nzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9hdXRoX2NhbGN1bGF0ZV9obWFjXCIsXG4gICAgXCJzY3RwX3BhY2tldF90cmFuc21pdFwiLFxuICAgIFwic2N0cF9zZl9kb181XzFEX2NlXCIsXG4gICAgXCJzY3RwX3NmX2RvXzVfMl80X2R1cGNvb2tcIixcbiAgICBcInNjdHBfc2ZfZWF0X2F1dGhcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU0NUUCBhdXRoZW50aWNhdGlvbiBITUFDIGNhbGN1bGF0aW9uIHRvIHByb3Blcmx5IGhhbmRsZSBhbmQgcHJvcGFnYXRlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzICgtRU5PTUVNKS4gVGhpcyBhZmZlY3RzIHRoZSBwYWNrZXQgcGFja2luZyBhbmQgY2h1bmsgdmVyaWZpY2F0aW9uIHBhdGhzIGluIHRoZSBTQ1RQIHN0YXRlIG1hY2hpbmUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZXNlIHBhdGhzIHRvIGVuc3VyZSBlcnJvciBoYW5kbGluZyBpcyByb2J1c3QgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIG1lbW9yeSBsZWFrcyBvciBzdGF0ZSBpbmNvbnNpc3RlbmNpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfYXV0aF9jYWxjdWxhdGVfaG1hY1wiLFxuICAgIFwic2N0cF9wYWNrZXRfdHJhbnNtaXRcIixcbiAgICBcInNjdHBfc2ZfZG9fNV8xRF9jZVwiLFxuICAgIFwic2N0cF9zZl9kb181XzJfNF9kdXBjb29rXCIsXG4gICAgXCJzY3RwX3NmX2VhdF9hdXRoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNDVFAgYXV0aGVudGljYXRpb24gSE1BQyBjYWxjdWxhdGlvbiB0byBwcm9wZXJseSBoYW5kbGUgYW5kIHByb3BhZ2F0ZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyAoLUVOT01FTSkuIFRoaXMgYWZmZWN0cyB0aGUgcGFja2V0IHBhY2tpbmcgYW5kIGNodW5rIHZlcmlmaWNhdGlvbiBwYXRocyBpbiB0aGUgU0NUUCBzdGF0ZSBtYWNoaW5lLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGVzZSBwYXRocyB0byBlbnN1cmUgZXJyb3IgaGFuZGxpbmcgaXMgcm9idXN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBtZW1vcnkgbGVha3Mgb3Igc3RhdGUgaW5jb25zaXN0ZW5jaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmpn6b[1] Phase: Succeeded StartedAt: 2026-08-04 10:23:39 +0000 UTC FinishedAt: 2026-08-04 10:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-04 10:23:39 +0000 UTC FinishedAt: 2026-08-04 10:23:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2] Phase: Succeeded StartedAt: 2026-08-04 10:23:39 +0000 UTC FinishedAt: 2026-08-04 12:13:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-08-04 10:23:39 +0000 UTC FinishedAt: 2026-08-04 12:13:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-04 10:23:39 +0000 UTC FinishedAt: 2026-08-04 10:23:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-04 10:23:39 +0000 UTC FinishedAt: 2026-08-04 10:23:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmpn6b/series-workflowmpn6b-convert-artifact-1850286402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-04 10:23:49 +0000 UTC FinishedAt: 2026-08-04 10:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-04 10:23:49 +0000 UTC FinishedAt: 2026-08-04 10:43: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:*45d0b110-6998-48ab-8579-aeb215da7abf,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-workflowmpn6b/series-workflowmpn6b-convert-artifact-1850286402/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": "0a86a471-4ec9-42eb-9329-b046512643ed", "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-workflowmpn6b/series-workflowmpn6b-build-action-1505483776/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-04 10:23:49 +0000 UTC FinishedAt: 2026-08-04 10:42:54 +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:*45d0b110-6998-48ab-8579-aeb215da7abf,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-workflowmpn6b/series-workflowmpn6b-convert-artifact-1850286402/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": "0a86a471-4ec9-42eb-9329-b046512643ed", "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-workflowmpn6b/series-workflowmpn6b-build-action-1505483776/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-04 10:43:04 +0000 UTC FinishedAt: 2026-08-04 10:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-04 10:43:04 +0000 UTC FinishedAt: 2026-08-04 10:43:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-04 10:43:04 +0000 UTC FinishedAt: 2026-08-04 10:43:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-04 10:43:04 +0000 UTC FinishedAt: 2026-08-04 10:43:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmpn6b/series-workflowmpn6b-convert-artifact-160603549/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-04 10:43:15 +0000 UTC FinishedAt: 2026-08-04 10:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-04 10:43:15 +0000 UTC FinishedAt: 2026-08-04 10:45:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0a86a471-4ec9-42eb-9329-b046512643ed,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-workflowmpn6b/series-workflowmpn6b-build-action-1505483776/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-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-04 10:45:12 +0000 UTC FinishedAt: 2026-08-04 10:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-04 10:45:12 +0000 UTC FinishedAt: 2026-08-04 10:45:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-04 10:45:12 +0000 UTC FinishedAt: 2026-08-04 11:06:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-04 10:45:12 +0000 UTC FinishedAt: 2026-08-04 11:06:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*45d0b110-6998-48ab-8579-aeb215da7abf,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-workflowmpn6b/series-workflowmpn6b-convert-artifact-160603549/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": "db68d243-66b6-4445-b769-6fa0a5301ae0", "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-workflowmpn6b/series-workflowmpn6b-build-action-1423141497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-04 10:45:12 +0000 UTC FinishedAt: 2026-08-04 11:05:41 +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:*45d0b110-6998-48ab-8579-aeb215da7abf,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-workflowmpn6b/series-workflowmpn6b-convert-artifact-160603549/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": "db68d243-66b6-4445-b769-6fa0a5301ae0", "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-workflowmpn6b/series-workflowmpn6b-build-action-1423141497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-04 11:06:11 +0000 UTC FinishedAt: 2026-08-04 11:06:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-04 11:06:11 +0000 UTC FinishedAt: 2026-08-04 11:06:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-04 11:06:11 +0000 UTC FinishedAt: 2026-08-04 11:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-04 11:06:11 +0000 UTC FinishedAt: 2026-08-04 11:08:11 +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:*db68d243-66b6-4445-b769-6fa0a5301ae0,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-workflowmpn6b/series-workflowmpn6b-build-action-1423141497/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-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Failed StartedAt: 2026-08-04 11:08:21 +0000 UTC FinishedAt: 2026-08-04 12:13:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Failed StartedAt: 2026-08-04 11:08:21 +0000 UTC FinishedAt: 2026-08-04 12:13:12 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"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:*0a86a471-4ec9-42eb-9329-b046512643ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*db68d243-66b6-4445-b769-6fa0a5301ae0,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-workflowmpn6b/series-workflowmpn6b-build-action-1505483776/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-workflowmpn6b/series-workflowmpn6b-build-action-1423141497/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-04 11:08:21 +0000 UTC FinishedAt: 2026-08-04 11:08:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-04 11:08:21 +0000 UTC FinishedAt: 2026-08-04 11:08:27 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"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-workflowmpn6b/series-workflowmpn6b-convert-artifact-945885474/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-04 11:08:21 +0000 UTC FinishedAt: 2026-08-04 11:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-04 11:08:21 +0000 UTC FinishedAt: 2026-08-04 11:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-04 11:08:21 +0000 UTC FinishedAt: 2026-08-04 11:08:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Failed StartedAt: 2026-08-04 11:08:31 +0000 UTC FinishedAt: 2026-08-04 12:13:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmpn6b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["sctp_auth_calculate_hmac","sctp_packet_transmit","sctp_sf_do_5_1D_ce","sctp_sf_do_5_2_4_dupcook","sctp_sf_eat_auth"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2a33516f9ef59ad11844d4fc152f889449b5daf3","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"7004afe6-562b-4e74-8715-cd4cb0ea9113","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Error StartedAt: 2026-08-04 11:08:31 +0000 UTC FinishedAt: 2026-08-04 12:13:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0a86a471-4ec9-42eb-9329-b046512643ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*db68d243-66b6-4445-b769-6fa0a5301ae0,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-workflowmpn6b/series-workflowmpn6b-build-action-1505483776/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-workflowmpn6b/series-workflowmpn6b-build-action-1423141497/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-workflowmpn6b/series-workflowmpn6b-convert-artifact-945885474/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil