Name: series-workflowwjnvq Phase: Succeeded StartedAt: 2026-08-05 14:40:33 +0000 UTC FinishedAt: 2026-08-05 18:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[0] Phase: Succeeded StartedAt: 2026-08-05 14:40:33 +0000 UTC FinishedAt: 2026-08-05 14:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 14:40:33 +0000 UTC FinishedAt: 2026-08-05 14:56:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "032a33ff-4a0b-4a3c-8eab-c963888f38d8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_commit", "__nf_tables_abort", "nft_set_commit_update", "nft_rbtree_commit", "nft_rbtree_gc_scan" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19jb21taXQmIzM0OywKICAgICYjMzQ7X19uZl90YWJsZXNfYWJvcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldF9jb21taXRfdXBkYXRlJiMzNDssCiAgICAmIzM0O25mdF9yYnRyZWVfY29tbWl0JiMzNDssCiAgICAmIzM0O25mdF9yYnRyZWVfZ2Nfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBjb3JlIHRvIG1vdmUgdGhlIGBzZXRfdXBkYXRlX2xpc3RgIGZyb20gYSBsb2NhbCB2YXJpYWJsZSBpbiBgbmZfdGFibGVzX2NvbW1pdGAgdG8gYSBwZXItbmV0IG5hbWVzcGFjZSBsaXN0IGluIGBuZnRhYmxlc19wZXJuZXRgLiBJdCBhbHNvIHVwZGF0ZXMgYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAgdG8gY2hlY2sgZm9yIGFjdGl2ZSBlbGVtZW50cyB1c2luZyBgbmZ0X3NldF9lbGVtX2FjdGl2ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIHRyYW5zYWN0aW9uIGFuZCBzZXQgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkYzc4NTM4OTdlZTA4MzM0MmYzOWQ1Yjk1ZDFlYjgzZGM5NDIyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjU0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggM2JlNjEyMTQ1YzEzMC4uMjM4ZjZlY2I5MGU5OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtMTk0OSw2ICYjNDM7MTk0OSw3IEBAIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0YmluZGluZ19saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bW9kdWxlX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRub3RpZnlfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkXHRzZXRfdXBkYXRlX2xpc3Q7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0Y29tbWl0X211dGV4O1xuIFx0dTY0XHRcdFx0dGFibGVfaGFuZGxlO1xuIFx0dTY0XHRcdFx0dHN0YW1wO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGFmMzU3ZjZjNTA3MGIuLmE3MDA2NzI1YzMwNzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC01OTUsMTAgJiM0Mzs1OTUsMTUgQEAgc3RhdGljIHZvaWQgbmZ0X3RyYW5zX2NvbW1pdF9saXN0X2FkZF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90cmFucyAqdHJcbiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcbiB7XG4gXHRzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xuJiM0MztcdHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGU7XG4gXG4gXHRXQVJOX09OX09OQ0UodHJhbnMtXHUwMDNlbXNnX3R5cGUgIT0gTkZUX01TR19ORVdTRVRFTEVNIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHRyYW5zLVx1MDAzZW1zZ190eXBlICE9IE5GVF9NU0dfREVMU0VURUxFTSk7XG4gXG4mIzQzO1x0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuJiM0MztcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdCBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKVxuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUsIFx1MDAyNm5mdF9uZXQtXHUwMDNlc2V0X3VwZGF0ZV9saXN0KTtcbiYjNDM7XG4gXHRpZiAobmZ0X3RyYW5zX3RyeV9jb2xsYXBzZShuZnRfbmV0LCB0cmFucykpIHtcbiBcdFx0a2ZyZWUodHJhbnMpO1xuIFx0XHRyZXR1cm47XG5AQCAtMTA4NDgsMTEgJiM0MzsxMDg1MywxNCBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2xvZyhzdHJ1Y3QgbGlzdF9oZWFkICphZGwsIHUzMiBnZW5lcmF0aW9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxuJiM0MztzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgYm9vbCBlYXJseV9jb21taXQpXG4ge1xuIFx0c3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNldCwgbmV4dCwgXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XG4mIzQzO1x0XHRpZiAoc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydF9za2lwX3JlbW92YWwgXHUwMDI2XHUwMDI2IGVhcmx5X2NvbW1pdClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSk7XG4gXG4gXHRcdGlmICghc2V0LVx1MDAzZW9wcy1cdTAwM2Vjb21taXQgfHwgc2V0LVx1MDAzZWRlYWQpXG5AQCAtMTA4ODUsNyAmIzQzOzEwODkzLDYgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBuZnRfdHJhbnNfYmluZGluZyAqdHJhbnNfYmluZGluZztcbiBcdHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGludCBiYXNlX3NlcSwgZ2Nfc2VxO1xuLVx0TElTVF9IRUFEKHNldF91cGRhdGVfbGlzdCk7XG4gXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlO1xuIFx0c3RydWN0IG5mdF9jaGFpbiAqY2hhaW47XG4gXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbkBAIC0xMDk2MCw2ICYjNDM7MTA5NjcsOCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0Lyogc3RlcCAyLiAgTWFrZSBydWxlc19nZW5fWCB2aXNpYmxlIHRvIHBhY2tldCBwYXRoICovXG4mIzQzO1x0bmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIHRydWUpO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGFibGUsIFx1MDAyNm5mdF9uZXQtXHUwMDNldGFibGVzLCBsaXN0KSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFx1MDAyNnRhYmxlLVx1MDAzZWNoYWlucywgbGlzdClcbiBcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluKG5ldCwgY2hhaW4pO1xuQEAgLTExMDkxLDI3ICYjNDM7MTExMDAsMTMgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX05FV1NFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuLVxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19hZGQoXHUwMDI2Y3R4LCB0ZSk7XG4tXG4tXHRcdFx0aWYgKHRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuLVxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19yZW1vdmUoXHUwMDI2Y3R4LCB0ZSk7XG4tXG4tXHRcdFx0aWYgKHRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX05FV09CSjpcbiBcdFx0XHRpZiAobmZ0X3RyYW5zX29ial91cGRhdGUodHJhbnMpKSB7XG5AQCAtMTExODAsNyAmIzQzOzExMTc1LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bmZ0X3NldF9jb21taXRfdXBkYXRlKFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4mIzQzO1x0bmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIGZhbHNlKTtcbiBcbiBcdG5mdF9jb21taXRfbm90aWZ5KG5ldCwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXHRuZl90YWJsZXNfZ2VuX25vdGlmeShuZXQsIHNrYiwgTkZUX01TR19ORVdHRU4pO1xuQEAgLTExMjQ3LDExICYjNDM7MTEyNDIsMTEgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2Fib3J0X3JlbGVhc2Uoc3RydWN0IG5mdF90cmFucyAqdHJhbnMpXG4gXHRrZnJlZSh0cmFucyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBsaXN0X2hlYWQgKnNldF91cGRhdGVfbGlzdClcbiYjNDM7c3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldClcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldCAqc2V0LCAqbmV4dDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIHNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBcdTAwMjZuZnRfbmV0LVx1MDAzZXNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFxuIFx0XHRpZiAoIXNldC1cdTAwM2VvcHMtXHUwMDNlYWJvcnQpXG5AQCAtMTEzODYsMzMgJiM0MzsxMTM4MSwyMiBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4gXHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfTkVXU0VURUxFTTpcbiYjNDM7XHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuIFx0XHRcdGlmIChuZnRfdHJhbnNfZWxlbV9zZXRfYm91bmQodHJhbnMpKSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFx0XHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuLVx0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAoIW5mdF90cmFuc19lbGVtc19uZXdfYWJvcnQoXHUwMDI2Y3R4LCB0ZSkpIHtcbiBcdFx0XHRcdG5mdF90cmFuc19kZXN0cm95KHRyYW5zKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XG4tXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcbi1cdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuIFxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19kZXN0cm95X2Fib3J0KFx1MDAyNmN0eCwgdGUpO1xuLVxuLVx0XHRcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWFib3J0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ORVdPQko6XG5AQCAtMTE0NTgsNyAmIzQzOzExNDQyLDcgQEAgc3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm5mdF9uZXQtXHUwMDNlY29tbWl0X3NldF9saXN0KSk7XG4gXG4tXHRuZnRfc2V0X2Fib3J0X3VwZGF0ZShcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuJiM0MztcdG5mdF9zZXRfYWJvcnRfdXBkYXRlKG5mdF9uZXQpO1xuIFxuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG5AQCAtMTIxNDIsNiAmIzQzOzEyMTI2LDcgQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5mX3RhYmxlc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZWJpbmRpbmdfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZW1vZHVsZV9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5mdF9uZXQtXHUwMDNlbm90aWZ5X2xpc3QpO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5mdF9uZXQtXHUwMDNlc2V0X3VwZGF0ZV9saXN0KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2bmZ0X25ldC1cdTAwM2Vjb21taXRfbXV0ZXgpO1xuIFx0bmV0LVx1MDAzZW5mdC5iYXNlX3NlcSA9IDE7XG4gXHRuZnRfbmV0LVx1MDAzZWdjX3NlcSA9IDA7XG5AQCAtMTIxODYsNiAmIzQzOzEyMTcxLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBuZl90YWJsZXNfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm5mdF9uZXQtXHUwMDNlbW9kdWxlX2xpc3QpKTtcbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZuZnRfbmV0LVx1MDAzZW5vdGlmeV9saXN0KSk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2VkZXN0cm95X2xpc3QpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZfdGFibGVzX2V4aXRfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbmluZGV4IDYyMjJlOWJiNTdiYzkuLmNmNjQzZTkxNzc5MWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xuQEAgLTg5NCw2ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4gXHRzdHJ1Y3QgbmZ0X3JidHJlZSAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpO1xuIFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcmJlLCAqcmJlX2VuZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG4mIzQzO1x0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbiBcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xuIFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0O1xuIFxuQEAgLTkwMSw2ICYjNDM7OTAyLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIFx0XHRuZXh0ID0gcmJfbmV4dChub2RlKTtcbiBcbiBcdFx0cmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4mIzQzO1x0XHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2cmJlLVx1MDAzZWV4dCwgZ2VubWFzaykpIHtcbiYjNDM7XHRcdFx0cmJlX2VuZCA9IE5VTEw7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBlbGVtZW50cyBhcmUgcmV2ZXJzZWQgaW4gdGhlIHJidHJlZSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLFxuIFx0XHQgKiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlLCB0aGF0IGlzIHdoeSBlbmQgZWxlbWVudCBpc1xuQEAgLTEwMzYsMTAgJiM0MzsxMDQxLDMyIEBAIHN0YXRpYyB2b2lkIG5mdF9hcnJheV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuIFx0X19uZnRfYXJyYXlfZnJlZShhcnJheSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqXG4mIzQzO19fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShzdHJ1Y3QgcmJfbm9kZSAqKnBub2RlLCB1OCBnZW5tYXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcHJldl9yYmU7XG4mIzQzO1x0c3RydWN0IHJiX25vZGUgKm5vZGUgPSAqcG5vZGU7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpO1xuJiM0MztcdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNnByZXZfcmJlLVx1MDAzZWV4dCwgZ2VubWFzaykpIHtcbiYjNDM7XHRcdFx0bm9kZSA9IHJiX3ByZXYobm9kZSk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdCpwbm9kZSA9IG5vZGU7XG4mIzQzO1x0XHRyZXR1cm4gcHJldl9yYmU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2NvbW1pdChzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIHtcbiBcdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG4gXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpwcmV2X3JiZTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG4mIzQzO1x0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbiBcdHN0cnVjdCBuZnRfYXJyYXkgKm9sZDtcbiBcdHUzMiBudW1faW50ZXJ2YWxzID0gMDtcbiBcdHN0cnVjdCByYl9ub2RlICpub2RlO1xuQEAgLTEwNjEsMTIgJiM0MzsxMDg4LDEyIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4gXG4gXHQvKiBSZXZlcnNlIHdhbGsgdG8gY3JlYXRlIGFuIGFycmF5IGZyb20gc21hbGxlciB0byBsYXJnZXN0IGludGVydmFsLiAqL1xuIFx0bm9kZSA9IHJiX2xhc3QoXHUwMDI2cHJpdi1cdTAwM2Vyb290KTtcbi1cdGlmIChub2RlKVxuLVx0XHRwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpO1xuLVx0ZWxzZVxuLVx0XHRwcmV2X3JiZSA9IE5VTEw7XG4gXG4tXHR3aGlsZSAocHJldl9yYmUpIHtcbiYjNDM7XHR3aGlsZSAobm9kZSkge1xuJiM0MztcdFx0cHJldl9yYmUgPSBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmUoXHUwMDI2bm9kZSwgZ2VubWFzayk7XG4mIzQzO1x0XHRpZiAoIXByZXZfcmJlKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdHJiZSA9IHByZXZfcmJlO1xuIFxuIFx0XHRpZiAobmZ0X3JidHJlZV9pbnRlcnZhbF9zdGFydChyYmUpKVxuQEAgLTEwODMsNyAmIzQzOzExMTAsOSBAQCBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2NvbW1pdChzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIFx0XHRpZiAoIW5vZGUpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4mIzQzO1x0XHRwcmV2X3JiZSA9IF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShcdTAwMjZub2RlLCBnZW5tYXNrKTtcbiYjNDM7XHRcdGlmICghcHJldl9yYmUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBGb3IgYW5vbnltb3VzIHNldHMsIHdoZW4gYWRqYWNlbnQgcmFuZ2VzIGFyZSBmb3VuZCxcbiBcdFx0ICogdGhlIGVuZCBlbGVtZW50IGlzIG5vdCBhZGRlZCB0byB0aGUgc2V0IHRvIHBhY2sgdGhlIHNldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfY29tbWl0JiMzNDssCiAgICAmIzM0O19fbmZfdGFibGVzX2Fib3J0JiMzNDssCiAgICAmIzM0O25mdF9zZXRfY29tbWl0X3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2djX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZGM3ODUzODk3ZWUwODMzNDJmMzlkNWI5NWQxZWI4M2RjOTQyMjJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxNDo1NDo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaAppbmRleCAzYmU2MTIxNDVjMTMwLi4yMzhmNmVjYjkwZTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC0xOTQ5LDYgJiM0MzsxOTQ5LDcgQEAgc3RydWN0IG5mdGFibGVzX3Blcm5ldCB7CiAJc3RydWN0IGxpc3RfaGVhZAliaW5kaW5nX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAltb2R1bGVfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vdGlmeV9saXN0OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCXNldF91cGRhdGVfbGlzdDsKIAlzdHJ1Y3QgbXV0ZXgJCWNvbW1pdF9tdXRleDsKIAl1NjQJCQl0YWJsZV9oYW5kbGU7CiAJdTY0CQkJdHN0YW1wOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCBhZjM1N2Y2YzUwNzBiLi5hNzAwNjcyNWMzMDc1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtNTk1LDEwICYjNDM7NTk1LDE1IEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19jb21taXRfbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdHJhbnMgKnRyCiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucykKIHsKIAlzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpOwomIzQzOwlzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlOwogCiAJV0FSTl9PTl9PTkNFKHRyYW5zLSZndDttc2dfdHlwZSAhPSBORlRfTVNHX05FV1NFVEVMRU0gJmFtcDsmYW1wOwogCQkgICAgIHRyYW5zLSZndDttc2dfdHlwZSAhPSBORlRfTVNHX0RFTFNFVEVMRU0pOwogCiYjNDM7CXRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTsKJiM0MzsJaWYgKHRlLSZndDtzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0ICZhbXA7JmFtcDsgbGlzdF9lbXB0eSgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlKSkKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDt0ZS0mZ3Q7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSwgJmFtcDtuZnRfbmV0LSZndDtzZXRfdXBkYXRlX2xpc3QpOwomIzQzOwogCWlmIChuZnRfdHJhbnNfdHJ5X2NvbGxhcHNlKG5mdF9uZXQsIHRyYW5zKSkgewogCQlrZnJlZSh0cmFucyk7CiAJCXJldHVybjsKQEAgLTEwODQ4LDExICYjNDM7MTA4NTMsMTQgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9sb2coc3RydWN0IGxpc3RfaGVhZCAqYWRsLCB1MzIgZ2VuZXJhdGlvbikKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpzZXRfdXBkYXRlX2xpc3QpCiYjNDM7c3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsIGJvb2wgZWFybHlfY29tbWl0KQogewogCXN0cnVjdCBuZnRfc2V0ICpzZXQsICpuZXh0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNldCwgbmV4dCwgc2V0X3VwZGF0ZV9saXN0LCBwZW5kaW5nX3VwZGF0ZSkgewomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCAmYW1wO25mdF9uZXQtJmd0O3NldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHsKJiM0MzsJCWlmIChzZXQtJmd0O29wcy0mZ3Q7YWJvcnRfc2tpcF9yZW1vdmFsICZhbXA7JmFtcDsgZWFybHlfY29tbWl0KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSk7CiAKIAkJaWYgKCFzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0IHx8IHNldC0mZ3Q7ZGVhZCkKQEAgLTEwODg1LDcgJiM0MzsxMDg5Myw2IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IG5mdF90cmFuc19iaW5kaW5nICp0cmFuc19iaW5kaW5nOwogCXN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zLCAqbmV4dDsKIAl1bnNpZ25lZCBpbnQgYmFzZV9zZXEsIGdjX3NlcTsKLQlMSVNUX0hFQUQoc2V0X3VwZGF0ZV9saXN0KTsKIAlzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlOwogCXN0cnVjdCBuZnRfY2hhaW4gKmNoYWluOwogCXN0cnVjdCBuZnRfdGFibGUgKnRhYmxlOwpAQCAtMTA5NjAsNiAmIzQzOzEwOTY3LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAkvKiBzdGVwIDIuICBNYWtlIHJ1bGVzX2dlbl9YIHZpc2libGUgdG8gcGFja2V0IHBhdGggKi8KJiM0MzsJbmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIHRydWUpOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodGFibGUsICZhbXA7bmZ0X25ldC0mZ3Q7dGFibGVzLCBsaXN0KSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZhbXA7dGFibGUtJmd0O2NoYWlucywgbGlzdCkKIAkJCW5mX3RhYmxlc19jb21taXRfY2hhaW4obmV0LCBjaGFpbik7CkBAIC0xMTA5MSwyNyAmIzQzOzExMTAwLDEzIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX05FV1NFVEVMRU06CiAJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7Ci0KIAkJCW5mdF90cmFuc19lbGVtc19hZGQoJmFtcDtjdHgsIHRlKTsKLQotCQkJaWYgKHRlLSZndDtzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0ICZhbXA7JmFtcDsKLQkJCSAgICBsaXN0X2VtcHR5KCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUpKSB7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlLAotCQkJCQkgICAgICAmYW1wO3NldF91cGRhdGVfbGlzdCk7Ci0JCQl9CiAJCQluZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7CiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX0RFTFNFVEVMRU06CiAJCWNhc2UgTkZUX01TR19ERVNUUk9ZU0VURUxFTToKIAkJCXRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTsKLQogCQkJbmZ0X3RyYW5zX2VsZW1zX3JlbW92ZSgmYW1wO2N0eCwgdGUpOwotCi0JCQlpZiAodGUtJmd0O3NldC0mZ3Q7b3BzLSZndDtjb21taXQgJmFtcDsmYW1wOwotCQkJICAgIGxpc3RfZW1wdHkoJmFtcDt0ZS0mZ3Q7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSkpIHsKLQkJCQlsaXN0X2FkZF90YWlsKCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUsCi0JCQkJCSAgICAgICZhbXA7c2V0X3VwZGF0ZV9saXN0KTsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE5GVF9NU0dfTkVXT0JKOgogCQkJaWYgKG5mdF90cmFuc19vYmpfdXBkYXRlKHRyYW5zKSkgewpAQCAtMTExODAsNyAmIzQzOzExMTc1LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJfQogCX0KIAotCW5mdF9zZXRfY29tbWl0X3VwZGF0ZSgmYW1wO3NldF91cGRhdGVfbGlzdCk7CiYjNDM7CW5mdF9zZXRfY29tbWl0X3VwZGF0ZShuZnRfbmV0LCBmYWxzZSk7CiAKIAluZnRfY29tbWl0X25vdGlmeShuZXQsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpOwogCW5mX3RhYmxlc19nZW5fbm90aWZ5KG5ldCwgc2tiLCBORlRfTVNHX05FV0dFTik7CkBAIC0xMTI0NywxMSAmIzQzOzExMjQyLDExIEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19hYm9ydF9yZWxlYXNlKHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zKQogCWtmcmVlKHRyYW5zKTsKIH0KIAotc3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KQomIzQzO3N0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpCiB7CiAJc3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsICZhbXA7bmZ0X25ldC0mZ3Q7c2V0X3VwZGF0ZV9saXN0LCBwZW5kaW5nX3VwZGF0ZSkgewogCQlsaXN0X2RlbF9pbml0KCZhbXA7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSk7CiAKIAkJaWYgKCFzZXQtJmd0O29wcy0mZ3Q7YWJvcnQpCkBAIC0xMTM4NiwzMyAmIzQzOzExMzgxLDIyIEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbikKIAkJCW5mdF90cmFuc19kZXN0cm95KHRyYW5zKTsKIAkJCWJyZWFrOwogCQljYXNlIE5GVF9NU0dfTkVXU0VURUxFTToKJiM0MzsJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7CiAJCQlpZiAobmZ0X3RyYW5zX2VsZW1fc2V0X2JvdW5kKHRyYW5zKSkgewomIzQzOwkJCQlsaXN0X2RlbF9pbml0KCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUpOwogCQkJCW5mdF90cmFuc19kZXN0cm95KHRyYW5zKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTsKIAkJCWlmICghbmZ0X3RyYW5zX2VsZW1zX25ld19hYm9ydCgmYW1wO2N0eCwgdGUpKSB7CiAJCQkJbmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpOwogCQkJCWJyZWFrOwogCQkJfQotCi0JCQlpZiAodGUtJmd0O3NldC0mZ3Q7b3BzLSZndDthYm9ydCAmYW1wOyZhbXA7Ci0JCQkgICAgbGlzdF9lbXB0eSgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlKSkgewotCQkJCWxpc3RfYWRkX3RhaWwoJmFtcDt0ZS0mZ3Q7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSwKLQkJCQkJICAgICAgJmFtcDtzZXRfdXBkYXRlX2xpc3QpOwotCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgTkZUX01TR19ERUxTRVRFTEVNOgogCQljYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06CiAJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7CiAKIAkJCW5mdF90cmFuc19lbGVtc19kZXN0cm95X2Fib3J0KCZhbXA7Y3R4LCB0ZSk7Ci0KLQkJCWlmICh0ZS0mZ3Q7c2V0LSZndDtvcHMtJmd0O2Fib3J0ICZhbXA7JmFtcDsKLQkJCSAgICBsaXN0X2VtcHR5KCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUpKSB7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlLAotCQkJCQkgICAgICAmYW1wO3NldF91cGRhdGVfbGlzdCk7Ci0JCQl9CiAJCQluZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7CiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX05FV09CSjoKQEAgLTExNDU4LDcgJiM0MzsxMTQ0Miw3IEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbikKIAogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO25mdF9uZXQtJmd0O2NvbW1pdF9zZXRfbGlzdCkpOwogCi0JbmZ0X3NldF9hYm9ydF91cGRhdGUoJmFtcDtzZXRfdXBkYXRlX2xpc3QpOwomIzQzOwluZnRfc2V0X2Fib3J0X3VwZGF0ZShuZnRfbmV0KTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwogCkBAIC0xMjE0Miw2ICYjNDM7MTIxMjYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfdGFibGVzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO25mdF9uZXQtJmd0O2JpbmRpbmdfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZnRfbmV0LSZndDttb2R1bGVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZnRfbmV0LSZndDtub3RpZnlfbGlzdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7bmZ0X25ldC0mZ3Q7c2V0X3VwZGF0ZV9saXN0KTsKIAltdXRleF9pbml0KCZhbXA7bmZ0X25ldC0mZ3Q7Y29tbWl0X211dGV4KTsKIAluZXQtJmd0O25mdC5iYXNlX3NlcSA9IDE7CiAJbmZ0X25ldC0mZ3Q7Z2Nfc2VxID0gMDsKQEAgLTEyMTg2LDYgJiM0MzsxMjE3MSw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbmZfdGFibGVzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtuZnRfbmV0LSZndDttb2R1bGVfbGlzdCkpOwogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO25mdF9uZXQtJmd0O25vdGlmeV9saXN0KSk7CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7bmZ0X25ldC0mZ3Q7ZGVzdHJveV9saXN0KSk7CiYjNDM7CVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO25mdF9uZXQtJmd0O3NldF91cGRhdGVfbGlzdCkpOwogfQogCiBzdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jCmluZGV4IDYyMjJlOWJiNTdiYzkuLmNmNjQzZTkxNzc5MWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMKQEAgLTg5NCw2ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpCiAJc3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTsKIAlzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpyYmVfZW5kID0gTlVMTDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoJmFtcDtzZXQtJmd0O25ldCk7CiYjNDM7CXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7CiAJdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7CiAJc3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0OwogCkBAIC05MDEsNiAmIzQzOzkwMiwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCkKIAkJbmV4dCA9IHJiX25leHQobm9kZSk7CiAKIAkJcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7CiYjNDM7CQlpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoJmFtcDtyYmUtJmd0O2V4dCwgZ2VubWFzaykpIHsKJiM0MzsJCQlyYmVfZW5kID0gTlVMTDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAogCQkvKiBlbGVtZW50cyBhcmUgcmV2ZXJzZWQgaW4gdGhlIHJidHJlZSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLAogCQkgKiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlLCB0aGF0IGlzIHdoeSBlbmQgZWxlbWVudCBpcwpAQCAtMTAzNiwxMCAmIzQzOzEwNDEsMzIgQEAgc3RhdGljIHZvaWQgbmZ0X2FycmF5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCiAJX19uZnRfYXJyYXlfZnJlZShhcnJheSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqCiYjNDM7X19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpwcmV2X3JiZTsKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGUgPSAqcG5vZGU7CiYjNDM7CiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpOwomIzQzOwkJaWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKCZhbXA7cHJldl9yYmUtJmd0O2V4dCwgZ2VubWFzaykpIHsKJiM0MzsJCQlub2RlID0gcmJfcHJldihub2RlKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCSpwbm9kZSA9IG5vZGU7CiYjNDM7CQlyZXR1cm4gcHJldl9yYmU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldCkKIHsKIAlzdHJ1Y3QgbmZ0X3JidHJlZSAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpOwogCXN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZSwgKnByZXZfcmJlOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoJmFtcDtzZXQtJmd0O25ldCk7CiYjNDM7CXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7CiAJc3RydWN0IG5mdF9hcnJheSAqb2xkOwogCXUzMiBudW1faW50ZXJ2YWxzID0gMDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKQEAgLTEwNjEsMTIgJiM0MzsxMDg4LDEyIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpCiAKIAkvKiBSZXZlcnNlIHdhbGsgdG8gY3JlYXRlIGFuIGFycmF5IGZyb20gc21hbGxlciB0byBsYXJnZXN0IGludGVydmFsLiAqLwogCW5vZGUgPSByYl9sYXN0KCZhbXA7cHJpdi0mZ3Q7cm9vdCk7Ci0JaWYgKG5vZGUpCi0JCXByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7Ci0JZWxzZQotCQlwcmV2X3JiZSA9IE5VTEw7CiAKLQl3aGlsZSAocHJldl9yYmUpIHsKJiM0MzsJd2hpbGUgKG5vZGUpIHsKJiM0MzsJCXByZXZfcmJlID0gX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKCZhbXA7bm9kZSwgZ2VubWFzayk7CiYjNDM7CQlpZiAoIXByZXZfcmJlKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlyYmUgPSBwcmV2X3JiZTsKIAogCQlpZiAobmZ0X3JidHJlZV9pbnRlcnZhbF9zdGFydChyYmUpKQpAQCAtMTA4Myw3ICYjNDM7MTExMCw5IEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpCiAJCWlmICghbm9kZSkKIAkJCWJyZWFrOwogCi0JCXByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7CiYjNDM7CQlwcmV2X3JiZSA9IF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZSgmYW1wO25vZGUsIGdlbm1hc2spOwomIzQzOwkJaWYgKCFwcmV2X3JiZSkKJiM0MzsJCQlicmVhazsKIAogCQkvKiBGb3IgYW5vbnltb3VzIHNldHMsIHdoZW4gYWRqYWNlbnQgcmFuZ2VzIGFyZSBmb3VuZCwKIAkJICogdGhlIGVuZCBlbGVtZW50IGlzIG5vdCBhZGRlZCB0byB0aGUgc2V0IHRvIHBhY2sgdGhlIHNldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IE5ldGZpbHRlciYjMzk7cyBORlRhYmxlcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmZfdGFibGVzX2FwaS5jYCBhbmQgYG5mdF9zZXRfcmJ0cmVlLmNgLCBhbmQgaXQmIzM5O3MgYSBjb3JlIG5ldGZpbHRlciBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBgc2V0X3VwZGF0ZV9saXN0YCBpcyBtYW5hZ2VkLiAgSW5zdGVhZCBvZiBiZWluZyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBgbmZfdGFibGVzX2NvbW1pdGAsIGl0JiMzOTtzIGJlZW4gbW92ZWQgdG8gYG5mdGFibGVzX3Blcm5ldGAuIFRoaXMgc2hpZnQgYWxvbmUgc2NyZWFtcyBmb3IgZnV6emluZy4gIFBsdXMsIHRoZSBwYXRjaCB0b3VjaGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gLCBpbmNvcnBvcmF0aW5nIGNoZWNrcyBmb3IgZWxlbWVudCBhY3Rpdml0eSB1c2luZyBgbmZ0X3NldF9lbGVtX2FjdGl2ZWAuICBUaGVzZSBhcmUgZGVmaW5pdGVseSBwb2ludHMgb2YgaW50ZXJlc3QsIGZ1bmN0aW9uYWxseSBzcGVha2luZy4KClNvLCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6aW5nLiAgSW4gYG5mX3RhYmxlc19hcGkuY2AsIEkmIzM5O20gbG9va2luZyBhdDoKCiogICBgbmZfdGFibGVzX2NvbW1pdGAKKiAgIGBfX25mX3RhYmxlc19hYm9ydGAKKiAgIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gCiogICBgbmZ0X3NldF9jb21taXRfdXBkYXRlYAoqICAgYG5mdF9zZXRfYWJvcnRfdXBkYXRlYAoKQW5kIHRoZW4sIGluIGBuZnRfc2V0X3JidHJlZS5jYCwgd2UmIzM5O3ZlIGdvdDoKCiogICBgbmZ0X3JidHJlZV9nY19zY2FuYAoqICAgYG5mdF9yYnRyZWVfY29tbWl0YAoqICAgYF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZWAKCk5vdywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIG5vdC4gYG5mX3RhYmxlc19jb21taXRgIGlzIHRoZSBmaXJzdCBvbmUgSSYjMzk7bGwgY2hlY2suICBZdXAsIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RhdGljLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY29ycmVjdCBpbiB0aGF0IGFzc3VtcHRpb24sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19jb21taXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDI5MT1FWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjkyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAyOTM6c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0X2NoYWluX3ByZXBhcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjk0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzY4OnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAzNjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzgzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAzODQ6c3RhdGljIHZvaWQgX19uZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXMoc3RydWN0IHJjdV9oZWFkICpoKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAzODUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzkwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAzOTE6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChzdHJ1Y3QgbmZ0X3J1bGVfYmxvYiAqYmxvYilcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzkyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM5OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzk5Olx0Y2FsbF9yY3UoXHUwMDI2bGFzdC1cdTAwM2VoLCBfX25mX3RhYmxlc19jb21taXRfY2hhaW5fZnJlZV9ydWxlcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQwMC19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQwMS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDAyOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDAzLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNC1cdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoY2hhaW4tXHUwMDNlYmxvYl9nZW5fMSwgZzApO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA0MjU6XHRcdFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNi1cdFx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI3LVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjaGFpbi1cdTAwM2VibG9iX2dlbl8wLCBnMSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQyODpcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI5LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA0NDQtXHRpZiAobmV4dF9nZW5iaXQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQ0NTpcdFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQ0Ni1cdGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDQ3Olx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDQ4LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY5Nz1zdGF0aWMgdm9pZCBuZl90YWJsZXNfbW9kdWxlX2F1dG9sb2FkX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzA5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3MTA6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9yZWxlYXNlKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzExLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDc0ND1zdGF0aWMgdm9pZCBuZnRfY29tbWl0X25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3NzktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDc4MDpzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXRfYXVkaXRfYWxsb2Moc3RydWN0IGxpc3RfaGVhZCAqYWRsLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3ODEtXHRcdFx0XHRcdHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzk2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3OTc6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9mcmVlKHN0cnVjdCBsaXN0X2hlYWQgKmFkbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzk4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDgwOS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODEwOnN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9lbnRyeWNvdW50KGNvbnN0IHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODIwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MjE6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9jb2xsZWN0KHN0cnVjdCBsaXN0X2hlYWQgKmFkbCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODIyLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucywgdTMyIG9wKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODMzLWZvdW5kOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MzQ6XHRhZHAtXHUwMDNlZW50cmllcyAmIzQzOz0gbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9lbnRyeWNvdW50KHRyYW5zKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODM1LVx0aWYgKCFhZHAtXHUwMDNlb3AgfHwgYWRwLVx1MDAzZW9wIFx1MDAzZSBvcClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg0MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODQxOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCwgdTMyIGdlbmVyYXRpb24pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg0Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4ODQ9c3RhdGljIHZvaWQgbmZ0X2djX3NlcV9lbmQoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgdW5zaWduZWQgaW50IGdjX3NlcSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODg5OnN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg5MC17XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NDktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MDpcdFx0cmV0ID0gbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9hbGxvYyhcdTAwMjZhZGwsIHRhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTUxLVx0XHRpZiAocmV0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MjpcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX3ByZXBhcmVfY2FuY2VsKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MzpcdFx0XHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2ZyZWUoXHUwMDI2YWRsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTU0LVx0XHRcdHJldHVybiByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NTktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk2MDpcdFx0XHRyZXQgPSBuZl90YWJsZXNfY29tbWl0X2NoYWluX3ByZXBhcmUobmV0LCBjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk2MS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk2MjpcdFx0XHRcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTYzOlx0XHRcdFx0bmZfdGFibGVzX2NvbW1pdF9hdWRpdF9mcmVlKFx1MDAyNmFkbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk2NC1cdFx0XHRcdHJldHVybiByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NzMtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFx1MDAyNnRhYmxlLVx1MDAzZWNoYWlucywgbGlzdClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTc0Olx0XHRcdG5mX3RhYmxlc19jb21taXRfY2hhaW4obmV0LCBjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk3NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk5Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTk4Olx0XHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2NvbGxlY3QoXHUwMDI2YWRsLCB0cmFucywgdHJhbnMtXHUwMDNlbXNnX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5OTktXHRcdHN3aXRjaCAodHJhbnMtXHUwMDNlbXNnX3R5cGUpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTE4MS1cdG5mX3RhYmxlc19nZW5fbm90aWZ5KG5ldCwgc2tiLCBORlRfTVNHX05FV0dFTik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTE4MjpcdG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKFx1MDAyNmFkbCwgbmZ0X2Jhc2Vfc2VxKG5ldCkpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODMtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODUtXHRuZnRfbmV0LVx1MDAzZXZhbGlkYXRlX3N0YXRlID0gTkZUX1ZBTElEQVRFX1NLSVA7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTE4NjpcdG5mX3RhYmxlc19jb21taXRfcmVsZWFzZShuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODctXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5mX3RhYmxlc19zdWJzeXMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1MTEtXHQuY2JcdFx0PSBuZl90YWJsZXNfY2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTUxMjpcdC5jb21taXRcdFx0PSBuZl90YWJsZXNfY29tbWl0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1MTMtXHQuYWJvcnRcdFx0PSBuZl90YWJsZXNfYWJvcnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBOZXRsaW5rIFRyYW5zYWN0aW9uIEVudHJ5IFBvaW50cyBpbiBgbmZfdGFibGVzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mX3RhYmxlc19jb21taXRgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBlbnRyeSBwb2ludHMgZm9yIG5ldGxpbmsgdHJhbnNhY3Rpb25zLiBCdXQgdGhlbiBJIHJlbWVtYmVyIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYG5mX3RhYmxlc19zdWJzeXNgIGFzIGAuY29tbWl0ID0gbmZfdGFibGVzX2NvbW1pdGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LiBUaGUgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucy4gSG93ZXZlciwgYG5mX3RhYmxlc19jb21taXRgIGlzIGNsZWFybHkgYSAqbWFzc2l2ZSogZnVuY3Rpb24uIFRoZSBjb21waWxlciBkZWZpbml0ZWx5IHdvbiYjMzk7dCBiZSBpbmxpbmluZyB0aGF0LiBJdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBwb2ludCBvZiBlbnRyeSwgd2hpY2ggbWFrZXMgdGhlIHN0YXRpYyBkZWNsYXJhdGlvbiBsZXNzIGNvbmNlcm5pbmcsIGJ1dCBJIHN0aWxsIHdhbnQgdG8gY2hlY2suIE1heWJlIHRoZXJlJiMzOTtzIGEgYmV0dGVyIG9wdGlvbiBsaWtlIGBuZm5ldGxpbmtfcmN2X2JhdGNoYCBJIGNvdWxkIGJlIHVzaW5nPyBObywgYG5mX3RhYmxlc19jb21taXRgIGlzIGZpbmUsIGdpdmVuIHRoYXQgaXQgaXMgKm5vdCogaW5saW5lZC4KCkp1c3QgdG8gYmUgc3VyZSwgbGV0JiMzOTtzIGxvb2sgYXQgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIFl1cCwgdGhhdCYjMzk7cyBzdGF0aWMuIE9rYXksIHNvIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGEgdGhpbmcuIEJ1dCBpcyB0aGVyZSBhbm90aGVyICpub24tc3RhdGljKiBmdW5jdGlvbiBpbiB0aGUgdmljaW5pdHk/IExldCYjMzk7cyBjaGVjayBgbmZ0X3NldF9yYnRyZWUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3JidHJlZV9jb21taXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwNDU9X19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwNjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6MTA2NDpzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2NvbW1pdChzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwNjUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0xMjA5PWNvbnN0IHN0cnVjdCBuZnRfc2V0X3R5cGUgbmZ0X3NldF9yYnRyZWVfdHlwZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTIyMS1cdFx0LmFjdGl2YXRlXHQ9IG5mdF9yYnRyZWVfYWN0aXZhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6MTIyMjpcdFx0LmNvbW1pdFx0XHQ9IG5mdF9yYnRyZWVfY29tbWl0LFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEyMjMtXHRcdC5hYm9ydFx0XHQ9IG5mdF9yYnRyZWVfYWJvcnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5GVGFibGVzIFJCLVRyZWUgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiAqbmZ0X3JidHJlZV9jb21taXQqIGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBmYWlybHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlcnMuIEJ1dCwgYW5kIHRoaXMgaXMgYSBrZXkgcG9pbnQsIGl0JiMzOTtzICpyZWdpc3RlcmVkKiB2aWEgYG5mdF9zZXRfcmJ0cmVlX3R5cGVgLiBUaGF0JiMzOTtzIGhvdyBpdCBnZXRzIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIE5GVGFibGVzIGZyYW1ld29yay4gU28gaXQmIzM5O3MgZWZmZWN0aXZlbHkgJiMzNDtwdWJsaWMmIzM0OyBpbiB0ZXJtcyBvZiBiZWluZyB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGV2ZW4gaWYgaXRzIGRlZmluaXRpb24gaXMga2VwdCB3aXRoaW4gdGhlIGZpbGUuIEdvb2QuIFRoYXQgZGVzaWduIGRlY2lzaW9uIG1ha2VzIHNlbnNlIHRvIG1lLiBLZWVwcyB0aGluZ3MgY2xlYW4uCgpOb3csIHRoYXQgbGVhZHMgbWUgdG8gd29uZGVyIGFib3V0IGl0cyBjb3VudGVycGFydCBpbiBnYXJiYWdlIGNvbGxlY3Rpb24uICpuZnRfcmJ0cmVlX2djX3NjYW4qLi4uIGlzIGl0IHJlZ2lzdGVyZWQgYW55d2hlcmUgbGlrZSBgbmZ0X3JidHJlZV9jb21taXRgPyBJcyBpdCBhbHNvIHN0YXRpYyBidXQgcGFydCBvZiBhIHJlZ2lzdHJhdGlvbj8gT3IgaXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gc29tZXdoZXJlIGVsc2U/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21taXQgYW5kIGdjIGFuZCBjb25maXJtIHRoaXMuIEEgcXVpY2sgbG9vayBhdCB0aGUgc291cmNlIHdvdWxkIHJldmVhbCB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgdGhlIG92ZXJhbGwgZGVzaWduLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgYXJlIG5vcm1hbGx5IGFzc29jaWF0ZWQgd2l0aCBnYXJiYWdlIGNvbGxlY3Rpb24gaW4gUkItdHJlZXMsIGFuZCBJIG5lZWQgdG8gZXN0YWJsaXNoIGlmIGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkIGhlcmUuIFRoYXQgd291bGQgYmUgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcmJ0cmVlX2djX3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg2Mj1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX3dhbGsoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODkxLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjg5MjpzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0xMDY0PXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwODYtXHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBwcml2LVx1MDAzZWxhc3RfZ2MgJiM0MzsgbmZ0X3NldF9nY19pbnRlcnZhbChzZXQpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzoxMDg3Olx0XHRuZnRfcmJ0cmVlX2djX3NjYW4oc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMDg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJhbnNhY3Rpb25hbCBDb21taXQgYW5kIEFib3J0IFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZXNlIHRyYW5zYWN0aW9ucyBhcmUgY29tbWl0dGVkIGFuZCBhYm9ydGVkIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgcmJ0cmVlLiBUaGlzIHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIGJvdGggYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2NgLCBpbnRlcmVzdGluZy4uLiBhbmQgSSBzZWUgdGhhdCBgbmZ0X3JidHJlZV9jb21taXRgIGlzLCBpbiBmYWN0LCBkZWNsYXJlZCBhcyBzdGF0aWMuIAoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBjYW4gSSBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgYG5mX3RhYmxlc19jb21taXRgIGFuZCBgX19uZl90YWJsZXNfYWJvcnRgIGZvciB0aGlzPyBUaGVzZSBzZWVtIGxpa2UgbG9naWNhbCBjYW5kaWRhdGVzLiBPa2F5LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkuLi4gWXVwLCBib3RoIGBuZl90YWJsZXNfY29tbWl0YCBhbmQgYG5mX3RhYmxlc19hYm9ydGAgYXJlIGFsc28gc3RhdGljLiBIbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcuCgpXYWl0IGEgc2Vjb25kLi4uIGl0JiMzOTtzIGBuZm5ldGxpbmtfcmN2X2JhdGNoYCB0aGF0IHVsdGltYXRlbHkgaW52b2tlcyB0aGUgY29tbWl0IGFuZCBhYm9ydCBmdW5jdGlvbnMgdGhyb3VnaCBgLmNvbW1pdGAgYW5kIGAuYWJvcnRgIGNhbGxzLiBPa2F5LCB0aGF0IG1ha2VzIG1vcmUgc2Vuc2UgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MhIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmZuZXRsaW5rLmNgIG5vdywgc28gSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5ldGxpbmtfcmN2X2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jPTM2Mz1lbnVtIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTM2OC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM6MzY5OnN0YXRpYyB2b2lkIG5mbmV0bGlua19yY3ZfYmF0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTM3MC1cdFx0XHRcdHUxNiBzdWJzeXNfaWQsIHUzMiBnZW5pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jPTYxMj1zdGF0aWMgdm9pZCBuZm5ldGxpbmtfcmN2X3NrYl9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTY0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM6NjQ3Olx0bmZuZXRsaW5rX3Jjdl9iYXRjaChza2IsIG5saCwgcmVzX2lkLCBnZW5faWQpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYy02NDgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgVGFibGUgQ29tbWl0IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGVudHJ5IHBvaW50cyBmb3IgbmV0ZmlsdGVyIHRhYmxlIG9wZXJhdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGEgc2ltcGxlIGxpc3Qg4oCTIGBuZl90YWJsZXNfY29tbWl0YCwgYF9fbmZfdGFibGVzX2Fib3J0YCwgYG5mdF9yYnRyZWVfY29tbWl0YCwgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIOKAkyB3b3VsZCBzdWZmaWNlLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBsaW5rZXIgbmVlZHMgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgdGhlc2UgZnVuY3Rpb25zLgoKYG5mX3RhYmxlc19jb21taXRgIGlzIHF1aXRlIHN1YnN0YW50aWFsLCB3aGljaCBtYWtlcyBpdCB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3aWxsIGlubGluZSBpdC4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCBleHBvcnRlZCBvciBkZWZpbmVkIHNvbWV3aGVyZS4gSXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gSSBuZWVkIHRvIGZpbmQgc29tZSBub24tc3RhdGljIGFsdGVybmF0aXZlIGluIGBuZl90YWJsZXNfYXBpLmNgLiBIbW0sIHdoYXQgYWJvdXQgYG5mX3RhYmxlc190cmFuc19kZXN0cm95X2ZsdXNoX3dvcmtgPyBOb3BlLiBUaGF0JiMzOTtzIG5vdCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50LgoKR2l2ZW4gdGhhdCwgSSYjMzk7bGwgc3RpY2sgd2l0aCBteSBpbml0aWFsIGFzc2Vzc21lbnQ6IGBuZl90YWJsZXNfY29tbWl0YCwgYF9fbmZfdGFibGVzX2Fib3J0YCwgYG5mdF9yYnRyZWVfY29tbWl0YCwgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHNlZW0gdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAgYW5kIGBuZnRfc2V0X2Fib3J0X3VwZGF0ZWAgc2luY2UgdGhleSYjMzk7cmUgcmVsYXRlZC4gRmluYWxseSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBgbmZfdGFibGVzYCBmZWF0dXJlIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9UQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cdGRlcGVuZHMgb24gSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE5ldGZpbHRlciBzdHVmZiwgYW5kIEkgc2VlIGBORl9UQUJMRVNgIGluIHRoZSBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4gQnV0IHdhaXQgYSBtaW51dGUsIEkmIzM5O20ganVzdCBsb29raW5nIGF0IGBuZnRfc2V0X3JidHJlZWAsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSBrZXkgY29tcG9uZW50IG9mIE5ldGZpbHRlciYjMzk7cyBzZXQgZnVuY3Rpb25hbGl0eS4gU28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVwZW5kZW5jeS4gSSB0aGluayBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG5mdF9zZXRfcmJ0cmVlYCBpcyBhY3R1YWxseSBsaW5rZWQgaW50byBgTkZfVEFCTEVTYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIE9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBjb25maXJtLCBvciBjb3JyZWN0LCBteSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9yYnRyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05Mi1cdFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkzOlx0XHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05NC1cdFx0ICBuZnRfc2V0X3BpcGFwby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDk4CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIG5mX3RhYmxlcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGBuZl90YWJsZXNgLiBUaGF0JiMzOTtzIGJ1aWx0IGludG8gYG5mX3RhYmxlc2AsIHNvIGVuYWJsaW5nIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGBORl9UQUJMRVNgLCBpcyB0aGUga2V5LiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeS4uLiB5ZXAsIGBORl9UQUJMRVNgIGl0c2VsZiBoYXMgZGVwZW5kZW5jaWVzIG9uIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX05FVExJTktgLCBidXQgZW5hYmxpbmcgYE5GX1RBQkxFU2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlc2UgZGVwZW5kZW5jaWVzLiBHb29kLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEl0IHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBob3cgc2V0IHVwZGF0ZXMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBgbmZfdGFibGVzYCBmcmFtZXdvcmsuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIGBzZXRfdXBkYXRlX2xpc3RgIGZyb20gYSBsb2NhbCB2YXJpYWJsZSB3aXRoaW4gYG5mX3RhYmxlc19jb21taXRgIGFuZCBgX19uZl90YWJsZXNfYWJvcnRgIHRvIHRoZSBgbmZ0YWJsZXNfcGVybmV0YCBzdHJ1Y3QuIFRoaXMgaXMgcGVyLW5ldCBuYW1lc3BhY2UsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgYWJvdXQgcGVyc2lzdGVuY2UsIG9yIHBlcmhhcHMgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gb3IgbWVtb3J5IGlzc3VlLiBUaGUgZGVzY3JpcHRpb24gc3VnZ2VzdHMgaXQgYWRkcyBgc2V0X3VwZGF0ZV9saXN0YCB0byBgbmZ0YWJsZXNfcGVybmV0YC4KClJpZ2h0LCBJIHNlZSBpdCBub3cuIEluIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gLCB0aGUgc2V0IGlzIGFkZGVkIHRvIGBuZnRfbmV0LSZndDtzZXRfdXBkYXRlX2xpc3RgIGlmIGl0JiMzOTtzIG5vdCBhbHJlYWR5IHRoZXJlLiBUaGVuLCBgbmZfdGFibGVzX2NvbW1pdGAgY2FsbHMgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZShuZnRfbmV0LCB0cnVlKWAgYmVmb3JlIHRoZSB0YWJsZSBsb29wIGFuZCB0aGVuIGBuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgZmFsc2UpYCBhZnRlci4gVGhpcyBjaGFuZ2VzIGhvdyBzZXQgdXBkYXRlcyBhcmUgY29tbWl0dGVkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBzZXQgdXBkYXRlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdHJhbnNhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgcmFjZSBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZm9jdXMgb24gdGhvc2Uga2V5IHN5bWJvbHMgaW4gYW55IGFuYWx5c2lzIG9mIHRoZSBjb2RlOiBgbmZfdGFibGVzX2NvbW1pdGAsIGBfX25mX3RhYmxlc19hYm9ydGAsIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCBgbmZ0X3JidHJlZV9jb21taXRgLCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAuCgpMZXQgbWUgY2hlY2sgcXVpY2tseSB0byBzZWUgaWYgYW55IG9mIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLi4uIFl1cCwgYm90aCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYCBhbmQgYG5mX3RhYmxlc19jb21taXRgIGFyZSBzdGF0aWMuIFNvIEkgd2lsbCBrZWVwIHRob3NlIGluIG1pbmQuCgpNeSBmaW5hbCB0aG91Z2h0OiB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtfX25mX3RhYmxlc19hYm9ydCYjMzQ7LAogICAgJiMzNDtuZnRfc2V0X2NvbW1pdF91cGRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3JidHJlZV9jb21taXQmIzM0OywKICAgICYjMzQ7bmZ0X3JidHJlZV9nY19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfY29tbWl0JiMzNDssCiAgICAmIzM0O19fbmZfdGFibGVzX2Fib3J0JiMzNDssCiAgICAmIzM0O25mdF9zZXRfY29tbWl0X3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2djX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NDo0Mi44OTA1NDMwMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ4MDAyMzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfY29tbWl0XCIsXG4gICAgXCJfX25mX3RhYmxlc19hYm9ydFwiLFxuICAgIFwibmZ0X3NldF9jb21taXRfdXBkYXRlXCIsXG4gICAgXCJuZnRfcmJ0cmVlX2NvbW1pdFwiLFxuICAgIFwibmZ0X3JidHJlZV9nY19zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU0OjQyLjg5MDU0OTYzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzE4NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmRjNzg1Mzg5N2VlMDgzMzQyZjM5ZDViOTVkMWViODNkYzk0MjIyZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjU0OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxcbmluZGV4IDNiZTYxMjE0NWMxMzAuLjIzOGY2ZWNiOTBlOTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuQEAgLTE5NDksNiArMTk0OSw3IEBAIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0YmluZGluZ19saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bW9kdWxlX2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRub3RpZnlfbGlzdDtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdHNldF91cGRhdGVfbGlzdDtcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0Y29tbWl0X211dGV4O1xcbiBcXHR1NjRcXHRcXHRcXHR0YWJsZV9oYW5kbGU7XFxuIFxcdHU2NFxcdFxcdFxcdHRzdGFtcDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbmluZGV4IGFmMzU3ZjZjNTA3MGIuLmE3MDA2NzI1YzMwNzUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbkBAIC01OTUsMTAgKzU5NSwxNSBAQCBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX3RhaWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0clxcbiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xcbitcXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlO1xcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKHRyYW5zLVxcdTAwM2Vtc2dfdHlwZSAhPSBORlRfTVNHX05FV1NFVEVMRU0gXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICB0cmFucy1cXHUwMDNlbXNnX3R5cGUgIT0gTkZUX01TR19ERUxTRVRFTEVNKTtcXG4gXFxuK1xcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcXG4rXFx0aWYgKHRlLVxcdTAwM2VzZXQtXFx1MDAzZW9wcy1cXHUwMDNlY29tbWl0IFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlKSlcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUsIFxcdTAwMjZuZnRfbmV0LVxcdTAwM2VzZXRfdXBkYXRlX2xpc3QpO1xcbitcXG4gXFx0aWYgKG5mdF90cmFuc190cnlfY29sbGFwc2UobmZ0X25ldCwgdHJhbnMpKSB7XFxuIFxcdFxcdGtmcmVlKHRyYW5zKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMDg0OCwxMSArMTA4NTMsMTQgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9sb2coc3RydWN0IGxpc3RfaGVhZCAqYWRsLCB1MzIgZ2VuZXJhdGlvbilcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxcbitzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgYm9vbCBlYXJseV9jb21taXQpXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIFxcdTAwMjZuZnRfbmV0LVxcdTAwM2VzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XFxuK1xcdFxcdGlmIChzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWJvcnRfc2tpcF9yZW1vdmFsIFxcdTAwMjZcXHUwMDI2IGVhcmx5X2NvbW1pdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlKTtcXG4gXFxuIFxcdFxcdGlmICghc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWNvbW1pdCB8fCBzZXQtXFx1MDAzZWRlYWQpXFxuQEAgLTEwODg1LDcgKzEwODkzLDYgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IG5mdF90cmFuc19iaW5kaW5nICp0cmFuc19iaW5kaW5nO1xcbiBcXHRzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucywgKm5leHQ7XFxuIFxcdHVuc2lnbmVkIGludCBiYXNlX3NlcSwgZ2Nfc2VxO1xcbi1cXHRMSVNUX0hFQUQoc2V0X3VwZGF0ZV9saXN0KTtcXG4gXFx0c3RydWN0IG5mdF90cmFuc19lbGVtICp0ZTtcXG4gXFx0c3RydWN0IG5mdF9jaGFpbiAqY2hhaW47XFxuIFxcdHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlO1xcbkBAIC0xMDk2MCw2ICsxMDk2Nyw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIHN0ZXAgMi4gIE1ha2UgcnVsZXNfZ2VuX1ggdmlzaWJsZSB0byBwYWNrZXQgcGF0aCAqL1xcbitcXHRuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgdHJ1ZSk7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhYmxlLCBcXHUwMDI2bmZ0X25ldC1cXHUwMDNldGFibGVzLCBsaXN0KSB7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFxcdTAwMjZ0YWJsZS1cXHUwMDNlY2hhaW5zLCBsaXN0KVxcbiBcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2NoYWluKG5ldCwgY2hhaW4pO1xcbkBAIC0xMTA5MSwyNyArMTExMDAsMTMgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ORVdTRVRFTEVNOlxcbiBcXHRcXHRcXHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XFxuLVxcbiBcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbXNfYWRkKFxcdTAwMjZjdHgsIHRlKTtcXG4tXFxuLVxcdFxcdFxcdGlmICh0ZS1cXHUwMDNlc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWNvbW1pdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIE5GVF9NU0dfREVMU0VURUxFTTpcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFU1RST1lTRVRFTEVNOlxcbiBcXHRcXHRcXHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XFxuLVxcbiBcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbXNfcmVtb3ZlKFxcdTAwMjZjdHgsIHRlKTtcXG4tXFxuLVxcdFxcdFxcdGlmICh0ZS1cXHUwMDNlc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWNvbW1pdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX05FV09CSjpcXG4gXFx0XFx0XFx0aWYgKG5mdF90cmFuc19vYmpfdXBkYXRlKHRyYW5zKSkge1xcbkBAIC0xMTE4MCw3ICsxMTE3NSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0bmZ0X3NldF9jb21taXRfdXBkYXRlKFxcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xcbitcXHRuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgZmFsc2UpO1xcbiBcXG4gXFx0bmZ0X2NvbW1pdF9ub3RpZnkobmV0LCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcXG4gXFx0bmZfdGFibGVzX2dlbl9ub3RpZnkobmV0LCBza2IsIE5GVF9NU0dfTkVXR0VOKTtcXG5AQCAtMTEyNDcsMTEgKzExMjQyLDExIEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19hYm9ydF9yZWxlYXNlKHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zKVxcbiBcXHRrZnJlZSh0cmFucyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBsaXN0X2hlYWQgKnNldF91cGRhdGVfbGlzdClcXG4rc3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0X3NldCAqc2V0LCAqbmV4dDtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIHNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNldCwgbmV4dCwgXFx1MDAyNm5mdF9uZXQtXFx1MDAzZXNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcXG4gXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2c2V0LVxcdTAwM2VwZW5kaW5nX3VwZGF0ZSk7XFxuIFxcbiBcXHRcXHRpZiAoIXNldC1cXHUwMDNlb3BzLVxcdTAwM2VhYm9ydClcXG5AQCAtMTEzODYsMzMgKzExMzgxLDIyIEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcXG4gXFx0XFx0XFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX05FV1NFVEVMRU06XFxuK1xcdFxcdFxcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcXG4gXFx0XFx0XFx0aWYgKG5mdF90cmFuc19lbGVtX3NldF9ib3VuZCh0cmFucykpIHtcXG4rXFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpO1xcbiBcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcXG4gXFx0XFx0XFx0aWYgKCFuZnRfdHJhbnNfZWxlbXNfbmV3X2Fib3J0KFxcdTAwMjZjdHgsIHRlKSkge1xcbiBcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAodGUtXFx1MDAzZXNldC1cXHUwMDNlb3BzLVxcdTAwM2VhYm9ydCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFTFNFVEVMRU06XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VURUxFTTpcXG4gXFx0XFx0XFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xcbiBcXG4gXFx0XFx0XFx0bmZ0X3RyYW5zX2VsZW1zX2Rlc3Ryb3lfYWJvcnQoXFx1MDAyNmN0eCwgdGUpO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHRlLVxcdTAwM2VzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWJvcnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlKSkge1xcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZ0ZS1cXHUwMDNlc2V0LVxcdTAwM2VwZW5kaW5nX3VwZGF0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX05FV09CSjpcXG5AQCAtMTE0NTgsNyArMTE0NDIsNyBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWNvbW1pdF9zZXRfbGlzdCkpO1xcbiBcXG4tXFx0bmZ0X3NldF9hYm9ydF91cGRhdGUoXFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XFxuK1xcdG5mdF9zZXRfYWJvcnRfdXBkYXRlKG5mdF9uZXQpO1xcbiBcXG4gXFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcbkBAIC0xMjE0Miw2ICsxMjEyNiw3IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl90YWJsZXNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmZ0X25ldC1cXHUwMDNlYmluZGluZ19saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZW1vZHVsZV9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZW5vdGlmeV9saXN0KTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZXNldF91cGRhdGVfbGlzdCk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWNvbW1pdF9tdXRleCk7XFxuIFxcdG5ldC1cXHUwMDNlbmZ0LmJhc2Vfc2VxID0gMTtcXG4gXFx0bmZ0X25ldC1cXHUwMDNlZ2Nfc2VxID0gMDtcXG5AQCAtMTIxODYsNiArMTIxNzEsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG5mX3RhYmxlc19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bmZ0X25ldC1cXHUwMDNlbW9kdWxlX2xpc3QpKTtcXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZuZnRfbmV0LVxcdTAwM2Vub3RpZnlfbGlzdCkpO1xcbiBcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWRlc3Ryb3lfbGlzdCkpO1xcbitcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZXNldF91cGRhdGVfbGlzdCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcXG5pbmRleCA2MjIyZTliYjU3YmM5Li5jZjY0M2U5MTc3OTFhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xcbkBAIC04OTQsNiArODk0LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIFxcdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XFxuIFxcdHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZSwgKnJiZV9lbmQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG4rXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG4gXFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxuIFxcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDtcXG4gXFxuQEAgLTkwMSw2ICs5MDIsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIFxcdFxcdG5leHQgPSByYl9uZXh0KG5vZGUpO1xcbiBcXG4gXFx0XFx0cmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XFxuK1xcdFxcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2cmJlLVxcdTAwM2VleHQsIGdlbm1hc2spKSB7XFxuK1xcdFxcdFxcdHJiZV9lbmQgPSBOVUxMO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogZWxlbWVudHMgYXJlIHJldmVyc2VkIGluIHRoZSByYnRyZWUgZm9yIGhpc3RvcmljYWwgcmVhc29ucyxcXG4gXFx0XFx0ICogZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCB2YWx1ZSwgdGhhdCBpcyB3aHkgZW5kIGVsZW1lbnQgaXNcXG5AQCAtMTAzNiwxMCArMTA0MSwzMiBAQCBzdGF0aWMgdm9pZCBuZnRfYXJyYXlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZClcXG4gXFx0X19uZnRfYXJyYXlfZnJlZShhcnJheSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpcXG4rX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spXFxuK3tcXG4rXFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcHJldl9yYmU7XFxuK1xcdHN0cnVjdCByYl9ub2RlICpub2RlID0gKnBub2RlO1xcbitcXG4rXFx0d2hpbGUgKG5vZGUpIHtcXG4rXFx0XFx0cHJldl9yYmUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtLCBub2RlKTtcXG4rXFx0XFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZwcmV2X3JiZS1cXHUwMDNlZXh0LCBnZW5tYXNrKSkge1xcbitcXHRcXHRcXHRub2RlID0gcmJfcHJldihub2RlKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdCpwbm9kZSA9IG5vZGU7XFxuK1xcdFxcdHJldHVybiBwcmV2X3JiZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTtcXG4gXFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcmJlLCAqcHJldl9yYmU7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbitcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbiBcXHRzdHJ1Y3QgbmZ0X2FycmF5ICpvbGQ7XFxuIFxcdHUzMiBudW1faW50ZXJ2YWxzID0gMDtcXG4gXFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XFxuQEAgLTEwNjEsMTIgKzEwODgsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG4gXFxuIFxcdC8qIFJldmVyc2Ugd2FsayB0byBjcmVhdGUgYW4gYXJyYXkgZnJvbSBzbWFsbGVyIHRvIGxhcmdlc3QgaW50ZXJ2YWwuICovXFxuIFxcdG5vZGUgPSByYl9sYXN0KFxcdTAwMjZwcml2LVxcdTAwM2Vyb290KTtcXG4tXFx0aWYgKG5vZGUpXFxuLVxcdFxcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cHJldl9yYmUgPSBOVUxMO1xcbiBcXG4tXFx0d2hpbGUgKHByZXZfcmJlKSB7XFxuK1xcdHdoaWxlIChub2RlKSB7XFxuK1xcdFxcdHByZXZfcmJlID0gX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKFxcdTAwMjZub2RlLCBnZW5tYXNrKTtcXG4rXFx0XFx0aWYgKCFwcmV2X3JiZSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRyYmUgPSBwcmV2X3JiZTtcXG4gXFxuIFxcdFxcdGlmIChuZnRfcmJ0cmVlX2ludGVydmFsX3N0YXJ0KHJiZSkpXFxuQEAgLTEwODMsNyArMTExMCw5IEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIFxcdFxcdGlmICghbm9kZSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpO1xcbitcXHRcXHRwcmV2X3JiZSA9IF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShcXHUwMDI2bm9kZSwgZ2VubWFzayk7XFxuK1xcdFxcdGlmICghcHJldl9yYmUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LyogRm9yIGFub255bW91cyBzZXRzLCB3aGVuIGFkamFjZW50IHJhbmdlcyBhcmUgZm91bmQsXFxuIFxcdFxcdCAqIHRoZSBlbmQgZWxlbWVudCBpcyBub3QgYWRkZWQgdG8gdGhlIHNldCB0byBwYWNrIHRoZSBzZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTQ6NDMuMzQyNjMxNzAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQwMjc5MjQwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICAgIFwiX19uZl90YWJsZXNfYWJvcnRcIixcbiAgICBcIm5mdF9zZXRfY29tbWl0X3VwZGF0ZVwiLFxuICAgIFwibmZ0X3JidHJlZV9jb21taXRcIixcbiAgICBcIm5mdF9yYnRyZWVfZ2Nfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGM3ODUzODk3ZWUwODMzNDJmMzlkNWI5NWQxZWI4M2RjOTQyMjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxNDo1NDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggM2JlNjEyMTQ1YzEzMC4uMjM4ZjZlY2I5MGU5OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtMTk0OSw2ICsxOTQ5LDcgQEAgc3RydWN0IG5mdGFibGVzX3Blcm5ldCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRiaW5kaW5nX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRtb2R1bGVfbGlzdDtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdG5vdGlmeV9saXN0O1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0c2V0X3VwZGF0ZV9saXN0O1xuIFx0c3RydWN0IG11dGV4XHRcdGNvbW1pdF9tdXRleDtcbiBcdHU2NFx0XHRcdHRhYmxlX2hhbmRsZTtcbiBcdHU2NFx0XHRcdHRzdGFtcDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBhZjM1N2Y2YzUwNzBiLi5hNzAwNjcyNWMzMDc1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtNTk1LDEwICs1OTUsMTUgQEAgc3RhdGljIHZvaWQgbmZ0X3RyYW5zX2NvbW1pdF9saXN0X2FkZF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90cmFucyAqdHJcbiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcbiB7XG4gXHRzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xuK1x0c3RydWN0IG5mdF90cmFuc19lbGVtICp0ZTtcbiBcbiBcdFdBUk5fT05fT05DRSh0cmFucy1cdTAwM2Vtc2dfdHlwZSAhPSBORlRfTVNHX05FV1NFVEVMRU0gXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgdHJhbnMtXHUwMDNlbXNnX3R5cGUgIT0gTkZUX01TR19ERUxTRVRFTEVNKTtcbiBcbitcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbitcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdCBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKVxuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSwgXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpO1xuK1xuIFx0aWYgKG5mdF90cmFuc190cnlfY29sbGFwc2UobmZ0X25ldCwgdHJhbnMpKSB7XG4gXHRcdGtmcmVlKHRyYW5zKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTEwODQ4LDExICsxMDg1MywxNCBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2xvZyhzdHJ1Y3QgbGlzdF9oZWFkICphZGwsIHUzMiBnZW5lcmF0aW9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxuK3N0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0LCBib29sIGVhcmx5X2NvbW1pdClcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldCAqc2V0LCAqbmV4dDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIHNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIFx1MDAyNm5mdF9uZXQtXHUwMDNlc2V0X3VwZGF0ZV9saXN0LCBwZW5kaW5nX3VwZGF0ZSkge1xuK1x0XHRpZiAoc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydF9za2lwX3JlbW92YWwgXHUwMDI2XHUwMDI2IGVhcmx5X2NvbW1pdClcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFxuIFx0XHRpZiAoIXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0IHx8IHNldC1cdTAwM2VkZWFkKVxuQEAgLTEwODg1LDcgKzEwODkzLDYgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBuZnRfdHJhbnNfYmluZGluZyAqdHJhbnNfYmluZGluZztcbiBcdHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGludCBiYXNlX3NlcSwgZ2Nfc2VxO1xuLVx0TElTVF9IRUFEKHNldF91cGRhdGVfbGlzdCk7XG4gXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlO1xuIFx0c3RydWN0IG5mdF9jaGFpbiAqY2hhaW47XG4gXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbkBAIC0xMDk2MCw2ICsxMDk2Nyw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHQvKiBzdGVwIDIuICBNYWtlIHJ1bGVzX2dlbl9YIHZpc2libGUgdG8gcGFja2V0IHBhdGggKi9cbitcdG5mdF9zZXRfY29tbWl0X3VwZGF0ZShuZnRfbmV0LCB0cnVlKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGFibGUsIFx1MDAyNm5mdF9uZXQtXHUwMDNldGFibGVzLCBsaXN0KSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFx1MDAyNnRhYmxlLVx1MDAzZWNoYWlucywgbGlzdClcbiBcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluKG5ldCwgY2hhaW4pO1xuQEAgLTExMDkxLDI3ICsxMTEwMCwxMyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfTkVXU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4tXG4gXHRcdFx0bmZ0X3RyYW5zX2VsZW1zX2FkZChcdTAwMjZjdHgsIHRlKTtcbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2Vjb21taXQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlKSkge1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4tXHRcdFx0fVxuIFx0XHRcdG5mdF90cmFuc19kZXN0cm95KHRyYW5zKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX0RFTFNFVEVMRU06XG4gXHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4tXG4gXHRcdFx0bmZ0X3RyYW5zX2VsZW1zX3JlbW92ZShcdTAwMjZjdHgsIHRlKTtcbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2Vjb21taXQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlKSkge1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4tXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfTkVXT0JKOlxuIFx0XHRcdGlmIChuZnRfdHJhbnNfb2JqX3VwZGF0ZSh0cmFucykpIHtcbkBAIC0xMTE4MCw3ICsxMTE3NSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG5mdF9zZXRfY29tbWl0X3VwZGF0ZShcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuK1x0bmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIGZhbHNlKTtcbiBcbiBcdG5mdF9jb21taXRfbm90aWZ5KG5ldCwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXHRuZl90YWJsZXNfZ2VuX25vdGlmeShuZXQsIHNrYiwgTkZUX01TR19ORVdHRU4pO1xuQEAgLTExMjQ3LDExICsxMTI0MiwxMSBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfYWJvcnRfcmVsZWFzZShzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcbiBcdGtmcmVlKHRyYW5zKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxuK3N0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpXG4ge1xuIFx0c3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBcdTAwMjZuZnRfbmV0LVx1MDAzZXNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFxuIFx0XHRpZiAoIXNldC1cdTAwM2VvcHMtXHUwMDNlYWJvcnQpXG5AQCAtMTEzODYsMzMgKzExMzgxLDIyIEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ORVdTRVRFTEVNOlxuK1x0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAobmZ0X3RyYW5zX2VsZW1fc2V0X2JvdW5kKHRyYW5zKSkge1xuK1x0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFx0XHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuLVx0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAoIW5mdF90cmFuc19lbGVtc19uZXdfYWJvcnQoXHUwMDI2Y3R4LCB0ZSkpIHtcbiBcdFx0XHRcdG5mdF90cmFuc19kZXN0cm95KHRyYW5zKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XG4tXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcbi1cdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuIFxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19kZXN0cm95X2Fib3J0KFx1MDAyNmN0eCwgdGUpO1xuLVxuLVx0XHRcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWFib3J0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ORVdPQko6XG5AQCAtMTE0NTgsNyArMTE0NDIsNyBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2Vjb21taXRfc2V0X2xpc3QpKTtcbiBcbi1cdG5mdF9zZXRfYWJvcnRfdXBkYXRlKFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4rXHRuZnRfc2V0X2Fib3J0X3VwZGF0ZShuZnRfbmV0KTtcbiBcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuQEAgLTEyMTQyLDYgKzEyMTI2LDcgQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5mX3RhYmxlc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZWJpbmRpbmdfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZW1vZHVsZV9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5mdF9uZXQtXHUwMDNlbm90aWZ5X2xpc3QpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZnRfbmV0LVx1MDAzZWNvbW1pdF9tdXRleCk7XG4gXHRuZXQtXHUwMDNlbmZ0LmJhc2Vfc2VxID0gMTtcbiBcdG5mdF9uZXQtXHUwMDNlZ2Nfc2VxID0gMDtcbkBAIC0xMjE4Niw2ICsxMjE3MSw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbmZfdGFibGVzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZuZnRfbmV0LVx1MDAzZW1vZHVsZV9saXN0KSk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2Vub3RpZnlfbGlzdCkpO1xuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm5mdF9uZXQtXHUwMDNlZGVzdHJveV9saXN0KSk7XG4rXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZfdGFibGVzX2V4aXRfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbmluZGV4IDYyMjJlOWJiNTdiYzkuLmNmNjQzZTkxNzc5MWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xuQEAgLTg5NCw2ICs4OTQsNyBAQCBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbiBcdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG4gXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpyYmVfZW5kID0gTlVMTDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbitcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4gXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDtcbiBcbkBAIC05MDEsNiArOTAyLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIFx0XHRuZXh0ID0gcmJfbmV4dChub2RlKTtcbiBcbiBcdFx0cmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4rXHRcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZyYmUtXHUwMDNlZXh0LCBnZW5tYXNrKSkge1xuK1x0XHRcdHJiZV9lbmQgPSBOVUxMO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXG4gXHRcdC8qIGVsZW1lbnRzIGFyZSByZXZlcnNlZCBpbiB0aGUgcmJ0cmVlIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsXG4gXHRcdCAqIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgdmFsdWUsIHRoYXQgaXMgd2h5IGVuZCBlbGVtZW50IGlzXG5AQCAtMTAzNiwxMCArMTA0MSwzMiBAQCBzdGF0aWMgdm9pZCBuZnRfYXJyYXlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZClcbiBcdF9fbmZ0X2FycmF5X2ZyZWUoYXJyYXkpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqXG4rX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spXG4re1xuK1x0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcHJldl9yYmU7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9ICpwbm9kZTtcbitcbitcdHdoaWxlIChub2RlKSB7XG4rXHRcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4rXHRcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZwcmV2X3JiZS1cdTAwM2VleHQsIGdlbm1hc2spKSB7XG4rXHRcdFx0bm9kZSA9IHJiX3ByZXYobm9kZSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0KnBub2RlID0gbm9kZTtcbitcdFx0cmV0dXJuIHByZXZfcmJlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTtcbiBcdHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZSwgKnByZXZfcmJlO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNnNldC1cdTAwM2VuZXQpO1xuK1x0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbiBcdHN0cnVjdCBuZnRfYXJyYXkgKm9sZDtcbiBcdHUzMiBudW1faW50ZXJ2YWxzID0gMDtcbiBcdHN0cnVjdCByYl9ub2RlICpub2RlO1xuQEAgLTEwNjEsMTIgKzEwODgsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcbiBcbiBcdC8qIFJldmVyc2Ugd2FsayB0byBjcmVhdGUgYW4gYXJyYXkgZnJvbSBzbWFsbGVyIHRvIGxhcmdlc3QgaW50ZXJ2YWwuICovXG4gXHRub2RlID0gcmJfbGFzdChcdTAwMjZwcml2LVx1MDAzZXJvb3QpO1xuLVx0aWYgKG5vZGUpXG4tXHRcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4tXHRlbHNlXG4tXHRcdHByZXZfcmJlID0gTlVMTDtcbiBcbi1cdHdoaWxlIChwcmV2X3JiZSkge1xuK1x0d2hpbGUgKG5vZGUpIHtcbitcdFx0cHJldl9yYmUgPSBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmUoXHUwMDI2bm9kZSwgZ2VubWFzayk7XG4rXHRcdGlmICghcHJldl9yYmUpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdHJiZSA9IHByZXZfcmJlO1xuIFxuIFx0XHRpZiAobmZ0X3JidHJlZV9pbnRlcnZhbF9zdGFydChyYmUpKVxuQEAgLTEwODMsNyArMTExMCw5IEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4gXHRcdGlmICghbm9kZSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0cHJldl9yYmUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtLCBub2RlKTtcbitcdFx0cHJldl9yYmUgPSBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmUoXHUwMDI2bm9kZSwgZ2VubWFzayk7XG4rXHRcdGlmICghcHJldl9yYmUpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qIEZvciBhbm9ueW1vdXMgc2V0cywgd2hlbiBhZGphY2VudCByYW5nZXMgYXJlIGZvdW5kLFxuIFx0XHQgKiB0aGUgZW5kIGVsZW1lbnQgaXMgbm90IGFkZGVkIHRvIHRoZSBzZXQgdG8gcGFjayB0aGUgc2V0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NDo0My4zNDI2MzI5NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg0MDczMjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBOZXRmaWx0ZXIncyBORlRhYmxlcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5mX3RhYmxlc19hcGkuY2AgYW5kIGBuZnRfc2V0X3JidHJlZS5jYCwgYW5kIGl0J3MgYSBjb3JlIG5ldGZpbHRlciBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBgc2V0X3VwZGF0ZV9saXN0YCBpcyBtYW5hZ2VkLiAgSW5zdGVhZCBvZiBiZWluZyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBgbmZfdGFibGVzX2NvbW1pdGAsIGl0J3MgYmVlbiBtb3ZlZCB0byBgbmZ0YWJsZXNfcGVybmV0YC4gVGhpcyBzaGlmdCBhbG9uZSBzY3JlYW1zIGZvciBmdXp6aW5nLiAgUGx1cywgdGhlIHBhdGNoIHRvdWNoZXMgYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAsIGluY29ycG9yYXRpbmcgY2hlY2tzIGZvciBlbGVtZW50IGFjdGl2aXR5IHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHBvaW50cyBvZiBpbnRlcmVzdCwgZnVuY3Rpb25hbGx5IHNwZWFraW5nLlxuXG5TbywgbGV0J3MgbmFpbCBkb3duIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6aW5nLiAgSW4gYG5mX3RhYmxlc19hcGkuY2AsIEknbSBsb29raW5nIGF0OlxuXG4qICAgYG5mX3RhYmxlc19jb21taXRgXG4qICAgYF9fbmZfdGFibGVzX2Fib3J0YFxuKiAgIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gXG4qICAgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWBcbiogICBgbmZ0X3NldF9hYm9ydF91cGRhdGVgXG5cbkFuZCB0aGVuLCBpbiBgbmZ0X3NldF9yYnRyZWUuY2AsIHdlJ3ZlIGdvdDpcblxuKiAgIGBuZnRfcmJ0cmVlX2djX3NjYW5gXG4qICAgYG5mdF9yYnRyZWVfY29tbWl0YFxuKiAgIGBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmVgXG5cbk5vdywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIG5vdC4gYG5mX3RhYmxlc19jb21taXRgIGlzIHRoZSBmaXJzdCBvbmUgSSdsbCBjaGVjay4gIFl1cCwgbG9va3MgbGlrZSBpdCdzIHN0YXRpYy4gTGV0J3MgbWFrZSBzdXJlIEknbSBjb3JyZWN0IGluIHRoYXQgYXNzdW1wdGlvbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NDo1NC4xODMzNjc1NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MjYwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDI5MT1FWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDI5Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDI5MzpzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjk0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzY4OnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzY5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzg0OnN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzKHN0cnVjdCByY3VfaGVhZCAqaClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM4NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM5MC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDM5MTpzdGF0aWMgdm9pZCBuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKHN0cnVjdCBuZnRfcnVsZV9ibG9iICpibG9iKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzkyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzk4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzk5OlxcdGNhbGxfcmN1KFxcdTAwMjZsYXN0LVxcdTAwM2VoLCBfX25mX3RhYmxlc19jb21taXRfY2hhaW5fZnJlZV9ydWxlcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA0MDAtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDAyOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQwMy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNC1cXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY2hhaW4tXFx1MDAzZWJsb2JfZ2VuXzEsIGcwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQyNTpcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNi1cXHRcXHR9IGVsc2Uge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI3LVxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjaGFpbi1cXHUwMDNlYmxvYl9nZW5fMCwgZzEpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDI4OlxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fZnJlZV9ydWxlc19vbGQoZzApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI5LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDQ0LVxcdGlmIChuZXh0X2dlbmJpdClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQ0NTpcXHRcXHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQ0Ni1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA0NDc6XFx0XFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA0NDgtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2OTc9c3RhdGljIHZvaWQgbmZfdGFibGVzX21vZHVsZV9hdXRvbG9hZF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzA5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNzEwOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfcmVsZWFzZShzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3MTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA3NDQ9c3RhdGljIHZvaWQgbmZ0X2NvbW1pdF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCB1MzIgcG9ydGlkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3NzktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3ODA6c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2FsbG9jKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDc4MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNzk3OnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICphZGwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3OTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MDktICovXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MTA6c3RhdGljIHVuc2lnbmVkIGludCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2VudHJ5Y291bnQoY29uc3Qgc3RydWN0IG5mdF90cmFucyAqdHJhbnMpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MjAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MjE6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9jb2xsZWN0KHN0cnVjdCBsaXN0X2hlYWQgKmFkbCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDgyMi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucywgdTMyIG9wKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MzMtZm91bmQ6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MzQ6XFx0YWRwLVxcdTAwM2VlbnRyaWVzICs9IG5mX3RhYmxlc19jb21taXRfYXVkaXRfZW50cnljb3VudCh0cmFucyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MzUtXFx0aWYgKCFhZHAtXFx1MDAzZW9wIHx8IGFkcC1cXHUwMDNlb3AgXFx1MDAzZSBvcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODQwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODQxOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCwgdTMyIGdlbmVyYXRpb24pXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4NDIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4ODQ9c3RhdGljIHZvaWQgbmZ0X2djX3NlcV9lbmQoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgdW5zaWduZWQgaW50IGdjX3NlcSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODg4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODg5OnN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4OTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NDktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5NTA6XFx0XFx0cmV0ID0gbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9hbGxvYyhcXHUwMDI2YWRsLCB0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NTEtXFx0XFx0aWYgKHJldCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTUyOlxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MzpcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2ZyZWUoXFx1MDAyNmFkbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NTQtXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTYwOlxcdFxcdFxcdHJldCA9IG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZShuZXQsIGNoYWluKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk2MS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTYyOlxcdFxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk2MzpcXHRcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2ZyZWUoXFx1MDAyNmFkbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NjQtXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTczLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFxcdTAwMjZ0YWJsZS1cXHUwMDNlY2hhaW5zLCBsaXN0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTc0OlxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW4obmV0LCBjaGFpbik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NzUtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5OTctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5OTg6XFx0XFx0bmZfdGFibGVzX2NvbW1pdF9hdWRpdF9jb2xsZWN0KFxcdTAwMjZhZGwsIHRyYW5zLCB0cmFucy1cXHUwMDNlbXNnX3R5cGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTk5LVxcdFxcdHN3aXRjaCAodHJhbnMtXFx1MDAzZW1zZ190eXBlKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTE4MS1cXHRuZl90YWJsZXNfZ2VuX25vdGlmeShuZXQsIHNrYiwgTkZUX01TR19ORVdHRU4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMTgyOlxcdG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKFxcdTAwMjZhZGwsIG5mdF9iYXNlX3NlcShuZXQpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTE4My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMTg1LVxcdG5mdF9uZXQtXFx1MDAzZXZhbGlkYXRlX3N0YXRlID0gTkZUX1ZBTElEQVRFX1NLSVA7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTExODY6XFx0bmZfdGFibGVzX2NvbW1pdF9yZWxlYXNlKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTUwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gbmZfdGFibGVzX3N1YnN5cyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTExLVxcdC5jYlxcdFxcdD0gbmZfdGFibGVzX2NiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTEyOlxcdC5jb21taXRcXHRcXHQ9IG5mX3RhYmxlc19jb21taXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1MTMtXFx0LmFib3J0XFx0XFx0PSBuZl90YWJsZXNfYWJvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU0OjU0LjIyNzE5NzMzMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTg3OTY1NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIE5ldGxpbmsgVHJhbnNhY3Rpb24gRW50cnkgUG9pbnRzIGluIGBuZl90YWJsZXNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX3RhYmxlc19jb21taXRgLiBJdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZW50cnkgcG9pbnRzIGZvciBuZXRsaW5rIHRyYW5zYWN0aW9ucy4gQnV0IHRoZW4gSSByZW1lbWJlciBpdCdzIHJlZ2lzdGVyZWQgaW4gYG5mX3RhYmxlc19zdWJzeXNgIGFzIGAuY29tbWl0ID0gbmZfdGFibGVzX2NvbW1pdGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LiBUaGUgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucy4gSG93ZXZlciwgYG5mX3RhYmxlc19jb21taXRgIGlzIGNsZWFybHkgYSAqbWFzc2l2ZSogZnVuY3Rpb24uIFRoZSBjb21waWxlciBkZWZpbml0ZWx5IHdvbid0IGJlIGlubGluaW5nIHRoYXQuIEl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIHBvaW50IG9mIGVudHJ5LCB3aGljaCBtYWtlcyB0aGUgc3RhdGljIGRlY2xhcmF0aW9uIGxlc3MgY29uY2VybmluZywgYnV0IEkgc3RpbGwgd2FudCB0byBjaGVjay4gTWF5YmUgdGhlcmUncyBhIGJldHRlciBvcHRpb24gbGlrZSBgbmZuZXRsaW5rX3Jjdl9iYXRjaGAgSSBjb3VsZCBiZSB1c2luZz8gTm8sIGBuZl90YWJsZXNfY29tbWl0YCBpcyBmaW5lLCBnaXZlbiB0aGF0IGl0IGlzICpub3QqIGlubGluZWQuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgbG9vayBhdCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYC4gWXVwLCB0aGF0J3Mgc3RhdGljLiBPa2F5LCBzbyBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIHRoaW5nLiBCdXQgaXMgdGhlcmUgYW5vdGhlciAqbm9uLXN0YXRpYyogZnVuY3Rpb24gaW4gdGhlIHZpY2luaXR5PyBMZXQncyBjaGVjayBgbmZ0X3NldF9yYnRyZWUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTU6MDUuODE1MTY1NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1OTE0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3JidHJlZV9jb21taXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0xMDQ1PV9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShzdHJ1Y3QgcmJfbm9kZSAqKnBub2RlLCB1OCBnZW5tYXNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwNjMtXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjEwNjQ6c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTA2NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MTIwOT1jb25zdCBzdHJ1Y3QgbmZ0X3NldF90eXBlIG5mdF9zZXRfcmJ0cmVlX3R5cGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTIyMS1cXHRcXHQuYWN0aXZhdGVcXHQ9IG5mdF9yYnRyZWVfYWN0aXZhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjEyMjI6XFx0XFx0LmNvbW1pdFxcdFxcdD0gbmZ0X3JidHJlZV9jb21taXQsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEyMjMtXFx0XFx0LmFib3J0XFx0XFx0PSBuZnRfcmJ0cmVlX2Fib3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NTowNS44NzE3NjM2MjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU2OTQ4NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5GVGFibGVzIFJCLVRyZWUgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKm5mdF9yYnRyZWVfY29tbWl0KiBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZmFpcmx5IHN0YW5kYXJkIGZvciBpbnRlcm5hbCBoZWxwZXJzLiBCdXQsIGFuZCB0aGlzIGlzIGEga2V5IHBvaW50LCBpdCdzICpyZWdpc3RlcmVkKiB2aWEgYG5mdF9zZXRfcmJ0cmVlX3R5cGVgLiBUaGF0J3MgaG93IGl0IGdldHMgaG9va2VkIGludG8gdGhlIG92ZXJhbGwgTkZUYWJsZXMgZnJhbWV3b3JrLiBTbyBpdCdzIGVmZmVjdGl2ZWx5IFwicHVibGljXCIgaW4gdGVybXMgb2YgYmVpbmcgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBldmVuIGlmIGl0cyBkZWZpbml0aW9uIGlzIGtlcHQgd2l0aGluIHRoZSBmaWxlLiBHb29kLiBUaGF0IGRlc2lnbiBkZWNpc2lvbiBtYWtlcyBzZW5zZSB0byBtZS4gS2VlcHMgdGhpbmdzIGNsZWFuLlxuXG5Ob3csIHRoYXQgbGVhZHMgbWUgdG8gd29uZGVyIGFib3V0IGl0cyBjb3VudGVycGFydCBpbiBnYXJiYWdlIGNvbGxlY3Rpb24uICpuZnRfcmJ0cmVlX2djX3NjYW4qLi4uIGlzIGl0IHJlZ2lzdGVyZWQgYW55d2hlcmUgbGlrZSBgbmZ0X3JidHJlZV9jb21taXRgPyBJcyBpdCBhbHNvIHN0YXRpYyBidXQgcGFydCBvZiBhIHJlZ2lzdHJhdGlvbj8gT3IgaXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gc29tZXdoZXJlIGVsc2U/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21taXQgYW5kIGdjIGFuZCBjb25maXJtIHRoaXMuIEEgcXVpY2sgbG9vayBhdCB0aGUgc291cmNlIHdvdWxkIHJldmVhbCB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgdGhlIG92ZXJhbGwgZGVzaWduLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgYXJlIG5vcm1hbGx5IGFzc29jaWF0ZWQgd2l0aCBnYXJiYWdlIGNvbGxlY3Rpb24gaW4gUkItdHJlZXMsIGFuZCBJIG5lZWQgdG8gZXN0YWJsaXNoIGlmIGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkIGhlcmUuIFRoYXQgd291bGQgYmUgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU1OjEyLjAyODcxNTY2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA1NDk5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3JidHJlZV9nY19zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODYyPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfd2Fsayhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTg5MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODkyOnN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTMte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwNjQ9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMDg2LVxcdGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHByaXYtXFx1MDAzZWxhc3RfZ2MgKyBuZnRfc2V0X2djX2ludGVydmFsKHNldCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzoxMDg3OlxcdFxcdG5mdF9yYnRyZWVfZ2Nfc2NhbihzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMDg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NToxMi4zNDkyNzE1MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc1MDAzMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVHJhbnNhY3Rpb25hbCBDb21taXQgYW5kIEFib3J0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSB0cmFuc2FjdGlvbnMgYXJlIGNvbW1pdHRlZCBhbmQgYWJvcnRlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHJidHJlZS4gVGhpcyBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSBib3RoIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djYCwgaW50ZXJlc3RpbmcuLi4gYW5kIEkgc2VlIHRoYXQgYG5mdF9yYnRyZWVfY29tbWl0YCBpcywgaW4gZmFjdCwgZGVjbGFyZWQgYXMgc3RhdGljLiBcblxuTm93LCBJJ20gdGhpbmtpbmcsIGNhbiBJIGxldmVyYWdlIHRoZSBleGlzdGluZyBgbmZfdGFibGVzX2NvbW1pdGAgYW5kIGBfX25mX3RhYmxlc19hYm9ydGAgZm9yIHRoaXM/IFRoZXNlIHNlZW0gbGlrZSBsb2dpY2FsIGNhbmRpZGF0ZXMuIE9rYXksIGxldCBtZSBxdWlja2x5IHZlcmlmeS4uLiBZdXAsIGJvdGggYG5mX3RhYmxlc19jb21taXRgIGFuZCBgbmZfdGFibGVzX2Fib3J0YCBhcmUgYWxzbyBzdGF0aWMuIEhtLCB0aGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGl0J3MgYG5mbmV0bGlua19yY3ZfYmF0Y2hgIHRoYXQgdWx0aW1hdGVseSBpbnZva2VzIHRoZSBjb21taXQgYW5kIGFib3J0IGZ1bmN0aW9ucyB0aHJvdWdoIGAuY29tbWl0YCBhbmQgYC5hYm9ydGAgY2FsbHMuIE9rYXksIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncyEgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBuZm5ldGxpbmsuY2Agbm93LCBzbyBJIGhhdmUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU1OjE3LjkyNDI3ODAwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMjU1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX3Jjdl9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM9MzYzPWVudW0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYy0zNjgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYzozNjk6c3RhdGljIHZvaWQgbmZuZXRsaW5rX3Jjdl9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTM3MC1cXHRcXHRcXHRcXHR1MTYgc3Vic3lzX2lkLCB1MzIgZ2VuaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jPTYxMj1zdGF0aWMgdm9pZCBuZm5ldGxpbmtfcmN2X3NrYl9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMtNjQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM6NjQ3OlxcdG5mbmV0bGlua19yY3ZfYmF0Y2goc2tiLCBubGgsIHJlc19pZCwgZ2VuX2lkKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTY0OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU1OjE3Ljk5ODUyMjgyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDMzNzE4NDE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgVGFibGUgQ29tbWl0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZW50cnkgcG9pbnRzIGZvciBuZXRmaWx0ZXIgdGFibGUgb3BlcmF0aW9ucy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYSBzaW1wbGUgbGlzdCDigJMgYG5mX3RhYmxlc19jb21taXRgLCBgX19uZl90YWJsZXNfYWJvcnRgLCBgbmZ0X3JidHJlZV9jb21taXRgLCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAg4oCTIHdvdWxkIHN1ZmZpY2UuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGxpbmtlciBuZWVkcyBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGZvciB0aGVzZSBmdW5jdGlvbnMuXG5cbmBuZl90YWJsZXNfY29tbWl0YCBpcyBxdWl0ZSBzdWJzdGFudGlhbCwgd2hpY2ggbWFrZXMgaXQgdW5saWtlbHkgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBpbmxpbmUgaXQuIEhvd2V2ZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBmdW5jdGlvbiBpc24ndCBleHBvcnRlZCBvciBkZWZpbmVkIHNvbWV3aGVyZS4gSXQncyBzdGF0aWMsIHNvIHRoYXQncyBub3QgdGhlIGNhc2UuIEkgbmVlZCB0byBmaW5kIHNvbWUgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZSBpbiBgbmZfdGFibGVzX2FwaS5jYC4gSG1tLCB3aGF0IGFib3V0IGBuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrYD8gTm9wZS4gVGhhdCdzIG5vdCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50LlxuXG5HaXZlbiB0aGF0LCBJJ2xsIHN0aWNrIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBgbmZfdGFibGVzX2NvbW1pdGAsIGBfX25mX3RhYmxlc19hYm9ydGAsIGBuZnRfcmJ0cmVlX2NvbW1pdGAsIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCBzZWVtIHRvIGJlIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgIGFuZCBgbmZ0X3NldF9hYm9ydF91cGRhdGVgIHNpbmNlIHRoZXkncmUgcmVsYXRlZC4gRmluYWxseSwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGBuZl90YWJsZXNgIGZlYXR1cmUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTU6MjguMzM1NzA5NzkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDkwMjY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NToyOC40MjY2MTgyMTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NDAyOTA2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgc3R1ZmYsIGFuZCBJIHNlZSBgTkZfVEFCTEVTYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLCBJJ20ganVzdCBsb29raW5nIGF0IGBuZnRfc2V0X3JidHJlZWAsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIGEga2V5IGNvbXBvbmVudCBvZiBOZXRmaWx0ZXIncyBzZXQgZnVuY3Rpb25hbGl0eS4gU28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVwZW5kZW5jeS4gSSB0aGluayBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG5mdF9zZXRfcmJ0cmVlYCBpcyBhY3R1YWxseSBsaW5rZWQgaW50byBgTkZfVEFCTEVTYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIE9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBjb25maXJtLCBvciBjb3JyZWN0LCBteSB1bmRlcnN0YW5kaW5nLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTY6MDQuMDY2OTExNTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIzNTg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3NldF9yYnRyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkyLVxcdFxcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MzpcXHRcXHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05NC1cXHRcXHQgIG5mdF9zZXRfcGlwYXBvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTY6MDQuMjU5Mjc3MDk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTU5MDI4NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgbmZfdGFibGVzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRhcmdldGluZyBgbmZfdGFibGVzYC4gVGhhdCdzIGJ1aWx0IGludG8gYG5mX3RhYmxlc2AsIHNvIGVuYWJsaW5nIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGBORl9UQUJMRVNgLCBpcyB0aGUga2V5LiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeS4uLiB5ZXAsIGBORl9UQUJMRVNgIGl0c2VsZiBoYXMgZGVwZW5kZW5jaWVzIG9uIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX05FVExJTktgLCBidXQgZW5hYmxpbmcgYE5GX1RBQkxFU2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlc2UgZGVwZW5kZW5jaWVzLiBHb29kLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IHNldCB1cGRhdGVzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgYG5mX3RhYmxlc2AgZnJhbWV3b3JrLiBUaGUgY3JpdGljYWwgY2hhbmdlIGludm9sdmVzIG1vdmluZyBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIGBuZl90YWJsZXNfY29tbWl0YCBhbmQgYF9fbmZfdGFibGVzX2Fib3J0YCB0byB0aGUgYG5mdGFibGVzX3Blcm5ldGAgc3RydWN0LiBUaGlzIGlzIHBlci1uZXQgbmFtZXNwYWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGlzIGlzIGFib3V0IHBlcnNpc3RlbmNlLCBvciBwZXJoYXBzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIG9yIG1lbW9yeSBpc3N1ZS4gVGhlIGRlc2NyaXB0aW9uIHN1Z2dlc3RzIGl0IGFkZHMgYHNldF91cGRhdGVfbGlzdGAgdG8gYG5mdGFibGVzX3Blcm5ldGAuXG5cblJpZ2h0LCBJIHNlZSBpdCBub3cuIEluIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gLCB0aGUgc2V0IGlzIGFkZGVkIHRvIGBuZnRfbmV0LVx1MDAzZXNldF91cGRhdGVfbGlzdGAgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZS4gVGhlbiwgYG5mX3RhYmxlc19jb21taXRgIGNhbGxzIGBuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgdHJ1ZSlgIGJlZm9yZSB0aGUgdGFibGUgbG9vcCBhbmQgdGhlbiBgbmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIGZhbHNlKWAgYWZ0ZXIuIFRoaXMgY2hhbmdlcyBob3cgc2V0IHVwZGF0ZXMgYXJlIGNvbW1pdHRlZC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBzZXQgdXBkYXRlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdHJhbnNhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgcmFjZSBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scyBpbiBhbnkgYW5hbHlzaXMgb2YgdGhlIGNvZGU6IGBuZl90YWJsZXNfY29tbWl0YCwgYF9fbmZfdGFibGVzX2Fib3J0YCwgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAsIGBuZnRfcmJ0cmVlX2NvbW1pdGAsIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYC5cblxuTGV0IG1lIGNoZWNrIHF1aWNrbHkgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4uLiBZdXAsIGJvdGggYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAgYW5kIGBuZl90YWJsZXNfY29tbWl0YCBhcmUgc3RhdGljLiBTbyBJIHdpbGwga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5NeSBmaW5hbCB0aG91Z2h0OiB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5OCwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTY6MTcuMjE4MzE3MDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIyMzQ2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19jb21taXRcIixcbiAgICBcIl9fbmZfdGFibGVzX2Fib3J0XCIsXG4gICAgXCJuZnRfc2V0X2NvbW1pdF91cGRhdGVcIixcbiAgICBcIm5mdF9yYnRyZWVfY29tbWl0XCIsXG4gICAgXCJuZnRfcmJ0cmVlX2djX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBjb3JlIHRvIG1vdmUgdGhlIGBzZXRfdXBkYXRlX2xpc3RgIGZyb20gYSBsb2NhbCB2YXJpYWJsZSBpbiBgbmZfdGFibGVzX2NvbW1pdGAgdG8gYSBwZXItbmV0IG5hbWVzcGFjZSBsaXN0IGluIGBuZnRhYmxlc19wZXJuZXRgLiBJdCBhbHNvIHVwZGF0ZXMgYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAgdG8gY2hlY2sgZm9yIGFjdGl2ZSBlbGVtZW50cyB1c2luZyBgbmZ0X3NldF9lbGVtX2FjdGl2ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIHRyYW5zYWN0aW9uIGFuZCBzZXQgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfY29tbWl0XCIsXG4gICAgXCJfX25mX3RhYmxlc19hYm9ydFwiLFxuICAgIFwibmZ0X3NldF9jb21taXRfdXBkYXRlXCIsXG4gICAgXCJuZnRfcmJ0cmVlX2NvbW1pdFwiLFxuICAgIFwibmZ0X3JidHJlZV9nY19zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwjnvq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 14:40:33 +0000 UTC FinishedAt: 2026-08-05 14:56:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "2195424c3da2ef1829a63b807e3a900a90e57d85", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "032a33ff-4a0b-4a3c-8eab-c963888f38d8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_commit", "__nf_tables_abort", "nft_set_commit_update", "nft_rbtree_commit", "nft_rbtree_gc_scan" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19jb21taXQmIzM0OywKICAgICYjMzQ7X19uZl90YWJsZXNfYWJvcnQmIzM0OywKICAgICYjMzQ7bmZ0X3NldF9jb21taXRfdXBkYXRlJiMzNDssCiAgICAmIzM0O25mdF9yYnRyZWVfY29tbWl0JiMzNDssCiAgICAmIzM0O25mdF9yYnRyZWVfZ2Nfc2NhbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBjb3JlIHRvIG1vdmUgdGhlIGBzZXRfdXBkYXRlX2xpc3RgIGZyb20gYSBsb2NhbCB2YXJpYWJsZSBpbiBgbmZfdGFibGVzX2NvbW1pdGAgdG8gYSBwZXItbmV0IG5hbWVzcGFjZSBsaXN0IGluIGBuZnRhYmxlc19wZXJuZXRgLiBJdCBhbHNvIHVwZGF0ZXMgYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAgdG8gY2hlY2sgZm9yIGFjdGl2ZSBlbGVtZW50cyB1c2luZyBgbmZ0X3NldF9lbGVtX2FjdGl2ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIHRyYW5zYWN0aW9uIGFuZCBzZXQgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJkYzc4NTM4OTdlZTA4MzM0MmYzOWQ1Yjk1ZDFlYjgzZGM5NDIyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjU0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggM2JlNjEyMTQ1YzEzMC4uMjM4ZjZlY2I5MGU5OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtMTk0OSw2ICYjNDM7MTk0OSw3IEBAIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0YmluZGluZ19saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bW9kdWxlX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRub3RpZnlfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkXHRzZXRfdXBkYXRlX2xpc3Q7XG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0Y29tbWl0X211dGV4O1xuIFx0dTY0XHRcdFx0dGFibGVfaGFuZGxlO1xuIFx0dTY0XHRcdFx0dHN0YW1wO1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGFmMzU3ZjZjNTA3MGIuLmE3MDA2NzI1YzMwNzUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC01OTUsMTAgJiM0Mzs1OTUsMTUgQEAgc3RhdGljIHZvaWQgbmZ0X3RyYW5zX2NvbW1pdF9saXN0X2FkZF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90cmFucyAqdHJcbiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcbiB7XG4gXHRzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xuJiM0MztcdHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGU7XG4gXG4gXHRXQVJOX09OX09OQ0UodHJhbnMtXHUwMDNlbXNnX3R5cGUgIT0gTkZUX01TR19ORVdTRVRFTEVNIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIHRyYW5zLVx1MDAzZW1zZ190eXBlICE9IE5GVF9NU0dfREVMU0VURUxFTSk7XG4gXG4mIzQzO1x0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuJiM0MztcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdCBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKVxuJiM0MztcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUsIFx1MDAyNm5mdF9uZXQtXHUwMDNlc2V0X3VwZGF0ZV9saXN0KTtcbiYjNDM7XG4gXHRpZiAobmZ0X3RyYW5zX3RyeV9jb2xsYXBzZShuZnRfbmV0LCB0cmFucykpIHtcbiBcdFx0a2ZyZWUodHJhbnMpO1xuIFx0XHRyZXR1cm47XG5AQCAtMTA4NDgsMTEgJiM0MzsxMDg1MywxNCBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2xvZyhzdHJ1Y3QgbGlzdF9oZWFkICphZGwsIHUzMiBnZW5lcmF0aW9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxuJiM0MztzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgYm9vbCBlYXJseV9jb21taXQpXG4ge1xuIFx0c3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNldCwgbmV4dCwgXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XG4mIzQzO1x0XHRpZiAoc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydF9za2lwX3JlbW92YWwgXHUwMDI2XHUwMDI2IGVhcmx5X2NvbW1pdClcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuIFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSk7XG4gXG4gXHRcdGlmICghc2V0LVx1MDAzZW9wcy1cdTAwM2Vjb21taXQgfHwgc2V0LVx1MDAzZWRlYWQpXG5AQCAtMTA4ODUsNyAmIzQzOzEwODkzLDYgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBuZnRfdHJhbnNfYmluZGluZyAqdHJhbnNfYmluZGluZztcbiBcdHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGludCBiYXNlX3NlcSwgZ2Nfc2VxO1xuLVx0TElTVF9IRUFEKHNldF91cGRhdGVfbGlzdCk7XG4gXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlO1xuIFx0c3RydWN0IG5mdF9jaGFpbiAqY2hhaW47XG4gXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbkBAIC0xMDk2MCw2ICYjNDM7MTA5NjcsOCBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0fVxuIFxuIFx0Lyogc3RlcCAyLiAgTWFrZSBydWxlc19nZW5fWCB2aXNpYmxlIHRvIHBhY2tldCBwYXRoICovXG4mIzQzO1x0bmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIHRydWUpO1xuJiM0MztcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGFibGUsIFx1MDAyNm5mdF9uZXQtXHUwMDNldGFibGVzLCBsaXN0KSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFx1MDAyNnRhYmxlLVx1MDAzZWNoYWlucywgbGlzdClcbiBcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluKG5ldCwgY2hhaW4pO1xuQEAgLTExMDkxLDI3ICYjNDM7MTExMDAsMTMgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX05FV1NFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuLVxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19hZGQoXHUwMDI2Y3R4LCB0ZSk7XG4tXG4tXHRcdFx0aWYgKHRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuLVxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19yZW1vdmUoXHUwMDI2Y3R4LCB0ZSk7XG4tXG4tXHRcdFx0aWYgKHRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX05FV09CSjpcbiBcdFx0XHRpZiAobmZ0X3RyYW5zX29ial91cGRhdGUodHJhbnMpKSB7XG5AQCAtMTExODAsNyAmIzQzOzExMTc1LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0fVxuIFx0fVxuIFxuLVx0bmZ0X3NldF9jb21taXRfdXBkYXRlKFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4mIzQzO1x0bmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIGZhbHNlKTtcbiBcbiBcdG5mdF9jb21taXRfbm90aWZ5KG5ldCwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXHRuZl90YWJsZXNfZ2VuX25vdGlmeShuZXQsIHNrYiwgTkZUX01TR19ORVdHRU4pO1xuQEAgLTExMjQ3LDExICYjNDM7MTEyNDIsMTEgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2Fib3J0X3JlbGVhc2Uoc3RydWN0IG5mdF90cmFucyAqdHJhbnMpXG4gXHRrZnJlZSh0cmFucyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBsaXN0X2hlYWQgKnNldF91cGRhdGVfbGlzdClcbiYjNDM7c3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldClcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldCAqc2V0LCAqbmV4dDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIHNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBcdTAwMjZuZnRfbmV0LVx1MDAzZXNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFxuIFx0XHRpZiAoIXNldC1cdTAwM2VvcHMtXHUwMDNlYWJvcnQpXG5AQCAtMTEzODYsMzMgJiM0MzsxMTM4MSwyMiBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4gXHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfTkVXU0VURUxFTTpcbiYjNDM7XHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuIFx0XHRcdGlmIChuZnRfdHJhbnNfZWxlbV9zZXRfYm91bmQodHJhbnMpKSB7XG4mIzQzO1x0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFx0XHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuLVx0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAoIW5mdF90cmFuc19lbGVtc19uZXdfYWJvcnQoXHUwMDI2Y3R4LCB0ZSkpIHtcbiBcdFx0XHRcdG5mdF90cmFuc19kZXN0cm95KHRyYW5zKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XG4tXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcbi1cdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuIFxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19kZXN0cm95X2Fib3J0KFx1MDAyNmN0eCwgdGUpO1xuLVxuLVx0XHRcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWFib3J0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ORVdPQko6XG5AQCAtMTE0NTgsNyAmIzQzOzExNDQyLDcgQEAgc3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxuIFxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm5mdF9uZXQtXHUwMDNlY29tbWl0X3NldF9saXN0KSk7XG4gXG4tXHRuZnRfc2V0X2Fib3J0X3VwZGF0ZShcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuJiM0MztcdG5mdF9zZXRfYWJvcnRfdXBkYXRlKG5mdF9uZXQpO1xuIFxuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG5AQCAtMTIxNDIsNiAmIzQzOzEyMTI2LDcgQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5mX3RhYmxlc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZWJpbmRpbmdfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZW1vZHVsZV9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5mdF9uZXQtXHUwMDNlbm90aWZ5X2xpc3QpO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5mdF9uZXQtXHUwMDNlc2V0X3VwZGF0ZV9saXN0KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2bmZ0X25ldC1cdTAwM2Vjb21taXRfbXV0ZXgpO1xuIFx0bmV0LVx1MDAzZW5mdC5iYXNlX3NlcSA9IDE7XG4gXHRuZnRfbmV0LVx1MDAzZWdjX3NlcSA9IDA7XG5AQCAtMTIxODYsNiAmIzQzOzEyMTcxLDcgQEAgc3RhdGljIHZvaWQgX19uZXRfZXhpdCBuZl90YWJsZXNfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm5mdF9uZXQtXHUwMDNlbW9kdWxlX2xpc3QpKTtcbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZuZnRfbmV0LVx1MDAzZW5vdGlmeV9saXN0KSk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2VkZXN0cm95X2xpc3QpKTtcbiYjNDM7XHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZfdGFibGVzX2V4aXRfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbmluZGV4IDYyMjJlOWJiNTdiYzkuLmNmNjQzZTkxNzc5MWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xuQEAgLTg5NCw2ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4gXHRzdHJ1Y3QgbmZ0X3JidHJlZSAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpO1xuIFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcmJlLCAqcmJlX2VuZCA9IE5VTEw7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG4mIzQzO1x0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbiBcdHU2NCB0c3RhbXAgPSBuZnRfbmV0X3RzdGFtcChuZXQpO1xuIFx0c3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0O1xuIFxuQEAgLTkwMSw2ICYjNDM7OTAyLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIFx0XHRuZXh0ID0gcmJfbmV4dChub2RlKTtcbiBcbiBcdFx0cmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4mIzQzO1x0XHRpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoXHUwMDI2cmJlLVx1MDAzZWV4dCwgZ2VubWFzaykpIHtcbiYjNDM7XHRcdFx0cmJlX2VuZCA9IE5VTEw7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuIFxuIFx0XHQvKiBlbGVtZW50cyBhcmUgcmV2ZXJzZWQgaW4gdGhlIHJidHJlZSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLFxuIFx0XHQgKiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlLCB0aGF0IGlzIHdoeSBlbmQgZWxlbWVudCBpc1xuQEAgLTEwMzYsMTAgJiM0MzsxMDQxLDMyIEBAIHN0YXRpYyB2b2lkIG5mdF9hcnJheV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuIFx0X19uZnRfYXJyYXlfZnJlZShhcnJheSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqXG4mIzQzO19fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShzdHJ1Y3QgcmJfbm9kZSAqKnBub2RlLCB1OCBnZW5tYXNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcHJldl9yYmU7XG4mIzQzO1x0c3RydWN0IHJiX25vZGUgKm5vZGUgPSAqcG5vZGU7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChub2RlKSB7XG4mIzQzO1x0XHRwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpO1xuJiM0MztcdFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKFx1MDAyNnByZXZfcmJlLVx1MDAzZWV4dCwgZ2VubWFzaykpIHtcbiYjNDM7XHRcdFx0bm9kZSA9IHJiX3ByZXYobm9kZSk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdCpwbm9kZSA9IG5vZGU7XG4mIzQzO1x0XHRyZXR1cm4gcHJldl9yYmU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2NvbW1pdChzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIHtcbiBcdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG4gXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpwcmV2X3JiZTtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2c2V0LVx1MDAzZW5ldCk7XG4mIzQzO1x0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbiBcdHN0cnVjdCBuZnRfYXJyYXkgKm9sZDtcbiBcdHUzMiBudW1faW50ZXJ2YWxzID0gMDtcbiBcdHN0cnVjdCByYl9ub2RlICpub2RlO1xuQEAgLTEwNjEsMTIgJiM0MzsxMDg4LDEyIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4gXG4gXHQvKiBSZXZlcnNlIHdhbGsgdG8gY3JlYXRlIGFuIGFycmF5IGZyb20gc21hbGxlciB0byBsYXJnZXN0IGludGVydmFsLiAqL1xuIFx0bm9kZSA9IHJiX2xhc3QoXHUwMDI2cHJpdi1cdTAwM2Vyb290KTtcbi1cdGlmIChub2RlKVxuLVx0XHRwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpO1xuLVx0ZWxzZVxuLVx0XHRwcmV2X3JiZSA9IE5VTEw7XG4gXG4tXHR3aGlsZSAocHJldl9yYmUpIHtcbiYjNDM7XHR3aGlsZSAobm9kZSkge1xuJiM0MztcdFx0cHJldl9yYmUgPSBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmUoXHUwMDI2bm9kZSwgZ2VubWFzayk7XG4mIzQzO1x0XHRpZiAoIXByZXZfcmJlKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdHJiZSA9IHByZXZfcmJlO1xuIFxuIFx0XHRpZiAobmZ0X3JidHJlZV9pbnRlcnZhbF9zdGFydChyYmUpKVxuQEAgLTEwODMsNyAmIzQzOzExMTAsOSBAQCBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2NvbW1pdChzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIFx0XHRpZiAoIW5vZGUpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4mIzQzO1x0XHRwcmV2X3JiZSA9IF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShcdTAwMjZub2RlLCBnZW5tYXNrKTtcbiYjNDM7XHRcdGlmICghcHJldl9yYmUpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKiBGb3IgYW5vbnltb3VzIHNldHMsIHdoZW4gYWRqYWNlbnQgcmFuZ2VzIGFyZSBmb3VuZCxcbiBcdFx0ICogdGhlIGVuZCBlbGVtZW50IGlzIG5vdCBhZGRlZCB0byB0aGUgc2V0IHRvIHBhY2sgdGhlIHNldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfY29tbWl0JiMzNDssCiAgICAmIzM0O19fbmZfdGFibGVzX2Fib3J0JiMzNDssCiAgICAmIzM0O25mdF9zZXRfY29tbWl0X3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2djX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiZGM3ODUzODk3ZWUwODMzNDJmMzlkNWI5NWQxZWI4M2RjOTQyMjJkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxNDo1NDo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaAppbmRleCAzYmU2MTIxNDVjMTMwLi4yMzhmNmVjYjkwZTk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC0xOTQ5LDYgJiM0MzsxOTQ5LDcgQEAgc3RydWN0IG5mdGFibGVzX3Blcm5ldCB7CiAJc3RydWN0IGxpc3RfaGVhZAliaW5kaW5nX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAltb2R1bGVfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5vdGlmeV9saXN0OwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCXNldF91cGRhdGVfbGlzdDsKIAlzdHJ1Y3QgbXV0ZXgJCWNvbW1pdF9tdXRleDsKIAl1NjQJCQl0YWJsZV9oYW5kbGU7CiAJdTY0CQkJdHN0YW1wOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwppbmRleCBhZjM1N2Y2YzUwNzBiLi5hNzAwNjcyNWMzMDc1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYwpAQCAtNTk1LDEwICYjNDM7NTk1LDE1IEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19jb21taXRfbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfdHJhbnMgKnRyCiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucykKIHsKIAlzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpOwomIzQzOwlzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlOwogCiAJV0FSTl9PTl9PTkNFKHRyYW5zLSZndDttc2dfdHlwZSAhPSBORlRfTVNHX05FV1NFVEVMRU0gJmFtcDsmYW1wOwogCQkgICAgIHRyYW5zLSZndDttc2dfdHlwZSAhPSBORlRfTVNHX0RFTFNFVEVMRU0pOwogCiYjNDM7CXRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTsKJiM0MzsJaWYgKHRlLSZndDtzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0ICZhbXA7JmFtcDsgbGlzdF9lbXB0eSgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlKSkKJiM0MzsJCWxpc3RfYWRkX3RhaWwoJmFtcDt0ZS0mZ3Q7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSwgJmFtcDtuZnRfbmV0LSZndDtzZXRfdXBkYXRlX2xpc3QpOwomIzQzOwogCWlmIChuZnRfdHJhbnNfdHJ5X2NvbGxhcHNlKG5mdF9uZXQsIHRyYW5zKSkgewogCQlrZnJlZSh0cmFucyk7CiAJCXJldHVybjsKQEAgLTEwODQ4LDExICYjNDM7MTA4NTMsMTQgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9sb2coc3RydWN0IGxpc3RfaGVhZCAqYWRsLCB1MzIgZ2VuZXJhdGlvbikKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpzZXRfdXBkYXRlX2xpc3QpCiYjNDM7c3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsIGJvb2wgZWFybHlfY29tbWl0KQogewogCXN0cnVjdCBuZnRfc2V0ICpzZXQsICpuZXh0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNldCwgbmV4dCwgc2V0X3VwZGF0ZV9saXN0LCBwZW5kaW5nX3VwZGF0ZSkgewomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCAmYW1wO25mdF9uZXQtJmd0O3NldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHsKJiM0MzsJCWlmIChzZXQtJmd0O29wcy0mZ3Q7YWJvcnRfc2tpcF9yZW1vdmFsICZhbXA7JmFtcDsgZWFybHlfY29tbWl0KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwogCQlsaXN0X2RlbF9pbml0KCZhbXA7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSk7CiAKIAkJaWYgKCFzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0IHx8IHNldC0mZ3Q7ZGVhZCkKQEAgLTEwODg1LDcgJiM0MzsxMDg5Myw2IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJc3RydWN0IG5mdF90cmFuc19iaW5kaW5nICp0cmFuc19iaW5kaW5nOwogCXN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zLCAqbmV4dDsKIAl1bnNpZ25lZCBpbnQgYmFzZV9zZXEsIGdjX3NlcTsKLQlMSVNUX0hFQUQoc2V0X3VwZGF0ZV9saXN0KTsKIAlzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlOwogCXN0cnVjdCBuZnRfY2hhaW4gKmNoYWluOwogCXN0cnVjdCBuZnRfdGFibGUgKnRhYmxlOwpAQCAtMTA5NjAsNiAmIzQzOzEwOTY3LDggQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAl9CiAKIAkvKiBzdGVwIDIuICBNYWtlIHJ1bGVzX2dlbl9YIHZpc2libGUgdG8gcGFja2V0IHBhdGggKi8KJiM0MzsJbmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIHRydWUpOwomIzQzOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodGFibGUsICZhbXA7bmZ0X25ldC0mZ3Q7dGFibGVzLCBsaXN0KSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sICZhbXA7dGFibGUtJmd0O2NoYWlucywgbGlzdCkKIAkJCW5mX3RhYmxlc19jb21taXRfY2hhaW4obmV0LCBjaGFpbik7CkBAIC0xMTA5MSwyNyAmIzQzOzExMTAwLDEzIEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX05FV1NFVEVMRU06CiAJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7Ci0KIAkJCW5mdF90cmFuc19lbGVtc19hZGQoJmFtcDtjdHgsIHRlKTsKLQotCQkJaWYgKHRlLSZndDtzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0ICZhbXA7JmFtcDsKLQkJCSAgICBsaXN0X2VtcHR5KCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUpKSB7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlLAotCQkJCQkgICAgICAmYW1wO3NldF91cGRhdGVfbGlzdCk7Ci0JCQl9CiAJCQluZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7CiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX0RFTFNFVEVMRU06CiAJCWNhc2UgTkZUX01TR19ERVNUUk9ZU0VURUxFTToKIAkJCXRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTsKLQogCQkJbmZ0X3RyYW5zX2VsZW1zX3JlbW92ZSgmYW1wO2N0eCwgdGUpOwotCi0JCQlpZiAodGUtJmd0O3NldC0mZ3Q7b3BzLSZndDtjb21taXQgJmFtcDsmYW1wOwotCQkJICAgIGxpc3RfZW1wdHkoJmFtcDt0ZS0mZ3Q7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSkpIHsKLQkJCQlsaXN0X2FkZF90YWlsKCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUsCi0JCQkJCSAgICAgICZhbXA7c2V0X3VwZGF0ZV9saXN0KTsKLQkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE5GVF9NU0dfTkVXT0JKOgogCQkJaWYgKG5mdF90cmFuc19vYmpfdXBkYXRlKHRyYW5zKSkgewpAQCAtMTExODAsNyAmIzQzOzExMTc1LDcgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJfQogCX0KIAotCW5mdF9zZXRfY29tbWl0X3VwZGF0ZSgmYW1wO3NldF91cGRhdGVfbGlzdCk7CiYjNDM7CW5mdF9zZXRfY29tbWl0X3VwZGF0ZShuZnRfbmV0LCBmYWxzZSk7CiAKIAluZnRfY29tbWl0X25vdGlmeShuZXQsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpOwogCW5mX3RhYmxlc19nZW5fbm90aWZ5KG5ldCwgc2tiLCBORlRfTVNHX05FV0dFTik7CkBAIC0xMTI0NywxMSAmIzQzOzExMjQyLDExIEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19hYm9ydF9yZWxlYXNlKHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zKQogCWtmcmVlKHRyYW5zKTsKIH0KIAotc3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KQomIzQzO3N0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpCiB7CiAJc3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsICZhbXA7bmZ0X25ldC0mZ3Q7c2V0X3VwZGF0ZV9saXN0LCBwZW5kaW5nX3VwZGF0ZSkgewogCQlsaXN0X2RlbF9pbml0KCZhbXA7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSk7CiAKIAkJaWYgKCFzZXQtJmd0O29wcy0mZ3Q7YWJvcnQpCkBAIC0xMTM4NiwzMyAmIzQzOzExMzgxLDIyIEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbikKIAkJCW5mdF90cmFuc19kZXN0cm95KHRyYW5zKTsKIAkJCWJyZWFrOwogCQljYXNlIE5GVF9NU0dfTkVXU0VURUxFTToKJiM0MzsJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7CiAJCQlpZiAobmZ0X3RyYW5zX2VsZW1fc2V0X2JvdW5kKHRyYW5zKSkgewomIzQzOwkJCQlsaXN0X2RlbF9pbml0KCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUpOwogCQkJCW5mdF90cmFuc19kZXN0cm95KHRyYW5zKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTsKIAkJCWlmICghbmZ0X3RyYW5zX2VsZW1zX25ld19hYm9ydCgmYW1wO2N0eCwgdGUpKSB7CiAJCQkJbmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpOwogCQkJCWJyZWFrOwogCQkJfQotCi0JCQlpZiAodGUtJmd0O3NldC0mZ3Q7b3BzLSZndDthYm9ydCAmYW1wOyZhbXA7Ci0JCQkgICAgbGlzdF9lbXB0eSgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlKSkgewotCQkJCWxpc3RfYWRkX3RhaWwoJmFtcDt0ZS0mZ3Q7c2V0LSZndDtwZW5kaW5nX3VwZGF0ZSwKLQkJCQkJICAgICAgJmFtcDtzZXRfdXBkYXRlX2xpc3QpOwotCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgTkZUX01TR19ERUxTRVRFTEVNOgogCQljYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06CiAJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7CiAKIAkJCW5mdF90cmFuc19lbGVtc19kZXN0cm95X2Fib3J0KCZhbXA7Y3R4LCB0ZSk7Ci0KLQkJCWlmICh0ZS0mZ3Q7c2V0LSZndDtvcHMtJmd0O2Fib3J0ICZhbXA7JmFtcDsKLQkJCSAgICBsaXN0X2VtcHR5KCZhbXA7dGUtJmd0O3NldC0mZ3Q7cGVuZGluZ191cGRhdGUpKSB7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmYW1wO3RlLSZndDtzZXQtJmd0O3BlbmRpbmdfdXBkYXRlLAotCQkJCQkgICAgICAmYW1wO3NldF91cGRhdGVfbGlzdCk7Ci0JCQl9CiAJCQluZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7CiAJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX05FV09CSjoKQEAgLTExNDU4LDcgJiM0MzsxMTQ0Miw3IEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbikKIAogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO25mdF9uZXQtJmd0O2NvbW1pdF9zZXRfbGlzdCkpOwogCi0JbmZ0X3NldF9hYm9ydF91cGRhdGUoJmFtcDtzZXRfdXBkYXRlX2xpc3QpOwomIzQzOwluZnRfc2V0X2Fib3J0X3VwZGF0ZShuZnRfbmV0KTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwogCkBAIC0xMjE0Miw2ICYjNDM7MTIxMjYsNyBAQCBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfdGFibGVzX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlJTklUX0xJU1RfSEVBRCgmYW1wO25mdF9uZXQtJmd0O2JpbmRpbmdfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZnRfbmV0LSZndDttb2R1bGVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtuZnRfbmV0LSZndDtub3RpZnlfbGlzdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7bmZ0X25ldC0mZ3Q7c2V0X3VwZGF0ZV9saXN0KTsKIAltdXRleF9pbml0KCZhbXA7bmZ0X25ldC0mZ3Q7Y29tbWl0X211dGV4KTsKIAluZXQtJmd0O25mdC5iYXNlX3NlcSA9IDE7CiAJbmZ0X25ldC0mZ3Q7Z2Nfc2VxID0gMDsKQEAgLTEyMTg2LDYgJiM0MzsxMjE3MSw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbmZfdGFibGVzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmFtcDtuZnRfbmV0LSZndDttb2R1bGVfbGlzdCkpOwogCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO25mdF9uZXQtJmd0O25vdGlmeV9saXN0KSk7CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7bmZ0X25ldC0mZ3Q7ZGVzdHJveV9saXN0KSk7CiYjNDM7CVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmYW1wO25mdF9uZXQtJmd0O3NldF91cGRhdGVfbGlzdCkpOwogfQogCiBzdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jIGIvbmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jCmluZGV4IDYyMjJlOWJiNTdiYzkuLmNmNjQzZTkxNzc5MWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMKQEAgLTg5NCw2ICYjNDM7ODk0LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpCiAJc3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTsKIAlzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpyYmVfZW5kID0gTlVMTDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoJmFtcDtzZXQtJmd0O25ldCk7CiYjNDM7CXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7CiAJdTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7CiAJc3RydWN0IHJiX25vZGUgKm5vZGUsICpuZXh0OwogCkBAIC05MDEsNiAmIzQzOzkwMiwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldCkKIAkJbmV4dCA9IHJiX25leHQobm9kZSk7CiAKIAkJcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7CiYjNDM7CQlpZiAoIW5mdF9zZXRfZWxlbV9hY3RpdmUoJmFtcDtyYmUtJmd0O2V4dCwgZ2VubWFzaykpIHsKJiM0MzsJCQlyYmVfZW5kID0gTlVMTDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KIAogCQkvKiBlbGVtZW50cyBhcmUgcmV2ZXJzZWQgaW4gdGhlIHJidHJlZSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLAogCQkgKiBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0IHZhbHVlLCB0aGF0IGlzIHdoeSBlbmQgZWxlbWVudCBpcwpAQCAtMTAzNiwxMCAmIzQzOzEwNDEsMzIgQEAgc3RhdGljIHZvaWQgbmZ0X2FycmF5X2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCiAJX19uZnRfYXJyYXlfZnJlZShhcnJheSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqCiYjNDM7X19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpwcmV2X3JiZTsKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGUgPSAqcG5vZGU7CiYjNDM7CiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpOwomIzQzOwkJaWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKCZhbXA7cHJldl9yYmUtJmd0O2V4dCwgZ2VubWFzaykpIHsKJiM0MzsJCQlub2RlID0gcmJfcHJldihub2RlKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCSpwbm9kZSA9IG5vZGU7CiYjNDM7CQlyZXR1cm4gcHJldl9yYmU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldCkKIHsKIAlzdHJ1Y3QgbmZ0X3JidHJlZSAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpOwogCXN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZSwgKnByZXZfcmJlOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoJmFtcDtzZXQtJmd0O25ldCk7CiYjNDM7CXU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7CiAJc3RydWN0IG5mdF9hcnJheSAqb2xkOwogCXUzMiBudW1faW50ZXJ2YWxzID0gMDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKQEAgLTEwNjEsMTIgJiM0MzsxMDg4LDEyIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpCiAKIAkvKiBSZXZlcnNlIHdhbGsgdG8gY3JlYXRlIGFuIGFycmF5IGZyb20gc21hbGxlciB0byBsYXJnZXN0IGludGVydmFsLiAqLwogCW5vZGUgPSByYl9sYXN0KCZhbXA7cHJpdi0mZ3Q7cm9vdCk7Ci0JaWYgKG5vZGUpCi0JCXByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7Ci0JZWxzZQotCQlwcmV2X3JiZSA9IE5VTEw7CiAKLQl3aGlsZSAocHJldl9yYmUpIHsKJiM0MzsJd2hpbGUgKG5vZGUpIHsKJiM0MzsJCXByZXZfcmJlID0gX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKCZhbXA7bm9kZSwgZ2VubWFzayk7CiYjNDM7CQlpZiAoIXByZXZfcmJlKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlyYmUgPSBwcmV2X3JiZTsKIAogCQlpZiAobmZ0X3JidHJlZV9pbnRlcnZhbF9zdGFydChyYmUpKQpAQCAtMTA4Myw3ICYjNDM7MTExMCw5IEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpCiAJCWlmICghbm9kZSkKIAkJCWJyZWFrOwogCi0JCXByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7CiYjNDM7CQlwcmV2X3JiZSA9IF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZSgmYW1wO25vZGUsIGdlbm1hc2spOwomIzQzOwkJaWYgKCFwcmV2X3JiZSkKJiM0MzsJCQlicmVhazsKIAogCQkvKiBGb3IgYW5vbnltb3VzIHNldHMsIHdoZW4gYWRqYWNlbnQgcmFuZ2VzIGFyZSBmb3VuZCwKIAkJICogdGhlIGVuZCBlbGVtZW50IGlzIG5vdCBhZGRlZCB0byB0aGUgc2V0IHRvIHBhY2sgdGhlIHNldAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTA0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IE5ldGZpbHRlciYjMzk7cyBORlRhYmxlcyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbmZfdGFibGVzX2FwaS5jYCBhbmQgYG5mdF9zZXRfcmJ0cmVlLmNgLCBhbmQgaXQmIzM5O3MgYSBjb3JlIG5ldGZpbHRlciBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBgc2V0X3VwZGF0ZV9saXN0YCBpcyBtYW5hZ2VkLiAgSW5zdGVhZCBvZiBiZWluZyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBgbmZfdGFibGVzX2NvbW1pdGAsIGl0JiMzOTtzIGJlZW4gbW92ZWQgdG8gYG5mdGFibGVzX3Blcm5ldGAuIFRoaXMgc2hpZnQgYWxvbmUgc2NyZWFtcyBmb3IgZnV6emluZy4gIFBsdXMsIHRoZSBwYXRjaCB0b3VjaGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gLCBpbmNvcnBvcmF0aW5nIGNoZWNrcyBmb3IgZWxlbWVudCBhY3Rpdml0eSB1c2luZyBgbmZ0X3NldF9lbGVtX2FjdGl2ZWAuICBUaGVzZSBhcmUgZGVmaW5pdGVseSBwb2ludHMgb2YgaW50ZXJlc3QsIGZ1bmN0aW9uYWxseSBzcGVha2luZy4KClNvLCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6aW5nLiAgSW4gYG5mX3RhYmxlc19hcGkuY2AsIEkmIzM5O20gbG9va2luZyBhdDoKCiogICBgbmZfdGFibGVzX2NvbW1pdGAKKiAgIGBfX25mX3RhYmxlc19hYm9ydGAKKiAgIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gCiogICBgbmZ0X3NldF9jb21taXRfdXBkYXRlYAoqICAgYG5mdF9zZXRfYWJvcnRfdXBkYXRlYAoKQW5kIHRoZW4sIGluIGBuZnRfc2V0X3JidHJlZS5jYCwgd2UmIzM5O3ZlIGdvdDoKCiogICBgbmZ0X3JidHJlZV9nY19zY2FuYAoqICAgYG5mdF9yYnRyZWVfY29tbWl0YAoqICAgYF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZWAKCk5vdywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIG5vdC4gYG5mX3RhYmxlc19jb21taXRgIGlzIHRoZSBmaXJzdCBvbmUgSSYjMzk7bGwgY2hlY2suICBZdXAsIGxvb2tzIGxpa2UgaXQmIzM5O3Mgc3RhdGljLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gY29ycmVjdCBpbiB0aGF0IGFzc3VtcHRpb24sIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19jb21taXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDI5MT1FWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjkyLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAyOTM6c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0X2NoYWluX3ByZXBhcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjk0LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM2Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzY4OnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwoc3RydWN0IG5ldCAqbmV0KVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAzNjkte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzgzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAzODQ6c3RhdGljIHZvaWQgX19uZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXMoc3RydWN0IHJjdV9oZWFkICpoKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAzODUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzkwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAzOTE6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChzdHJ1Y3QgbmZ0X3J1bGVfYmxvYiAqYmxvYilcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzkyLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM5OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzk5Olx0Y2FsbF9yY3UoXHUwMDI2bGFzdC1cdTAwM2VoLCBfX25mX3RhYmxlc19jb21taXRfY2hhaW5fZnJlZV9ydWxlcyk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQwMC19XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQwMS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDAyOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDAzLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNC1cdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoY2hhaW4tXHUwMDNlYmxvYl9nZW5fMSwgZzApO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA0MjU6XHRcdFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNi1cdFx0fSBlbHNlIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI3LVx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjaGFpbi1cdTAwM2VibG9iX2dlbl8wLCBnMSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQyODpcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI5LVx0XHR9XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA0NDQtXHRpZiAobmV4dF9nZW5iaXQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQ0NTpcdFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQ0Ni1cdGVsc2Vcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDQ3Olx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcwKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDQ4LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDY5Nz1zdGF0aWMgdm9pZCBuZl90YWJsZXNfbW9kdWxlX2F1dG9sb2FkX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzA5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3MTA6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9yZWxlYXNlKHN0cnVjdCBuZXQgKm5ldClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzExLXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDc0ND1zdGF0aWMgdm9pZCBuZnRfY29tbWl0X25vdGlmeShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3NzktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDc4MDpzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXRfYXVkaXRfYWxsb2Moc3RydWN0IGxpc3RfaGVhZCAqYWRsLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3ODEtXHRcdFx0XHRcdHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzk2LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3OTc6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9mcmVlKHN0cnVjdCBsaXN0X2hlYWQgKmFkbClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzk4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDgwOS0gKi9cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODEwOnN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9lbnRyeWNvdW50KGNvbnN0IHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODIwLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MjE6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9jb2xsZWN0KHN0cnVjdCBsaXN0X2hlYWQgKmFkbCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODIyLVx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucywgdTMyIG9wKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODMzLWZvdW5kOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MzQ6XHRhZHAtXHUwMDNlZW50cmllcyAmIzQzOz0gbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9lbnRyeWNvdW50KHRyYW5zKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODM1LVx0aWYgKCFhZHAtXHUwMDNlb3AgfHwgYWRwLVx1MDAzZW9wIFx1MDAzZSBvcClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg0MC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODQxOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCwgdTMyIGdlbmVyYXRpb24pXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg0Mi17XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4ODQ9c3RhdGljIHZvaWQgbmZ0X2djX3NlcV9lbmQoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgdW5zaWduZWQgaW50IGdjX3NlcSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg4OC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODg5OnN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg5MC17XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NDktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MDpcdFx0cmV0ID0gbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9hbGxvYyhcdTAwMjZhZGwsIHRhYmxlKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTUxLVx0XHRpZiAocmV0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MjpcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluX3ByZXBhcmVfY2FuY2VsKG5ldCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MzpcdFx0XHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2ZyZWUoXHUwMDI2YWRsKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTU0LVx0XHRcdHJldHVybiByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NTktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk2MDpcdFx0XHRyZXQgPSBuZl90YWJsZXNfY29tbWl0X2NoYWluX3ByZXBhcmUobmV0LCBjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk2MS1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk2MjpcdFx0XHRcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwobmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTYzOlx0XHRcdFx0bmZfdGFibGVzX2NvbW1pdF9hdWRpdF9mcmVlKFx1MDAyNmFkbCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk2NC1cdFx0XHRcdHJldHVybiByZXQ7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NzMtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFx1MDAyNnRhYmxlLVx1MDAzZWNoYWlucywgbGlzdClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTc0Olx0XHRcdG5mX3RhYmxlc19jb21taXRfY2hhaW4obmV0LCBjaGFpbik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk3NS1cdH1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk5Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTk4Olx0XHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2NvbGxlY3QoXHUwMDI2YWRsLCB0cmFucywgdHJhbnMtXHUwMDNlbXNnX3R5cGUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5OTktXHRcdHN3aXRjaCAodHJhbnMtXHUwMDNlbXNnX3R5cGUpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTE4MS1cdG5mX3RhYmxlc19nZW5fbm90aWZ5KG5ldCwgc2tiLCBORlRfTVNHX05FV0dFTik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTE4MjpcdG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKFx1MDAyNmFkbCwgbmZ0X2Jhc2Vfc2VxKG5ldCkpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODMtXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODUtXHRuZnRfbmV0LVx1MDAzZXZhbGlkYXRlX3N0YXRlID0gTkZUX1ZBTElEQVRFX1NLSVA7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTE4NjpcdG5mX3RhYmxlc19jb21taXRfcmVsZWFzZShuZXQpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODctXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTE1MDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtIG5mX3RhYmxlc19zdWJzeXMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1MTEtXHQuY2JcdFx0PSBuZl90YWJsZXNfY2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTUxMjpcdC5jb21taXRcdFx0PSBuZl90YWJsZXNfY29tbWl0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1MTMtXHQuYWJvcnRcdFx0PSBuZl90YWJsZXNfYWJvcnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg2MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBOZXRsaW5rIFRyYW5zYWN0aW9uIEVudHJ5IFBvaW50cyBpbiBgbmZfdGFibGVzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mX3RhYmxlc19jb21taXRgLiBJdCYjMzk7cyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgd2hlbiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBlbnRyeSBwb2ludHMgZm9yIG5ldGxpbmsgdHJhbnNhY3Rpb25zLiBCdXQgdGhlbiBJIHJlbWVtYmVyIGl0JiMzOTtzIHJlZ2lzdGVyZWQgaW4gYG5mX3RhYmxlc19zdWJzeXNgIGFzIGAuY29tbWl0ID0gbmZfdGFibGVzX2NvbW1pdGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LiBUaGUgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucy4gSG93ZXZlciwgYG5mX3RhYmxlc19jb21taXRgIGlzIGNsZWFybHkgYSAqbWFzc2l2ZSogZnVuY3Rpb24uIFRoZSBjb21waWxlciBkZWZpbml0ZWx5IHdvbiYjMzk7dCBiZSBpbmxpbmluZyB0aGF0LiBJdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBwb2ludCBvZiBlbnRyeSwgd2hpY2ggbWFrZXMgdGhlIHN0YXRpYyBkZWNsYXJhdGlvbiBsZXNzIGNvbmNlcm5pbmcsIGJ1dCBJIHN0aWxsIHdhbnQgdG8gY2hlY2suIE1heWJlIHRoZXJlJiMzOTtzIGEgYmV0dGVyIG9wdGlvbiBsaWtlIGBuZm5ldGxpbmtfcmN2X2JhdGNoYCBJIGNvdWxkIGJlIHVzaW5nPyBObywgYG5mX3RhYmxlc19jb21taXRgIGlzIGZpbmUsIGdpdmVuIHRoYXQgaXQgaXMgKm5vdCogaW5saW5lZC4KCkp1c3QgdG8gYmUgc3VyZSwgbGV0JiMzOTtzIGxvb2sgYXQgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIFl1cCwgdGhhdCYjMzk7cyBzdGF0aWMuIE9rYXksIHNvIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGEgdGhpbmcuIEJ1dCBpcyB0aGVyZSBhbm90aGVyICpub24tc3RhdGljKiBmdW5jdGlvbiBpbiB0aGUgdmljaW5pdHk/IExldCYjMzk7cyBjaGVjayBgbmZ0X3NldF9yYnRyZWUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3JidHJlZV9jb21taXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwNDU9X19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwNjMtXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6MTA2NDpzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2NvbW1pdChzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwNjUte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0xMjA5PWNvbnN0IHN0cnVjdCBuZnRfc2V0X3R5cGUgbmZ0X3NldF9yYnRyZWVfdHlwZSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTIyMS1cdFx0LmFjdGl2YXRlXHQ9IG5mdF9yYnRyZWVfYWN0aXZhdGUsXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6MTIyMjpcdFx0LmNvbW1pdFx0XHQ9IG5mdF9yYnRyZWVfY29tbWl0LFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEyMjMtXHRcdC5hYm9ydFx0XHQ9IG5mdF9yYnRyZWVfYWJvcnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTY0NwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5GVGFibGVzIFJCLVRyZWUgSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiAqbmZ0X3JidHJlZV9jb21taXQqIGlzIGRlY2xhcmVkIGFzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBmYWlybHkgc3RhbmRhcmQgZm9yIGludGVybmFsIGhlbHBlcnMuIEJ1dCwgYW5kIHRoaXMgaXMgYSBrZXkgcG9pbnQsIGl0JiMzOTtzICpyZWdpc3RlcmVkKiB2aWEgYG5mdF9zZXRfcmJ0cmVlX3R5cGVgLiBUaGF0JiMzOTtzIGhvdyBpdCBnZXRzIGhvb2tlZCBpbnRvIHRoZSBvdmVyYWxsIE5GVGFibGVzIGZyYW1ld29yay4gU28gaXQmIzM5O3MgZWZmZWN0aXZlbHkgJiMzNDtwdWJsaWMmIzM0OyBpbiB0ZXJtcyBvZiBiZWluZyB1c2VkIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0sIGV2ZW4gaWYgaXRzIGRlZmluaXRpb24gaXMga2VwdCB3aXRoaW4gdGhlIGZpbGUuIEdvb2QuIFRoYXQgZGVzaWduIGRlY2lzaW9uIG1ha2VzIHNlbnNlIHRvIG1lLiBLZWVwcyB0aGluZ3MgY2xlYW4uCgpOb3csIHRoYXQgbGVhZHMgbWUgdG8gd29uZGVyIGFib3V0IGl0cyBjb3VudGVycGFydCBpbiBnYXJiYWdlIGNvbGxlY3Rpb24uICpuZnRfcmJ0cmVlX2djX3NjYW4qLi4uIGlzIGl0IHJlZ2lzdGVyZWQgYW55d2hlcmUgbGlrZSBgbmZ0X3JidHJlZV9jb21taXRgPyBJcyBpdCBhbHNvIHN0YXRpYyBidXQgcGFydCBvZiBhIHJlZ2lzdHJhdGlvbj8gT3IgaXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gc29tZXdoZXJlIGVsc2U/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21taXQgYW5kIGdjIGFuZCBjb25maXJtIHRoaXMuIEEgcXVpY2sgbG9vayBhdCB0aGUgc291cmNlIHdvdWxkIHJldmVhbCB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgdGhlIG92ZXJhbGwgZGVzaWduLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgYXJlIG5vcm1hbGx5IGFzc29jaWF0ZWQgd2l0aCBnYXJiYWdlIGNvbGxlY3Rpb24gaW4gUkItdHJlZXMsIGFuZCBJIG5lZWQgdG8gZXN0YWJsaXNoIGlmIGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkIGhlcmUuIFRoYXQgd291bGQgYmUgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcmJ0cmVlX2djX3NjYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTg2Mj1zdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX3dhbGsoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtODkxLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjg5MjpzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0xMDY0PXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwODYtXHRpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBwcml2LVx1MDAzZWxhc3RfZ2MgJiM0MzsgbmZ0X3NldF9nY19pbnRlcnZhbChzZXQpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzoxMDg3Olx0XHRuZnRfcmJ0cmVlX2djX3NjYW4oc2V0KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMDg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjY0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVHJhbnNhY3Rpb25hbCBDb21taXQgYW5kIEFib3J0IFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZXNlIHRyYW5zYWN0aW9ucyBhcmUgY29tbWl0dGVkIGFuZCBhYm9ydGVkIHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgcmJ0cmVlLiBUaGlzIHNlZW1zIHRvIGJlIGNhbGxlZCBmcm9tIGJvdGggYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2NgLCBpbnRlcmVzdGluZy4uLiBhbmQgSSBzZWUgdGhhdCBgbmZ0X3JidHJlZV9jb21taXRgIGlzLCBpbiBmYWN0LCBkZWNsYXJlZCBhcyBzdGF0aWMuIAoKTm93LCBJJiMzOTttIHRoaW5raW5nLCBjYW4gSSBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgYG5mX3RhYmxlc19jb21taXRgIGFuZCBgX19uZl90YWJsZXNfYWJvcnRgIGZvciB0aGlzPyBUaGVzZSBzZWVtIGxpa2UgbG9naWNhbCBjYW5kaWRhdGVzLiBPa2F5LCBsZXQgbWUgcXVpY2tseSB2ZXJpZnkuLi4gWXVwLCBib3RoIGBuZl90YWJsZXNfY29tbWl0YCBhbmQgYG5mX3RhYmxlc19hYm9ydGAgYXJlIGFsc28gc3RhdGljLiBIbSwgdGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcuCgpXYWl0IGEgc2Vjb25kLi4uIGl0JiMzOTtzIGBuZm5ldGxpbmtfcmN2X2JhdGNoYCB0aGF0IHVsdGltYXRlbHkgaW52b2tlcyB0aGUgY29tbWl0IGFuZCBhYm9ydCBmdW5jdGlvbnMgdGhyb3VnaCBgLmNvbW1pdGAgYW5kIGAuYWJvcnRgIGNhbGxzLiBPa2F5LCB0aGF0IG1ha2VzIG1vcmUgc2Vuc2UgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiB0aGluZ3MhIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgbmZuZXRsaW5rLmNgIG5vdywgc28gSSBoYXZlIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZm5ldGxpbmtfcmN2X2JhdGNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jPTM2Mz1lbnVtIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTM2OC1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM6MzY5OnN0YXRpYyB2b2lkIG5mbmV0bGlua19yY3ZfYmF0Y2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTM3MC1cdFx0XHRcdHUxNiBzdWJzeXNfaWQsIHUzMiBnZW5pZClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jPTYxMj1zdGF0aWMgdm9pZCBuZm5ldGxpbmtfcmN2X3NrYl9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTY0Ni1cbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM6NjQ3Olx0bmZuZXRsaW5rX3Jjdl9iYXRjaChza2IsIG5saCwgcmVzX2lkLCBnZW5faWQpO1xubmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYy02NDgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDkxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgVGFibGUgQ29tbWl0IEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGVudHJ5IHBvaW50cyBmb3IgbmV0ZmlsdGVyIHRhYmxlIG9wZXJhdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IGEgc2ltcGxlIGxpc3Qg4oCTIGBuZl90YWJsZXNfY29tbWl0YCwgYF9fbmZfdGFibGVzX2Fib3J0YCwgYG5mdF9yYnRyZWVfY29tbWl0YCwgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIOKAkyB3b3VsZCBzdWZmaWNlLiBCdXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBpbnN0cnVjdGlvbnMgZW1waGFzaXppbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBsaW5rZXIgbmVlZHMgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgdGhlc2UgZnVuY3Rpb25zLgoKYG5mX3RhYmxlc19jb21taXRgIGlzIHF1aXRlIHN1YnN0YW50aWFsLCB3aGljaCBtYWtlcyBpdCB1bmxpa2VseSB0aGF0IHRoZSBjb21waWxlciB3aWxsIGlubGluZSBpdC4gSG93ZXZlciwgSSBuZWVkIHRvIHZlcmlmeSB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCBleHBvcnRlZCBvciBkZWZpbmVkIHNvbWV3aGVyZS4gSXQmIzM5O3Mgc3RhdGljLCBzbyB0aGF0JiMzOTtzIG5vdCB0aGUgY2FzZS4gSSBuZWVkIHRvIGZpbmQgc29tZSBub24tc3RhdGljIGFsdGVybmF0aXZlIGluIGBuZl90YWJsZXNfYXBpLmNgLiBIbW0sIHdoYXQgYWJvdXQgYG5mX3RhYmxlc190cmFuc19kZXN0cm95X2ZsdXNoX3dvcmtgPyBOb3BlLiBUaGF0JiMzOTtzIG5vdCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50LgoKR2l2ZW4gdGhhdCwgSSYjMzk7bGwgc3RpY2sgd2l0aCBteSBpbml0aWFsIGFzc2Vzc21lbnQ6IGBuZl90YWJsZXNfY29tbWl0YCwgYF9fbmZfdGFibGVzX2Fib3J0YCwgYG5mdF9yYnRyZWVfY29tbWl0YCwgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHNlZW0gdG8gYmUgdGhlIG1vc3QgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJIHNob3VsZCBhbHNvIGluY2x1ZGUgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAgYW5kIGBuZnRfc2V0X2Fib3J0X3VwZGF0ZWAgc2luY2UgdGhleSYjMzk7cmUgcmVsYXRlZC4gRmluYWxseSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoZSBgbmZfdGFibGVzYCBmZWF0dXJlIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9UQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTQ1Mz1lbmRpZiAjIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1Ni1cdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzE9aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cdGRlcGVuZHMgb24gSVBWNlxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTcwNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE5ldGZpbHRlciBzdHVmZiwgYW5kIEkgc2VlIGBORl9UQUJMRVNgIGluIHRoZSBjb25maWd1cmF0aW9uLiBNYWtlcyBzZW5zZS4gQnV0IHdhaXQgYSBtaW51dGUsIEkmIzM5O20ganVzdCBsb29raW5nIGF0IGBuZnRfc2V0X3JidHJlZWAsIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgYSBrZXkgY29tcG9uZW50IG9mIE5ldGZpbHRlciYjMzk7cyBzZXQgZnVuY3Rpb25hbGl0eS4gU28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVwZW5kZW5jeS4gSSB0aGluayBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG5mdF9zZXRfcmJ0cmVlYCBpcyBhY3R1YWxseSBsaW5rZWQgaW50byBgTkZfVEFCTEVTYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIE9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBjb25maXJtLCBvciBjb3JyZWN0LCBteSB1bmRlcnN0YW5kaW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTQ6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9yYnRyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05Mi1cdFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjkzOlx0XHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05NC1cdFx0ICBuZnRfc2V0X3BpcGFwby5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE0OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDk4CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTmV0ZmlsdGVyIG5mX3RhYmxlcyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgdGFyZ2V0aW5nIGBuZl90YWJsZXNgLiBUaGF0JiMzOTtzIGJ1aWx0IGludG8gYG5mX3RhYmxlc2AsIHNvIGVuYWJsaW5nIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGBORl9UQUJMRVNgLCBpcyB0aGUga2V5LiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeS4uLiB5ZXAsIGBORl9UQUJMRVNgIGl0c2VsZiBoYXMgZGVwZW5kZW5jaWVzIG9uIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX05FVExJTktgLCBidXQgZW5hYmxpbmcgYE5GX1RBQkxFU2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlc2UgZGVwZW5kZW5jaWVzLiBHb29kLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIEl0IHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZyBvZiBob3cgc2V0IHVwZGF0ZXMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBgbmZfdGFibGVzYCBmcmFtZXdvcmsuIFRoZSBjcml0aWNhbCBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIGBzZXRfdXBkYXRlX2xpc3RgIGZyb20gYSBsb2NhbCB2YXJpYWJsZSB3aXRoaW4gYG5mX3RhYmxlc19jb21taXRgIGFuZCBgX19uZl90YWJsZXNfYWJvcnRgIHRvIHRoZSBgbmZ0YWJsZXNfcGVybmV0YCBzdHJ1Y3QuIFRoaXMgaXMgcGVyLW5ldCBuYW1lc3BhY2UsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgYWJvdXQgcGVyc2lzdGVuY2UsIG9yIHBlcmhhcHMgZml4aW5nIGEgcmFjZSBjb25kaXRpb24gb3IgbWVtb3J5IGlzc3VlLiBUaGUgZGVzY3JpcHRpb24gc3VnZ2VzdHMgaXQgYWRkcyBgc2V0X3VwZGF0ZV9saXN0YCB0byBgbmZ0YWJsZXNfcGVybmV0YC4KClJpZ2h0LCBJIHNlZSBpdCBub3cuIEluIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gLCB0aGUgc2V0IGlzIGFkZGVkIHRvIGBuZnRfbmV0LSZndDtzZXRfdXBkYXRlX2xpc3RgIGlmIGl0JiMzOTtzIG5vdCBhbHJlYWR5IHRoZXJlLiBUaGVuLCBgbmZfdGFibGVzX2NvbW1pdGAgY2FsbHMgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZShuZnRfbmV0LCB0cnVlKWAgYmVmb3JlIHRoZSB0YWJsZSBsb29wIGFuZCB0aGVuIGBuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgZmFsc2UpYCBhZnRlci4gVGhpcyBjaGFuZ2VzIGhvdyBzZXQgdXBkYXRlcyBhcmUgY29tbWl0dGVkLgoKVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBzZXQgdXBkYXRlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdHJhbnNhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgcmFjZSBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gZm9jdXMgb24gdGhvc2Uga2V5IHN5bWJvbHMgaW4gYW55IGFuYWx5c2lzIG9mIHRoZSBjb2RlOiBgbmZfdGFibGVzX2NvbW1pdGAsIGBfX25mX3RhYmxlc19hYm9ydGAsIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCBgbmZ0X3JidHJlZV9jb21taXRgLCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAuCgpMZXQgbWUgY2hlY2sgcXVpY2tseSB0byBzZWUgaWYgYW55IG9mIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljLi4uIFl1cCwgYm90aCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYCBhbmQgYG5mX3RhYmxlc19jb21taXRgIGFyZSBzdGF0aWMuIFNvIEkgd2lsbCBrZWVwIHRob3NlIGluIG1pbmQuCgpNeSBmaW5hbCB0aG91Z2h0OiB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtfX25mX3RhYmxlc19hYm9ydCYjMzQ7LAogICAgJiMzNDtuZnRfc2V0X2NvbW1pdF91cGRhdGUmIzM0OywKICAgICYjMzQ7bmZ0X3JidHJlZV9jb21taXQmIzM0OywKICAgICYjMzQ7bmZ0X3JidHJlZV9nY19zY2FuJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfY29tbWl0JiMzNDssCiAgICAmIzM0O19fbmZfdGFibGVzX2Fib3J0JiMzNDssCiAgICAmIzM0O25mdF9zZXRfY29tbWl0X3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZnRfcmJ0cmVlX2djX3NjYW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NDo0Mi44OTA1NDMwMDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDQ4MDAyMzMzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfY29tbWl0XCIsXG4gICAgXCJfX25mX3RhYmxlc19hYm9ydFwiLFxuICAgIFwibmZ0X3NldF9jb21taXRfdXBkYXRlXCIsXG4gICAgXCJuZnRfcmJ0cmVlX2NvbW1pdFwiLFxuICAgIFwibmZ0X3JidHJlZV9nY19zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU0OjQyLjg5MDU0OTYzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMzE4NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmRjNzg1Mzg5N2VlMDgzMzQyZjM5ZDViOTVkMWViODNkYzk0MjIyZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDE0OjU0OjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxcbmluZGV4IDNiZTYxMjE0NWMxMzAuLjIzOGY2ZWNiOTBlOTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuQEAgLTE5NDksNiArMTk0OSw3IEBAIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0YmluZGluZ19saXN0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bW9kdWxlX2xpc3Q7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRub3RpZnlfbGlzdDtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdHNldF91cGRhdGVfbGlzdDtcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0Y29tbWl0X211dGV4O1xcbiBcXHR1NjRcXHRcXHRcXHR0YWJsZV9oYW5kbGU7XFxuIFxcdHU2NFxcdFxcdFxcdHRzdGFtcDtcXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbmluZGV4IGFmMzU3ZjZjNTA3MGIuLmE3MDA2NzI1YzMwNzUgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xcbkBAIC01OTUsMTAgKzU5NSwxNSBAQCBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX3RhaWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0clxcbiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xcbitcXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlO1xcbiBcXG4gXFx0V0FSTl9PTl9PTkNFKHRyYW5zLVxcdTAwM2Vtc2dfdHlwZSAhPSBORlRfTVNHX05FV1NFVEVMRU0gXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICB0cmFucy1cXHUwMDNlbXNnX3R5cGUgIT0gTkZUX01TR19ERUxTRVRFTEVNKTtcXG4gXFxuK1xcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcXG4rXFx0aWYgKHRlLVxcdTAwM2VzZXQtXFx1MDAzZW9wcy1cXHUwMDNlY29tbWl0IFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlKSlcXG4rXFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUsIFxcdTAwMjZuZnRfbmV0LVxcdTAwM2VzZXRfdXBkYXRlX2xpc3QpO1xcbitcXG4gXFx0aWYgKG5mdF90cmFuc190cnlfY29sbGFwc2UobmZ0X25ldCwgdHJhbnMpKSB7XFxuIFxcdFxcdGtmcmVlKHRyYW5zKTtcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0xMDg0OCwxMSArMTA4NTMsMTQgQEAgc3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9sb2coc3RydWN0IGxpc3RfaGVhZCAqYWRsLCB1MzIgZ2VuZXJhdGlvbilcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxcbitzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgYm9vbCBlYXJseV9jb21taXQpXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIFxcdTAwMjZuZnRfbmV0LVxcdTAwM2VzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XFxuK1xcdFxcdGlmIChzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWJvcnRfc2tpcF9yZW1vdmFsIFxcdTAwMjZcXHUwMDI2IGVhcmx5X2NvbW1pdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlKTtcXG4gXFxuIFxcdFxcdGlmICghc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWNvbW1pdCB8fCBzZXQtXFx1MDAzZWRlYWQpXFxuQEAgLTEwODg1LDcgKzEwODkzLDYgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0c3RydWN0IG5mdF90cmFuc19iaW5kaW5nICp0cmFuc19iaW5kaW5nO1xcbiBcXHRzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucywgKm5leHQ7XFxuIFxcdHVuc2lnbmVkIGludCBiYXNlX3NlcSwgZ2Nfc2VxO1xcbi1cXHRMSVNUX0hFQUQoc2V0X3VwZGF0ZV9saXN0KTtcXG4gXFx0c3RydWN0IG5mdF90cmFuc19lbGVtICp0ZTtcXG4gXFx0c3RydWN0IG5mdF9jaGFpbiAqY2hhaW47XFxuIFxcdHN0cnVjdCBuZnRfdGFibGUgKnRhYmxlO1xcbkBAIC0xMDk2MCw2ICsxMDk2Nyw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIHN0ZXAgMi4gIE1ha2UgcnVsZXNfZ2VuX1ggdmlzaWJsZSB0byBwYWNrZXQgcGF0aCAqL1xcbitcXHRuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgdHJ1ZSk7XFxuK1xcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhYmxlLCBcXHUwMDI2bmZ0X25ldC1cXHUwMDNldGFibGVzLCBsaXN0KSB7XFxuIFxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFxcdTAwMjZ0YWJsZS1cXHUwMDNlY2hhaW5zLCBsaXN0KVxcbiBcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2NoYWluKG5ldCwgY2hhaW4pO1xcbkBAIC0xMTA5MSwyNyArMTExMDAsMTMgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ORVdTRVRFTEVNOlxcbiBcXHRcXHRcXHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XFxuLVxcbiBcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbXNfYWRkKFxcdTAwMjZjdHgsIHRlKTtcXG4tXFxuLVxcdFxcdFxcdGlmICh0ZS1cXHUwMDNlc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWNvbW1pdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjYXNlIE5GVF9NU0dfREVMU0VURUxFTTpcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFU1RST1lTRVRFTEVNOlxcbiBcXHRcXHRcXHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XFxuLVxcbiBcXHRcXHRcXHRuZnRfdHJhbnNfZWxlbXNfcmVtb3ZlKFxcdTAwMjZjdHgsIHRlKTtcXG4tXFxuLVxcdFxcdFxcdGlmICh0ZS1cXHUwMDNlc2V0LVxcdTAwM2VvcHMtXFx1MDAzZWNvbW1pdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX05FV09CSjpcXG4gXFx0XFx0XFx0aWYgKG5mdF90cmFuc19vYmpfdXBkYXRlKHRyYW5zKSkge1xcbkBAIC0xMTE4MCw3ICsxMTE3NSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0bmZ0X3NldF9jb21taXRfdXBkYXRlKFxcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xcbitcXHRuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgZmFsc2UpO1xcbiBcXG4gXFx0bmZ0X2NvbW1pdF9ub3RpZnkobmV0LCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcXG4gXFx0bmZfdGFibGVzX2dlbl9ub3RpZnkobmV0LCBza2IsIE5GVF9NU0dfTkVXR0VOKTtcXG5AQCAtMTEyNDcsMTEgKzExMjQyLDExIEBAIHN0YXRpYyB2b2lkIG5mX3RhYmxlc19hYm9ydF9yZWxlYXNlKHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zKVxcbiBcXHRrZnJlZSh0cmFucyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBsaXN0X2hlYWQgKnNldF91cGRhdGVfbGlzdClcXG4rc3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldClcXG4ge1xcbiBcXHRzdHJ1Y3QgbmZ0X3NldCAqc2V0LCAqbmV4dDtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIHNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNldCwgbmV4dCwgXFx1MDAyNm5mdF9uZXQtXFx1MDAzZXNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcXG4gXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2c2V0LVxcdTAwM2VwZW5kaW5nX3VwZGF0ZSk7XFxuIFxcbiBcXHRcXHRpZiAoIXNldC1cXHUwMDNlb3BzLVxcdTAwM2VhYm9ydClcXG5AQCAtMTEzODYsMzMgKzExMzgxLDIyIEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcXG4gXFx0XFx0XFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX05FV1NFVEVMRU06XFxuK1xcdFxcdFxcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcXG4gXFx0XFx0XFx0aWYgKG5mdF90cmFuc19lbGVtX3NldF9ib3VuZCh0cmFucykpIHtcXG4rXFx0XFx0XFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpO1xcbiBcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcXG4gXFx0XFx0XFx0aWYgKCFuZnRfdHJhbnNfZWxlbXNfbmV3X2Fib3J0KFxcdTAwMjZjdHgsIHRlKSkge1xcbiBcXHRcXHRcXHRcXHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuLVxcbi1cXHRcXHRcXHRpZiAodGUtXFx1MDAzZXNldC1cXHUwMDNlb3BzLVxcdTAwM2VhYm9ydCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgbGlzdF9lbXB0eShcXHUwMDI2dGUtXFx1MDAzZXNldC1cXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XFxuLVxcdFxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcXG4tXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX0RFTFNFVEVMRU06XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VURUxFTTpcXG4gXFx0XFx0XFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xcbiBcXG4gXFx0XFx0XFx0bmZ0X3RyYW5zX2VsZW1zX2Rlc3Ryb3lfYWJvcnQoXFx1MDAyNmN0eCwgdGUpO1xcbi1cXG4tXFx0XFx0XFx0aWYgKHRlLVxcdTAwM2VzZXQtXFx1MDAzZW9wcy1cXHUwMDNlYWJvcnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0XFx0ICAgIGxpc3RfZW1wdHkoXFx1MDAyNnRlLVxcdTAwM2VzZXQtXFx1MDAzZXBlbmRpbmdfdXBkYXRlKSkge1xcbi1cXHRcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZ0ZS1cXHUwMDNlc2V0LVxcdTAwM2VwZW5kaW5nX3VwZGF0ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XFxuLVxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBORlRfTVNHX05FV09CSjpcXG5AQCAtMTE0NTgsNyArMTE0NDIsNyBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXFxuIFxcbiBcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWNvbW1pdF9zZXRfbGlzdCkpO1xcbiBcXG4tXFx0bmZ0X3NldF9hYm9ydF91cGRhdGUoXFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XFxuK1xcdG5mdF9zZXRfYWJvcnRfdXBkYXRlKG5mdF9uZXQpO1xcbiBcXG4gXFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcbkBAIC0xMjE0Miw2ICsxMjEyNiw3IEBAIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBuZl90YWJsZXNfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bmZ0X25ldC1cXHUwMDNlYmluZGluZ19saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZW1vZHVsZV9saXN0KTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZW5vdGlmeV9saXN0KTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZXNldF91cGRhdGVfbGlzdCk7XFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWNvbW1pdF9tdXRleCk7XFxuIFxcdG5ldC1cXHUwMDNlbmZ0LmJhc2Vfc2VxID0gMTtcXG4gXFx0bmZ0X25ldC1cXHUwMDNlZ2Nfc2VxID0gMDtcXG5AQCAtMTIxODYsNiArMTIxNzEsNyBAQCBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG5mX3RhYmxlc19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXFxuIFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bmZ0X25ldC1cXHUwMDNlbW9kdWxlX2xpc3QpKTtcXG4gXFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFxcdTAwMjZuZnRfbmV0LVxcdTAwM2Vub3RpZnlfbGlzdCkpO1xcbiBcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZWRlc3Ryb3lfbGlzdCkpO1xcbitcXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm5mdF9uZXQtXFx1MDAzZXNldF91cGRhdGVfbGlzdCkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcXG5pbmRleCA2MjIyZTliYjU3YmM5Li5jZjY0M2U5MTc3OTFhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xcbkBAIC04OTQsNiArODk0LDcgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIFxcdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XFxuIFxcdHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZSwgKnJiZV9lbmQgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXFx1MDAyNnNldC1cXHUwMDNlbmV0KTtcXG4rXFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcXG4gXFx0dTY0IHRzdGFtcCA9IG5mdF9uZXRfdHN0YW1wKG5ldCk7XFxuIFxcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDtcXG4gXFxuQEAgLTkwMSw2ICs5MDIsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9nY19zY2FuKHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIFxcdFxcdG5leHQgPSByYl9uZXh0KG5vZGUpO1xcbiBcXG4gXFx0XFx0cmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XFxuK1xcdFxcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShcXHUwMDI2cmJlLVxcdTAwM2VleHQsIGdlbm1hc2spKSB7XFxuK1xcdFxcdFxcdHJiZV9lbmQgPSBOVUxMO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogZWxlbWVudHMgYXJlIHJldmVyc2VkIGluIHRoZSByYnRyZWUgZm9yIGhpc3RvcmljYWwgcmVhc29ucyxcXG4gXFx0XFx0ICogZnJvbSBoaWdoZXN0IHRvIGxvd2VzdCB2YWx1ZSwgdGhhdCBpcyB3aHkgZW5kIGVsZW1lbnQgaXNcXG5AQCAtMTAzNiwxMCArMTA0MSwzMiBAQCBzdGF0aWMgdm9pZCBuZnRfYXJyYXlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZClcXG4gXFx0X19uZnRfYXJyYXlfZnJlZShhcnJheSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpcXG4rX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spXFxuK3tcXG4rXFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcHJldl9yYmU7XFxuK1xcdHN0cnVjdCByYl9ub2RlICpub2RlID0gKnBub2RlO1xcbitcXG4rXFx0d2hpbGUgKG5vZGUpIHtcXG4rXFx0XFx0cHJldl9yYmUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtLCBub2RlKTtcXG4rXFx0XFx0aWYgKCFuZnRfc2V0X2VsZW1fYWN0aXZlKFxcdTAwMjZwcmV2X3JiZS1cXHUwMDNlZXh0LCBnZW5tYXNrKSkge1xcbitcXHRcXHRcXHRub2RlID0gcmJfcHJldihub2RlKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdCpwbm9kZSA9IG5vZGU7XFxuK1xcdFxcdHJldHVybiBwcmV2X3JiZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTtcXG4gXFx0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcmJlLCAqcHJldl9yYmU7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2c2V0LVxcdTAwM2VuZXQpO1xcbitcXHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfbmV4dChuZXQpO1xcbiBcXHRzdHJ1Y3QgbmZ0X2FycmF5ICpvbGQ7XFxuIFxcdHUzMiBudW1faW50ZXJ2YWxzID0gMDtcXG4gXFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XFxuQEAgLTEwNjEsMTIgKzEwODgsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG4gXFxuIFxcdC8qIFJldmVyc2Ugd2FsayB0byBjcmVhdGUgYW4gYXJyYXkgZnJvbSBzbWFsbGVyIHRvIGxhcmdlc3QgaW50ZXJ2YWwuICovXFxuIFxcdG5vZGUgPSByYl9sYXN0KFxcdTAwMjZwcml2LVxcdTAwM2Vyb290KTtcXG4tXFx0aWYgKG5vZGUpXFxuLVxcdFxcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cHJldl9yYmUgPSBOVUxMO1xcbiBcXG4tXFx0d2hpbGUgKHByZXZfcmJlKSB7XFxuK1xcdHdoaWxlIChub2RlKSB7XFxuK1xcdFxcdHByZXZfcmJlID0gX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKFxcdTAwMjZub2RlLCBnZW5tYXNrKTtcXG4rXFx0XFx0aWYgKCFwcmV2X3JiZSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRyYmUgPSBwcmV2X3JiZTtcXG4gXFxuIFxcdFxcdGlmIChuZnRfcmJ0cmVlX2ludGVydmFsX3N0YXJ0KHJiZSkpXFxuQEAgLTEwODMsNyArMTExMCw5IEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuIFxcdFxcdGlmICghbm9kZSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRwcmV2X3JiZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0sIG5vZGUpO1xcbitcXHRcXHRwcmV2X3JiZSA9IF9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShcXHUwMDI2bm9kZSwgZ2VubWFzayk7XFxuK1xcdFxcdGlmICghcHJldl9yYmUpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LyogRm9yIGFub255bW91cyBzZXRzLCB3aGVuIGFkamFjZW50IHJhbmdlcyBhcmUgZm91bmQsXFxuIFxcdFxcdCAqIHRoZSBlbmQgZWxlbWVudCBpcyBub3QgYWRkZWQgdG8gdGhlIHNldCB0byBwYWNrIHRoZSBzZXRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTQ6NDMuMzQyNjMxNzAyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQwMjc5MjQwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICAgIFwiX19uZl90YWJsZXNfYWJvcnRcIixcbiAgICBcIm5mdF9zZXRfY29tbWl0X3VwZGF0ZVwiLFxuICAgIFwibmZ0X3JidHJlZV9jb21taXRcIixcbiAgICBcIm5mdF9yYnRyZWVfZ2Nfc2NhblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZGM3ODUzODk3ZWUwODMzNDJmMzlkNWI5NWQxZWI4M2RjOTQyMjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgNSAxNDo1NDo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggM2JlNjEyMTQ1YzEzMC4uMjM4ZjZlY2I5MGU5OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtMTk0OSw2ICsxOTQ5LDcgQEAgc3RydWN0IG5mdGFibGVzX3Blcm5ldCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRiaW5kaW5nX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRtb2R1bGVfbGlzdDtcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdG5vdGlmeV9saXN0O1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0c2V0X3VwZGF0ZV9saXN0O1xuIFx0c3RydWN0IG11dGV4XHRcdGNvbW1pdF9tdXRleDtcbiBcdHU2NFx0XHRcdHRhYmxlX2hhbmRsZTtcbiBcdHU2NFx0XHRcdHRzdGFtcDtcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5pbmRleCBhZjM1N2Y2YzUwNzBiLi5hNzAwNjcyNWMzMDc1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG5AQCAtNTk1LDEwICs1OTUsMTUgQEAgc3RhdGljIHZvaWQgbmZ0X3RyYW5zX2NvbW1pdF9saXN0X2FkZF90YWlsKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90cmFucyAqdHJcbiBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW0oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcbiB7XG4gXHRzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0ID0gbmZ0X3Blcm5ldChuZXQpO1xuK1x0c3RydWN0IG5mdF90cmFuc19lbGVtICp0ZTtcbiBcbiBcdFdBUk5fT05fT05DRSh0cmFucy1cdTAwM2Vtc2dfdHlwZSAhPSBORlRfTVNHX05FV1NFVEVMRU0gXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgdHJhbnMtXHUwMDNlbXNnX3R5cGUgIT0gTkZUX01TR19ERUxTRVRFTEVNKTtcbiBcbitcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbitcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdCBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKVxuK1x0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSwgXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpO1xuK1xuIFx0aWYgKG5mdF90cmFuc190cnlfY29sbGFwc2UobmZ0X25ldCwgdHJhbnMpKSB7XG4gXHRcdGtmcmVlKHRyYW5zKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTEwODQ4LDExICsxMDg1MywxNCBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2xvZyhzdHJ1Y3QgbGlzdF9oZWFkICphZGwsIHUzMiBnZW5lcmF0aW9uKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxuK3N0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0LCBib29sIGVhcmx5X2NvbW1pdClcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldCAqc2V0LCAqbmV4dDtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIHNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXQsIG5leHQsIFx1MDAyNm5mdF9uZXQtXHUwMDNlc2V0X3VwZGF0ZV9saXN0LCBwZW5kaW5nX3VwZGF0ZSkge1xuK1x0XHRpZiAoc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydF9za2lwX3JlbW92YWwgXHUwMDI2XHUwMDI2IGVhcmx5X2NvbW1pdClcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFxuIFx0XHRpZiAoIXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0IHx8IHNldC1cdTAwM2VkZWFkKVxuQEAgLTEwODg1LDcgKzEwODkzLDYgQEAgc3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHN0cnVjdCBuZnRfdHJhbnNfYmluZGluZyAqdHJhbnNfYmluZGluZztcbiBcdHN0cnVjdCBuZnRfdHJhbnMgKnRyYW5zLCAqbmV4dDtcbiBcdHVuc2lnbmVkIGludCBiYXNlX3NlcSwgZ2Nfc2VxO1xuLVx0TElTVF9IRUFEKHNldF91cGRhdGVfbGlzdCk7XG4gXHRzdHJ1Y3QgbmZ0X3RyYW5zX2VsZW0gKnRlO1xuIFx0c3RydWN0IG5mdF9jaGFpbiAqY2hhaW47XG4gXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZTtcbkBAIC0xMDk2MCw2ICsxMDk2Nyw4IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHQvKiBzdGVwIDIuICBNYWtlIHJ1bGVzX2dlbl9YIHZpc2libGUgdG8gcGFja2V0IHBhdGggKi9cbitcdG5mdF9zZXRfY29tbWl0X3VwZGF0ZShuZnRfbmV0LCB0cnVlKTtcbitcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkodGFibGUsIFx1MDAyNm5mdF9uZXQtXHUwMDNldGFibGVzLCBsaXN0KSB7XG4gXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFx1MDAyNnRhYmxlLVx1MDAzZWNoYWlucywgbGlzdClcbiBcdFx0XHRuZl90YWJsZXNfY29tbWl0X2NoYWluKG5ldCwgY2hhaW4pO1xuQEAgLTExMDkxLDI3ICsxMTEwMCwxMyBAQCBzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfTkVXU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4tXG4gXHRcdFx0bmZ0X3RyYW5zX2VsZW1zX2FkZChcdTAwMjZjdHgsIHRlKTtcbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2Vjb21taXQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlKSkge1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4tXHRcdFx0fVxuIFx0XHRcdG5mdF90cmFuc19kZXN0cm95KHRyYW5zKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBORlRfTVNHX0RFTFNFVEVMRU06XG4gXHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4tXG4gXHRcdFx0bmZ0X3RyYW5zX2VsZW1zX3JlbW92ZShcdTAwMjZjdHgsIHRlKTtcbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2Vjb21taXQgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIGxpc3RfZW1wdHkoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlKSkge1xuLVx0XHRcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUsXG4tXHRcdFx0XHRcdCAgICAgIFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4tXHRcdFx0fVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfTkVXT0JKOlxuIFx0XHRcdGlmIChuZnRfdHJhbnNfb2JqX3VwZGF0ZSh0cmFucykpIHtcbkBAIC0xMTE4MCw3ICsxMTE3NSw3IEBAIHN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG5mdF9zZXRfY29tbWl0X3VwZGF0ZShcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuK1x0bmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIGZhbHNlKTtcbiBcbiBcdG5mdF9jb21taXRfbm90aWZ5KG5ldCwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XG4gXHRuZl90YWJsZXNfZ2VuX25vdGlmeShuZXQsIHNrYiwgTkZUX01TR19ORVdHRU4pO1xuQEAgLTExMjQ3LDExICsxMTI0MiwxMSBAQCBzdGF0aWMgdm9pZCBuZl90YWJsZXNfYWJvcnRfcmVsZWFzZShzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucylcbiBcdGtmcmVlKHRyYW5zKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbmZ0X3NldF9hYm9ydF91cGRhdGUoc3RydWN0IGxpc3RfaGVhZCAqc2V0X3VwZGF0ZV9saXN0KVxuK3N0YXRpYyB2b2lkIG5mdF9zZXRfYWJvcnRfdXBkYXRlKHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpXG4ge1xuIFx0c3RydWN0IG5mdF9zZXQgKnNldCwgKm5leHQ7XG4gXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBzZXRfdXBkYXRlX2xpc3QsIHBlbmRpbmdfdXBkYXRlKSB7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2V0LCBuZXh0LCBcdTAwMjZuZnRfbmV0LVx1MDAzZXNldF91cGRhdGVfbGlzdCwgcGVuZGluZ191cGRhdGUpIHtcbiBcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFxuIFx0XHRpZiAoIXNldC1cdTAwM2VvcHMtXHUwMDNlYWJvcnQpXG5AQCAtMTEzODYsMzMgKzExMzgxLDIyIEBAIHN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ORVdTRVRFTEVNOlxuK1x0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAobmZ0X3RyYW5zX2VsZW1fc2V0X2JvdW5kKHRyYW5zKSkge1xuK1x0XHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpO1xuIFx0XHRcdFx0bmZ0X3RyYW5zX2Rlc3Ryb3kodHJhbnMpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuLVx0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAoIW5mdF90cmFuc19lbGVtc19uZXdfYWJvcnQoXHUwMDI2Y3R4LCB0ZSkpIHtcbiBcdFx0XHRcdG5mdF90cmFuc19kZXN0cm95KHRyYW5zKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHRpZiAodGUtXHUwMDNlc2V0LVx1MDAzZW9wcy1cdTAwM2VhYm9ydCBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgbGlzdF9lbXB0eShcdTAwMjZ0ZS1cdTAwM2VzZXQtXHUwMDNlcGVuZGluZ191cGRhdGUpKSB7XG4tXHRcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSxcbi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2c2V0X3VwZGF0ZV9saXN0KTtcbi1cdFx0XHR9XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRjYXNlIE5GVF9NU0dfREVTVFJPWVNFVEVMRU06XG4gXHRcdFx0dGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpO1xuIFxuIFx0XHRcdG5mdF90cmFuc19lbGVtc19kZXN0cm95X2Fib3J0KFx1MDAyNmN0eCwgdGUpO1xuLVxuLVx0XHRcdGlmICh0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWFib3J0IFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgICBsaXN0X2VtcHR5KFx1MDAyNnRlLVx1MDAzZXNldC1cdTAwM2VwZW5kaW5nX3VwZGF0ZSkpIHtcbi1cdFx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2dGUtXHUwMDNlc2V0LVx1MDAzZXBlbmRpbmdfdXBkYXRlLFxuLVx0XHRcdFx0XHQgICAgICBcdTAwMjZzZXRfdXBkYXRlX2xpc3QpO1xuLVx0XHRcdH1cbiBcdFx0XHRuZnRfdHJhbnNfZGVzdHJveSh0cmFucyk7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ORVdPQko6XG5AQCAtMTE0NTgsNyArMTE0NDIsNyBAQCBzdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4gXG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2Vjb21taXRfc2V0X2xpc3QpKTtcbiBcbi1cdG5mdF9zZXRfYWJvcnRfdXBkYXRlKFx1MDAyNnNldF91cGRhdGVfbGlzdCk7XG4rXHRuZnRfc2V0X2Fib3J0X3VwZGF0ZShuZnRfbmV0KTtcbiBcbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuQEAgLTEyMTQyLDYgKzEyMTI2LDcgQEAgc3RhdGljIGludCBfX25ldF9pbml0IG5mX3RhYmxlc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZWJpbmRpbmdfbGlzdCk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuZnRfbmV0LVx1MDAzZW1vZHVsZV9saXN0KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNm5mdF9uZXQtXHUwMDNlbm90aWZ5X2xpc3QpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZuZnRfbmV0LVx1MDAzZWNvbW1pdF9tdXRleCk7XG4gXHRuZXQtXHUwMDNlbmZ0LmJhc2Vfc2VxID0gMTtcbiBcdG5mdF9uZXQtXHUwMDNlZ2Nfc2VxID0gMDtcbkBAIC0xMjE4Niw2ICsxMjE3MSw3IEBAIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgbmZfdGFibGVzX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZuZnRfbmV0LVx1MDAzZW1vZHVsZV9saXN0KSk7XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2Vub3RpZnlfbGlzdCkpO1xuIFx0V0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm5mdF9uZXQtXHUwMDNlZGVzdHJveV9saXN0KSk7XG4rXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bmZ0X25ldC1cdTAwM2VzZXRfdXBkYXRlX2xpc3QpKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbmZfdGFibGVzX2V4aXRfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbmluZGV4IDYyMjJlOWJiNTdiYzkuLmNmNjQzZTkxNzc5MWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1xuQEAgLTg5NCw2ICs4OTQsNyBAQCBzdGF0aWMgdm9pZCBuZnRfcmJ0cmVlX2djX3NjYW4oc3RydWN0IG5mdF9zZXQgKnNldClcbiBcdHN0cnVjdCBuZnRfcmJ0cmVlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7XG4gXHRzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtICpyYmUsICpyYmVfZW5kID0gTlVMTDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZzZXQtXHUwMDNlbmV0KTtcbitcdHU4IGdlbm1hc2sgPSBuZnRfZ2VubWFza19uZXh0KG5ldCk7XG4gXHR1NjQgdHN0YW1wID0gbmZ0X25ldF90c3RhbXAobmV0KTtcbiBcdHN0cnVjdCByYl9ub2RlICpub2RlLCAqbmV4dDtcbiBcbkBAIC05MDEsNiArOTAyLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuIFx0XHRuZXh0ID0gcmJfbmV4dChub2RlKTtcbiBcbiBcdFx0cmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4rXHRcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZyYmUtXHUwMDNlZXh0LCBnZW5tYXNrKSkge1xuK1x0XHRcdHJiZV9lbmQgPSBOVUxMO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4gXG4gXHRcdC8qIGVsZW1lbnRzIGFyZSByZXZlcnNlZCBpbiB0aGUgcmJ0cmVlIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsXG4gXHRcdCAqIGZyb20gaGlnaGVzdCB0byBsb3dlc3QgdmFsdWUsIHRoYXQgaXMgd2h5IGVuZCBlbGVtZW50IGlzXG5AQCAtMTAzNiwxMCArMTA0MSwzMiBAQCBzdGF0aWMgdm9pZCBuZnRfYXJyYXlfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3VfaGVhZClcbiBcdF9fbmZ0X2FycmF5X2ZyZWUoYXJyYXkpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqXG4rX19uZnRfcmJ0cmVlX3ByZXZfYWN0aXZlKHN0cnVjdCByYl9ub2RlICoqcG5vZGUsIHU4IGdlbm1hc2spXG4re1xuK1x0c3RydWN0IG5mdF9yYnRyZWVfZWxlbSAqcHJldl9yYmU7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9ICpwbm9kZTtcbitcbitcdHdoaWxlIChub2RlKSB7XG4rXHRcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4rXHRcdGlmICghbmZ0X3NldF9lbGVtX2FjdGl2ZShcdTAwMjZwcmV2X3JiZS1cdTAwM2VleHQsIGdlbm1hc2spKSB7XG4rXHRcdFx0bm9kZSA9IHJiX3ByZXYobm9kZSk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbitcdFx0KnBub2RlID0gbm9kZTtcbitcdFx0cmV0dXJuIHByZXZfcmJlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4ge1xuIFx0c3RydWN0IG5mdF9yYnRyZWUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTtcbiBcdHN0cnVjdCBuZnRfcmJ0cmVlX2VsZW0gKnJiZSwgKnByZXZfcmJlO1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KFx1MDAyNnNldC1cdTAwM2VuZXQpO1xuK1x0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX25leHQobmV0KTtcbiBcdHN0cnVjdCBuZnRfYXJyYXkgKm9sZDtcbiBcdHUzMiBudW1faW50ZXJ2YWxzID0gMDtcbiBcdHN0cnVjdCByYl9ub2RlICpub2RlO1xuQEAgLTEwNjEsMTIgKzEwODgsMTIgQEAgc3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcbiBcbiBcdC8qIFJldmVyc2Ugd2FsayB0byBjcmVhdGUgYW4gYXJyYXkgZnJvbSBzbWFsbGVyIHRvIGxhcmdlc3QgaW50ZXJ2YWwuICovXG4gXHRub2RlID0gcmJfbGFzdChcdTAwMjZwcml2LVx1MDAzZXJvb3QpO1xuLVx0aWYgKG5vZGUpXG4tXHRcdHByZXZfcmJlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IG5mdF9yYnRyZWVfZWxlbSwgbm9kZSk7XG4tXHRlbHNlXG4tXHRcdHByZXZfcmJlID0gTlVMTDtcbiBcbi1cdHdoaWxlIChwcmV2X3JiZSkge1xuK1x0d2hpbGUgKG5vZGUpIHtcbitcdFx0cHJldl9yYmUgPSBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmUoXHUwMDI2bm9kZSwgZ2VubWFzayk7XG4rXHRcdGlmICghcHJldl9yYmUpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdHJiZSA9IHByZXZfcmJlO1xuIFxuIFx0XHRpZiAobmZ0X3JidHJlZV9pbnRlcnZhbF9zdGFydChyYmUpKVxuQEAgLTEwODMsNyArMTExMCw5IEBAIHN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfY29tbWl0KHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4gXHRcdGlmICghbm9kZSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0cHJldl9yYmUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgbmZ0X3JidHJlZV9lbGVtLCBub2RlKTtcbitcdFx0cHJldl9yYmUgPSBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmUoXHUwMDI2bm9kZSwgZ2VubWFzayk7XG4rXHRcdGlmICghcHJldl9yYmUpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qIEZvciBhbm9ueW1vdXMgc2V0cywgd2hlbiBhZGphY2VudCByYW5nZXMgYXJlIGZvdW5kLFxuIFx0XHQgKiB0aGUgZW5kIGVsZW1lbnQgaXMgbm90IGFkZGVkIHRvIHRoZSBzZXQgdG8gcGFjayB0aGUgc2V0XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NDo0My4zNDI2MzI5NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg0MDczMjY3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZvY3VzOiBOZXRmaWx0ZXIncyBORlRhYmxlcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG5mX3RhYmxlc19hcGkuY2AgYW5kIGBuZnRfc2V0X3JidHJlZS5jYCwgYW5kIGl0J3MgYSBjb3JlIG5ldGZpbHRlciBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBgc2V0X3VwZGF0ZV9saXN0YCBpcyBtYW5hZ2VkLiAgSW5zdGVhZCBvZiBiZWluZyBhIGxvY2FsIHZhcmlhYmxlIHdpdGhpbiBgbmZfdGFibGVzX2NvbW1pdGAsIGl0J3MgYmVlbiBtb3ZlZCB0byBgbmZ0YWJsZXNfcGVybmV0YC4gVGhpcyBzaGlmdCBhbG9uZSBzY3JlYW1zIGZvciBmdXp6aW5nLiAgUGx1cywgdGhlIHBhdGNoIHRvdWNoZXMgYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAsIGluY29ycG9yYXRpbmcgY2hlY2tzIGZvciBlbGVtZW50IGFjdGl2aXR5IHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gIFRoZXNlIGFyZSBkZWZpbml0ZWx5IHBvaW50cyBvZiBpbnRlcmVzdCwgZnVuY3Rpb25hbGx5IHNwZWFraW5nLlxuXG5TbywgbGV0J3MgbmFpbCBkb3duIHdoaWNoIHNwZWNpZmljIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHRhcmdldCB3aXRoIHRoZSBmdXp6aW5nLiAgSW4gYG5mX3RhYmxlc19hcGkuY2AsIEknbSBsb29raW5nIGF0OlxuXG4qICAgYG5mX3RhYmxlc19jb21taXRgXG4qICAgYF9fbmZfdGFibGVzX2Fib3J0YFxuKiAgIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gXG4qICAgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWBcbiogICBgbmZ0X3NldF9hYm9ydF91cGRhdGVgXG5cbkFuZCB0aGVuLCBpbiBgbmZ0X3NldF9yYnRyZWUuY2AsIHdlJ3ZlIGdvdDpcblxuKiAgIGBuZnRfcmJ0cmVlX2djX3NjYW5gXG4qICAgYG5mdF9yYnRyZWVfY29tbWl0YFxuKiAgIGBfX25mdF9yYnRyZWVfcHJldl9hY3RpdmVgXG5cbk5vdywgYmVmb3JlIHdlIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRob3NlIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIG5vdC4gYG5mX3RhYmxlc19jb21taXRgIGlzIHRoZSBmaXJzdCBvbmUgSSdsbCBjaGVjay4gIFl1cCwgbG9va3MgbGlrZSBpdCdzIHN0YXRpYy4gTGV0J3MgbWFrZSBzdXJlIEknbSBjb3JyZWN0IGluIHRoYXQgYXNzdW1wdGlvbiwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NDo1NC4xODMzNjc1NTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MjYwNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDI5MT1FWFBPUlRfU1lNQk9MX0dQTChuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDI5Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDI5MzpzdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZnRfY2hhaW4gKmNoYWluKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMjk0LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzY3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzY4OnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzY5LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzgzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzg0OnN0YXRpYyB2b2lkIF9fbmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzKHN0cnVjdCByY3VfaGVhZCAqaClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM4NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDM5MC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDM5MTpzdGF0aWMgdm9pZCBuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKHN0cnVjdCBuZnRfcnVsZV9ibG9iICpibG9iKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzkyLXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMzk4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMzk5OlxcdGNhbGxfcmN1KFxcdTAwMjZsYXN0LVxcdTAwM2VoLCBfX25mX3RhYmxlc19jb21taXRfY2hhaW5fZnJlZV9ydWxlcyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA0MDAtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDAyOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfY2hhaW4oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbilcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQwMy17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNC1cXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoY2hhaW4tXFx1MDAzZWJsb2JfZ2VuXzEsIGcwKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQyNTpcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQyNi1cXHRcXHR9IGVsc2Uge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI3LVxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihjaGFpbi1cXHUwMDNlYmxvYl9nZW5fMCwgZzEpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNDI4OlxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fZnJlZV9ydWxlc19vbGQoZzApO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDI5LVxcdFxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNDQ0LVxcdGlmIChuZXh0X2dlbmJpdClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDQ0NTpcXHRcXHRuZl90YWJsZXNfY29tbWl0X2NoYWluX2ZyZWVfcnVsZXNfb2xkKGcxKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDQ0Ni1cXHRlbHNlXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA0NDc6XFx0XFx0bmZfdGFibGVzX2NvbW1pdF9jaGFpbl9mcmVlX3J1bGVzX29sZChnMCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA0NDgtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA2OTc9c3RhdGljIHZvaWQgbmZfdGFibGVzX21vZHVsZV9hdXRvbG9hZF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzA5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNzEwOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfcmVsZWFzZShzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3MTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA3NDQ9c3RhdGljIHZvaWQgbmZ0X2NvbW1pdF9ub3RpZnkoc3RydWN0IG5ldCAqbmV0LCB1MzIgcG9ydGlkKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3NzktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA3ODA6c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2FsbG9jKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDc4MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZ0X3RhYmxlICp0YWJsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwNzk2LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwNzk3OnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICphZGwpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA3OTgte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MDktICovXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MTA6c3RhdGljIHVuc2lnbmVkIGludCBuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2VudHJ5Y291bnQoY29uc3Qgc3RydWN0IG5mdF90cmFucyAqdHJhbnMpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MjAtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MjE6c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9jb2xsZWN0KHN0cnVjdCBsaXN0X2hlYWQgKmFkbCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDgyMi1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3RyYW5zICp0cmFucywgdTMyIG9wKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MzMtZm91bmQ6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA4MzQ6XFx0YWRwLVxcdTAwM2VlbnRyaWVzICs9IG5mX3RhYmxlc19jb21taXRfYXVkaXRfZW50cnljb3VudCh0cmFucyk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4MzUtXFx0aWYgKCFhZHAtXFx1MDAzZW9wIHx8IGFkcC1cXHUwMDNlb3AgXFx1MDAzZSBvcClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODQwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODQxOnN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCwgdTMyIGdlbmVyYXRpb24pXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4NDIte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4ODQ9c3RhdGljIHZvaWQgbmZ0X2djX3NlcV9lbmQoc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCwgdW5zaWduZWQgaW50IGdjX3NlcSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwODg4LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODg5OnN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4OTAte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NDktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5NTA6XFx0XFx0cmV0ID0gbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9hbGxvYyhcXHUwMDI2YWRsLCB0YWJsZSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NTEtXFx0XFx0aWYgKHJldCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTUyOlxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk1MzpcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2ZyZWUoXFx1MDAyNmFkbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NTQtXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTU5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTYwOlxcdFxcdFxcdHJldCA9IG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZShuZXQsIGNoYWluKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk2MS1cXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTYyOlxcdFxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW5fcHJlcGFyZV9jYW5jZWwobmV0KTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDk2MzpcXHRcXHRcXHRcXHRuZl90YWJsZXNfY29tbWl0X2F1ZGl0X2ZyZWUoXFx1MDAyNmFkbCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NjQtXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTczLVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY2hhaW4sIFxcdTAwMjZ0YWJsZS1cXHUwMDNlY2hhaW5zLCBsaXN0KVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwOTc0OlxcdFxcdFxcdG5mX3RhYmxlc19jb21taXRfY2hhaW4obmV0LCBjaGFpbik7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5NzUtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5OTctXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5OTg6XFx0XFx0bmZfdGFibGVzX2NvbW1pdF9hdWRpdF9jb2xsZWN0KFxcdTAwMjZhZGwsIHRyYW5zLCB0cmFucy1cXHUwMDNlbXNnX3R5cGUpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTk5LVxcdFxcdHN3aXRjaCAodHJhbnMtXFx1MDAzZW1zZ190eXBlKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTE4MS1cXHRuZl90YWJsZXNfZ2VuX25vdGlmeShuZXQsIHNrYiwgTkZUX01TR19ORVdHRU4pO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMTgyOlxcdG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKFxcdTAwMjZhZGwsIG5mdF9iYXNlX3NlcShuZXQpKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTE4My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMTg1LVxcdG5mdF9uZXQtXFx1MDAzZXZhbGlkYXRlX3N0YXRlID0gTkZUX1ZBTElEQVRFX1NLSVA7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTExODY6XFx0bmZfdGFibGVzX2NvbW1pdF9yZWxlYXNlKG5ldCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTExODctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTUwNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gbmZfdGFibGVzX3N1YnN5cyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExNTExLVxcdC5jYlxcdFxcdD0gbmZfdGFibGVzX2NiLFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExNTEyOlxcdC5jb21taXRcXHRcXHQ9IG5mX3RhYmxlc19jb21taXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTE1MTMtXFx0LmFib3J0XFx0XFx0PSBuZl90YWJsZXNfYWJvcnQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU0OjU0LjIyNzE5NzMzMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTg3OTY1NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbnNpZGVyaW5nIE5ldGxpbmsgVHJhbnNhY3Rpb24gRW50cnkgUG9pbnRzIGluIGBuZl90YWJsZXNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5mX3RhYmxlc19jb21taXRgLiBJdCdzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIHVzdWFsbHkgYSByZWQgZmxhZyB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZW50cnkgcG9pbnRzIGZvciBuZXRsaW5rIHRyYW5zYWN0aW9ucy4gQnV0IHRoZW4gSSByZW1lbWJlciBpdCdzIHJlZ2lzdGVyZWQgaW4gYG5mX3RhYmxlc19zdWJzeXNgIGFzIGAuY29tbWl0ID0gbmZfdGFibGVzX2NvbW1pdGAuIFRoaXMgc3VnZ2VzdHMgdGhhdCBpdCAqaXMqIGFuIGVudHJ5IHBvaW50LiBUaGUgZG9jdW1lbnRhdGlvbiBlbXBoYXNpemVzIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucy4gSG93ZXZlciwgYG5mX3RhYmxlc19jb21taXRgIGlzIGNsZWFybHkgYSAqbWFzc2l2ZSogZnVuY3Rpb24uIFRoZSBjb21waWxlciBkZWZpbml0ZWx5IHdvbid0IGJlIGlubGluaW5nIHRoYXQuIEl0IHNlZW1zIHRvIGJlIHRoZSBtYWluIHBvaW50IG9mIGVudHJ5LCB3aGljaCBtYWtlcyB0aGUgc3RhdGljIGRlY2xhcmF0aW9uIGxlc3MgY29uY2VybmluZywgYnV0IEkgc3RpbGwgd2FudCB0byBjaGVjay4gTWF5YmUgdGhlcmUncyBhIGJldHRlciBvcHRpb24gbGlrZSBgbmZuZXRsaW5rX3Jjdl9iYXRjaGAgSSBjb3VsZCBiZSB1c2luZz8gTm8sIGBuZl90YWJsZXNfY29tbWl0YCBpcyBmaW5lLCBnaXZlbiB0aGF0IGl0IGlzICpub3QqIGlubGluZWQuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgbG9vayBhdCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYC4gWXVwLCB0aGF0J3Mgc3RhdGljLiBPa2F5LCBzbyBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIHRoaW5nLiBCdXQgaXMgdGhlcmUgYW5vdGhlciAqbm9uLXN0YXRpYyogZnVuY3Rpb24gaW4gdGhlIHZpY2luaXR5PyBMZXQncyBjaGVjayBgbmZ0X3NldF9yYnRyZWUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4NjAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTU6MDUuODE1MTY1NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1OTE0MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3JidHJlZV9jb21taXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYz0xMDQ1PV9fbmZ0X3JidHJlZV9wcmV2X2FjdGl2ZShzdHJ1Y3QgcmJfbm9kZSAqKnBub2RlLCB1OCBnZW5tYXNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEwNjMtXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjEwNjQ6c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTA2NS17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9MTIwOT1jb25zdCBzdHJ1Y3QgbmZ0X3NldF90eXBlIG5mdF9zZXRfcmJ0cmVlX3R5cGUgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmMtMTIyMS1cXHRcXHQuYWN0aXZhdGVcXHQ9IG5mdF9yYnRyZWVfYWN0aXZhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jOjEyMjI6XFx0XFx0LmNvbW1pdFxcdFxcdD0gbmZ0X3JidHJlZV9jb21taXQsXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTEyMjMtXFx0XFx0LmFib3J0XFx0XFx0PSBuZnRfcmJ0cmVlX2Fib3J0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NTowNS44NzE3NjM2MjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU2OTQ4NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5GVGFibGVzIFJCLVRyZWUgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gKm5mdF9yYnRyZWVfY29tbWl0KiBpcyBkZWNsYXJlZCBhcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgZmFpcmx5IHN0YW5kYXJkIGZvciBpbnRlcm5hbCBoZWxwZXJzLiBCdXQsIGFuZCB0aGlzIGlzIGEga2V5IHBvaW50LCBpdCdzICpyZWdpc3RlcmVkKiB2aWEgYG5mdF9zZXRfcmJ0cmVlX3R5cGVgLiBUaGF0J3MgaG93IGl0IGdldHMgaG9va2VkIGludG8gdGhlIG92ZXJhbGwgTkZUYWJsZXMgZnJhbWV3b3JrLiBTbyBpdCdzIGVmZmVjdGl2ZWx5IFwicHVibGljXCIgaW4gdGVybXMgb2YgYmVpbmcgdXNlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBldmVuIGlmIGl0cyBkZWZpbml0aW9uIGlzIGtlcHQgd2l0aGluIHRoZSBmaWxlLiBHb29kLiBUaGF0IGRlc2lnbiBkZWNpc2lvbiBtYWtlcyBzZW5zZSB0byBtZS4gS2VlcHMgdGhpbmdzIGNsZWFuLlxuXG5Ob3csIHRoYXQgbGVhZHMgbWUgdG8gd29uZGVyIGFib3V0IGl0cyBjb3VudGVycGFydCBpbiBnYXJiYWdlIGNvbGxlY3Rpb24uICpuZnRfcmJ0cmVlX2djX3NjYW4qLi4uIGlzIGl0IHJlZ2lzdGVyZWQgYW55d2hlcmUgbGlrZSBgbmZ0X3JidHJlZV9jb21taXRgPyBJcyBpdCBhbHNvIHN0YXRpYyBidXQgcGFydCBvZiBhIHJlZ2lzdHJhdGlvbj8gT3IgaXMgaXQgY2FsbGVkIGRpcmVjdGx5IGZyb20gc29tZXdoZXJlIGVsc2U/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBjb21taXQgYW5kIGdjIGFuZCBjb25maXJtIHRoaXMuIEEgcXVpY2sgbG9vayBhdCB0aGUgc291cmNlIHdvdWxkIHJldmVhbCB0aGlzIHJlbGF0aW9uc2hpcCBhbmQgdGhlIG92ZXJhbGwgZGVzaWduLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgYXJlIG5vcm1hbGx5IGFzc29jaWF0ZWQgd2l0aCBnYXJiYWdlIGNvbGxlY3Rpb24gaW4gUkItdHJlZXMsIGFuZCBJIG5lZWQgdG8gZXN0YWJsaXNoIGlmIGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkIGhlcmUuIFRoYXQgd291bGQgYmUgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY0NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU1OjEyLjAyODcxNTY2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA1NDk5MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3JidHJlZV9nY19zY2FuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM9ODYyPXN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfd2Fsayhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jLTg5MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9zZXRfcmJ0cmVlLmM6ODkyOnN0YXRpYyB2b2lkIG5mdF9yYnRyZWVfZ2Nfc2NhbihzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy04OTMte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfc2V0X3JidHJlZS5jPTEwNjQ9c3RhdGljIHZvaWQgbmZ0X3JidHJlZV9jb21taXQoc3RydWN0IG5mdF9zZXQgKnNldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMDg2LVxcdGlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHByaXYtXFx1MDAzZWxhc3RfZ2MgKyBuZnRfc2V0X2djX2ludGVydmFsKHNldCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYzoxMDg3OlxcdFxcdG5mdF9yYnRyZWVfZ2Nfc2NhbihzZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3NldF9yYnRyZWUuYy0xMDg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NToxMi4zNDkyNzE1MzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTc1MDAzMDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVHJhbnNhY3Rpb25hbCBDb21taXQgYW5kIEFib3J0IFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGVzZSB0cmFuc2FjdGlvbnMgYXJlIGNvbW1pdHRlZCBhbmQgYWJvcnRlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHJidHJlZS4gVGhpcyBzZWVtcyB0byBiZSBjYWxsZWQgZnJvbSBib3RoIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djYCwgaW50ZXJlc3RpbmcuLi4gYW5kIEkgc2VlIHRoYXQgYG5mdF9yYnRyZWVfY29tbWl0YCBpcywgaW4gZmFjdCwgZGVjbGFyZWQgYXMgc3RhdGljLiBcblxuTm93LCBJJ20gdGhpbmtpbmcsIGNhbiBJIGxldmVyYWdlIHRoZSBleGlzdGluZyBgbmZfdGFibGVzX2NvbW1pdGAgYW5kIGBfX25mX3RhYmxlc19hYm9ydGAgZm9yIHRoaXM/IFRoZXNlIHNlZW0gbGlrZSBsb2dpY2FsIGNhbmRpZGF0ZXMuIE9rYXksIGxldCBtZSBxdWlja2x5IHZlcmlmeS4uLiBZdXAsIGJvdGggYG5mX3RhYmxlc19jb21taXRgIGFuZCBgbmZfdGFibGVzX2Fib3J0YCBhcmUgYWxzbyBzdGF0aWMuIEhtLCB0aGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nLlxuXG5XYWl0IGEgc2Vjb25kLi4uIGl0J3MgYG5mbmV0bGlua19yY3ZfYmF0Y2hgIHRoYXQgdWx0aW1hdGVseSBpbnZva2VzIHRoZSBjb21taXQgYW5kIGFib3J0IGZ1bmN0aW9ucyB0aHJvdWdoIGAuY29tbWl0YCBhbmQgYC5hYm9ydGAgY2FsbHMuIE9rYXksIHRoYXQgbWFrZXMgbW9yZSBzZW5zZSBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncyEgSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBuZm5ldGxpbmsuY2Agbm93LCBzbyBJIGhhdmUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY0LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU1OjE3LjkyNDI3ODAwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQyMjU1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZuZXRsaW5rX3Jjdl9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM9MzYzPWVudW0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYy0zNjgtXFxubmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYzozNjk6c3RhdGljIHZvaWQgbmZuZXRsaW5rX3Jjdl9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTM3MC1cXHRcXHRcXHRcXHR1MTYgc3Vic3lzX2lkLCB1MzIgZ2VuaWQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jPTYxMj1zdGF0aWMgdm9pZCBuZm5ldGxpbmtfcmN2X3NrYl9iYXRjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMtNjQ2LVxcbm5ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmM6NjQ3OlxcdG5mbmV0bGlua19yY3ZfYmF0Y2goc2tiLCBubGgsIHJlc19pZCwgZ2VuX2lkKTtcXG5uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jLTY0OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE0OjU1OjE3Ljk5ODUyMjgyNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDMzNzE4NDE5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgVGFibGUgQ29tbWl0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBpZGVudGlmeSBrZXkgZW50cnkgcG9pbnRzIGZvciBuZXRmaWx0ZXIgdGFibGUgb3BlcmF0aW9ucy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYSBzaW1wbGUgbGlzdCDigJMgYG5mX3RhYmxlc19jb21taXRgLCBgX19uZl90YWJsZXNfYWJvcnRgLCBgbmZ0X3JidHJlZV9jb21taXRgLCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAg4oCTIHdvdWxkIHN1ZmZpY2UuIEJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIGluc3RydWN0aW9ucyBlbXBoYXNpemluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGxpbmtlciBuZWVkcyBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGZvciB0aGVzZSBmdW5jdGlvbnMuXG5cbmBuZl90YWJsZXNfY29tbWl0YCBpcyBxdWl0ZSBzdWJzdGFudGlhbCwgd2hpY2ggbWFrZXMgaXQgdW5saWtlbHkgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBpbmxpbmUgaXQuIEhvd2V2ZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBmdW5jdGlvbiBpc24ndCBleHBvcnRlZCBvciBkZWZpbmVkIHNvbWV3aGVyZS4gSXQncyBzdGF0aWMsIHNvIHRoYXQncyBub3QgdGhlIGNhc2UuIEkgbmVlZCB0byBmaW5kIHNvbWUgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZSBpbiBgbmZfdGFibGVzX2FwaS5jYC4gSG1tLCB3aGF0IGFib3V0IGBuZl90YWJsZXNfdHJhbnNfZGVzdHJveV9mbHVzaF93b3JrYD8gTm9wZS4gVGhhdCdzIG5vdCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50LlxuXG5HaXZlbiB0aGF0LCBJJ2xsIHN0aWNrIHdpdGggbXkgaW5pdGlhbCBhc3Nlc3NtZW50OiBgbmZfdGFibGVzX2NvbW1pdGAsIGBfX25mX3RhYmxlc19hYm9ydGAsIGBuZnRfcmJ0cmVlX2NvbW1pdGAsIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCBzZWVtIHRvIGJlIHRoZSBtb3N0IHJlbGV2YW50IGVudHJ5IHBvaW50cy4gSSBzaG91bGQgYWxzbyBpbmNsdWRlIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgIGFuZCBgbmZ0X3NldF9hYm9ydF91cGRhdGVgIHNpbmNlIHRoZXkncmUgcmVsYXRlZC4gRmluYWxseSwgSSdsbCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIGBuZl90YWJsZXNgIGZlYXR1cmUgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTU6MjguMzM1NzA5NzkyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDkwMjY4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNDo1NToyOC40MjY2MTgyMTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU2NDAyOTA2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBOZXRmaWx0ZXIgc3R1ZmYsIGFuZCBJIHNlZSBgTkZfVEFCTEVTYCBpbiB0aGUgY29uZmlndXJhdGlvbi4gTWFrZXMgc2Vuc2UuIEJ1dCB3YWl0IGEgbWludXRlLCBJJ20ganVzdCBsb29raW5nIGF0IGBuZnRfc2V0X3JidHJlZWAsIGFuZCBJJ20gcHJldHR5IHN1cmUgdGhhdCdzIGEga2V5IGNvbXBvbmVudCBvZiBOZXRmaWx0ZXIncyBzZXQgZnVuY3Rpb25hbGl0eS4gU28gSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVwZW5kZW5jeS4gSSB0aGluayBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYG5mdF9zZXRfcmJ0cmVlYCBpcyBhY3R1YWxseSBsaW5rZWQgaW50byBgTkZfVEFCTEVTYC4gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIE9rYXksIHRpbWUgdG8gY2hlY2sgdGhlIGBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgcmV2ZWFsIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCBjb25maXJtLCBvciBjb3JyZWN0LCBteSB1bmRlcnN0YW5kaW5nLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTY6MDQuMDY2OTExNTA1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIzNTg4MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3NldF9yYnRyZWVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkyLVxcdFxcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MzpcXHRcXHQgIG5mdF9zZXRfaGFzaC5vIG5mdF9zZXRfYml0bWFwLm8gbmZ0X3NldF9yYnRyZWUubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05NC1cXHRcXHQgIG5mdF9zZXRfcGlwYXBvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTY6MDQuMjU5Mjc3MDk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyOTU5MDI4NzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOZXRmaWx0ZXIgbmZfdGFibGVzIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHRhcmdldGluZyBgbmZfdGFibGVzYC4gVGhhdCdzIGJ1aWx0IGludG8gYG5mX3RhYmxlc2AsIHNvIGVuYWJsaW5nIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24sIGBORl9UQUJMRVNgLCBpcyB0aGUga2V5LiBMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeS4uLiB5ZXAsIGBORl9UQUJMRVNgIGl0c2VsZiBoYXMgZGVwZW5kZW5jaWVzIG9uIGBORVRGSUxURVJgIGFuZCBgTkVURklMVEVSX05FVExJTktgLCBidXQgZW5hYmxpbmcgYE5GX1RBQkxFU2AgaXMgc3VmZmljaWVudCB0byBlbmFibGUgdGhlc2UgZGVwZW5kZW5jaWVzLiBHb29kLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBJdCBzZWVtcyBsaWtlIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgb2YgaG93IHNldCB1cGRhdGVzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgYG5mX3RhYmxlc2AgZnJhbWV3b3JrLiBUaGUgY3JpdGljYWwgY2hhbmdlIGludm9sdmVzIG1vdmluZyBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgd2l0aGluIGBuZl90YWJsZXNfY29tbWl0YCBhbmQgYF9fbmZfdGFibGVzX2Fib3J0YCB0byB0aGUgYG5mdGFibGVzX3Blcm5ldGAgc3RydWN0LiBUaGlzIGlzIHBlci1uZXQgbmFtZXNwYWNlLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayB0aGlzIGlzIGFib3V0IHBlcnNpc3RlbmNlLCBvciBwZXJoYXBzIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIG9yIG1lbW9yeSBpc3N1ZS4gVGhlIGRlc2NyaXB0aW9uIHN1Z2dlc3RzIGl0IGFkZHMgYHNldF91cGRhdGVfbGlzdGAgdG8gYG5mdGFibGVzX3Blcm5ldGAuXG5cblJpZ2h0LCBJIHNlZSBpdCBub3cuIEluIGBuZnRfdHJhbnNfY29tbWl0X2xpc3RfYWRkX2VsZW1gLCB0aGUgc2V0IGlzIGFkZGVkIHRvIGBuZnRfbmV0LVx1MDAzZXNldF91cGRhdGVfbGlzdGAgaWYgaXQncyBub3QgYWxyZWFkeSB0aGVyZS4gVGhlbiwgYG5mX3RhYmxlc19jb21taXRgIGNhbGxzIGBuZnRfc2V0X2NvbW1pdF91cGRhdGUobmZ0X25ldCwgdHJ1ZSlgIGJlZm9yZSB0aGUgdGFibGUgbG9vcCBhbmQgdGhlbiBgbmZ0X3NldF9jb21taXRfdXBkYXRlKG5mdF9uZXQsIGZhbHNlKWAgYWZ0ZXIuIFRoaXMgY2hhbmdlcyBob3cgc2V0IHVwZGF0ZXMgYXJlIGNvbW1pdHRlZC5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIGhvdyBzZXQgdXBkYXRlcyBhcmUgbWFuYWdlZCBkdXJpbmcgdHJhbnNhY3Rpb25zLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGhpZ2ggcHJpb3JpdHkgZm9yIGZ1enppbmcgYmVjYXVzZSBvZiB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgcmFjZSBjb25kaXRpb25zLiBJJ20gZ29pbmcgdG8gd2FudCB0byBmb2N1cyBvbiB0aG9zZSBrZXkgc3ltYm9scyBpbiBhbnkgYW5hbHlzaXMgb2YgdGhlIGNvZGU6IGBuZl90YWJsZXNfY29tbWl0YCwgYF9fbmZfdGFibGVzX2Fib3J0YCwgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAsIGBuZnRfcmJ0cmVlX2NvbW1pdGAsIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYC5cblxuTGV0IG1lIGNoZWNrIHF1aWNrbHkgdG8gc2VlIGlmIGFueSBvZiB0aG9zZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4uLiBZdXAsIGJvdGggYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAgYW5kIGBuZl90YWJsZXNfY29tbWl0YCBhcmUgc3RhdGljLiBTbyBJIHdpbGwga2VlcCB0aG9zZSBpbiBtaW5kLlxuXG5NeSBmaW5hbCB0aG91Z2h0OiB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgbmZfdGFibGVzIGNvcmUgdG8gbW92ZSB0aGUgYHNldF91cGRhdGVfbGlzdGAgZnJvbSBhIGxvY2FsIHZhcmlhYmxlIGluIGBuZl90YWJsZXNfY29tbWl0YCB0byBhIHBlci1uZXQgbmFtZXNwYWNlIGxpc3QgaW4gYG5mdGFibGVzX3Blcm5ldGAuIEl0IGFsc28gdXBkYXRlcyBgbmZ0X3JidHJlZV9jb21taXRgIGFuZCBgbmZ0X3JidHJlZV9nY19zY2FuYCB0byBjaGVjayBmb3IgYWN0aXZlIGVsZW1lbnRzIHVzaW5nIGBuZnRfc2V0X2VsZW1fYWN0aXZlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBuZXRmaWx0ZXIgdHJhbnNhY3Rpb24gYW5kIHNldCBtYW5hZ2VtZW50IGxvZ2ljLCB3aGljaCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgd2VyZSBpbnRyb2R1Y2VkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA5OCwiT3V0cHV0VG9rZW5zIjoyMDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTQ6NTY6MTcuMjE4MzE3MDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTIyMzQ2OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19jb21taXRcIixcbiAgICBcIl9fbmZfdGFibGVzX2Fib3J0XCIsXG4gICAgXCJuZnRfc2V0X2NvbW1pdF91cGRhdGVcIixcbiAgICBcIm5mdF9yYnRyZWVfY29tbWl0XCIsXG4gICAgXCJuZnRfcmJ0cmVlX2djX3NjYW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIG5mX3RhYmxlcyBjb3JlIHRvIG1vdmUgdGhlIGBzZXRfdXBkYXRlX2xpc3RgIGZyb20gYSBsb2NhbCB2YXJpYWJsZSBpbiBgbmZfdGFibGVzX2NvbW1pdGAgdG8gYSBwZXItbmV0IG5hbWVzcGFjZSBsaXN0IGluIGBuZnRhYmxlc19wZXJuZXRgLiBJdCBhbHNvIHVwZGF0ZXMgYG5mdF9yYnRyZWVfY29tbWl0YCBhbmQgYG5mdF9yYnRyZWVfZ2Nfc2NhbmAgdG8gY2hlY2sgZm9yIGFjdGl2ZSBlbGVtZW50cyB1c2luZyBgbmZ0X3NldF9lbGVtX2FjdGl2ZWAuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbmV0ZmlsdGVyIHRyYW5zYWN0aW9uIGFuZCBzZXQgbWFuYWdlbWVudCBsb2dpYywgd2hpY2ggc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfY29tbWl0XCIsXG4gICAgXCJfX25mX3RhYmxlc19hYm9ydFwiLFxuICAgIFwibmZ0X3NldF9jb21taXRfdXBkYXRlXCIsXG4gICAgXCJuZnRfcmJ0cmVlX2NvbW1pdFwiLFxuICAgIFwibmZ0X3JidHJlZV9nY19zY2FuXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBuZl90YWJsZXMgY29yZSB0byBtb3ZlIHRoZSBgc2V0X3VwZGF0ZV9saXN0YCBmcm9tIGEgbG9jYWwgdmFyaWFibGUgaW4gYG5mX3RhYmxlc19jb21taXRgIHRvIGEgcGVyLW5ldCBuYW1lc3BhY2UgbGlzdCBpbiBgbmZ0YWJsZXNfcGVybmV0YC4gSXQgYWxzbyB1cGRhdGVzIGBuZnRfcmJ0cmVlX2NvbW1pdGAgYW5kIGBuZnRfcmJ0cmVlX2djX3NjYW5gIHRvIGNoZWNrIGZvciBhY3RpdmUgZWxlbWVudHMgdXNpbmcgYG5mdF9zZXRfZWxlbV9hY3RpdmVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG5ldGZpbHRlciB0cmFuc2FjdGlvbiBhbmQgc2V0IG1hbmFnZW1lbnQgbG9naWMsIHdoaWNoIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowwjnvq[1] Phase: Succeeded StartedAt: 2026-08-05 14:56:28 +0000 UTC FinishedAt: 2026-08-05 14:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 14:56:28 +0000 UTC FinishedAt: 2026-08-05 14:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2] Phase: Succeeded StartedAt: 2026-08-05 14:56:28 +0000 UTC FinishedAt: 2026-08-05 18:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 14:56:28 +0000 UTC FinishedAt: 2026-08-05 18:41:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 14:56:28 +0000 UTC FinishedAt: 2026-08-05 14:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 14:56:28 +0000 UTC FinishedAt: 2026-08-05 14:56:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowwjnvq/series-workflowwjnvq-convert-artifact-2632358550/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 14:56:39 +0000 UTC FinishedAt: 2026-08-05 15:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 14:56:39 +0000 UTC FinishedAt: 2026-08-05 15:13: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:*ce3c73f9-b433-4370-bf15-4a2bf2f17c54,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-workflowwjnvq/series-workflowwjnvq-convert-artifact-2632358550/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": "6392a191-3307-481f-9c94-302887595273", "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-workflowwjnvq/series-workflowwjnvq-build-action-3317811756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 14:56:39 +0000 UTC FinishedAt: 2026-08-05 15:13:44 +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:*ce3c73f9-b433-4370-bf15-4a2bf2f17c54,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-workflowwjnvq/series-workflowwjnvq-convert-artifact-2632358550/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": "6392a191-3307-481f-9c94-302887595273", "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-workflowwjnvq/series-workflowwjnvq-build-action-3317811756/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 15:13:54 +0000 UTC FinishedAt: 2026-08-05 15:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 15:13:54 +0000 UTC FinishedAt: 2026-08-05 15:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 15:13:54 +0000 UTC FinishedAt: 2026-08-05 15:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 15:13:54 +0000 UTC FinishedAt: 2026-08-05 15:14:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowwjnvq/series-workflowwjnvq-convert-artifact-1282951465/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 15:14:04 +0000 UTC FinishedAt: 2026-08-05 15:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 15:14:04 +0000 UTC FinishedAt: 2026-08-05 15:16:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6392a191-3307-481f-9c94-302887595273,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-workflowwjnvq/series-workflowwjnvq-build-action-3317811756/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-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 15:16:18 +0000 UTC FinishedAt: 2026-08-05 15:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 15:16:18 +0000 UTC FinishedAt: 2026-08-05 15:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 15:16:18 +0000 UTC FinishedAt: 2026-08-05 15:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 15:16:18 +0000 UTC FinishedAt: 2026-08-05 15:37:26 +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:*ce3c73f9-b433-4370-bf15-4a2bf2f17c54,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-workflowwjnvq/series-workflowwjnvq-convert-artifact-1282951465/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": "470c32bb-0383-44f4-9756-aac046331a78", "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-workflowwjnvq/series-workflowwjnvq-build-action-3139407365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 15:16:18 +0000 UTC FinishedAt: 2026-08-05 15:37:15 +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:*ce3c73f9-b433-4370-bf15-4a2bf2f17c54,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-workflowwjnvq/series-workflowwjnvq-convert-artifact-1282951465/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": "470c32bb-0383-44f4-9756-aac046331a78", "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-workflowwjnvq/series-workflowwjnvq-build-action-3139407365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 15:37:26 +0000 UTC FinishedAt: 2026-08-05 15:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 15:37:26 +0000 UTC FinishedAt: 2026-08-05 15:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 15:37:26 +0000 UTC FinishedAt: 2026-08-05 15:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 15:37:26 +0000 UTC FinishedAt: 2026-08-05 15:39:18 +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:*470c32bb-0383-44f4-9756-aac046331a78,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-workflowwjnvq/series-workflowwjnvq-build-action-3139407365/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-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 15:39:26 +0000 UTC FinishedAt: 2026-08-05 18:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 15:39:26 +0000 UTC FinishedAt: 2026-08-05 15:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 15:39:26 +0000 UTC FinishedAt: 2026-08-05 15:39:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 15:39:27 +0000 UTC FinishedAt: 2026-08-05 18:41:04 +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":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"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:*6392a191-3307-481f-9c94-302887595273,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*470c32bb-0383-44f4-9756-aac046331a78,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-workflowwjnvq/series-workflowwjnvq-build-action-3317811756/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-workflowwjnvq/series-workflowwjnvq-build-action-3139407365/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 15:39:27 +0000 UTC FinishedAt: 2026-08-05 15:39:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 15:39:27 +0000 UTC FinishedAt: 2026-08-05 15:39:31 +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":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"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-workflowwjnvq/series-workflowwjnvq-convert-artifact-3093616510/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 15:39:27 +0000 UTC FinishedAt: 2026-08-05 15:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 15:39:34 +0000 UTC FinishedAt: 2026-08-05 18:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwjnvq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_commit","__nf_tables_abort","nft_set_commit_update","nft_rbtree_commit","nft_rbtree_gc_scan"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2195424c3da2ef1829a63b807e3a900a90e57d85","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"032a33ff-4a0b-4a3c-8eab-c963888f38d8","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 15:39:35 +0000 UTC FinishedAt: 2026-08-05 18:40:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6392a191-3307-481f-9c94-302887595273,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*470c32bb-0383-44f4-9756-aac046331a78,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-workflowwjnvq/series-workflowwjnvq-build-action-3317811756/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-workflowwjnvq/series-workflowwjnvq-build-action-3139407365/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-workflowwjnvq/series-workflowwjnvq-convert-artifact-3093616510/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}