Name: series-workflow5zbvb Phase: Succeeded StartedAt: 2026-08-18 14:42:02 +0000 UTC FinishedAt: 2026-08-18 19:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[0] Phase: Succeeded StartedAt: 2026-08-18 14:42:02 +0000 UTC FinishedAt: 2026-08-18 15:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 14:42:02 +0000 UTC FinishedAt: 2026-08-18 15:20:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "e6a69dfb-7dab-4ff3-99b3-3f92d86585e9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_mem_cgroup_pages", "user_proactive_reclaim", "shrink_all_memory", "mem_cgroup_shrink_node" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGJlZm9yZSBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGVuc3VyaW5nIGl0IGlzIG5ldmVyIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgdG8gcHJldmVudCB0YXNrcyBmcm9tIGxvb3BpbmcgaW5kZWZpbml0ZWx5IG9uIHVuZXZpY3RhYmxlIGZvbGlvcyB3aGVuIHRoZXkgcmVjZWl2ZSBhIGZhdGFsIHNpZ25hbC4gSXQgdXBkYXRlcyBib3RoIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gKGBldmljdF9mb2xpb3NgKS4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBwYWdlIHJlY2xhaW0sIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1jZyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0sIHdpdGggTUdMUlUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzMDA4ZTc5NjZiOGFmYTY2NTExNjQ1Y2IxMTAwMGMyYzYxNzkzMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNToxNTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxOSw3ICYjNDM7MTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cbiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uXG4gICovXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4mIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbiBcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7XG5AQCAtMTg1Niw2ICYjNDM7MTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiBcdHJldHVybiB0b29fbWFueTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRocm90dGxlIHJlY2xhaW0gaWYgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zIGFyZSBwaWxpbmcgdXAuIElmIHRoaXMgbWFrZXNcbiYjNDM7ICogbm8gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIgaXMgcHJvYmFibHkgbG9vcGluZyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MsIHNvIGdpdmVcbiYjNDM7ICogdXAuIFJldHVybnMgdHJ1ZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhblxuJiM0MzsgKiBiYWlsIG91dCBmYXN0ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc190aHJvdHRsZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdCpmYXRhbCA9IGZhbHNlO1xuJiM0MztcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuJiM0MztcdFx0aWYgKHN0YWxsZWQpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4mIzQzO1x0XHRzdGFsbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuJiM0MztcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdCpmYXRhbCA9IHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC5cbiAgKlxuQEAgLTE5OTIsMTkgJiM0MzsyMDIzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4tXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbi1cbi1cdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuLVx0XHRpZiAoc3RhbGxlZClcbi1cdFx0XHRyZXR1cm4gMDtcbi1cbi1cdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cbi1cdFx0c3RhbGxlZCA9IHRydWU7XG4tXHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4mIzQzO1x0Ym9vbCBmYXRhbDtcbiBcbiYjNDM7XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBmaWxlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4gXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi1cdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0aWYgKGZhdGFsKVxuIFx0XHRcdHJldHVybiBTV0FQX0NMVVNURVJfTUFYO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bHJ1X2FkZF9kcmFpbigpO1xuQEAgLTQ4NzcsMTIgJiM0Mzs0OTAzLDMzIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbi1cdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4mIzQzO1x0aW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDtcbiBcdGludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiYjNDM7XHRib29sIGZhdGFsO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIGFuZFxuJiM0MztcdCAqIGlzb2xhdGVfZm9saW9zKCkgbWF5IGZhbGwgYmFjayB0byB0aGUgb3RoZXIgdHlwZS4gVGhyb3R0bGUgaWZcbiYjNDM7XHQgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4mIzQzO1x0XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGVcbiYjNDM7XHRcdFx0ICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzb1xuJiM0MztcdFx0XHQgKiByZWNsYWltIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFja1xuJiM0MztcdFx0XHQgKiBpbnRvIHRoZSB0aHJvdHRsZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChmYXRhbClcbiYjNDM7XHRcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00ODkyLDYgJiM0Mzs0OTM5LDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4mIzQzO1x0aWYgKG5yX2lzb2xhdGVkKVxuJiM0MztcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTQsNiAmIzQzOzUwMDQsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbiYjNDM7XHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsIC1ucl9pc29sYXRlZCk7XG4mIzQzO1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzAwOGU3OTY2YjhhZmE2NjUxMTY0NWNiMTEwMDBjMmM2MTc5MzEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTU6MTU6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLjZmZTg4MjQ0MzBhY2IgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogdGhlIExSVSBsaXN0IHdpbGwgZ28gc21hbGwgYW5kIGJlIHNjYW5uZWQgZmFzdGVyIHRoYW4gbmVjZXNzYXJ5LCBsZWFkaW5nIHRvCiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uCiAgKi8KLXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAomIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSwKIAkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7CkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAogCXJldHVybiB0b29fbWFueTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlcwomIzQzOyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlCiYjNDM7ICogdXAuIFJldHVybnMgdHJ1ZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWwKJiM0MzsgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuCiYjNDM7ICogYmFpbCBvdXQgZmFzdGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHRocm90dGxlX2lzX3Rocm90dGxlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiYjNDM7CQkJCSAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKQomIzQzO3sKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KJiM0MzsJCXN0YWxsZWQgPSB0cnVlOwomIzQzOwkJcmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTsKJiM0MzsKJiM0MzsJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KJiM0MzsJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCSpmYXRhbCA9IHRydWU7CiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LgogICoKQEAgLTE5OTIsMTkgJiM0MzsyMDIzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAlib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpOwogCWVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7Ci0JYm9vbCBzdGFsbGVkID0gZmFsc2U7Ci0KLQl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKLQkJaWYgKHN0YWxsZWQpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqLwotCQlzdGFsbGVkID0gdHJ1ZTsKLQkJcmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTsKJiM0MzsJYm9vbCBmYXRhbDsKIAomIzQzOwlpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBmaWxlLCBzYywgJmFtcDtmYXRhbCkpIHsKIAkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwotCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlpZiAoZmF0YWwpCiAJCQlyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwogCX0KIAogCWxydV9hZGRfZHJhaW4oKTsKQEAgLTQ4NzcsMTIgJiM0Mzs0OTAzLDMzIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7CiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsazsKLQlpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkOwomIzQzOwlpbnQgaSwgc2Nhbm5lZCwgcmVjbGFpbWVkOwogCWludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkOwogCXVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CiYjNDM7CWJvb2wgZmF0YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIGFuZAomIzQzOwkgKiBpc29sYXRlX2ZvbGlvcygpIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIHR5cGUuIFRocm90dGxlIGlmCiYjNDM7CSAqIGFueSBldmljdGFibGUgdHlwZSBoYXMgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykgewomIzQzOwkJaWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgaSwgc2MsICZhbXA7ZmF0YWwpKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlCiYjNDM7CQkJICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbwomIzQzOwkJCSAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrCiYjNDM7CQkJICogaW50byB0aGUgdGhyb3R0bGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGZhdGFsKQomIzQzOwkJCQlzYy0mZ3Q7bnJfcmVjbGFpbWVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYOwomIzQzOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwl9CiAKIAlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKIApAQCAtNDg5Miw2ICYjNDM7NDkzOSw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiYjNDM7CWlmIChucl9pc29sYXRlZCkKJiM0MzsJCV9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgICAgICBucl9pc29sYXRlZCk7CiAKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQpAQCAtNDk1NCw2ICYjNDM7NTAwNCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQlnb3RvIHJldHJ5OwogCX0KIAomIzQzOwltb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsIC1ucl9pc29sYXRlZCk7CiYjNDM7CiAJaWYgKG5yX2lzb2xhdGVkICZndDsgdG90YWxfcmVjbGFpbWVkKQogCQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAogCQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzX3Rocm90dGxlZGAsIHdoaWNoIGJhc2ljYWxseSBjb25zb2xpZGF0ZXMgdGhlIGxvZ2ljIG9mIGB0b29fbWFueV9pc29sYXRlZGAgYW5kIGByZWNsYWltX3Rocm90dGxlYC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSBjaGFuZ2VzIHJpcHBsZSBvdXQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZXkmIzM5O3JlIG5vdyB1c2luZyB0aGlzIG5ldyB0aHJvdHRsaW5nIG1lY2hhbmlzbS4gUGx1cywgdGhlcmUgYXJlIHNvbWUgc3RhdGUgbW9kaWZpY2F0aW9ucyB3aXRoIGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIGFuZCBgbW9kX25vZGVfcGFnZV9zdGF0ZWAgYmVpbmcgdGhyb3duIGluLgoKVGhpcyBzbWVsbHMgbGlrZSBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGB2bXNjYW5gLCBiZWhhdmVzLiBHaXZlbiBpdHMgZnVuY3Rpb25hbCBpbXBhY3QsIGZ1enppbmcgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IG9uIHRoZSB0by1kbyBsaXN0LgoKVGltZSB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC4gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AsIGJvdGggc3RhdGljIGZ1bmN0aW9ucy4gTm93LCB0aGUgc3RhdGljLW5lc3MgbWVhbnMgd2UgbmVlZCB0byB0cmFjZSB0aGUgKm5vbi1zdGF0aWMqIGVudHJ5IHBvaW50cyB3aGVyZSB0aGlzIGxvZ2ljIGdldHMgdHJpZ2dlcmVkLiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGxpa2VseSBjYWxsZWQgYnkgZWl0aGVyIGBzaHJpbmtfbGlzdGAgb3IgYHNocmlua19scnV2ZWNgLiBBcyBmb3IgYGV2aWN0X2ZvbGlvc2AsIHRoYXQmIzM5O3MgbGlrZWx5IGhhcHBlbmluZyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLgoKSSYjMzk7bGwgdXNlIGBnaXQgZ3JlcGAgdG8gY29uZmlybSB0aGUgY2FsbCBoaWVyYXJjaHkgZm9yIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY2FsbCBncmFwaCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q9NTM5PVNvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdW5ldmljdGFibGUgcGFnZXMgb24gdGhlIExSVSBsaXN0cyBhcmU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0LTU1MC1cbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdDo1NTE6dm1zY2FuJiMzOTtzIHNocmlua19pbmFjdGl2ZV9saXN0KCkgYW5kIHNocmlua19mb2xpb19saXN0KCkgYWxzbyBkaXZlcnQgb2J2aW91c2x5XG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTUyLXVuZXZpY3RhYmxlIHBhZ2VzIGZvdW5kIG9uIHRoZSBpbmFjdGl2ZSBsaXN0cyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNncm91cFxuLS1cbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmM9NzY9c3RhdGljIHN0cnVjdCBjcmFzaHBvaW50IGNyYXNocG9pbnRzW10gPSB7XG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2NvcmUuYy04Mi1cdENSQVNIUE9JTlQoXCYjMzQ7RlNfU1VCTUlUX0JIXCYjMzQ7LFx0XHQgXCYjMzQ7c3VibWl0X2JoXCYjMzQ7KSxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmM6ODM6XHRDUkFTSFBPSU5UKFwmIzM0O01FTV9TV0FQT1VUXCYjMzQ7LFx0IFwmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0XCYjMzQ7KSxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmMtODQtXHRDUkFTSFBPSU5UKFwmIzM0O1RJTUVSQUREXCYjMzQ7LFx0XHQgXCYjMzQ7aHJ0aW1lcl9zdGFydFwmIzM0OyksXG4tLVxuZnMvbmZzZC92ZnMuYz0xNDI2PW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTE0NTMtXHRcdCAqIFdlIHdhbnQgdGhyb3R0bGluZyBpbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKClcbmZzL25mc2QvdmZzLmM6MTQ1NDpcdFx0ICogYW5kIHNocmlua19pbmFjdGl2ZV9saXN0KCkgdG8gb25seSBjb25zaWRlclxuZnMvbmZzZC92ZnMuYy0xNDU1LVx0XHQgKiB0aGUgYmFja2luZ2RldiB3ZSBhcmUgd3JpdGluZyB0bywgc28gdGhhdCBuZnMgdG9cbi0tXG5tbS92bXNjYW4uYz0xOTcyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwMTAtLypcbm1tL3Ztc2Nhbi5jOjIwMTE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMjAxMi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbm1tL3Ztc2Nhbi5jLTIwMTMtICovXG5tbS92bXNjYW4uYzoyMDE0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIwMTUtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmM9MjIzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyNDgtXG5tbS92bXNjYW4uYzoyMjQ5Olx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG5tbS92bXNjYW4uYy0yMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjU4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgTGlzdCBTaHJpbmtpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgZGVmaW5pdGVseSBiZWluZyBjYWxsZWQgYnkgYHNocmlua19saXN0YC4gVGhhdCYjMzk7cyB0aGUgZXN0YWJsaXNoZWQgcmVsYXRpb25zaGlwLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpicm9hZGVyKiBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzaHJpbmtfbGlzdGAgaXRzZWxmIGlzIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGVzZSBsaXN0IHNocmlua2luZyBvcGVyYXRpb25zIGhhcHBlbmluZyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gVG8gZ2FpbiBhIGhvbGlzdGljIHZpZXcsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGBzaHJpbmtfbGlzdGAgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBsaXN0IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlc2Ugc2hyaW5raW5nIG9wZXJhdGlvbnMsIGxlYWRpbmcgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YC4gS25vd2luZyB0aGUgY2FsbGluZyBsb2NhdGlvbnMgd2lsbCBoZWxwIGluIGRldGVybWluaW5nIHRoZSBsYXJnZXIgaW50ZW50IG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTEzOTI9ZF9hbGxvY19wYXJhbGxlbCgpIG5vIGxvbmdlciByZXF1aXJlcyBhIHdhaXRxdWV1ZV9oZWFkLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTM5Ny1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MTM5ODpkX2Rpc3Bvc2VfaWZfdW51c2VkKCkgaXMgZ29uZTsgdXNlIF9fbW92ZV90b19zaHJpbmtfbGlzdCgpIGlmIHlvdSByZWFsbHlcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTM5OS1uZWVkIHRoYXQgZnVuY3Rpb25hbGl0eSwgYnV0IHdhdGNoIG91dCBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgLSBqdXN0XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oPTI5MD1zdGF0aWMgaW5saW5lIGJvb2xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaDoyOTE6aTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3QoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaC0yOTIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaD0yMzk9c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaC02NzYtXHRcdC8qKlxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oOjY3NzpcdFx0ICogRWxlbWVudCB3aXRoaW4gaTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdCBvciBpOTE1LVx1MDAzZW1tLnB1cmdlX2xpc3QsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgtNjc4LVx0XHQgKiBsb2NrZWQgYnkgaTkxNS1cdTAwM2VtbS5vYmpfbG9jay5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYz0yMz12b2lkIF9faTkxNV9nZW1fb2JqZWN0X3NldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM6ODE6XHRpZiAoc2hyaW5rYWJsZSBcdTAwMjZcdTAwMjYgIWk5MTVfZ2VtX29iamVjdF9oYXNfc2VsZl9tYW5hZ2VkX3Nocmlua19saXN0KG9iaikpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTgyLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTkzLVx0XHRlbHNlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzo5NDpcdFx0XHRsaXN0ID0gXHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTk1LVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9iai1cdTAwM2VtbS5saW5rLCBsaXN0KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYz0yMTQ9X19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjYtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzoyMjc6XHRpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfc2VsZl9tYW5hZ2VkX3Nocmlua19saXN0KG9iaikpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjgtXHRcdGk5MTVfZ2VtX29iamVjdF9tYWtlX3Vuc2hyaW5rYWJsZShvYmopO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jPTEzNj12b2lkIGk5MTVfZ2VtX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYy0xMzktXHRzdHJ1Y3QgbGlzdF9oZWFkICpwaGFzZXNbXSA9IHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jOjE0MDpcdFx0XHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdCxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jLTE0MS1cdFx0XHUwMDI2aTkxNS1cdTAwM2VtbS5wdXJnZV9saXN0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jPTE5OD1pbnQgaTkxNV9nZW1fZnJlZXplX2xhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BtLmMtMjIyLVx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYzoyMjM6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgXHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdCwgbW0ubGluaylcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jLTIyNC1cdFx0X19zdGFydF9jcHVfd3JpdGUob2JqKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz0xMDQ9aTkxNV9nZW1fc2hyaW5rKHN0cnVjdCBpOTE1X2dlbV93d19jdHggKnd3LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTExNS1cdFx0e1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6MTE2Olx0XHRcdFx1MDAyNmk5MTUtXHUwMDNlbW0uc2hyaW5rX2xpc3QsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0xMTctXHRcdFx0STkxNV9TSFJJTktfQk9VTkQgfCBJOTE1X1NIUklOS19VTkJPVU5EXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM9MzQ4PWk5MTVfZ2VtX3Nocmlua2VyX29vbShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMtMzY5LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aTkxNS1cdTAwM2VtbS5vYmpfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6MzcwOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShvYmosIFx1MDAyNmk5MTUtXHUwMDNlbW0uc2hyaW5rX2xpc3QsIG1tLmxpbmspIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTM3MS1cdFx0aWYgKCFjYW5fcmVsZWFzZV9wYWdlcyhvYmopKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jPTU0ND12b2lkIF9faTkxNV9nZW1fb2JqZWN0X21ha2Vfc2hyaW5rYWJsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTU0Ni1cdF9fX2k5MTVfZ2VtX29iamVjdF9tYWtlX3Nocmlua2FibGUob2JqLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6NTQ3Olx0XHRcdFx0XHQgICBcdTAwMjZvYmpfdG9faTkxNShvYmopLVx1MDAzZW1tLnNocmlua19saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTU0OC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaD0xMDc9c3RydWN0IGk5MTVfZ2VtX21tIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oLTEzMC1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaDoxMzE6XHRzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua19saXN0O1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaC0xMzItXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYz0xMDI5PWk5MTVfZ2VtX21hZHZpc2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jLTEwNzQtXHRpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopIHx8XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEwNzU6XHQgICAgaTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3Qob2JqKSkge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMDc2LVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTA4NC1cdFx0XHRlbHNlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEwODU6XHRcdFx0XHRsaXN0ID0gXHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTA4Ni1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZvYmotXHUwMDNlbW0ubGluaywgbGlzdCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYz0xMjg2PXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2luaXRfX21tKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTI5Mi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmk5MTUtXHUwMDNlbW0ucHVyZ2VfbGlzdCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEyOTM6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpOTE1LVx1MDAzZW1tLnNocmlua19saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTI5NC1cbi0tXG5mcy9kY2FjaGUuYz0xMDU0PUVYUE9SVF9TWU1CT0woZF9tYWtlX2Rpc2NhcmRhYmxlKTtcbi0tXG5mcy9kY2FjaGUuYy0xMDU2LS8qKlxuZnMvZGNhY2hlLmM6MTA1NzogKiBfX21vdmVfdG9fc2hyaW5rX2xpc3QgLSB0cnkgdG8gcGxhY2UgYSBkZW50cnkgaW50byBhIHNocmluayBsaXN0XG5mcy9kY2FjaGUuYy0xMDU4LSAqIEBkZW50cnk6XHRkZW50cnkgdG8gdHJ5IHB1dHRpbmcgaW50byBzaHJpbmsgbGlzdFxuLS1cbmZzL2RjYWNoZS5jLTEwNjYtICogZGVudHJ5X2ZyZWUoQGRlbnRyeSkgcHJpb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbFxuZnMvZGNhY2hlLmM6MTA2NzogKiBhcmVhIGluIHdoaWNoIF9fbW92ZV90b19zaHJpbmtfbGlzdChAZGVudHJ5LCBAbGlzdCkgaXMgY2FsbGVkLlxuZnMvZGNhY2hlLmMtMTA2OC0gKlxuLS1cbmZzL2RjYWNoZS5jLTEwNzItXG5mcy9kY2FjaGUuYzoxMDczOmJvb2wgX19tb3ZlX3RvX3Nocmlua19saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbmZzL2RjYWNoZS5jLTEwNzQtX19tdXN0X2hvbGQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jaylcbi0tXG5mcy9kY2FjaGUuYy0xMDg0LX1cbmZzL2RjYWNoZS5jOjEwODU6RVhQT1JUX1NZTUJPTChfX21vdmVfdG9fc2hyaW5rX2xpc3QpO1xuZnMvZGNhY2hlLmMtMTA4Ni1cbmZzL2RjYWNoZS5jPTEwODc9dm9pZCBkcHV0X3RvX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbmZzL2RjYWNoZS5jLTEwOTAtXHRcdHJldHVybjtcbmZzL2RjYWNoZS5jOjEwOTE6XHRfX21vdmVfdG9fc2hyaW5rX2xpc3QoZGVudHJ5LCBsaXN0KTtcbmZzL2RjYWNoZS5jLTEwOTItXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbi0tXG5mcy9kY2FjaGUuYz0xMjU2PXZvaWQgZF9wcnVuZV9hbGlhc2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZGNhY2hlLmMtMTI2NC1cdFx0aWYgKGxpa2VseSghKGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNiBEQ0FDSEVfTk9SQ1UpKSlcbmZzL2RjYWNoZS5jOjEyNjU6XHRcdFx0X19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXHUwMDI2ZGlzcG9zZSk7XG5mcy9kY2FjaGUuYy0xMjY2LVx0XHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbi0tXG5mcy9kY2FjaGUuYz0xNjM5PXN0YXRpYyBlbnVtIGRfd2Fsa19yZXQgc2VsZWN0X2NvbGxlY3Qodm9pZCAqX2RhdGEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5mcy9kY2FjaGUuYy0xNjQ3LVx0aWYgKGRlbnRyeS1cdTAwM2VkX2xvY2tyZWYuY291bnQgXHUwMDNjPSAwKSB7XG5mcy9kY2FjaGUuYzoxNjQ4Olx0XHRfX21vdmVfdG9fc2hyaW5rX2xpc3QoZGVudHJ5LCBcdTAwMjZkYXRhLVx1MDAzZWRpc3Bvc2UpO1xuZnMvZGNhY2hlLmMtMTY0OS1cdFx0ZGF0YS1cdTAwM2Vmb3VuZCYjNDM7JiM0Mzs7XG4tLVxuZnMvZGNhY2hlLmM9MTY3MT1zdGF0aWMgZW51bSBkX3dhbGtfcmV0IHNlbGVjdF9jb2xsZWN0Mih2b2lkICpfZGF0YSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTE2NzktXHRpZiAoZGVudHJ5LVx1MDAzZWRfbG9ja3JlZi5jb3VudCBcdTAwM2M9IDApIHtcbmZzL2RjYWNoZS5jOjE2ODA6XHRcdGlmICghX19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXHUwMDI2ZGF0YS1cdTAwM2VkaXNwb3NlKSkge1xuZnMvZGNhY2hlLmMtMTY4MS1cdFx0XHQvKlxuLS1cbmZzL2Z1c2UvZGlyLmM9MTU5PXN0YXRpYyB2b2lkIGZ1c2VfZGVudHJ5X3RyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvZnVzZS9kaXIuYy0xNzgtXHRcdFx0ZmQtXHUwMDNlZGVudHJ5LVx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX09QX0RFTEVURTtcbmZzL2Z1c2UvZGlyLmM6MTc5Olx0XHRcdF9fbW92ZV90b19zaHJpbmtfbGlzdChmZC1cdTAwM2VkZW50cnksIFx1MDAyNmRpc3Bvc2UpO1xuZnMvZnVzZS9kaXIuYy0xODAtXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZmQtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4tLVxuZnMvbmFtZXNwYWNlLmM9OTc3PXN0YXRpYyB2b2lkIF9fdG91Y2hfbW50X25hbWVzcGFjZShzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG4tLVxuZnMvbmFtZXNwYWNlLmMtOTg3LSAqL1xuZnMvbmFtZXNwYWNlLmM6OTg4OnN0YXRpYyB2b2lkIF9fdW1vdW50X21udChzdHJ1Y3QgbW91bnQgKm1udCwgc3RydWN0IGxpc3RfaGVhZCAqc2hyaW5rX2xpc3QpXG5mcy9uYW1lc3BhY2UuYy05ODkte1xuLS1cbmZzL25hbWVzcGFjZS5jLTEwMDAtXHRtbnQtXHUwMDNlbW50X21wID0gTlVMTDtcbmZzL25hbWVzcGFjZS5jOjEwMDE6XHRtYXliZV9mcmVlX21vdW50cG9pbnQobXAsIHNocmlua19saXN0KTtcbmZzL25hbWVzcGFjZS5jLTEwMDItfVxuLS1cbmluY2x1ZGUvbGludXgvZGNhY2hlLmg9MjgyPWV4dGVybiB2b2lkIGRfcHJ1bmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKik7XG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjI4MzpleHRlcm4gYm9vbCBfX21vdmVfdG9fc2hyaW5rX2xpc3Qoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0yODQtZXh0ZXJuIHZvaWQgc2hyaW5rX2RlbnRyeV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKik7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz0yNDM9c3RhdGljIHVuc2lnbmVkIGludCBfX2JwZl9scnVfbGlzdF9zaHJpbmsoc3RydWN0IGJwZl9scnUgKmxydSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI1MC1cdHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUsICp0bXBfbm9kZTtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjUxOlx0c3RydWN0IGxpc3RfaGVhZCAqZm9yY2Vfc2hyaW5rX2xpc3Q7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI1Mi1cdHVuc2lnbmVkIGludCBuc2hyaW5rZWQ7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0yNjAtXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bC1cdTAwM2VsaXN0c1tCUEZfTFJVX0xJU1RfVF9JTkFDVElWRV0pKVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzoyNjE6XHRcdGZvcmNlX3Nocmlua19saXN0ID0gXHUwMDI2bC1cdTAwM2VsaXN0c1tCUEZfTFJVX0xJU1RfVF9JTkFDVElWRV07XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2Mi1cdGVsc2Vcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjYzOlx0XHRmb3JjZV9zaHJpbmtfbGlzdCA9IFx1MDAyNmwtXHUwMDNlbGlzdHNbQlBGX0xSVV9MSVNUX1RfQUNUSVZFXTtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjY0LVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzoyNjU6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShub2RlLCB0bXBfbm9kZSwgZm9yY2Vfc2hyaW5rX2xpc3QsXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2Ni1cdFx0XHRcdFx0IGxpc3QpIHtcbi0tXG5tbS9zaG1lbS5jPTI0Mjg9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yNTUwLVx0XHQgKiBfY2FyZWZ1bCB0byBkZWZlbmQgYWdhaW5zdCB1bmxvY2tlZCBhY2Nlc3MgdG9cbm1tL3NobWVtLmM6MjU1MTpcdFx0ICogLVx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXG5tbS9zaG1lbS5jLTI1NTItXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTc2PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xubW0vdm1zY2FuLmM6Nzc6XHQvKiBIb3cgbWFueSBwYWdlcyBzaHJpbmtfbGlzdCgpIHNob3VsZCByZWNsYWltICovXG5tbS92bXNjYW4uYy03OC1cdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcbi0tXG5tbS92bXNjYW4uYz0yMjA1PXVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTIyMzctXG5tbS92bXNjYW4uYzoyMjM4OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMjM5LVx0XHRcdFx0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjA2NC1cbm1tL3Ztc2Nhbi5jOjYwNjU6XHRcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTYwNjYtXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gUGFnZSBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHBhZ2UgcmVjbGFtYXRpb24gbG9naWMgaGVyZS4gSXQgbG9va3MgbGlrZSBgc2hyaW5rX2xydXZlY2AgaXMgYSBrZXkgZnVuY3Rpb24uIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gSG93ZXZlciwgd2hhdCByZWFsbHkgY2F0Y2hlcyBteSBleWUgaXMgdGhhdCBgc2hyaW5rX2xydXZlY2AgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBzaHJpbmtfbm9kZWAuIE5vdywgKnRoYXQmIzM5O3MqIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYHNocmlua19ub2RlYCBpcyBpbnZva2VkIGZyb20gYSBidW5jaCBvZiBjb3JlIHBhdGhzLCBpbmNsdWRpbmcgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCBhbmQgYGJhbGFuY2VfcGdkYXRgIHdoaWNoIGFyZSBib3RoIGNyaXRpY2FsIHRvIGhvdyB3ZSBtYW5hZ2UgbWVtb3J5LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgdG9nZXRoZXIgaW4gdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgaG93IGl0IGltcGFjdHMgb3VyIHJlY2xhbWF0aW9uIGVmZm9ydHMuCgpJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaG93IGBldmljdF9mb2xpb3NgIGZpdHMgaW50byBhbGwgdGhpcyBhcyBpdCBzaG91bGQgcHJvYmFibHkgYmUgaW52b2tlZCB3aXRoaW4gb25lIG9mIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00ODYyPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDg5NS1cbm1tL3Ztc2Nhbi5jOjQ4OTY6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00ODk3LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYz01MDk5PXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyMi1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MTIzOlx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTI0LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTc0Ni1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1NzQ3Olx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01NzQ4LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1HTFJVIGFuZCBMZWdhY3kgTFJVIFJlY2xhaW0gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgTUdMUlUgYW5kIGxlZ2FjeSBMUlUgcmVjbGFpbSBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGFzIGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLCB3aGljaCBhcmUgY29yZSBjb21wb25lbnRzIG9mIHRoZSBNdWx0aS1HZW4gTFJVIHN5c3RlbS4gVGhpcyBtZWFucyB0aGUgY2hhbmdlcyBhcmUgaW1wYWN0aW5nIGJvdGggdGhlIG5ldyBNR0xSVSBhcHByb2FjaCBhbmQgdGhlIGV4aXN0aW5nIExSVSByZWNsYWltLCBzcGVjaWZpY2FsbHkgYHNocmlua19pbmFjdGl2ZV9saXN0YC4KCkdpdmVuIHRoZSBzY29wZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyBzZXQgb2YgZnVuY3Rpb25zLCB3aGljaCBJJiMzOTt2ZSBpZGVudGlmaWVkIGFzOiBgc2hyaW5rX25vZGVgLCBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgYmFsYW5jZV9wZ2RhdGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBzaHJpbmtfbHJ1dmVjYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBydW5fZXZpY3Rpb25gLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLiBMb29rcyBsaWtlIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGlzIHN0YXRpYywgc28gSSYjMzk7bGwgcHV0IHRoYXQgYXNpZGUsIEkgY2FuJiMzOTt0IHJlYWxseSBmb2N1cyBvbiBpdC4gU2FtZSBmb3IgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBzaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfbm9kZWAuCgpUaGF0IGxlYXZlcyBtZSB3aXRoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYGJhbGFuY2VfcGdkYXRgIGFuZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhcyB0aGUgbW9zdCBpbnRlcmVzdGluZyBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uIFRoZXNlIGFyZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvciBpbnRlcmZhY2UgY2hhbmdlcyB3aWxsIGxpa2VseSByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCByZWNsYWltIHByb2Nlc3MsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGxlZ2FjeSBhbmQgTUdMUlUgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jPTIzNTE9c3RhdGljIHZvaWQgZnVzZV92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZnMvZnVzZS9maWxlLmMtMjM3MS0gKiAtIHN5bmMoMilcbmZzL2Z1c2UvZmlsZS5jOjIzNzI6ICogLSB0cnlfdG9fZnJlZV9wYWdlcygpIHdpdGggb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSXG5mcy9mdXNlL2ZpbGUuYy0yMzczLSAqL1xuLS1cbm1tL2ludGVybmFsLmg9Njk9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbm1tL2ludGVybmFsLmg6NzA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS9pbnRlcm5hbC5oLTcxLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm1hc2spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDM4PV9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NTAtXG5tbS9wYWdlX2FsbG9jLmM6NDQ1MTpcdHByb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoYWMtXHUwMDNlem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy00NDUyLVx0XHRcdFx0XHRcdFx0XHRhYy1cdTAwM2Vub2RlbWFzayk7XG4tLVxubW0vdm1zY2FuLmM9NjU2Mz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1OTMtICovXG5tbS92bXNjYW4uYzo2NTk0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NTk1LVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY3MzY9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjgxNS1cbm1tL3Ztc2Nhbi5jOjY4MTY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02ODE3LVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTAtXG5tbS92bXNjYW4uYzo2ODUxOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4NTItXG4tLVxubW0vdm1zY2FuLmM9NjkwMj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5MzMtXG5tbS92bXNjYW4uYzo2OTM0Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY5MzUtXG4tLVxubW0vdm1zY2FuLmM9NzcwMD11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NzE5LVxubW0vdm1zY2FuLmM6NzcyMDpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03NzIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQwMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgbXkgYXR0ZW50aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBGcm9tIGEgaGlnaCBsZXZlbCwgYHRyeV90b19mcmVlX3BhZ2VzYCBzZWVtcyBsaWtlIGEgc29saWQgc3ltYm9sIHRvIHN0YXJ0IHdpdGgg4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIGluIHJlY2xhaW1pbmcgbWVtb3J5LiBUaGVuLCBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYmVjYXVzZSwgb2YgY291cnNlLCBtZW1vcnkgY2dyb3VwcyBhcmUgYSBjZW50cmFsIGNvbXBvbmVudCB0aGVzZSBkYXlzLiBUaGF0IGlzIHZlcnkgaW1wb3J0YW50LiBJIHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBiYWxhbmNlX3BnZGF0YCwgYmVjYXVzZSB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgb3ZlcmFsbCBiYWxhbmNpbmcgb2YgbWVtb3J5IGFjcm9zcyBOVU1BIG5vZGVzLCBzb21ldGhpbmcgdGhhdCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIExldCYjMzk7cyBkaWcgaW50byBgYmFsYW5jZV9wZ2RhdGAgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFsYW5jZV9wZ2RhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD03Nj1UUkFDRV9FVkVOVChtbV92bXNjYW5fa3N3YXBkX3dha2UsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtOTgtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDo5OTpUUkFDRV9FVkVOVChtbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9iZWdpbixcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTEwMC1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xMjItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoxMjM6VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfZW5kLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTI0LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4NjI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODg4LVx0ICogaGVyZSBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IGxpbWl0cyB0aGUgcGFnZXMgd2UgY2FuIHNjYW4uXG5tbS92bXNjYW4uYzo2ODg5Olx0ICogaWYgd2UgZG9uJiMzOTt0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNjg5MC1cdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuLS1cbm1tL3Ztc2Nhbi5jPTcwOTI9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTcwOTUtXHQvKlxubW0vdm1zY2FuLmM6NzA5NjpcdCAqIFRoZSB0aHJvdHRsZWQgcHJvY2Vzc2VzIGFyZSBub3JtYWxseSB3b2tlbiB1cCBpbiBiYWxhbmNlX3BnZGF0KCkgYXNcbm1tL3Ztc2Nhbi5jLTcwOTctXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXG4tLVxubW0vdm1zY2FuLmMtNzEwMC1cdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXG5tbS92bXNjYW4uYzo3MTAxOlx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXG5tbS92bXNjYW4uYy03MTAyLVx0ICogdGhlIHdha2UgdXAgY2hlY2tzLiBJZiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIG5vIHByb2Nlc3Mgc2hvdWxkXG4tLVxubW0vdm1zY2FuLmMtNzEwNC1cdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxubW0vdm1zY2FuLmM6NzEwNTpcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcbm1tL3Ztc2Nhbi5jLTcxMDYtXHQgKiB0aGF0IGhlcmUgd2UgYXJlIHVuZGVyIHByZXBhcmVfdG9fd2FpdCgpLlxuLS1cbm1tL3Ztc2Nhbi5jPTcxODY9Y2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MTkxLS8qXG5tbS92bXNjYW4uYzo3MTkyOiAqIEZvciBrc3dhcGQsIGJhbGFuY2VfcGdkYXQoKSB3aWxsIHJlY2xhaW0gcGFnZXMgYWNyb3NzIGEgbm9kZSBmcm9tIHpvbmVzXG5tbS92bXNjYW4uYy03MTkzLSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTcyMDMtICovXG5tbS92bXNjYW4uYzo3MjA0OnN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYy03MjA1LXtcbi0tXG5tbS92bXNjYW4uYy03MjE5LVxubW0vdm1zY2FuLmM6NzIyMDpcdHRyYWNlX21tX3Ztc2Nhbl9iYWxhbmNlX3BnZGF0X2JlZ2luKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG9yZGVyLFxubW0vdm1zY2FuLmMtNzIyMS1cdFx0XHRcdFx0ICAgIGhpZ2hlc3Rfem9uZWlkeCk7XG4tLVxubW0vdm1zY2FuLmMtNzQxNC1cbm1tL3Ztc2Nhbi5jOjc0MTU6XHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2Mub3JkZXIsXG5tbS92bXNjYW4uYy03NDE2LVx0XHRcdFx0XHQgIGhpZ2hlc3Rfem9uZWlkeCwgc2MubnJfcmVjbGFpbWVkKTtcbi0tXG5tbS92bXNjYW4uYz03NTM5PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4tLVxubW0vdm1zY2FuLmMtNzU4NS1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjc1ODY6XHRcdCAqIFdlIGNhbiBzcGVlZCB1cCB0aGF3aW5nIHRhc2tzIGlmIHdlIGRvbiYjMzk7dCBjYWxsIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTc1ODctXHRcdCAqIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3Jcbi0tXG5tbS92bXNjYW4uYy03NjAxLVx0XHRcdFx0XHRcdGFsbG9jX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc2MDI6XHRcdHJlY2xhaW1fb3JkZXIgPSBiYWxhbmNlX3BnZGF0KHBnZGF0LCBhbGxvY19vcmRlcixcbm1tL3Ztc2Nhbi5jLTc2MDMtXHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgYmFsYW5jZV9wZ2RhdGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIHRoZW4gYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCwgYWxsIG9mIHdoaWNoIGFyZSAqbm90KiBzdGF0aWMuIFJpZ2h0IGF3YXksIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBqdW1wIG91dCBhcyBpbnRlcmVzdGluZyBhcmVhcyB0byBkZWx2ZSBpbnRvIGZ1cnRoZXIg4oCTIHNvbGlkIGZvY3VzIHN5bWJvbHMgaGVyZS4KCkFoLCBidXQgdGhpcyBwYXRjaC4uLiBpdCYjMzk7cyBjaGFuZ2luZyBgdG9vX21hbnlfaXNvbGF0ZWRgIHRvIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgLiBUaGF0JiMzOTtzIGEga2V5IHNoaWZ0IGluIGhvdyB0aHJvdHRsaW5nIGlzIHJlcHJlc2VudGVkLCBhbmQgaXQmIzM5O3MgYWxzbyBhZGRpbmcgY2hlY2tzIGZvciBgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudClgICphbmQqIHNldHRpbmcgYCpmYXRhbGAuIFRoaXMgaXMgY2xlYXJseSBkZXNpZ25lZCB0byBwcmV2ZW50IGluZGVmaW5pdGUgbG9vcGluZyBvbiBmb2xpb3MgdGhhdCBjYW4mIzM5O3QgYmUgZXZpY3RlZCB3aGVuIGEgdGFzayBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBraWxsZWQuIEkgc2VlIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBoZXJlLiBJJiMzOTttIHRoaW5raW5nLCBgQ09ORklHX01FTUNHYCBkZWZpbml0ZWx5IGFwcGxpZXMgdG8gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBvYnZpb3VzbHkuIEJ1dCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNvcmUsIGFsd2F5cyBwcmVzZW50LiBOb3csIGlzIE1HTFJVIHJlbGV2YW50IGhlcmU/IEFoLCBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBNR0xSVSBjb25maWcuIFNvIEkgbmVlZCB0byBnbyBzZWUgaWYgYGV2aWN0X2ZvbGlvc2AgaXMgd3JhcHBlZCBieSBgQ09ORklHX0xSVV9HRU5gIG9yIG5vdC4gVGhhdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIGZpZ3VyZSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xMz1CdWlsZCB0aGUga2VybmVsIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucy5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xNC1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNToqIGBgQ09ORklHX0xSVV9HRU49eWBgXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTY6KiBgYENPTkZJR19MUlVfR0VOX0VOQUJMRUQ9eWBgXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTctXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTI4PWZvbGxvd2luZyBjb21wb25lbnRzLiBJdHMgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6Mjk6YGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYGAuIEFsbCB0aGUgY29tcG9uZW50cyBzaG91bGQgYmUgZW5hYmxlZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTMwLXVubGVzcyBzb21lIG9mIHRoZW0gaGF2ZSB1bmZvcmVzZWVuIHNpZGUgZWZmZWN0cy4gV3JpdGluZyB0b1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD04OD1jb25jYXRlbmF0aW9uIHdpdGggZGVsaW1pdGVycyBgYCxgYCBhbmQgYGA7YGAuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTkwLWBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbl9mdWxsYGAgcHJvdmlkZXMgYWRkaXRpb25hbCBzdGF0cyBmb3JcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo5MTpkZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTkyLWV2aWN0ZWQgZ2VuZXJhdGlvbnMgaW4gdGhpcyBmaWxlLlxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTIwMj1zdHJ1Y3QgbWVtX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Mjc5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI4MC1cdC8qIHBlci1tZW1jZyBtbV9zdHJ1Y3QgbGlzdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9ODI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBlbnVtIGxydV9saXN0IGZvbGlvX2xydV9saXN0KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC05Ny1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6OTg6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTk5LVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xMDA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fc3dpdGNoaW5nKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMDUtfVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxMDY6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTA3LXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxMi19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxMzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzE0LVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzQzLX1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzQ0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNDUtXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MDItI2VuZGlmIC8qIENPTkZJR19LU00gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDA0LVx0XHRzdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDE3LVx0XHR9IGxydV9nZW47XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQxODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxOS0jaWZkZWYgQ09ORklHX01NX0lEXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE0ODA9c3RhdGljIGlubGluZSBjcHVtYXNrX3QgKm1tX2NwdW1hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0ODQtXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQ4NTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg2LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE0ODc9c3RydWN0IGxydV9nZW5fbW1fbGlzdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTMtXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQ5NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk1LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTctXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MTE9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIwLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MjE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MjItXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1Mzk9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQyLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1NDM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1NDQtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01MjU9c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjYtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUyNzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI4LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NTM0PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTQ0LS8qIHdoZXRoZXIgdG8ga2VlcCBoaXN0b3JpY2FsIHN0YXRzIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1NDU6I2lmZGVmIENPTkZJR19MUlVfR0VOX1NUQVRTXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ni0jZGVmaW5lIE5SX0hJU1RfR0VOU1x0XHRNQVhfTlJfR0VOU1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzAyPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MDMtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwNDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzA1LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzU0PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NTctXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzU5LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY2PXN0cnVjdCBscnV2ZWMge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzg1LVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZsYWdzO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3ODY6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4Ny1cdC8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGludG8gZ2VuZXJhdGlvbnMgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzg4LVx0c3RydWN0IGxydV9nZW5fZm9saW9cdFx0bHJ1Z2VuO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3ODk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTAtXHQvKiB0byBjb25jdXJyZW50bHkgaXRlcmF0ZSBscnVfZ2VuX21tX2xpc3QgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5Mi0jZW5kaWZcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzkzOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTQtI2lmZGVmIENPTkZJR19NRU1DR1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTQ3OD10eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk1LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTk2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk3LVx0Lyoga3N3YXAgbW0gd2FsayBkYXRhICovXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDI0LSNlbmRpZlxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwMjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNi1cdC8qIHdoZXRoZXIgdGhlIExSVSBhbGdvcml0aG0gbWF5IGFwcGx5IHRvIHRoaXMgYWNjZXNzICovXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9MTQ2PXN0cnVjdCByZWNsYWltX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xNDgtXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbmluY2x1ZGUvbGludXgvc3dhcC5oOjE0OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvc3dhcC5oLTE1MC1cdC8qIHBlci10aHJlYWQgbW0gd2FsayBkYXRhICovXG4tLVxua2VybmVsL2JvdW5kcy5jPTE3PWludCBtYWluKHZvaWQpXG4tLVxua2VybmVsL2JvdW5kcy5jLTI1LVx0REVGSU5FKFNQSU5MT0NLX1NJWkUsIHNpemVvZihzcGlubG9ja190KSk7XG5rZXJuZWwvYm91bmRzLmM6MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5rZXJuZWwvYm91bmRzLmMtMjctXHRERUZJTkUoTFJVX0dFTl9XSURUSCwgb3JkZXJfYmFzZV8yKE1BWF9OUl9HRU5TICYjNDM7IDEpKTtcbi0tXG5rZXJuZWwvZm9yay5jPTI2OTQ9cGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5rZXJuZWwvZm9yay5jLTI3NzEtXG5rZXJuZWwvZm9yay5jOjI3NzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUpIFx1MDAyNlx1MDAyNiAhKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9WTSkpIHtcbmtlcm5lbC9mb3JrLmMtMjc3My1cdFx0LyogbG9jayB0aGUgdGFzayB0byBzeW5jaHJvbml6ZSB3aXRoIG1lbWNnIG1pZ3JhdGlvbiAqL1xuLS1cbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNTEtXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL2ZvbGlvLmMtMzUzLVxuLS1cbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzk1LVxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS9mb2xpby5jLTM5Ny1cbi0tXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTQwNi1cbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDgtXG4tLVxubW0vbWVtY29udHJvbC5jPTQ2MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYzNy1cbm1tL21lbWNvbnRyb2wuYzo0NjM4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vbWVtY29udHJvbC5jLTQ2Mzktc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTQ2NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XG5tbS9tZW1jb250cm9sLmM6NDY1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL21lbWNvbnRyb2wuYy00NjU5LVxuLS1cbm1tL21lbW9yeS5jPTY3MjY9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbm1tL21lbW9yeS5jLTY3NzgtXG5tbS9tZW1vcnkuYzo2Nzc5OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vbWVtb3J5LmMtNjc4MC1zdGF0aWMgdm9pZCBscnVfZ2VuX2VudGVyX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jPTY3OTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXG4tLVxubW0vbWVtb3J5LmMtNjc5Ny19XG5tbS9tZW1vcnkuYzo2Nzk4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtb3J5LmMtNjc5OS1cbi0tXG5tbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzItXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzQtLypcbi0tXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2NS19XG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04NjctXG4tLVxubW0vdm1zY2FuLmM9MjcwNj1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI3MTctXG5tbS92bXNjYW4uYzoyNzE4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjcxOS1cbm1tL3Ztc2Nhbi5jPTI3MjA9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNzIxOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNzIyLURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5MDY9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjkyNS1cbm1tL3Ztc2Nhbi5jOjI5MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkyNy1cbi0tXG5tbS92bXNjYW4uYz0zMDM1PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwNjMtXG5tbS92bXNjYW4uYzozMDY0OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwNjUtXG4tLVxubW0vdm1zY2FuLmM9NTk5NT1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTk2LVxubW0vdm1zY2FuLmM6NTk5NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5OTgtXG4tLVxubW0vdm1zY2FuLmM9NjAwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMTMtXG5tbS92bXNjYW4uYzo2MDE0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjAxNS1cbi0tXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcbi0tXG5tbS93b3JraW5nc2V0LmMtMjMyLVxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3dvcmtpbmdzZXQuYy0yMzQtXG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzYtXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTMzOC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTM1My1cbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM4MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKk1HTFJVIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIE1HTFJVIGlzIGRlZmluaXRlbHkgc2l0dGluZyB1bmRlciBgQ09ORklHX0xSVV9HRU5gLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBNR0xSVSByZWxpZXMgb24gaXQsIGVuYWJsaW5nIGBDT05GSUdfTFJVX0dFTmAgbG9va3MgbGlrZSBhIHNtYXJ0IG1vdmUuIEFuZCwgb2YgY291cnNlLCBlbmFibGluZyBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgbWFrZXMgaW50dWl0aXZlIHNlbnNlIHRvIGFjdHVhbGx5IGxldmVyYWdlIHRoZSBmZWF0dXJlLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgc3BlY2lmaWMuLi4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBpZiB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24gaXMgYWxzbyBwYXJ0IG9mIHRoYXQgYENPTkZJR19MUlVfR0VOYCB1bWJyZWxsYS4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBwYXJ0cyBhcmUgYWxsIGVuYWJsZWQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODk1LVxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4OTctXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTIyLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUxMjM6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUxMjQtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NzQ2LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU3NDc6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU3NDgtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdmljdGlvbiBGdW5jdGlvbiYjMzk7cyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGxpbmUgbnVtYmVyIGFwcGVhcnMgdG8gYmUgYXJvdW5kIDQ4OTYuIE5vdywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgY29kZWJhc2UsIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgQ09ORklHX0xSVV9HRU5gLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGV2aWN0X2ZvbGlvc2AgaXMgd3JhcHBlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2suIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgYWN0aXZlLiBVbmRlcnN0YW5kaW5nIHRoaXMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHdoZW4gYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWN0dWFsbHkgYmUgY29tcGlsZWQgYW5kIHVzZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IGhlcmUgYW5kIGEgcXVpY2sgY2hlY2sgY2FuIHNhdmUgbWUgYSBsb3Qgb2YgdGltZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcxNTpcdFx0XHRcdCAgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xuMjcxNjpcdH1cbjI3MTc6XHRcbjI3MTg6XHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cbjI3MTk6XHRcbjI3MjA6XHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbjI3MjE6XHQjaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxuMjcyMjpcdERFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuMjcyMzpcdCNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbjI3MjQ6XHQjZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENPTkZJR19MUlVfR0VOIGluIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfTFJVX0dFTmAgaXMgaW5kZWVkIGluaXRpYWxpemVkIGF0IDI3MTguIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHVuZGVyc3RhbmRpbmcgaXRzIGZpbmFsIHZhbHVlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgaXQmIzM5O3MgdWx0aW1hdGVseSByZXNvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGAjaWZkZWZgIGRpcmVjdGl2ZXMsIGFuZCBsb29rIGZvciBhbnkgc3ltYm9sIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGR5bmFtaWNhbGx5IGFkanVzdCBpdHMgdmFsdWUgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0cyBmaW5hbCB2YWx1ZSBpcyBoYXJkY29kZWQsIGNhbGN1bGF0ZWQgYmFzZWQgb24gb3RoZXIgcGFyYW1ldGVycywgb3IgZGV0ZXJtaW5lZCBieSBzb21lIGV4dGVybmFsIGZhY3RvciBsaWtlIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBmb2xsb3cgdGhlIGNvZGUgZmxvdyB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgbGlmZWN5Y2xlLiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IGtub3dpbmcgd2hlcmUgaXQgKmJlZ2lucyo7IEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbXBsZXRlIGNvbnRyb2wgZmxvdyB0byBzZWUgd2hlcmUgaXQgKmVuZHMqIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTkwOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlbl9mdWxsXCYjMzQ7LCAwNDQ0LCBOVUxMLCBOVUxMLCB0cnVlLFxuNTk5MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XG41OTkyOlx0XG41OTkzOlx0XHRyZXR1cm4gMDtcbjU5OTQ6XHR9O1xuNTk5NTpcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbjU5OTY6XHRcbjU5OTc6XHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbjU5OTg6XHRcbjU5OTk6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjAwMDpcdHtcbjYwMDE6XHRcdEJVSUxEX0JVRygpO1xuNjAwMjpcdH1cbjYwMDM6XHRcbjYwMDQ6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYwMDU6XHR7XG42MDA2Olx0XHRCVUlMRF9CVUcoKTtcbjYwMDc6XHR9XG42MDA4Olx0XG42MDA5Olx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYwMTA6XHR7XG42MDExOlx0XHRCVUlMRF9CVUcoKTtcbjYwMTI6XHR9XG42MDEzOlx0XG42MDE0Olx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG42MDE1Olx0XG42MDE2Olx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjAxNzpcdHtcbjYwMTg6XHRcdHVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTtcbjYwMTk6XHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0c1tOUl9MUlVfTElTVFNdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTFJVIFJlY2xhaW0gUGF0aCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTFJVX0dFTmAuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBuZWVkIHRvIGJlIGNvcnJlY3RseSBwbGFjZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IGNoZWNrLgoKTm93LCB3aGF0IGFib3V0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGA/IExvb2tpbmcgYXQgdGhlIGxpbmUgbnVtYmVyLCBhcm91bmQgbGluZSAyMDE0LCBpdCYjMzk7cyBiZWZvcmUgdGhlIGBDT05GSUdfTFJVX0dFTmAgY29uZGl0aW9uYWwuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgcGFydCBvZiB0aGUgbGVnYWN5IExSVSByZWNsYWltIHBhdGguIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYm90aCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCYjMzk7cyBoYW5kbGluZyB0aHJvdHRsaW5nIGFuZCBmYXRhbCBzaWduYWwgaGFuZGxpbmcgaW4gYSBtb3JlIHJvYnVzdCB3YXkgYWNyb3NzIGJvdGggdHlwZXMuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24g4oCTIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIHdpdGggbG9vcHMgb24gdW5ldmljdGFibGUgZm9saW9zLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIGludm9sdmVkIGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgaXQgdXNlcyBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgcHJvYmFibHkgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgdGhyb3R0bGluZyBhbmQgc2lnbmFsIGJhaWxvdXRzLiBJIHdhcyBhbHNvIGdvaW5nIHRvIGxvb2sgYXQgYGJhbGFuY2VfcGdkYXRgLCBidXQgd2FpdC4uLiB0aGF0JiMzOTtzIHN0YXRpYy4gUmlnaHQsIGNhbiYjMzk7dCB1c2UgaXQgZGlyZWN0bHkuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSBhbmQgaG93IGBiYWxhbmNlX3BnZGF0YCBpcyB1c2VkIGFuZCBpZiBpdCYjMzk7cyBpbmRpcmVjdGx5IGJlaW5nIGFmZmVjdGVkIG9yIGlmIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWxhbmNlX3BnZGF0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4ODgtXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY4ODk6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02ODkwLVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9NzA5Mj1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzA5NS1cdC8qXG5tbS92bXNjYW4uYzo3MDk2Olx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xubW0vdm1zY2FuLmMtNzA5Ny1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbi0tXG5tbS92bXNjYW4uYy03MTAwLVx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjcxMDE6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jLTcxMDItXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbi0tXG5tbS92bXNjYW4uYy03MTA0LVx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYzo3MTA1Olx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xubW0vdm1zY2FuLmMtNzEwNi1cdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXG4tLVxubW0vdm1zY2FuLmM9NzE4Nj1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxOTEtLypcbm1tL3Ztc2Nhbi5jOjcxOTI6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcxOTMtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzIwMy0gKi9cbm1tL3Ztc2Nhbi5jOjcyMDQ6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTcyMDUte1xuLS1cbm1tL3Ztc2Nhbi5jLTcyMTktXG5tbS92bXNjYW4uYzo3MjIwOlx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgb3JkZXIsXG5tbS92bXNjYW4uYy03MjIxLVx0XHRcdFx0XHQgICAgaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03NDE0LVxubW0vdm1zY2FuLmM6NzQxNTpcdHRyYWNlX21tX3Ztc2Nhbl9iYWxhbmNlX3BnZGF0X2VuZChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5vcmRlcixcbm1tL3Ztc2Nhbi5jLTc0MTYtXHRcdFx0XHRcdCAgaGlnaGVzdF96b25laWR4LCBzYy5ucl9yZWNsYWltZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTc1Mzk9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NTg1LVx0XHQvKlxubW0vdm1zY2FuLmM6NzU4NjpcdFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJiMzOTt0IGNhbGwgYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNzU4Ny1cdFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxuLS1cbm1tL3Ztc2Nhbi5jLTc2MDEtXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzYwMjpcdFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxubW0vdm1zY2FuLmMtNzYwMy1cdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcxNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipJbnRlcm5hbCBNZW1vcnkgTWFuYWdlbWVudCBNdXNpbmdzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uICpiYWxhbmNlX3BnZGF0KiBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIHZhcmlhYmxlLCBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gbWFrZSBhIG5vdGUgb2YuIEFsd2F5cyBnb29kIHRvIHJlZnJlc2ggb24gdGhlIGJhc2ljcy4gSSYjMzk7bSB0cnlpbmcgdG8gcmVtZW1iZXIgd2hhdCBjb250ZXh0IHRoYXQgaXMgaW4gYW5kIGhvdyBpdOKAmXMgYmVpbmcgdXNlZC4gTm93LCAqa3N3YXBkX3J1biouLi5obW1tLiBUaGF0JiMzOTtzIGEgZGlmZmVyZW50IGJlYXN0IGVudGlyZWx5LiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIGl0JiMzOTtzIHJlbGF0aW9uIHRvIGJhbGFuY2VfcGdkYXQuIEhvdyBpcyB0aGUga2VybmVsJiMzOTtzIHN3YXBwaW5nIGRhZW1vbiwgYGtzd2FwZF9ydW5gLCBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBpdCYjMzk7cyB1c2luZz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3N3YXBkX3J1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD0zMzg9dm9pZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zMzktXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNDA6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zNDEtZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMS1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIzMjpcdGtzd2FwZF9ydW4obmlkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMy1cdGtjb21wYWN0ZF9ydW4obmlkKTtcbi0tXG5tbS92bXNjYW4uYz03NzAwPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc3MzItICovXG5tbS92bXNjYW4uYzo3NzMzOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc3MzQte1xuLS1cbm1tL3Ztc2Nhbi5jPTc3OTM9c3RhdGljIGludCBfX2luaXQga3N3YXBkX2luaXQodm9pZClcbi0tXG5tbS92bXNjYW4uYy03Nzk3LVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxubW0vdm1zY2FuLmM6Nzc5ODogXHRcdGtzd2FwZF9ydW4obmlkKTtcbm1tL3Ztc2Nhbi5jLTc3OTktXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcJiMzNDt2bVwmIzM0Oywgdm1zY2FuX3N5c2N0bF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzQwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRoaW5raW5nIFRocm91Z2ggTWVtb3J5IFJlY2xhbWF0aW9uKioKCk9rYXksIHNvIGBrc3dhcGRfcnVuYCwgcmlnaHQ/IEl0JiMzOTtzIGp1c3QgdGhlIGluaXRpYWwgdGhyZWFkIGxhdW5jaCwgc2V0dGluZyB0aGUgd2hvbGUgdGhpbmcgaW4gbW90aW9uLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgZ3VuLgoKQnV0IHdoYXQgYWJvdXQgdGhlIGNvcmUgZnVuY3Rpb24/IGByZWNsYWltX3BhZ2VzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgaGFwcGVucy4gV2hhdCYjMzk7cyBpdCBkb2luZyBhdCBhIGZ1bmN0aW9uYWwgbGV2ZWw/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkPyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoYXTigJlzIHdoZXJlIHRoZSBrZXkgcHJvY2Vzc2VzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9MjU3PXN0YXRpYyB2b2lkIHNneF9yZWNsYWltZXJfd3JpdGUoc3RydWN0IHNneF9lcGNfcGFnZSAqZXBjX3BhZ2UsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTMwMi0gKi9cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozMDM6c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1fcGFnZXModm9pZClcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0zOTY9dm9pZCBzZ3hfcmVjbGFpbV9kaXJlY3Qodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtMzk4LVx0aWYgKHNneF9zaG91bGRfcmVjbGFpbShTR1hfTlJfTE9XX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XHRcdHNneF9yZWNsYWltX3BhZ2VzKCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9NDAyPXN0YXRpYyBpbnQga3NneGQodm9pZCAqcClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDIxLVx0XHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo0MjI6XHRcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy00MjMtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTU2Nz1zdHJ1Y3Qgc2d4X2VwY19wYWdlICpzZ3hfYWxsb2NfZXBjX3BhZ2Uodm9pZCAqb3duZXIsIGJvb2wgcmVjbGFpbSlcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjU5MTpcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy01OTItXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jPTM4Nz1zdGF0aWMgdm9pZCBzbGFfZnJlZShzdHJ1Y3Qgc2xhX2FkZHJfdCBzbGEsIHNpemVfdCBsZW4sIGJvb2wgZmlybXdhcmVfc3RhdGUpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDAzLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM6NDA0Olx0XHRcdFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDUtXHRcdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwOC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjQwOTpcdFx0XHRyZXQgPSBzbnBfcmVjbGFpbV9wYWdlcyhzbGFfdG9fcGEoc2xhKSwgMSwgZmFsc2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDEwLVx0XHR9XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODMtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4NS17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0MTg6RVhQT1JUX1NZTUJPTF9HUEwoc25wX3JlY2xhaW1fcGFnZXMpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTktXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDM4LVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQzOTpcdHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBpLCBsb2NrZWQpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz00Nzk9c3RhdGljIHZvaWQgX19zbnBfZnJlZV9maXJtd2FyZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBib29sIGxvY2tlZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ4OC1cdGlmIChzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XHQgICAgc25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIG5wYWdlcywgbG9ja2VkKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDkwLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjEtXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NzIyOlx0aWYgKHNucF9yZWNsYWltX3BhZ2VzKCpkZXNjLVx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjMtXHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlY2xhaW0gZmlybXdhcmUtb3duZWQgcGFnZXMgd2hpbGUgaXNzdWluZyBTRVYgbGVnYWN5IGNvbW1hbmQuXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1Zilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0Mi1cdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo4NDM6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQ0LVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTQ5NC1cdFx0ICogVGhpcyBleGVjdXRlcyB3aXRoIHRoZSBzZXZfY21kX211dGV4IGhlbGQgc28gZG93biB0aGUgc3RhY2tcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTQ5NTpcdFx0ICogc25wX3JlY2xhaW1fcGFnZXMobG9ja2VkPWZhbHNlKSBtaWdodCBiZSBuZWVkZWQgKHdoaWNoIGlzIGV4dHJlbWVseVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk2LVx0XHQgKiB1bmxpa2VseSkgYnV0IHdpbGwgY2F1c2UgYSBkZWFkbG9jay5cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDctXHRcdCAqIFRoZSBzdGF0dXMgcGFnZSB3aWxsIGJlIGluIFJlY2xhaW0gc3RhdGUgb24gc3VjY2Vzcywgb3IgbGVmdFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyNDA4Olx0XHQgKiBpbiBGaXJtd2FyZSBzdGF0ZSBvbiBmYWlsdXJlLiBVc2Ugc25wX3JlY2xhaW1fcGFnZXMoKSB0b1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDA5LVx0XHQgKiB0cmFuc2l0aW9uIGVpdGhlciBjYXNlIGJhY2sgdG8gSHlwZXJ2aXNvci1vd25lZCBzdGF0ZS5cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMC1cdFx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MTE6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGRhdGEpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTI4MD12b2lkIG1seDVfcGFnZXNfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7ZndfcGFnZXNfcmVjbGFpbV9kaXNjYXJkXCYjMzQ7LCAwNDAwLCBwYWdlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MjkxOlx0XHRcdCAgIFx1MDAyNmRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTQ4LVx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdG91dC5jOjE0OTpcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fUEFHRVNfTVMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV92ZnNfcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fVkZTX1BBR0VTX01TLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzctXHRcdFx0ICAgICB1MzIgKmluLCBpbnQgaW5fc2l6ZSwgdTMyICpvdXQsIGludCBvdXRfc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjU3NTpzdGF0aWMgaW50IHJlY2xhaW1fcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01NzYtXHRcdFx0IGludCBucGFnZXMsIGludCAqbmNsYWltZWQsIGJvb2wgZXZlbnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwNi1cdFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjA3Olx0ZXJyID0gcmVjbGFpbV9wYWdlc19jbWQoZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRsZW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDktXHRcdG5wYWdlcyA9IE1MWDVfR0VUKG1hbmFnZV9wYWdlc19pbiwgaW4sIGlucHV0X251bV9lbnRyaWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2MTA6XHRcdGRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCAmIzQzOz0gbnBhZ2VzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYxMS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NjQzPXN0YXRpYyB2b2lkIHBhZ2VzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTY1MS1cdGVsc2UgaWYgKHJlcS1cdTAwM2VucGFnZXMgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjUyOlx0XHRlcnIgPSByZWNsYWltX3BhZ2VzKGRldiwgcmVxLVx1MDAzZWZ1bmNfaWQsIC0xICogcmVxLVx1MDAzZW5wYWdlcywgTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTMtXHRcdFx0XHQgICAgdHJ1ZSwgcmVxLVx1MDAzZWVjX2Z1bmN0aW9uKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9ODMwPXN0YXRpYyBpbnQgbWx4NV9yZWNsYWltX3Jvb3RfcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjg0MjpcdFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDMtXHRcdFx0XHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ2LVx0XHRcdG1seDVfY29yZV93YXJuKGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XHRcdFx0XHQgICAgICAgXCYjMzQ7cmVjbGFpbV9wYWdlcyBlcnIgKCVkKSBmdW5jX3ZoY2FfaWQ9MHgleCBlY19mdW5jPTB4JXhcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVx0XHRcdFx0ICAgICAgIGVyciwgZnVuY192aGNhX2lkLCBlY19mdW5jdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgtNTg3LVx0dTMyXHRcdFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oOjU4ODpcdHUzMlx0XHRcdHJlY2xhaW1fcGFnZXNfZGlzY2FyZDtcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXHRlbnVtIG1seDVfcGFnZV9tZ3RfbW9kZVx0cGFnZV9tZ3RfbW9kZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaD0zNDU1PXN0cnVjdCBtbHg1X2lmY19kdG9yX3JlZ19iaXRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MzQ3NjpcdHN0cnVjdCBtbHg1X2lmY19kZWZhdWx0X3RpbWVvdXRfYml0cyByZWNsYWltX3BhZ2VzX3RvO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMDgxPXZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTA4My12b2lkIHNucF9mcmVlX2Zpcm13YXJlX3BhZ2Uodm9pZCAqYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTExOS1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTIxLXtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMy1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzEtXHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG5tbS9kYW1vbi9wYWRkci5jOjI3MjpcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTExOTk9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgIF9fbXVzdF9jaGVjayB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXG4tLVxubW0vaW50ZXJuYWwuaC0xMjAyLVxubW0vaW50ZXJuYWwuaDoxMjAzOnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2ludGVybmFsLmgtMTIwNC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy00NDMtXHRcdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjQ0NDpcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vbWFkdmlzZS5jLTQ0NS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWFkdmlzZS5jLTU2Mi1cdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjU2MzpcdFx0cmVjbGFpbV9wYWdlcyhcdTAwMjZmb2xpb19saXN0KTtcbm1tL21hZHZpc2UuYy01NjQtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS92bXNjYW4uYz0yMTgwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE5OS1cdH1cbm1tL3Ztc2Nhbi5jOjIyMDA6XHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQpO1xubW0vdm1zY2FuLmMtMjIwMS1cbi0tXG5tbS92bXNjYW4uYy0yMjA0LVxubW0vdm1zY2FuLmM6MjIwNTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL3Ztc2Nhbi5jLTIyMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkyMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IFJlY2xhaW0gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gbWVtb3J5IHJlY2xhaW0gYW5kIHdhbnQgdG8gaWRlbnRpZnkgc29tZSBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24uIGByZWNsYWltX3BhZ2VzYCBkZWZpbml0ZWx5IGp1bXBzIG91dDsgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBjZW50cmFsIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYm90aCBgbWFkdmlzZWAgYW5kIGBkYW1vbmAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCYjMzk7cyBhIGtleSBwb2ludCB0byBleGFtaW5lLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc2hyaW5rX2FsbF9tZW1vcnlgIOKAkyBJIHJlbWVtYmVyIHRoYXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGhpYmVybmF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd2hlcmUgdGhlIGNvcmUsIGZyZXF1ZW50IHJlY2xhaW0gYWN0aXZpdHkgbGllcy4gVGhlIHJlYWwgYWN0aW9uIGlzIHByb2JhYmx5IGVsc2V3aGVyZS4KCkFscmlnaHQsIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gaG9uZSBpbiBvbiBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQsIG9mIGNvdXJzZSwgYHJlY2xhaW1fcGFnZXNgLiBHb3R0YSBzZWUgaG93IHRob3NlIGFsbCB3b3JrLgoKV2FpdCBhIHNlY29uZOKApiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBgX19wZXJmb3JtX3JlY2xhaW1gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLiBCaW5nbyEgVGhpcyBpcyB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgaG90LCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgdmVyeSBpbXBvcnRhbnQuIFRoYXQgaXMgYSB2ZXJ5IGRpcmVjdCBwYXRoIHRvIHRoZSByZWNsYWltIHByb2Nlc3MuCgpTbywgaXMgYHJlY2xhaW1fcGFnZXNgIGl0c2VsZiB0aGF0IGhvdD8gQ2hlY2tpbmcgYmFjaywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgbWVhbnMgdGhpcyBjb3VsZCBiZSBhbiBleGNlbGxlbnQgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgdXNlci1jb250cm9sbGFibGUgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIGl0IGhpZ2ggdmFsdWUuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL2ludGVybmFsLmgtODItXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg0LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODE2Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNy1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MzQ9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1MS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODUyOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1My1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzczPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzODgtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzODk6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzEyLVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjcxMzpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI3MTQtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODMyPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDg3My1cbm1tL21lbWNvbnRyb2wuYzo0ODc0Olx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDg3NS1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4OTE9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MzItXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ5MzM6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00OTM0LVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02ODYyPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjkwMS1cbm1tL3Ztc2Nhbi5jOjY5MDI6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY5MDMtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjk0Mi0jZWxzZVxubW0vdm1zY2FuLmM6Njk0Mzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjk0NC1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz04MDA1PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDc2LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6ODA3NzpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtODA3OC1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njk2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBQcmVzc3VyZSBhbmQgUmVjbGFtYXRpb24qKgoKT2theSwgc28gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgZGVhbGluZyB3aXRoIG1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gY2dyb3VwcywgYW5kIGl0cyBjYWxscyBmcm9tIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZWFsbHkgaGlnaGxpZ2h0IHdoZXJlIHRoZSBzeXN0ZW0gaXMgZm9jdXNpbmcgaXRzIHJlY2xhbWF0aW9uIGVmZm9ydHMuIFRoYXQmIzM5O3MgYSBzb2xpZCBpbmRpY2F0b3Igb2Ygd2hlcmUgdG8gZGl2ZSBkZWVwZXIuCgpgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBMZXQgbWUgZHJpbGwgZG93biBvbiB0aGF0IGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzICphY3RpdmVseSogYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeSwgYXMgb3Bwb3NlZCB0byBqdXN0IHJlYWN0aW5nIHRvIGFuIGFic29sdXRlIHRocmVzaG9sZC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbGllLCBhbmQgd2hlcmUgSSBjYW4gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBzdHJhdGVnaWVzIGJlaW5nIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9Njk5PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NzAwOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNzAxLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwNjc9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTUwNzItXG5tbS9tZW1jb250cm9sLmM6NTA3MzpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNTA3NC1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzk5OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtODAwNC1cbm1tL3Ztc2Nhbi5jOjgwMDU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtODAwNi1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODE1OD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MTYzLVxubW0vdm1zY2FuLmM6ODE2NDpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgxNjUtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzY4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IHJlY2xhaW0gd29ya3MsIHNwZWNpZmljYWxseSBhdCB3aGF0JiMzOTtzIGJlaW5nIGhpZ2hsaWdodGVkIGFzIGtleSBhcmVhcy4gSSBzZWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfcmVjbGFpbWAgd2hpY2ggSSBrbm93IGlzIGEgc3lzZnMvY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQsIGl0JiMzOTtzIGEgc3Ryb25nIGZvY3VzIHN5bWJvbC4KClRoZW4gSSBzZWUgdGhlIGNvcmUgZm9jdXMgcG9pbnRzIGFyZTogYHJlY2xhaW1fcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpIbW0sIGB0cnlfdG9fZnJlZV9wYWdlc2AgZmVlbHMgYSBsaXR0bGUgZ2VuZXJpYywgaXQmIzM5O3MgYnJvYWQuIEJ1dCBgcmVjbGFpbV9wYWdlc2AgYW5kIGVzcGVjaWFsbHkgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFyZSBwcmVjaXNlbHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gdGhleSYjMzk7cmUgcmlnaHQgb24gdGFyZ2V0LiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBjb250cm9sIHBvaW50cy4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCBmb3IgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFuZCBmb3IgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCB0aG91Z2ggYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGdldHMgY2FsbGVkIGJ5IGByZWNsYWltX3N0b3JlYCB3aGljaCBpcyBhdCBhIG5vZGUgbGV2ZWwuIEludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjA5LVxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIxMS1cbi0tXG5tbS92bXNjYW4uYz0yNzcwPXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNzczLVxubW0vdm1zY2FuLmM6Mjc3NDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNzc1LVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjkyOD1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MzQtXG5tbS92bXNjYW4uYzoyOTM1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzYtXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjk2OD12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NzQtXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyOTc1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5NzYtXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjk5NT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMDMtXG5tbS92bXNjYW4uYzozMDA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMDUtXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMzAyNy1cbm1tL3Ztc2Nhbi5jOjMwMjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzAyOS1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMzMtXG5tbS92bXNjYW4uYzozMDM0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMzUtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDQwOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00NDUzLVxubW0vdm1zY2FuLmM6NDQ1NDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00NDU1LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2NDY9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjY4LVxubW0vdm1zY2FuLmM6NDY2OTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS92bXNjYW4uYy00NjcwLVxuLS1cbm1tL3Ztc2Nhbi5jPTU2NTI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NjY1LVxubW0vdm1zY2FuLmM6NTY2NjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NjY3LVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTkxOD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5MzctXG5tbS92bXNjYW4uYzo1OTM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU5MzktXG4tLVxubW0vdm1zY2FuLmM9NTk1MT12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNTk3Ny1cbm1tL3Ztc2Nhbi5jOjU5Nzg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vdm1zY2FuLmMtNTk3OS1cbi0tXG5tbS92bXNjYW4uYz02ODE2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTgtXG5tbS92bXNjYW4uYzo2ODU5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTY4NjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIENPTkZJR19NRU1DRyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aGVyZSBgQ09ORklHX01FTUNHYCBpcyBoZWF2aWx5IGludm9sdmVkLCB3aGljaCBpcyBxdWl0ZSBhIGJpdCBpbiBgbW0vdm1zY2FuLmNgLiBHaXZlbiB0aGF0LCBteSBFbmFibGVDb25maWdzIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYW5kIGBNRU1DR2AuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGByZWNsYWltX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFzIG15IGZvY3VzIHN5bWJvbHMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlc2UgYXJlbiYjMzk7dCBzdGF0aWM7IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aGVzZSB0aGluZ3MuIEFscmlnaHQsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBub24tc3RhdGljIGFzIGV4cGVjdGVkLCBhbmQgaXQmIzM5O3MgZGVmaW5lZCByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUuIFNhbWUgZ29lcyBmb3IgYHJlY2xhaW1fcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEdvb2QuCgpOb3csIHRoaXMgcGF0Y2ggdG91Y2hlcyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGltZSB0byB0cmFjZSB0aGVzZSB0aHJvdWdoIHRoZSBjYWxsIGdyYXBocy4gSXQgbG9va3MgbGlrZSBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xpc3RgIHdoaWNoIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBgc2hyaW5rX25vZGVgIGlzIHRoZSBpbXBvcnRhbnQgb25lIGJlY2F1c2UgaXQgaXMgY2FsbGVkIGJ5IGBkb190cnlfdG9fZnJlZV9wYWdlc2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gYHNocmlua19ub2RlYCBpcyBhbHNvIGNhbGxlZCBieSBrc3dhcGQgKHZpYSBgYmFsYW5jZV9wZ2RhdGApIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpPbiB0aGUgYGV2aWN0X2ZvbGlvc2Agc2lkZSwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBUaGUgZm9ybWVyJiMzOTtzIGNhbGwgY2hhaW4gaXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYGxydV9nZW5fc2hyaW5rX25vZGVgIC0mZ3Q7IGBzaHJpbmtfbm9kZWAuIFRoZSBsYXR0ZXIgaXMgZGlyZWN0bHkgY2FsbGVkIGJ5IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4KClNvLCBiYXNlZCBvbiB0aGVzZSBjYWxsIGNoYWlucywgaXQgc2VlbXMgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcmUgZXhjZWxsZW50IGZvY3VzIHN5bWJvbHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLgoKSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBvciBgZXZpY3RfZm9saW9zYC4gTGV0JiMzOTtzIHNlZS4uLiBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIFdhaXQgYSBtaW51dGUsIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgKm5vdCogdGhlIHNhbWUgYXMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gUmlnaHQsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXNvbGF0ZXMgcGFnZXMgZnJvbSB0aGUgaW5hY3RpdmUgTFJVIGxpc3QgYW5kICp0aGVuKiBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBgcmVjbGFpbV9wYWdlc2Agd29ya3Mgd2l0aCBwYWdlcyB0aGF0IGFyZSBhbHJlYWR5IGlzb2xhdGVkLiBTbyBubywgYHJlY2xhaW1fcGFnZXNgIGRvZXMgKm5vdCogZGlyZWN0bHkgY2FsbCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIG9yIGBldmljdF9mb2xpb3NgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY2xhaW1fZm9saW9fbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIwOTE9c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMTc5LVxubW0vdm1zY2FuLmM6MjE4MDpzdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxubW0vdm1zY2FuLmMtMjE4MS1cdFx0XHRcdCAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9MjIwNT11bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbi0tXG5tbS92bXNjYW4uYy0yMjI2LVxubW0vdm1zY2FuLmM6MjIyNzpcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltX2ZvbGlvX2xpc3QoXHUwMDI2bm9kZV9mb2xpb19saXN0LCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy0yMjI4LVx0XHRuaWQgPSBmb2xpb19uaWQobHJ1X3RvX2ZvbGlvKGZvbGlvX2xpc3QpKTtcbi0tXG5tbS92bXNjYW4uYy0yMjMwLVxubW0vdm1zY2FuLmM6MjIzMTpcdG5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbV9mb2xpb19saXN0KFx1MDAyNm5vZGVfZm9saW9fbGlzdCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtMjIzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3MDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2xhaW0gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlY2xhaW0gcHJvY2Vzcy4gUmlnaHQsIHNvIGByZWNsYWltX3BhZ2VzYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBtYWluIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBkb2luZy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNocmlua19mb2xpb19saXN0YC4gVGhhdCYjMzk7cyB0aGUgY2hhaW4gb2YgY2FsbHMgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgaXQgKmRvZXNuJiMzOTt0KiBjYWxsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgb3IgYGV2aWN0X2ZvbGlvc2AuIFRoaXMgbWVhbnMgdGhhdCBgcmVjbGFpbV9wYWdlc2Agb24gaXRzIG93biBpc24mIzM5O3QgdGhlIGJlc3QgcGxhY2UgdG8gbWFrZSBhbiBvYnNlcnZhdGlvbiBvbiB0aGUgd2hvbGUgcHJvY2Vzcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gT2theSwgc28gd2hhdCBpcyBhIGJldHRlciBvcHRpb24sIG1heWJlIGEgaGlnaGVyIGxldmVsIGZ1bmN0aW9uLCB0aGF0IGlzIGF3YXJlIG9mIG1vcmUgb2YgdGhlIGNhbGwgcGF0aHM/IFdoYXQgYWJvdXQgYHNocmlua19hbGxfbWVtb3J5YD8gTGV0IG1lIHNlZSB3aGF0IHRoYXQgZW50YWlscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2ODY9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc2OTktICovXG5tbS92bXNjYW4uYzo3NzAwOnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxubW0vdm1zY2FuLmMtNzcwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTI4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgZm9jdXNpbmcgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWVtb3J5IHNocmlua2luZzoKCioqTWVtb3J5IFNocmlua2luZyBBbmFseXNpcyoqCgpPa2F5LCBzbyBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhlcmUuIFRoYXQgY2FsbCBjaGFpbiAtIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbGluZyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCB3aGljaCB0aGVuIGNhbGxzIGBzaHJpbmtfem9uZXNgLCBhbmQgZmluYWxseSBkb3duIHRvIGBzaHJpbmtfbm9kZWAgLSB0ZWxscyBtZSB0aGUgaGlnaC1sZXZlbCBmbG93LiBgc2hyaW5rX2FsbF9tZW1vcnlgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbjsgaXQmIzM5O3MgdGhlIGluaXRpYXRpbmcgc3ltYm9sIGZvciBtZW1vcnkgcmVjbGFtYXRpb24uCgpOb3csIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQsIGdpdmVuIGl0cyByb2xlIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBJdCYjMzk7cyBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBob3RzcG90LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGlzIGNydWNpYWwuIEhvd2V2ZXIsIHNpbmNlIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5LCBpdCBtYXkgbm90IGJlIHdoZXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGxpZS4gSSBuZWVkIHRvIGxvb2sgYmV5b25kIHRoYXQgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEFoLCBoZXJlJiMzOTtzIG9uZTogYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZTsgaXQgbGlrZWx5IHRvdWNoZXMgdGhlIG1lbW9yeSBjZ3JvdXAgYXNwZWN0LiBJIHdhbnQgdG8gY2hlY2sgaXRzIGZ1bmN0aW9uIGluIG1lbW9yeSBzaHJpbmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2ludGVybmFsLmgtODctXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG5tbS9pbnRlcm5hbC5oOjg4OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg5LVx0XHRcdFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTI3Mj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0zMTEtXHRcdH1cbm1tL21lbWNvbnRyb2wtdjEuYzozMTI6XHRcdHRvdGFsICYjNDM7PSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxubW0vbWVtY29udHJvbC12MS5jLTMxMy1cdFx0XHRcdFx0cGdkYXQsIFx1MDAyNm5yX3NjYW5uZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTY4MTY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjg2MS0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODYyOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODYzLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4ODAKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSByZWNsYWltIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdhdGhlcmVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZpbmQgYSBnb29kIGZvY3VzIHN5bWJvbCwgYW5kIGl0IGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBvbmx5IHVzZWQgZHVyaW5nIHNvZnQgbGltaXQgcmVjbGFpbSBhbmQgY2FsbHMgYHNocmlua19ub2RlYC4gVGhhdCwgYW5kIHRoZSBvdGhlciBmb2N1cyBzeW1ib2xzLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAsIGxvb2sgcHJvbWlzaW5nLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBUaGUgY29yZSBpZGVhIGlzIHRvIHRocm90dGxlIHJlY2xhaW0gaWYgd2UmIzM5O3JlIGFjY3VtdWxhdGluZyB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuIEl0IHNlZW1zIGxpa2UgaWYgaXQmIzM5O3Mgbm90IG1ha2luZyBwcm9ncmVzcywgaXQgYmFpbHMgb3V0LCBhbmQgaW1wb3J0YW50bHksIGl0IHNldHMgYCpmYXRhbGAgaWYgdGhlIGN1cnJlbnQgdGFzayBoYXMgYSBmYXRhbCBzaWduYWwgcGVuZGluZy4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIGJpdDogaWYgYCpmYXRhbGAgaXMgdHJ1ZSwgYHNocmlua19pbmFjdGl2ZV9saXN0YCByZXR1cm5zIGBTV0FQX0NMVVNURVJfTUFYYC4gQW5kIGlmIGAqZmF0YWxgIGlzIHRydWUsIGBldmljdF9mb2xpb3NgIGFkZHMgYFNXQVBfQ0xVU1RFUl9NQVhgIHRvIGBzYy0mZ3Q7bnJfcmVjbGFpbWVkYCBhbmQgcmV0dXJucyAwLiBJIHN1c3BlY3QgdGhpcyBpcyBhIGZpeCB0byBwcmV2ZW50IGEgaGFuZyBvciBsb29wIGNvbmRpdGlvbiB3aGVyZSBhIHRhc2sgZ2V0cyBraWxsZWQgKHNheSwgYnkgdGhlIE9PTSBraWxsZXIpIGJ1dCBlbmRzIHVwIHN0dWNrIGluIHJlY2xhaW0gYmVjYXVzZSBvZiB0aG9zZSBwZXNreSBpc29sYXRlZCBmb2xpb3MuCgpUaGVyZWZvcmUsIGZ1enppbmcgdGhpcyBlZmZlY3RpdmVseSByZXF1aXJlcyB0cmlnZ2VyaW5nIHBhZ2UgcmVjbGFpbSDigJMgd2hpY2ggYWxsIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgZG8g4oCTIGFuZCBlbnN1cmluZyB0aGF0IHdlIGNhbiBhbHNvIGtpbGwgdGFza3MsIHdoaWNoIFN5emthbGxlciwgdGhhbmtmdWxseSwgaGFuZGxlcyBuYXR1cmFsbHkuCgpUaGUga2V5IGNvbmZpZ3MgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYC4KCkkmIzM5O2xsIHVzZSBzZXQtcmVzdWx0cyB0byByZXR1cm4gbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgdG8gcHJldmVudCB0YXNrcyBmcm9tIGxvb3BpbmcgaW5kZWZpbml0ZWx5IG9uIHVuZXZpY3RhYmxlIGZvbGlvcyB3aGVuIHRoZXkgcmVjZWl2ZSBhIGZhdGFsIHNpZ25hbC4gSXQgdXBkYXRlcyBib3RoIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gKGBldmljdF9mb2xpb3NgKS4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBwYWdlIHJlY2xhaW0sIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1jZyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0sIHdpdGggTUdMUlUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGJlZm9yZSBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGVuc3VyaW5nIGl0IGlzIG5ldmVyIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDMwMDhlNzk2NmI4YWZhNjY1MTE2NDVjYjExMDAwYzJjNjE3OTMxMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE1OjE1OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTgxOSw3ICYjNDM7MTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbykKICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0bwogICogdW5uZWNlc3Nhcnkgc3dhcHBpbmcsIHRocmFzaGluZyBhbmQgT09NLgogICovCi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSwKJiM0MztzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiAJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXVuc2lnbmVkIGxvbmcgaW5hY3RpdmUsIGlzb2xhdGVkOwpAQCAtMTg1Niw2ICYjNDM7MTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSwKIAlyZXR1cm4gdG9vX21hbnk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRocm90dGxlIHJlY2xhaW0gaWYgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zIGFyZSBwaWxpbmcgdXAuIElmIHRoaXMgbWFrZXMKJiM0MzsgKiBubyBwcm9ncmVzcywgdGhlIGNhbGxlciBpcyBwcm9iYWJseSBsb29waW5nIG9uIHVuZXZpY3RhYmxlIGZvbGlvcywgc28gZ2l2ZQomIzQzOyAqIHVwLiBSZXR1cm5zIHRydWUgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsCiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhbgomIzQzOyAqIGJhaWwgb3V0IGZhc3Rlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc190aHJvdHRsZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLAomIzQzOwkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbCkKJiM0Mzt7CiYjNDM7CWJvb2wgc3RhbGxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkqZmF0YWwgPSBmYWxzZTsKJiM0MzsJd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7CiYjNDM7CQlpZiAoc3RhbGxlZCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCiYjNDM7CQlzdGFsbGVkID0gdHJ1ZTsKJiM0MzsJCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CiYjNDM7CQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiYjNDM7CQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkqZmF0YWwgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KICAqCkBAIC0xOTkyLDE5ICYjNDM7MjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwotCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwotCi0Jd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7Ci0JCWlmIChzdGFsbGVkKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KLQkJc3RhbGxlZCA9IHRydWU7Ci0JCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CWJvb2wgZmF0YWw7CiAKJiM0MzsJaWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KLQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJaWYgKGZhdGFsKQogCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlscnVfYWRkX2RyYWluKCk7CkBAIC00ODc3LDEyICYjNDM7NDkwMywzMyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7Ci0JaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKJiM0MzsJaW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDsKIAlpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7CiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwlib29sIGZhdGFsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBhbmQKJiM0MzsJICogaXNvbGF0ZV9mb2xpb3MoKSBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciB0eXBlLiBUaHJvdHRsZSBpZgomIzQzOwkgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKJiM0MzsJCWlmICh0aHJvdHRsZV9pc190aHJvdHRsZWQocGdkYXQsIGksIHNjLCAmYW1wO2ZhdGFsKSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZQomIzQzOwkJCSAqIGxlZ2FjeSBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28KJiM0MzsJCQkgKiByZWNsYWltIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjawomIzQzOwkJCSAqIGludG8gdGhlIHRocm90dGxlLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChmYXRhbCkKJiM0MzsJCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTQ4OTIsNiAmIzQzOzQ5MzksOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKIAlucl9pc29sYXRlZCA9IGlzb2xhdGVkOwomIzQzOwlpZiAobnJfaXNvbGF0ZWQpCiYjNDM7CQlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgICAgbnJfaXNvbGF0ZWQpOwogCiAJLyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi8KIAlpZiAoc2Nhbm5lZCkKQEAgLTQ5NTQsNiAmIzQzOzUwMDQsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJZ290byByZXRyeTsKIAl9CiAKJiM0MzsJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLCAtbnJfaXNvbGF0ZWQpOwomIzQzOwogCWlmIChucl9pc29sYXRlZCAmZ3Q7IHRvdGFsX3JlY2xhaW1lZCkKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgdHlwZSwKIAkJCQkgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA3NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBJbml0aWFsaXphdGlvbiBpbiBhIFJlY2xhaW0gVGhyb3R0bGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgdGhyb3R0bGluZyBsb2dpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgcHVsbGluZyB0aGUgdGhyb3R0bGluZyBiZWhhdmlvciBvdXQgb2YgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgaW50byBhIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIFRoZSBnb2FsIGlzIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbiBpbiBgZXZpY3RfZm9saW9zYCB0byB0aHJvdHRsZSByZWNsYWltIHdoZW4gdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zIGFyZSBidWlsZGluZyB1cCwgYW5kIHRvIHVwZGF0ZSBub2RlIHBhZ2Ugc3RhdGUgYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAgYXMgd2VsbC4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sIGZhdGFsO2AgdmFyaWFibGUgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhpcyB2YXJpYWJsZSBpcyB0aGVuIHBhc3NlZCB0byBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb246CgpgYGBjCnN0YXRpYyBib29sIHRocm90dGxlX2lzX3Rocm90dGxlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCgkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbCkKewoJYm9vbCBzdGFsbGVkID0gZmFsc2U7CgoJKmZhdGFsID0gZmFsc2U7Cgl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKCQlpZiAoc3RhbGxlZCkKCQkJcmV0dXJuIHRydWU7CgoJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCgkJc3RhbGxlZCA9IHRydWU7CgkJcmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTsKCgkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwoJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewoJCQkqZmF0YWwgPSB0cnVlOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9CmBgYAoKT2theSwgc28gcmlnaHQgYXQgdGhlIHN0YXJ0LCBgKmZhdGFsYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgKmluc2lkZSogYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIFRoYXQmIzM5O3MgZ29vZC4gTm8gY2hhbmNlIG9mIHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgdGhlcmUuCgpCdXQgd2FpdCwgd2hhdCBpZiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYCAqcmV0dXJucyogZmFsc2U/IExldCYjMzk7cyBjaGVjayB3aGVyZSBpdCYjMzk7cyBjYWxsZWQ6CgpJbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgOgoKYGBgYwoJaWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CgkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwoJCWlmIChmYXRhbCkKCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CgoJCXJldHVybiAwOwoJfQpgYGAKCklmIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIHJldHVybnMgZmFsc2UsIHRoZSBjb2RlIHNpbXBseSByZXR1cm5zIDAgKndpdGhvdXQqIHVzaW5nIGBmYXRhbGAuIFNlZW1zIGZpbmUuCgpJbiBgZXZpY3RfZm9saW9zYDoKCmBgYGMKCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKCQlpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgJmFtcDtmYXRhbCkpIHsKCQkJLyoKCQkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZQoJCQkgKiBsZWdhY3kgcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvCgkJCSAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrCgkJCSAqIGludG8gdGhlIHRocm90dGxlLgoJCQkgKi8KCQkJaWYgKGZhdGFsKQoJCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKCgkJCXJldHVybiAwOwoJCX0KCX0KYGBgCgpBZ2FpbiwgaWYgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgcmV0dXJucyBmYWxzZSwgYGZhdGFsYCBpcyAqbm90KiB1c2VkLiBJdCYjMzk7cyBvbmx5IHVzZWQgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBgZmF0YWxgIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgKGVpdGhlciB0byBgZmFsc2VgIGR1cmluZyB0aGUgYHdoaWxlYCBsb29wLCBvciBwb3NzaWJseSBzZXQgdG8gYHRydWVgIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcpLgoKU28sIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb2RlIHBhdGhzLCBJIGFtIHByZXR0eSBjb25maWRlbnQuIFRoaXMgaXMganVzdCBhIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIHBhZ2UgcmVjbGFpbSwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBhbmQgc2VudCB0byB1c2Vyc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB3b3JrZWQgd2l0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGFwcGFyZW50IGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGJlZm9yZSBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGVuc3VyaW5nIGl0IGlzIG5ldmVyIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNToxMC42MTQ0MTM1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzE3NTg3OTMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjEwLjYxNDQyMDkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQyNDM4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMzAwOGU3OTY2YjhhZmE2NjUxMTY0NWNiMTEwMDBjMmM2MTc5MzEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDE1OjE1OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cXG4gICogdW5uZWNlc3Nhcnkgc3dhcHBpbmcsIHRocmFzaGluZyBhbmQgT09NLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXFxuK3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4gXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7XFxuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4gXFx0cmV0dXJuIHRvb19tYW55O1xcbiB9XFxuIFxcbisvKlxcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXFxuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXFxuKyAqIHVwLiBSZXR1cm5zIHRydWUgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsXFxuKyAqIGlmIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW5cXG4rICogYmFpbCBvdXQgZmFzdGVyLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgdGhyb3R0bGVfaXNfdGhyb3R0bGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXFxuK3tcXG4rXFx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XFxuK1xcbitcXHQqZmF0YWwgPSBmYWxzZTtcXG4rXFx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XFxuK1xcdFxcdGlmIChzdGFsbGVkKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXFxuK1xcdFxcdHN0YWxsZWQgPSB0cnVlO1xcbitcXHRcXHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xcbitcXG4rXFx0XFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xcbitcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0KmZhdGFsID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxcbiAgKlxcbkBAIC0xOTkyLDE5ICsyMDIzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4gXFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcXG4gXFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuLVxcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbi1cXG4tXFx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XFxuLVxcdFxcdGlmIChzdGFsbGVkKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdFxcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXFxuLVxcdFxcdHN0YWxsZWQgPSB0cnVlO1xcbi1cXHRcXHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xcbitcXHRib29sIGZhdGFsO1xcbiBcXG4rXFx0aWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgZmlsZSwgc2MsIFxcdTAwMjZmYXRhbCkpIHtcXG4gXFx0XFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xcbi1cXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdGlmIChmYXRhbClcXG4gXFx0XFx0XFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XFxuK1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0bHJ1X2FkZF9kcmFpbigpO1xcbkBAIC00ODc3LDEyICs0OTAzLDMzIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG4tXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4rXFx0aW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4gXFx0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcXG4gXFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuK1xcdGJvb2wgZmF0YWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBhbmRcXG4rXFx0ICogaXNvbGF0ZV9mb2xpb3MoKSBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciB0eXBlLiBUaHJvdHRsZSBpZlxcbitcXHQgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcXG4rXFx0XFx0aWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgaSwgc2MsIFxcdTAwMjZmYXRhbCkpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZVxcbitcXHRcXHRcXHQgKiBsZWdhY3kgcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvXFxuK1xcdFxcdFxcdCAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrXFxuK1xcdFxcdFxcdCAqIGludG8gdGhlIHRocm90dGxlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGZhdGFsKVxcbitcXHRcXHRcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IFNXQVBfQ0xVU1RFUl9NQVg7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4gXFxuQEAgLTQ4OTIsNiArNDkzOSw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZsaXN0LCBcXHUwMDI2aXNvbGF0ZWQsIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dHlwZV9zY2FubmVkKTtcXG4gXFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG4rXFx0aWYgKG5yX2lzb2xhdGVkKVxcbitcXHRcXHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBucl9pc29sYXRlZCk7XFxuIFxcbiBcXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xcbiBcXHRpZiAoc2Nhbm5lZClcXG5AQCAtNDk1NCw2ICs1MDA0LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuK1xcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xcbitcXG4gXFx0aWYgKG5yX2lzb2xhdGVkIFxcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxcbiBcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjExLjE1OTU4NDgyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3NjI0MTcxMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCB0byBwcmV2ZW50IHRhc2tzIGZyb20gbG9vcGluZyBpbmRlZmluaXRlbHkgb24gdW5ldmljdGFibGUgZm9saW9zIHdoZW4gdGhleSByZWNlaXZlIGEgZmF0YWwgc2lnbmFsLiBJdCB1cGRhdGVzIGJvdGggdGhlIGxlZ2FjeSBMUlUgcmVjbGFpbSAoYHNocmlua19pbmFjdGl2ZV9saXN0YCkgYW5kIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcmVjbGFpbSAoYGV2aWN0X2ZvbGlvc2ApLiBUaGVzZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIHBhZ2UgcmVjbGFpbSwgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIG1lbWNnIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSwgd2l0aCBNR0xSVSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMzAwOGU3OTY2YjhhZmE2NjUxMTY0NWNiMTEwMDBjMmM2MTc5MzEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTU6MTU6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0b1xuICAqIHVubmVjZXNzYXJ5IHN3YXBwaW5nLCB0aHJhc2hpbmcgYW5kIE9PTS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbitzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4gXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaW5hY3RpdmUsIGlzb2xhdGVkO1xuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiBcdHJldHVybiB0b29fbWFueTtcbiB9XG4gXG4rLypcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXG4rICogbm8gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIgaXMgcHJvYmFibHkgbG9vcGluZyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MsIHNvIGdpdmVcbisgKiB1cC4gUmV0dXJucyB0cnVlIHRvIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIHJlY2xhaW1pbmcsIGFuZCBzZXRzIEBmYXRhbFxuKyAqIGlmIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW5cbisgKiBiYWlsIG91dCBmYXN0ZXIuXG4rICovXG4rc3RhdGljIGJvb2wgdGhyb3R0bGVfaXNfdGhyb3R0bGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbitcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxuK3tcbitcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1xuK1x0KmZhdGFsID0gZmFsc2U7XG4rXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbitcdFx0aWYgKHN0YWxsZWQpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4rXHRcdHN0YWxsZWQgPSB0cnVlO1xuK1x0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1xuK1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4rXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdCpmYXRhbCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLypcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxuICAqXG5AQCAtMTk5MiwxOSArMjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLVx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4tXG4tXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbi1cdFx0aWYgKHN0YWxsZWQpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4tXHRcdHN0YWxsZWQgPSB0cnVlO1xuLVx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1x0Ym9vbCBmYXRhbDtcbiBcbitcdGlmICh0aHJvdHRsZV9pc190aHJvdHRsZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuLVx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdGlmIChmYXRhbClcbiBcdFx0XHRyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRscnVfYWRkX2RyYWluKCk7XG5AQCAtNDg3NywxMiArNDkwMywzMyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4tXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuK1x0aW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDtcbiBcdGludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdGJvb2wgZmF0YWw7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgYW5kXG4rXHQgKiBpc29sYXRlX2ZvbGlvcygpIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIHR5cGUuIFRocm90dGxlIGlmXG4rXHQgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy5cbitcdCAqL1xuK1x0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xuK1x0XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlXG4rXHRcdFx0ICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzb1xuK1x0XHRcdCAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrXG4rXHRcdFx0ICogaW50byB0aGUgdGhyb3R0bGUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGZhdGFsKVxuK1x0XHRcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQ4OTIsNiArNDkzOSw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4gXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuK1x0aWYgKG5yX2lzb2xhdGVkKVxuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTQsNiArNTAwNCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsIC1ucl9pc29sYXRlZCk7XG4rXG4gXHRpZiAobnJfaXNvbGF0ZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyB0eXBlLFxuIFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjExLjE1OTU4NjYxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NjMyNzA1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3Ztc2Nhbi5jYC4gSXQncyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzX3Rocm90dGxlZGAsIHdoaWNoIGJhc2ljYWxseSBjb25zb2xpZGF0ZXMgdGhlIGxvZ2ljIG9mIGB0b29fbWFueV9pc29sYXRlZGAgYW5kIGByZWNsYWltX3Rocm90dGxlYC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSBjaGFuZ2VzIHJpcHBsZSBvdXQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZXkncmUgbm93IHVzaW5nIHRoaXMgbmV3IHRocm90dGxpbmcgbWVjaGFuaXNtLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBzdGF0ZSBtb2RpZmljYXRpb25zIHdpdGggYF9fbW9kX25vZGVfcGFnZV9zdGF0ZWAgYW5kIGBtb2Rfbm9kZV9wYWdlX3N0YXRlYCBiZWluZyB0aHJvd24gaW4uXG5cblRoaXMgc21lbGxzIGxpa2UgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBwYWdlIHJlY2xhaW0sIHNwZWNpZmljYWxseSBgdm1zY2FuYCwgYmVoYXZlcy4gR2l2ZW4gaXRzIGZ1bmN0aW9uYWwgaW1wYWN0LCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSBvbiB0aGUgdG8tZG8gbGlzdC5cblxuVGltZSB0byBkcmlsbCBkb3duLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQuIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLCBib3RoIHN0YXRpYyBmdW5jdGlvbnMuIE5vdywgdGhlIHN0YXRpYy1uZXNzIG1lYW5zIHdlIG5lZWQgdG8gdHJhY2UgdGhlICpub24tc3RhdGljKiBlbnRyeSBwb2ludHMgd2hlcmUgdGhpcyBsb2dpYyBnZXRzIHRyaWdnZXJlZC4gYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBsaWtlbHkgY2FsbGVkIGJ5IGVpdGhlciBgc2hyaW5rX2xpc3RgIG9yIGBzaHJpbmtfbHJ1dmVjYC4gQXMgZm9yIGBldmljdF9mb2xpb3NgLCB0aGF0J3MgbGlrZWx5IGhhcHBlbmluZyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLlxuXG5JJ2xsIHVzZSBgZ2l0IGdyZXBgIHRvIGNvbmZpcm0gdGhlIGNhbGwgaGllcmFyY2h5IGZvciBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNhbGwgZ3JhcGggdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNToyMC45MjI4NjI2MDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDc4Njk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q9NTM5PVNvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdW5ldmljdGFibGUgcGFnZXMgb24gdGhlIExSVSBsaXN0cyBhcmU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTUwLVxcbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdDo1NTE6dm1zY2FuJ3Mgc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBhbmQgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhbHNvIGRpdmVydCBvYnZpb3VzbHlcXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTUyLXVuZXZpY3RhYmxlIHBhZ2VzIGZvdW5kIG9uIHRoZSBpbmFjdGl2ZSBsaXN0cyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNncm91cFxcbi0tXFxuZHJpdmVycy9taXNjL2xrZHRtL2NvcmUuYz03Nj1zdGF0aWMgc3RydWN0IGNyYXNocG9pbnQgY3Jhc2hwb2ludHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmMtODItXFx0Q1JBU0hQT0lOVChcXFwiRlNfU1VCTUlUX0JIXFxcIixcXHRcXHQgXFxcInN1Ym1pdF9iaFxcXCIpLFxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmM6ODM6XFx0Q1JBU0hQT0lOVChcXFwiTUVNX1NXQVBPVVRcXFwiLFxcdCBcXFwic2hyaW5rX2luYWN0aXZlX2xpc3RcXFwiKSxcXG5kcml2ZXJzL21pc2MvbGtkdG0vY29yZS5jLTg0LVxcdENSQVNIUE9JTlQoXFxcIlRJTUVSQUREXFxcIixcXHRcXHQgXFxcImhydGltZXJfc3RhcnRcXFwiKSxcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTQyNj1uZnNkX3Zmc193cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTE0NTMtXFx0XFx0ICogV2Ugd2FudCB0aHJvdHRsaW5nIGluIGJhbGFuY2VfZGlydHlfcGFnZXMoKVxcbmZzL25mc2QvdmZzLmM6MTQ1NDpcXHRcXHQgKiBhbmQgc2hyaW5rX2luYWN0aXZlX2xpc3QoKSB0byBvbmx5IGNvbnNpZGVyXFxuZnMvbmZzZC92ZnMuYy0xNDU1LVxcdFxcdCAqIHRoZSBiYWNraW5nZGV2IHdlIGFyZSB3cml0aW5nIHRvLCBzbyB0aGF0IG5mcyB0b1xcbi0tXFxubW0vdm1zY2FuLmM9MTk3Mj1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwMTAtLypcXG5tbS92bXNjYW4uYzoyMDExOiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5tbS92bXNjYW4uYy0yMDEyLSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xcbm1tL3Ztc2Nhbi5jLTIwMTMtICovXFxubW0vdm1zY2FuLmM6MjAxNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjAxNS1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmM9MjIzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjI0OC1cXG5tbS92bXNjYW4uYzoyMjQ5OlxcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xcbm1tL3Ztc2Nhbi5jLTIyNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNToyMi45Mzc2NzY1OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYyNTQ4OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBMaXN0IFNocmlua2luZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGRlZmluaXRlbHkgYmVpbmcgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAuIFRoYXQncyB0aGUgZXN0YWJsaXNoZWQgcmVsYXRpb25zaGlwLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpicm9hZGVyKiBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzaHJpbmtfbGlzdGAgaXRzZWxmIGlzIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGVzZSBsaXN0IHNocmlua2luZyBvcGVyYXRpb25zIGhhcHBlbmluZyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gVG8gZ2FpbiBhIGhvbGlzdGljIHZpZXcsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGBzaHJpbmtfbGlzdGAgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBsaXN0IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlc2Ugc2hyaW5raW5nIG9wZXJhdGlvbnMsIGxlYWRpbmcgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YC4gS25vd2luZyB0aGUgY2FsbGluZyBsb2NhdGlvbnMgd2lsbCBoZWxwIGluIGRldGVybWluaW5nIHRoZSBsYXJnZXIgaW50ZW50IG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjI1LjgwMDIyODgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzcwNzMyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2xpc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdD0xMzkyPWRfYWxsb2NfcGFyYWxsZWwoKSBubyBsb25nZXIgcmVxdWlyZXMgYSB3YWl0cXVldWVfaGVhZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTM5Ny1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjEzOTg6ZF9kaXNwb3NlX2lmX3VudXNlZCgpIGlzIGdvbmU7IHVzZSBfX21vdmVfdG9fc2hyaW5rX2xpc3QoKSBpZiB5b3UgcmVhbGx5XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMzk5LW5lZWQgdGhhdCBmdW5jdGlvbmFsaXR5LCBidXQgd2F0Y2ggb3V0IGZvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyAtIGp1c3RcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaD0yOTA9c3RhdGljIGlubGluZSBib29sXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oOjI5MTppOTE1X2dlbV9vYmplY3RfaGFzX3NlbGZfbWFuYWdlZF9zaHJpbmtfbGlzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaC0yOTIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oPTIzOT1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgtNjc2LVxcdFxcdC8qKlxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaDo2Nzc6XFx0XFx0ICogRWxlbWVudCB3aXRoaW4gaTkxNS1cXHUwMDNlbW0uc2hyaW5rX2xpc3Qgb3IgaTkxNS1cXHUwMDNlbW0ucHVyZ2VfbGlzdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgtNjc4LVxcdFxcdCAqIGxvY2tlZCBieSBpOTE1LVxcdTAwM2VtbS5vYmpfbG9jay5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jPTIzPXZvaWQgX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy04MC1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzo4MTpcXHRpZiAoc2hyaW5rYWJsZSBcXHUwMDI2XFx1MDAyNiAhaTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3Qob2JqKSkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTgyLVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy05My1cXHRcXHRlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM6OTQ6XFx0XFx0XFx0bGlzdCA9IFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy05NS1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZvYmotXFx1MDAzZW1tLmxpbmssIGxpc3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM9MjE0PV9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjYtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM6MjI3OlxcdGlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3Qob2JqKSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjgtXFx0XFx0aTkxNV9nZW1fb2JqZWN0X21ha2VfdW5zaHJpbmthYmxlKG9iaik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYz0xMzY9dm9pZCBpOTE1X2dlbV9zdXNwZW5kX2xhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYy0xMzktXFx0c3RydWN0IGxpc3RfaGVhZCAqcGhhc2VzW10gPSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BtLmM6MTQwOlxcdFxcdFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYy0xNDEtXFx0XFx0XFx1MDAyNmk5MTUtXFx1MDAzZW1tLnB1cmdlX2xpc3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYz0xOTg9aW50IGk5MTVfZ2VtX2ZyZWV6ZV9sYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BtLmMtMjIyLVxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jOjIyMzpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgXFx1MDAyNmk5MTUtXFx1MDAzZW1tLnNocmlua19saXN0LCBtbS5saW5rKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jLTIyNC1cXHRcXHRfX3N0YXJ0X2NwdV93cml0ZShvYmopO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM9MTA0PWk5MTVfZ2VtX3NocmluayhzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4ICp3dyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTExNS1cXHRcXHR7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6MTE2OlxcdFxcdFxcdFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0xMTctXFx0XFx0XFx0STkxNV9TSFJJTktfQk9VTkQgfCBJOTE1X1NIUklOS19VTkJPVU5EXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz0zNDg9aTkxNV9nZW1fc2hyaW5rZXJfb29tKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTM2OS1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aTkxNS1cXHUwMDNlbW0ub2JqX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYzozNzA6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvYmosIFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdCwgbW0ubGluaykge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTM3MS1cXHRcXHRpZiAoIWNhbl9yZWxlYXNlX3BhZ2VzKG9iaikpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz01NDQ9dm9pZCBfX2k5MTVfZ2VtX29iamVjdF9tYWtlX3Nocmlua2FibGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTU0Ni1cXHRfX19pOTE1X2dlbV9vYmplY3RfbWFrZV9zaHJpbmthYmxlKG9iaixcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYzo1NDc6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm9ial90b19pOTE1KG9iaiktXFx1MDAzZW1tLnNocmlua19saXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy01NDgtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaD0xMDc9c3RydWN0IGk5MTVfZ2VtX21tIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgtMTMwLVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmg6MTMxOlxcdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rX2xpc3Q7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaC0xMzItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jPTEwMjk9aTkxNV9nZW1fbWFkdmlzZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMDc0LVxcdGlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikgfHxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEwNzU6XFx0ICAgIGk5MTVfZ2VtX29iamVjdF9oYXNfc2VsZl9tYW5hZ2VkX3Nocmlua19saXN0KG9iaikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jLTEwNzYtXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTA4NC1cXHRcXHRcXHRlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYzoxMDg1OlxcdFxcdFxcdFxcdGxpc3QgPSBcXHUwMDI2aTkxNS1cXHUwMDNlbW0uc2hyaW5rX2xpc3Q7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMDg2LVxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZvYmotXFx1MDAzZW1tLmxpbmssIGxpc3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYz0xMjg2PXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2luaXRfX21tKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMjkyLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5wdXJnZV9saXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEyOTM6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmk5MTUtXFx1MDAzZW1tLnNocmlua19saXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jLTEyOTQtXFxuLS1cXG5mcy9kY2FjaGUuYz0xMDU0PUVYUE9SVF9TWU1CT0woZF9tYWtlX2Rpc2NhcmRhYmxlKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTEwNTYtLyoqXFxuZnMvZGNhY2hlLmM6MTA1NzogKiBfX21vdmVfdG9fc2hyaW5rX2xpc3QgLSB0cnkgdG8gcGxhY2UgYSBkZW50cnkgaW50byBhIHNocmluayBsaXN0XFxuZnMvZGNhY2hlLmMtMTA1OC0gKiBAZGVudHJ5OlxcdGRlbnRyeSB0byB0cnkgcHV0dGluZyBpbnRvIHNocmluayBsaXN0XFxuLS1cXG5mcy9kY2FjaGUuYy0xMDY2LSAqIGRlbnRyeV9mcmVlKEBkZW50cnkpIHByaW9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWxcXG5mcy9kY2FjaGUuYzoxMDY3OiAqIGFyZWEgaW4gd2hpY2ggX19tb3ZlX3RvX3Nocmlua19saXN0KEBkZW50cnksIEBsaXN0KSBpcyBjYWxsZWQuXFxuZnMvZGNhY2hlLmMtMTA2OC0gKlxcbi0tXFxuZnMvZGNhY2hlLmMtMTA3Mi1cXG5mcy9kY2FjaGUuYzoxMDczOmJvb2wgX19tb3ZlX3RvX3Nocmlua19saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5mcy9kY2FjaGUuYy0xMDc0LV9fbXVzdF9ob2xkKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jaylcXG4tLVxcbmZzL2RjYWNoZS5jLTEwODQtfVxcbmZzL2RjYWNoZS5jOjEwODU6RVhQT1JUX1NZTUJPTChfX21vdmVfdG9fc2hyaW5rX2xpc3QpO1xcbmZzL2RjYWNoZS5jLTEwODYtXFxuZnMvZGNhY2hlLmM9MTA4Nz12b2lkIGRwdXRfdG9fbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5mcy9kY2FjaGUuYy0xMDkwLVxcdFxcdHJldHVybjtcXG5mcy9kY2FjaGUuYzoxMDkxOlxcdF9fbW92ZV90b19zaHJpbmtfbGlzdChkZW50cnksIGxpc3QpO1xcbmZzL2RjYWNoZS5jLTEwOTItXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4tLVxcbmZzL2RjYWNoZS5jPTEyNTY9dm9pZCBkX3BydW5lX2FsaWFzZXMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTEyNjQtXFx0XFx0aWYgKGxpa2VseSghKGRlbnRyeS1cXHUwMDNlZF9mbGFncyBcXHUwMDI2IERDQUNIRV9OT1JDVSkpKVxcbmZzL2RjYWNoZS5jOjEyNjU6XFx0XFx0XFx0X19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXFx1MDAyNmRpc3Bvc2UpO1xcbmZzL2RjYWNoZS5jLTEyNjYtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4tLVxcbmZzL2RjYWNoZS5jPTE2Mzk9c3RhdGljIGVudW0gZF93YWxrX3JldCBzZWxlY3RfY29sbGVjdCh2b2lkICpfZGF0YSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvZGNhY2hlLmMtMTY0Ny1cXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2xvY2tyZWYuY291bnQgXFx1MDAzYz0gMCkge1xcbmZzL2RjYWNoZS5jOjE2NDg6XFx0XFx0X19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXFx1MDAyNmRhdGEtXFx1MDAzZWRpc3Bvc2UpO1xcbmZzL2RjYWNoZS5jLTE2NDktXFx0XFx0ZGF0YS1cXHUwMDNlZm91bmQrKztcXG4tLVxcbmZzL2RjYWNoZS5jPTE2NzE9c3RhdGljIGVudW0gZF93YWxrX3JldCBzZWxlY3RfY29sbGVjdDIodm9pZCAqX2RhdGEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE2NzktXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9sb2NrcmVmLmNvdW50IFxcdTAwM2M9IDApIHtcXG5mcy9kY2FjaGUuYzoxNjgwOlxcdFxcdGlmICghX19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXFx1MDAyNmRhdGEtXFx1MDAzZWRpc3Bvc2UpKSB7XFxuZnMvZGNhY2hlLmMtMTY4MS1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvZnVzZS9kaXIuYz0xNTk9c3RhdGljIHZvaWQgZnVzZV9kZW50cnlfdHJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2Z1c2UvZGlyLmMtMTc4LVxcdFxcdFxcdGZkLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX09QX0RFTEVURTtcXG5mcy9mdXNlL2Rpci5jOjE3OTpcXHRcXHRcXHRfX21vdmVfdG9fc2hyaW5rX2xpc3QoZmQtXFx1MDAzZWRlbnRyeSwgXFx1MDAyNmRpc3Bvc2UpO1xcbmZzL2Z1c2UvZGlyLmMtMTgwLVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmZC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbi0tXFxuZnMvbmFtZXNwYWNlLmM9OTc3PXN0YXRpYyB2b2lkIF9fdG91Y2hfbW50X25hbWVzcGFjZShzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy05ODctICovXFxuZnMvbmFtZXNwYWNlLmM6OTg4OnN0YXRpYyB2b2lkIF9fdW1vdW50X21udChzdHJ1Y3QgbW91bnQgKm1udCwgc3RydWN0IGxpc3RfaGVhZCAqc2hyaW5rX2xpc3QpXFxuZnMvbmFtZXNwYWNlLmMtOTg5LXtcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTEwMDAtXFx0bW50LVxcdTAwM2VtbnRfbXAgPSBOVUxMO1xcbmZzL25hbWVzcGFjZS5jOjEwMDE6XFx0bWF5YmVfZnJlZV9tb3VudHBvaW50KG1wLCBzaHJpbmtfbGlzdCk7XFxuZnMvbmFtZXNwYWNlLmMtMTAwMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI4Mj1leHRlcm4gdm9pZCBkX3BydW5lX2FsaWFzZXMoc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjgzOmV4dGVybiBib29sIF9fbW92ZV90b19zaHJpbmtfbGlzdChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBsaXN0X2hlYWQgKik7XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0yODQtZXh0ZXJuIHZvaWQgc2hyaW5rX2RlbnRyeV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKik7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTI0Mz1zdGF0aWMgdW5zaWduZWQgaW50IF9fYnBmX2xydV9saXN0X3NocmluayhzdHJ1Y3QgYnBmX2xydSAqbHJ1LFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0yNTAtXFx0c3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSwgKnRtcF9ub2RlO1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjUxOlxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvcmNlX3Nocmlua19saXN0O1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjUyLVxcdHVuc2lnbmVkIGludCBuc2hyaW5rZWQ7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2MC1cXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmwtXFx1MDAzZWxpc3RzW0JQRl9MUlVfTElTVF9UX0lOQUNUSVZFXSkpXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzoyNjE6XFx0XFx0Zm9yY2Vfc2hyaW5rX2xpc3QgPSBcXHUwMDI2bC1cXHUwMDNlbGlzdHNbQlBGX0xSVV9MSVNUX1RfSU5BQ1RJVkVdO1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjYyLVxcdGVsc2VcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjI2MzpcXHRcXHRmb3JjZV9zaHJpbmtfbGlzdCA9IFxcdTAwMjZsLVxcdTAwM2VsaXN0c1tCUEZfTFJVX0xJU1RfVF9BQ1RJVkVdO1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjY0LVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjY1OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKG5vZGUsIHRtcF9ub2RlLCBmb3JjZV9zaHJpbmtfbGlzdCxcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2Ni1cXHRcXHRcXHRcXHRcXHQgbGlzdCkge1xcbi0tXFxubW0vc2htZW0uYz0yNDI4PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTUwLVxcdFxcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xcbm1tL3NobWVtLmM6MjU1MTpcXHRcXHQgKiAtXFx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXFxubW0vc2htZW0uYy0yNTUyLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XFxubW0vdm1zY2FuLmM6Nzc6XFx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jLTc4LVxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMDU9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjM3LVxcbm1tL3Ztc2Nhbi5jOjIyMzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMjM5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDY0LVxcbm1tL3Ztc2Nhbi5jOjYwNjU6XFx0XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy02MDY2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6MjcuNjc3MzA5NTM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMzYyMTI0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gUGFnZSBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBwYWdlIHJlY2xhbWF0aW9uIGxvZ2ljIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHNocmlua19scnV2ZWNgIGlzIGEga2V5IGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gSG93ZXZlciwgd2hhdCByZWFsbHkgY2F0Y2hlcyBteSBleWUgaXMgdGhhdCBgc2hyaW5rX2xydXZlY2AgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBzaHJpbmtfbm9kZWAuIE5vdywgKnRoYXQncyogd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYmVjYXVzZSBgc2hyaW5rX25vZGVgIGlzIGludm9rZWQgZnJvbSBhIGJ1bmNoIG9mIGNvcmUgcGF0aHMsIGluY2x1ZGluZyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAgd2hpY2ggYXJlIGJvdGggY3JpdGljYWwgdG8gaG93IHdlIG1hbmFnZSBtZW1vcnkuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCB0b2dldGhlciBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBvdXIgcmVjbGFtYXRpb24gZWZmb3J0cy5cblxuSSB0aGluayBpdCdzIHRpbWUgdG8gY2hlY2sgaG93IGBldmljdF9mb2xpb3NgIGZpdHMgaW50byBhbGwgdGhpcyBhcyBpdCBzaG91bGQgcHJvYmFibHkgYmUgaW52b2tlZCB3aXRoaW4gb25lIG9mIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6MzguODEzNTI0OTMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI1NjE3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4OTUtXFxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODk3LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjItXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTEyMzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTEyNC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NDYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU3NDc6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU3NDgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjQwLjQ3NjA5MzI3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjI3NDQyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBhbmQgTGVnYWN5IExSVSBSZWNsYWltIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBNR0xSVSBhbmQgbGVnYWN5IExSVSByZWNsYWltIG1lY2hhbmlzbXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBldmljdF9mb2xpb3NgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYXMgaXQncyBjYWxsZWQgYnkgYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgd2hpY2ggYXJlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTXVsdGktR2VuIExSVSBzeXN0ZW0uIFRoaXMgbWVhbnMgdGhlIGNoYW5nZXMgYXJlIGltcGFjdGluZyBib3RoIHRoZSBuZXcgTUdMUlUgYXBwcm9hY2ggYW5kIHRoZSBleGlzdGluZyBMUlUgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuXG5cbkdpdmVuIHRoZSBzY29wZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyBzZXQgb2YgZnVuY3Rpb25zLCB3aGljaCBJJ3ZlIGlkZW50aWZpZWQgYXM6IGBzaHJpbmtfbm9kZWAsIGBkb190cnlfdG9fZnJlZV9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHNocmlua19scnV2ZWNgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHJ1bl9ldmljdGlvbmAuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLiBMb29rcyBsaWtlIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGlzIHN0YXRpYywgc28gSSdsbCBwdXQgdGhhdCBhc2lkZSwgSSBjYW4ndCByZWFsbHkgZm9jdXMgb24gaXQuIFNhbWUgZm9yIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX25vZGVgLlxuXG5UaGF0IGxlYXZlcyBtZSB3aXRoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYGJhbGFuY2VfcGdkYXRgIGFuZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhcyB0aGUgbW9zdCBpbnRlcmVzdGluZyBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uIFRoZXNlIGFyZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvciBpbnRlcmZhY2UgY2hhbmdlcyB3aWxsIGxpa2VseSByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCByZWNsYWltIHByb2Nlc3MsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGxlZ2FjeSBhbmQgTUdMUlUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6NTAuNzAzNTM4NzkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYzMTMxNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZmlsZS5jPTIzNTE9c3RhdGljIHZvaWQgZnVzZV92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yMzcxLSAqIC0gc3luYygyKVxcbmZzL2Z1c2UvZmlsZS5jOjIzNzI6ICogLSB0cnlfdG9fZnJlZV9wYWdlcygpIHdpdGggb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUlxcbmZzL2Z1c2UvZmlsZS5jLTIzNzMtICovXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTY5PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XFxubW0vaW50ZXJuYWwuaDo3MDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS9pbnRlcm5hbC5oLTcxLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICptYXNrKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDM4PV9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDQ1MC1cXG5tbS9wYWdlX2FsbG9jLmM6NDQ1MTpcXHRwcm9ncmVzcyA9IHRyeV90b19mcmVlX3BhZ2VzKGFjLVxcdTAwM2V6b25lbGlzdCwgb3JkZXIsIGdmcF9tYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy00NDUyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vub2RlbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYz02NTYzPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTkzLSAqL1xcbm1tL3Ztc2Nhbi5jOjY1OTQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG5tbS92bXNjYW4uYy02NTk1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz02NzM2PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjgxNS1cXG5tbS92bXNjYW4uYzo2ODE2OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTY4MTctXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtNjg1MC1cXG5tbS92bXNjYW4uYzo2ODUxOlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4NTItXFxuLS1cXG5tbS92bXNjYW4uYz02OTAyPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02OTMzLVxcbm1tL3Ztc2Nhbi5jOjY5MzQ6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjkzNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzE5LVxcbm1tL3Ztc2Nhbi5jOjc3MjA6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzcyMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6NTIuMzY2Njc3OTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDQxNDY5NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGF0dGVudGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gRnJvbSBhIGhpZ2ggbGV2ZWwsIGB0cnlfdG9fZnJlZV9wYWdlc2Agc2VlbXMgbGlrZSBhIHNvbGlkIHN5bWJvbCB0byBzdGFydCB3aXRoIOKAkyBpdCdzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIGluIHJlY2xhaW1pbmcgbWVtb3J5LiBUaGVuLCBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYmVjYXVzZSwgb2YgY291cnNlLCBtZW1vcnkgY2dyb3VwcyBhcmUgYSBjZW50cmFsIGNvbXBvbmVudCB0aGVzZSBkYXlzLiBUaGF0IGlzIHZlcnkgaW1wb3J0YW50LiBJIHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBiYWxhbmNlX3BnZGF0YCwgYmVjYXVzZSB0aGF0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIGJhbGFuY2luZyBvZiBtZW1vcnkgYWNyb3NzIE5VTUEgbm9kZXMsIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gTGV0J3MgZGlnIGludG8gYGJhbGFuY2VfcGdkYXRgIGZvciBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDAxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6MDMuNDA4MTUwODE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5ODgzMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhbGFuY2VfcGdkYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9NzY9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2tzd2FwZF93YWtlLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtOTgtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg6OTk6VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4sXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTAwLVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTIyLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjEyMzpUUkFDRV9FVkVOVChtbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTI0LVxcbi0tXFxubW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg4OC1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG5tbS92bXNjYW4uYzo2ODg5OlxcdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTY4OTAtXFx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwOTI9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA5NS1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjcwOTY6XFx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xcbm1tL3Ztc2Nhbi5jLTcwOTctXFx0ICogc29vbiBhcyBhbGxvd19kaXJlY3RfcmVjbGFpbSgpIGlzIHRydWUuIEJ1dCB0aGVyZSBpcyBhIHBvdGVudGlhbFxcbi0tXFxubW0vdm1zY2FuLmMtNzEwMC1cXHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjcxMDE6XFx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXFxubW0vdm1zY2FuLmMtNzEwMi1cXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMDQtXFx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XFxubW0vdm1zY2FuLmM6NzEwNTpcXHQgKiB0aHJvdHRsZWQgYWdhaW4uIFRoZSBkaWZmZXJlbmNlIGZyb20gd2FrZSB1cHMgaW4gYmFsYW5jZV9wZ2RhdCgpIGlzXFxubW0vdm1zY2FuLmMtNzEwNi1cXHQgKiB0aGF0IGhlcmUgd2UgYXJlIHVuZGVyIHByZXBhcmVfdG9fd2FpdCgpLlxcbi0tXFxubW0vdm1zY2FuLmM9NzE4Nj1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzE5MS0vKlxcbm1tL3Ztc2Nhbi5jOjcxOTI6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcXG5tbS92bXNjYW4uYy03MTkzLSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzIwMy0gKi9cXG5tbS92bXNjYW4uYzo3MjA0OnN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmMtNzIwNS17XFxuLS1cXG5tbS92bXNjYW4uYy03MjE5LVxcbm1tL3Ztc2Nhbi5jOjcyMjA6XFx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTcyMjEtXFx0XFx0XFx0XFx0XFx0ICAgIGhpZ2hlc3Rfem9uZWlkeCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NDE0LVxcbm1tL3Ztc2Nhbi5jOjc0MTU6XFx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfZW5kKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYy5vcmRlcixcXG5tbS92bXNjYW4uYy03NDE2LVxcdFxcdFxcdFxcdFxcdCAgaGlnaGVzdF96b25laWR4LCBzYy5ucl9yZWNsYWltZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NzUzOT1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU4NS1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjc1ODY6XFx0XFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJ3QgY2FsbCBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNzU4Ny1cXHRcXHQgKiBhZnRlciByZXR1cm5pbmcgZnJvbSB0aGUgcmVmcmlnZXJhdG9yXFxuLS1cXG5tbS92bXNjYW4uYy03NjAxLVxcdFxcdFxcdFxcdFxcdFxcdGFsbG9jX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NjAyOlxcdFxcdHJlY2xhaW1fb3JkZXIgPSBiYWxhbmNlX3BnZGF0KHBnZGF0LCBhbGxvY19vcmRlcixcXG5tbS92bXNjYW4uYy03NjAzLVxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjA1LjA0ODA0ODgwNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg2ODY3NjY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgYmFsYW5jZV9wZ2RhdGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIHRoZW4gYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCwgYWxsIG9mIHdoaWNoIGFyZSAqbm90KiBzdGF0aWMuIFJpZ2h0IGF3YXksIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBqdW1wIG91dCBhcyBpbnRlcmVzdGluZyBhcmVhcyB0byBkZWx2ZSBpbnRvIGZ1cnRoZXIg4oCTIHNvbGlkIGZvY3VzIHN5bWJvbHMgaGVyZS5cblxuQWgsIGJ1dCB0aGlzIHBhdGNoLi4uIGl0J3MgY2hhbmdpbmcgYHRvb19tYW55X2lzb2xhdGVkYCB0byBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gVGhhdCdzIGEga2V5IHNoaWZ0IGluIGhvdyB0aHJvdHRsaW5nIGlzIHJlcHJlc2VudGVkLCBhbmQgaXQncyBhbHNvIGFkZGluZyBjaGVja3MgZm9yIGBmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KWAgKmFuZCogc2V0dGluZyBgKmZhdGFsYC4gVGhpcyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHByZXZlbnQgaW5kZWZpbml0ZSBsb29waW5nIG9uIGZvbGlvcyB0aGF0IGNhbid0IGJlIGV2aWN0ZWQgd2hlbiBhIHRhc2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcga2lsbGVkLiBJIHNlZSB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nIHdpdGhpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBoZXJlLiBJJ20gdGhpbmtpbmcsIGBDT05GSUdfTUVNQ0dgIGRlZmluaXRlbHkgYXBwbGllcyB0byBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIG9idmlvdXNseS4gQnV0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgY29yZSwgYWx3YXlzIHByZXNlbnQuIE5vdywgaXMgTUdMUlUgcmVsZXZhbnQgaGVyZT8gQWgsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIE1HTFJVIGNvbmZpZy4gU28gSSBuZWVkIHRvIGdvIHNlZSBpZiBgZXZpY3RfZm9saW9zYCBpcyB3cmFwcGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAgb3Igbm90LiBUaGF0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gZmlndXJlIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6MjMuOTE2NzI4NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTQ5ODg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEzPUJ1aWxkIHRoZSBrZXJuZWwgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xNC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTU6KiBgYENPTkZJR19MUlVfR0VOPXlgYFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNjoqIGBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRD15YGBcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9Mjg9Zm9sbG93aW5nIGNvbXBvbmVudHMuIEl0cyBkZWZhdWx0IHZhbHVlIGRlcGVuZHMgb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6Mjk6YGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYGAuIEFsbCB0aGUgY29tcG9uZW50cyBzaG91bGQgYmUgZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0zMC11bmxlc3Mgc29tZSBvZiB0aGVtIGhhdmUgdW5mb3Jlc2VlbiBzaWRlIGVmZmVjdHMuIFdyaXRpbmcgdG9cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD04OD1jb25jYXRlbmF0aW9uIHdpdGggZGVsaW1pdGVycyBgYCxgYCBhbmQgYGA7YGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTAtYGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuX2Z1bGxgYCBwcm92aWRlcyBhZGRpdGlvbmFsIHN0YXRzIGZvclxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo5MTpkZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC05Mi1ldmljdGVkIGdlbmVyYXRpb25zIGluIHRoaXMgZmlsZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTIwMj1zdHJ1Y3QgbWVtX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNzgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Mjc5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yODAtXFx0LyogcGVyLW1lbWNnIG1tX3N0cnVjdCBsaXN0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTgyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgZW51bSBscnVfbGlzdCBmb2xpb19scnVfbGlzdChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC05Ny1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjk4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtOTktXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xMDA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fc3dpdGNoaW5nKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNS19XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxMDY6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNy1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzEyLX1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxMzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNDMtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzQ0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzQ1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwMi0jZW5kaWYgLyogQ09ORklHX0tTTSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwNC1cXHRcXHRzdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTctXFx0XFx0fSBscnVfZ2VuO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDE4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxOS0jaWZkZWYgQ09ORklHX01NX0lEXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTQ4MD1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqbW1fY3B1bWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg0LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDg1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg2LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTMtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTUtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MTE9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MjAtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MjE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1Mzk9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1NDItXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1NDM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQ0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01MjU9c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI2LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTI3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01MzQ9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0NC0vKiB3aGV0aGVyIHRvIGtlZXAgaGlzdG9yaWNhbCBzdGF0cyBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU0NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fU1RBVFNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ni0jZGVmaW5lIE5SX0hJU1RfR0VOU1xcdFxcdE1BWF9OUl9HRU5TXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwMj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwNDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwNS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzU0PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1Ny1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY2PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODUtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzg2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzg3LVxcdC8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGludG8gZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4OC1cXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpb1xcdFxcdGxydWdlbjtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc4OTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTAtXFx0LyogdG8gY29uY3VycmVudGx5IGl0ZXJhdGUgbHJ1X2dlbl9tbV9saXN0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5Mi0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5MzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5NC0jaWZkZWYgQ09ORklHX01FTUNHXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0Nzg9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk1LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU5NjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1OTctXFx0Lyoga3N3YXAgbW0gd2FsayBkYXRhICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNi1cXHQvKiB3aGV0aGVyIHRoZSBMUlUgYWxnb3JpdGhtIG1heSBhcHBseSB0byB0aGlzIGFjY2VzcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9MTQ2PXN0cnVjdCByZWNsYWltX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTE0OC1cXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxNDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMTUwLVxcdC8qIHBlci10aHJlYWQgbW0gd2FsayBkYXRhICovXFxuLS1cXG5rZXJuZWwvYm91bmRzLmM9MTc9aW50IG1haW4odm9pZClcXG4tLVxcbmtlcm5lbC9ib3VuZHMuYy0yNS1cXHRERUZJTkUoU1BJTkxPQ0tfU0laRSwgc2l6ZW9mKHNwaW5sb2NrX3QpKTtcXG5rZXJuZWwvYm91bmRzLmM6MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxua2VybmVsL2JvdW5kcy5jLTI3LVxcdERFRklORShMUlVfR0VOX1dJRFRILCBvcmRlcl9iYXNlXzIoTUFYX05SX0dFTlMgKyAxKSk7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI2OTQ9cGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjc3MS1cXG5rZXJuZWwvZm9yay5jOjI3NzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VKSBcXHUwMDI2XFx1MDAyNiAhKGNsb25lX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfVk0pKSB7XFxua2VybmVsL2ZvcmsuYy0yNzczLVxcdFxcdC8qIGxvY2sgdGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi9cXG4tLVxcbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTUtXFxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy0zOTctXFxuLS1cXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA2LVxcbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDA4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjM3LVxcbm1tL21lbWNvbnRyb2wuYzo0NjM4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjM5LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XFxubW0vbWVtY29udHJvbC5jOjQ2NTg6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtY29udHJvbC5jLTQ2NTktXFxuLS1cXG5tbS9tZW1vcnkuYz02NzI2PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tLVxcbm1tL21lbW9yeS5jLTY3NzgtXFxubW0vbWVtb3J5LmM6Njc3OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1vcnkuYy02NzgwLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYz02Nzk1PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LmMtNjc5Ny19XFxubW0vbWVtb3J5LmM6Njc5ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1vcnkuYy02Nzk5LVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODYyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2NS19XFxubW0vdm1zY2FuLmM6ODY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3MDY9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MTctXFxubW0vdm1zY2FuLmM6MjcxODojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNzE5LVxcbm1tL3Ztc2Nhbi5jPTI3MjA9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjcyMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI3MjItREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yOTA2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkyNS1cXG5tbS92bXNjYW4uYzoyOTI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTI3LVxcbi0tXFxubW0vdm1zY2FuLmM9MzAzNT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjMtXFxubW0vdm1zY2FuLmM6MzA2NDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzA2NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5OTU9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5OTYtXFxubW0vdm1zY2FuLmM6NTk5NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTk4LVxcbi0tXFxubW0vdm1zY2FuLmM9NjAwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjAxMy1cXG5tbS92bXNjYW4uYzo2MDE0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwMTUtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6MjUuNjcxNzIzNDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDczMzY0MjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipNR0xSVSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIE1HTFJVIGlzIGRlZmluaXRlbHkgc2l0dGluZyB1bmRlciBgQ09ORklHX0xSVV9HRU5gLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFNpbmNlIE1HTFJVIHJlbGllcyBvbiBpdCwgZW5hYmxpbmcgYENPTkZJR19MUlVfR0VOYCBsb29rcyBsaWtlIGEgc21hcnQgbW92ZS4gQW5kLCBvZiBjb3Vyc2UsIGVuYWJsaW5nIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgdG8gYWN0dWFsbHkgbGV2ZXJhZ2UgdGhlIGZlYXR1cmUuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyBzcGVjaWZpYy4uLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiBpcyBhbHNvIHBhcnQgb2YgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHVtYnJlbGxhLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIHBhcnRzIGFyZSBhbGwgZW5hYmxlZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNjo0MC43NDUwODk1ODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTMyODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2aWN0X2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00ODYyPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODk1LVxcbm1tL3Ztc2Nhbi5jOjQ4OTY6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDg5Ny1cXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYz01MDk5PXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTIyLVxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjUxMjM6XFx0XFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xcbm1tL3Ztc2Nhbi5jLTUxMjQtXFx0XFx0aWYgKCFkZWx0YSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy01NzQ2LVxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1NzQ3OlxcdFxcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcXG5tbS92bXNjYW4uYy01NzQ4LVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNjo0MC43OTQyMzM5NTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA4MjkwOTc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV2aWN0aW9uIEZ1bmN0aW9uJ3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIGxpbmUgbnVtYmVyIGFwcGVhcnMgdG8gYmUgYXJvdW5kIDQ4OTYuIE5vdywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgY29kZWJhc2UsIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgQ09ORklHX0xSVV9HRU5gLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgZXZpY3RfZm9saW9zYCBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhpcyB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hlbiBhbmQgaG93IHRoaXMgZnVuY3Rpb24gd2lsbCBhY3R1YWxseSBiZSBjb21waWxlZCBhbmQgdXNlZC4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBoZXJlIGFuZCBhIHF1aWNrIGNoZWNrIGNhbiBzYXZlIG1lIGEgbG90IG9mIHRpbWUgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6NDguODc3MTQ2MTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzE1OlxcdFxcdFxcdFxcdCAgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xcbjI3MTY6XFx0fVxcbjI3MTc6XFx0XFxuMjcxODpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG4yNzE5OlxcdFxcbjI3MjA6XFx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxuMjcyMTpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbjI3MjI6XFx0REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuMjcyMzpcXHQjZGVmaW5lIGdldF9jYXAoY2FwKVxcdHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG4yNzI0OlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjQ4Ljg3NzQzOTU5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTI5MTg0MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDT05GSUdfTFJVX0dFTiBpbiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfTFJVX0dFTmAgaXMgaW5kZWVkIGluaXRpYWxpemVkIGF0IDI3MTguIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IHByaW1hcnkgY29uY2VybiBub3cgaXMgdW5kZXJzdGFuZGluZyBpdHMgZmluYWwgdmFsdWUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBpdCdzIHVsdGltYXRlbHkgcmVzb2x2ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGAjaWZkZWZgIGRpcmVjdGl2ZXMsIGFuZCBsb29rIGZvciBhbnkgc3ltYm9sIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGR5bmFtaWNhbGx5IGFkanVzdCBpdHMgdmFsdWUgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXRzIGZpbmFsIHZhbHVlIGlzIGhhcmRjb2RlZCwgY2FsY3VsYXRlZCBiYXNlZCBvbiBvdGhlciBwYXJhbWV0ZXJzLCBvciBkZXRlcm1pbmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZmFjdG9yIGxpa2UgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIGZsb3cgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGxpZmVjeWNsZS4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCBrbm93aW5nIHdoZXJlIGl0ICpiZWdpbnMqOyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb21wbGV0ZSBjb250cm9sIGZsb3cgdG8gc2VlIHdoZXJlIGl0ICplbmRzKiB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjU4LjgwNjYyNzI4MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk5MDpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNTk5MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNTk5MjpcXHRcXG41OTkzOlxcdFxcdHJldHVybiAwO1xcbjU5OTQ6XFx0fTtcXG41OTk1OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG41OTk2OlxcdFxcbjU5OTc6XFx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuNTk5ODpcXHRcXG41OTk5OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjAwMDpcXHR7XFxuNjAwMTpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MDAyOlxcdH1cXG42MDAzOlxcdFxcbjYwMDQ6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjAwNTpcXHR7XFxuNjAwNjpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MDA3OlxcdH1cXG42MDA4OlxcdFxcbjYwMDk6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG42MDEwOlxcdHtcXG42MDExOlxcdFxcdEJVSUxEX0JVRygpO1xcbjYwMTI6XFx0fVxcbjYwMTM6XFx0XFxuNjAxNDpcXHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG42MDE1OlxcdFxcbjYwMTY6XFx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjYwMTc6XFx0e1xcbjYwMTg6XFx0XFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xcbjYwMTk6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW05SX0xSVV9MSVNUU107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjU4LjgwNzE1OTExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODc1MDExNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBMUlUgUmVjbGFpbSBQYXRoIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTFJVX0dFTmAuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBuZWVkIHRvIGJlIGNvcnJlY3RseSBwbGFjZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgYSBrZXkgZmlyc3QgY2hlY2suXG5cbk5vdywgd2hhdCBhYm91dCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgPyBMb29raW5nIGF0IHRoZSBsaW5lIG51bWJlciwgYXJvdW5kIGxpbmUgMjAxNCwgaXQncyBiZWZvcmUgdGhlIGBDT05GSUdfTFJVX0dFTmAgY29uZGl0aW9uYWwuIFRoYXQgdGVsbHMgbWUgaXQncyBwYXJ0IG9mIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gcGF0aC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGl0J3MgaGFuZGxpbmcgdGhyb3R0bGluZyBhbmQgZmF0YWwgc2lnbmFsIGhhbmRsaW5nIGluIGEgbW9yZSByb2J1c3Qgd2F5IGFjcm9zcyBib3RoIHR5cGVzLiBUaGF0J3MgYSBnb29kIHNpZ24g4oCTIGl0J3MgYWRkcmVzc2luZyBhIGZ1bmRhbWVudGFsIHByb2JsZW0gd2l0aCBsb29wcyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyBpbnZvbHZlZCBoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IHVzZXMgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IHByb2JhYmx5IGFyZSBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgdGhlIHRocm90dGxpbmcgYW5kIHNpZ25hbCBiYWlsb3V0cy4gSSB3YXMgYWxzbyBnb2luZyB0byBsb29rIGF0IGBiYWxhbmNlX3BnZGF0YCwgYnV0IHdhaXQuLi4gdGhhdCdzIHN0YXRpYy4gUmlnaHQsIGNhbid0IHVzZSBpdCBkaXJlY3RseS4gU28sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hlcmUgYW5kIGhvdyBgYmFsYW5jZV9wZ2RhdGAgaXMgdXNlZCBhbmQgaWYgaXQncyBpbmRpcmVjdGx5IGJlaW5nIGFmZmVjdGVkIG9yIGlmIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIwOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE3OjA5LjY4MjE3NDk3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0ODgzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFsYW5jZV9wZ2RhdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02ODYyPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODg4LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4ODk6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjg5MC1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzA5Mj1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03MDk1LVxcdC8qXFxubW0vdm1zY2FuLmM6NzA5NjpcXHQgKiBUaGUgdGhyb3R0bGVkIHByb2Nlc3NlcyBhcmUgbm9ybWFsbHkgd29rZW4gdXAgaW4gYmFsYW5jZV9wZ2RhdCgpIGFzXFxubW0vdm1zY2FuLmMtNzA5Ny1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxuLS1cXG5tbS92bXNjYW4uYy03MTAwLVxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzEwMTpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYy03MTAyLVxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbi0tXFxubW0vdm1zY2FuLmMtNzEwNC1cXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYzo3MTA1OlxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG5tbS92bXNjYW4uYy03MTA2LVxcdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXFxuLS1cXG5tbS92bXNjYW4uYz03MTg2PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTkxLS8qXFxubW0vdm1zY2FuLmM6NzE5MjogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcxOTMtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MjAzLSAqL1xcbm1tL3Ztc2Nhbi5jOjcyMDQ6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MjA1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyMTktXFxubW0vdm1zY2FuLmM6NzIyMDpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9iZWdpbihwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzIyMS1cXHRcXHRcXHRcXHRcXHQgICAgaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MTQtXFxubW0vdm1zY2FuLmM6NzQxNTpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLm9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0MTYtXFx0XFx0XFx0XFx0XFx0ICBoaWdoZXN0X3pvbmVpZHgsIHNjLm5yX3JlY2xhaW1lZCk7XFxuLS1cXG5tbS92bXNjYW4uYz03NTM5PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuLS1cXG5tbS92bXNjYW4uYy03NTg1LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NzU4NjpcXHRcXHQgKiBXZSBjYW4gc3BlZWQgdXAgdGhhd2luZyB0YXNrcyBpZiB3ZSBkb24ndCBjYWxsIGJhbGFuY2VfcGdkYXRcXG5tbS92bXNjYW4uYy03NTg3LVxcdFxcdCAqIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MDEtXFx0XFx0XFx0XFx0XFx0XFx0YWxsb2Nfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc2MDI6XFx0XFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc2MDMtXFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTc6MDkuNzMzNjY5OTU3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDYwNjk4NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW50ZXJuYWwgTWVtb3J5IE1hbmFnZW1lbnQgTXVzaW5ncyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGhlcmUuIExldCdzIHNlZS4uLiAqYmFsYW5jZV9wZ2RhdCogaXMgZGVmaW5pdGVseSBhIHN0YXRpYyB2YXJpYWJsZSwgYW5kIHRoYXQncyBzb21ldGhpbmcgdG8gbWFrZSBhIG5vdGUgb2YuIEFsd2F5cyBnb29kIHRvIHJlZnJlc2ggb24gdGhlIGJhc2ljcy4gSSdtIHRyeWluZyB0byByZW1lbWJlciB3aGF0IGNvbnRleHQgdGhhdCBpcyBpbiBhbmQgaG93IGl04oCZcyBiZWluZyB1c2VkLiBOb3csICprc3dhcGRfcnVuKi4uLmhtbW0uIFRoYXQncyBhIGRpZmZlcmVudCBiZWFzdCBlbnRpcmVseS4gTm93IEkgbmVlZCB0byBjb25zaWRlciBpdCdzIHJlbGF0aW9uIHRvIGJhbGFuY2VfcGdkYXQuIEhvdyBpcyB0aGUga2VybmVsJ3Mgc3dhcHBpbmcgZGFlbW9uLCBga3N3YXBkX3J1bmAsIGludGVyYWN0aW5nIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGl0J3MgdXNpbmc/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0IGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzE3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTc6MzAuMTk0MzczNjQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwNzU0MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZF9ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9MzM4PXZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMzOS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNDA6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzQxLWV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjMxLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIzMjpcXHRrc3dhcGRfcnVuKG5pZCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjMzLVxcdGtjb21wYWN0ZF9ydW4obmlkKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzMyLSAqL1xcbm1tL3Ztc2Nhbi5jOjc3MzM6dm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc3MzQte1xcbi0tXFxubW0vdm1zY2FuLmM9Nzc5Mz1zdGF0aWMgaW50IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtNzc5Ny1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxubW0vdm1zY2FuLmM6Nzc5ODogXFx0XFx0a3N3YXBkX3J1bihuaWQpO1xcbm1tL3Ztc2Nhbi5jLTc3OTktXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgdm1zY2FuX3N5c2N0bF90YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE3OjMxLjgyNTEzMzEyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM0NDA3MTc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBNZW1vcnkgUmVjbGFtYXRpb24qKlxuXG5Pa2F5LCBzbyBga3N3YXBkX3J1bmAsIHJpZ2h0PyBJdCdzIGp1c3QgdGhlIGluaXRpYWwgdGhyZWFkIGxhdW5jaCwgc2V0dGluZyB0aGUgd2hvbGUgdGhpbmcgaW4gbW90aW9uLiBJdCdzIHRoZSBzdGFydGluZyBndW4uXG5cbkJ1dCB3aGF0IGFib3V0IHRoZSBjb3JlIGZ1bmN0aW9uPyBgcmVjbGFpbV9wYWdlc2AuIFRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgaGFwcGVucy4gV2hhdCdzIGl0IGRvaW5nIGF0IGEgZnVuY3Rpb25hbCBsZXZlbD8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgaW52b2x2ZWQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi4gVGhhdOKAmXMgd2hlcmUgdGhlIGtleSBwcm9jZXNzZXMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM0MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE3OjQ1LjE2OTIwNzMyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTYwODgxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0yNTc9c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1lcl93cml0ZShzdHJ1Y3Qgc2d4X2VwY19wYWdlICplcGNfcGFnZSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDItICovXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjMwMzpzdGF0aWMgdm9pZCBzZ3hfcmVjbGFpbV9wYWdlcyh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTM5Nj12b2lkIHNneF9yZWNsYWltX2RpcmVjdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTM5OC1cXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9MT1dfUEFHRVMpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz00MDI9c3RhdGljIGludCBrc2d4ZCh2b2lkICpwKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMS1cXHRcXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6NDIyOlxcdFxcdFxcdHNneF9yZWNsYWltX3BhZ2VzKCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMy1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz01Njc9c3RydWN0IHNneF9lcGNfcGFnZSAqc2d4X2FsbG9jX2VwY19wYWdlKHZvaWQgKm93bmVyLCBib29sIHJlY2xhaW0pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo1OTE6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkyLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9Mzg3PXN0YXRpYyB2b2lkIHNsYV9mcmVlKHN0cnVjdCBzbGFfYWRkcl90IHNsYSwgc2l6ZV90IGxlbiwgYm9vbCBmaXJtd2FyZV9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwMy1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDQ6XFx0XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDA1LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDgtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDk6XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNsYSksIDEsIGZhbHNlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MTAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4My1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODUte1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NDE4OkVYUE9SVF9TWU1CT0xfR1BMKHNucF9yZWNsYWltX3BhZ2VzKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQxOS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MzgtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0Mzk6XFx0c25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIGksIGxvY2tlZCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQ3OT1zdGF0aWMgdm9pZCBfX3NucF9mcmVlX2Zpcm13YXJlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00ODgtXFx0aWYgKHNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XFx0ICAgIHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBucGFnZXMsIGxvY2tlZCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTcyMS1cXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjcyMjpcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoKmRlc2MtXFx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNzIzLVxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byByZWNsYWltIGZpcm13YXJlLW93bmVkIHBhZ2VzIHdoaWxlIGlzc3VpbmcgU0VWIGxlZ2FjeSBjb21tYW5kLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1ZilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQyLVxcdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6ODQzOlxcdFxcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0NC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk0LVxcdFxcdCAqIFRoaXMgZXhlY3V0ZXMgd2l0aCB0aGUgc2V2X2NtZF9tdXRleCBoZWxkIHNvIGRvd24gdGhlIHN0YWNrXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNDk1OlxcdFxcdCAqIHNucF9yZWNsYWltX3BhZ2VzKGxvY2tlZD1mYWxzZSkgbWlnaHQgYmUgbmVlZGVkICh3aGljaCBpcyBleHRyZW1lbHlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE0OTYtXFx0XFx0ICogdW5saWtlbHkpIGJ1dCB3aWxsIGNhdXNlIGEgZGVhZGxvY2suXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQwNy1cXHRcXHQgKiBUaGUgc3RhdHVzIHBhZ2Ugd2lsbCBiZSBpbiBSZWNsYWltIHN0YXRlIG9uIHN1Y2Nlc3MsIG9yIGxlZnRcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MDg6XFx0XFx0ICogaW4gRmlybXdhcmUgc3RhdGUgb24gZmFpbHVyZS4gVXNlIHNucF9yZWNsYWltX3BhZ2VzKCkgdG9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDktXFx0XFx0ICogdHJhbnNpdGlvbiBlaXRoZXIgY2FzZSBiYWNrIHRvIEh5cGVydmlzb3Itb3duZWQgc3RhdGUuXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEwLVxcdFxcdCAqL1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjQxMTpcXHRcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoX19wYShkYXRhKSwgMSwgdHJ1ZSkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEyLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0yODA9dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXFx0ZGVidWdmc19jcmVhdGVfdTMyKFxcXCJmd19wYWdlc19yZWNsYWltX2Rpc2NhcmRcXFwiLCAwNDAwLCBwYWdlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI5MTpcXHRcXHRcXHQgICBcXHUwMDI2ZGV2LVxcdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYy0xNDgtXFx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYzoxNDk6XFx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV9wYWdlc190bywgb3V0LCBkZXYsIE1MWDVfVE9fUkVDTEFJTV9QQUdFU19NUywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVxcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fdmZzX3BhZ2VzX3RvLCBvdXQsIGRldiwgTUxYNV9UT19SRUNMQUlNX1ZGU19QQUdFU19NUywgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTUzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTM3LVxcdFxcdFxcdCAgICAgdTMyICppbiwgaW50IGluX3NpemUsIHUzMiAqb3V0LCBpbnQgb3V0X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo1NzU6c3RhdGljIGludCByZWNsYWltX3BhZ2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTU3Ni1cXHRcXHRcXHQgaW50IG5wYWdlcywgaW50ICpuY2xhaW1lZCwgYm9vbCBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDYtXFx0XFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYwNzpcXHRlcnIgPSByZWNsYWltX3BhZ2VzX2NtZChkZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dGxlbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOS1cXHRcXHRucGFnZXMgPSBNTFg1X0dFVChtYW5hZ2VfcGFnZXNfaW4sIGluLCBpbnB1dF9udW1fZW50cmllcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYxMDpcXHRcXHRkZXYtXFx1MDAzZXByaXYucmVjbGFpbV9wYWdlc19kaXNjYXJkICs9IG5wYWdlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjExLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz02NDM9c3RhdGljIHZvaWQgcGFnZXNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTEtXFx0ZWxzZSBpZiAocmVxLVxcdTAwM2VucGFnZXMgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2NTI6XFx0XFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIHJlcS1cXHUwMDNlZnVuY19pZCwgLTEgKiByZXEtXFx1MDAzZW5wYWdlcywgTlVMTCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjUzLVxcdFxcdFxcdFxcdCAgICB0cnVlLCByZXEtXFx1MDAzZWVjX2Z1bmN0aW9uKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz04MzA9c3RhdGljIGludCBtbHg1X3JlY2xhaW1fcm9vdF9wYWdlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6ODQyOlxcdFxcdGVyciA9IHJlY2xhaW1fcGFnZXMoZGV2LCBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0My1cXHRcXHRcXHRcXHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDYtXFx0XFx0XFx0bWx4NV9jb3JlX3dhcm4oZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJyZWNsYWltX3BhZ2VzIGVyciAoJWQpIGZ1bmNfdmhjYV9pZD0weCV4IGVjX2Z1bmM9MHgleFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVxcdFxcdFxcdFxcdCAgICAgICBlcnIsIGZ1bmNfdmhjYV9pZCwgZWNfZnVuY3Rpb24pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODctXFx0dTMyXFx0XFx0XFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaDo1ODg6XFx0dTMyXFx0XFx0XFx0cmVjbGFpbV9wYWdlc19kaXNjYXJkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXFx0ZW51bSBtbHg1X3BhZ2VfbWd0X21vZGVcXHRwYWdlX21ndF9tb2RlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MzQ1NT1zdHJ1Y3QgbWx4NV9pZmNfZHRvcl9yZWdfYml0cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oOjM0NzY6XFx0c3RydWN0IG1seDVfaWZjX2RlZmF1bHRfdGltZW91dF9iaXRzIHJlY2xhaW1fcGFnZXNfdG87XFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oPTEwODE9dm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgbWFzayk7XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTEwODMtdm9pZCBzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHZvaWQgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTE5LVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTEyMS17XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtNDMxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC00MzMtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3MS1cXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjcyOlxcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTI3My1cXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTE5OT1leHRlcm4gdW5zaWduZWQgbG9uZyAgX19tdXN0X2NoZWNrIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTIwMi1cXG5tbS9pbnRlcm5hbC5oOjEyMDM6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpO1xcbm1tL2ludGVybmFsLmgtMTIwNC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNDQzLVxcdFxcdGlmIChwYWdlb3V0KVxcbm1tL21hZHZpc2UuYzo0NDQ6XFx0XFx0XFx0cmVjbGFpbV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vbWFkdmlzZS5jLTQ0NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21hZHZpc2UuYy01NjItXFx0aWYgKHBhZ2VvdXQpXFxubW0vbWFkdmlzZS5jOjU2MzpcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9tYWR2aXNlLmMtNTY0LVxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjE4MD1zdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMjE5OS1cXHR9XFxubW0vdm1zY2FuLmM6MjIwMDpcXHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MubnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCk7XFxubW0vdm1zY2FuLmMtMjIwMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMDQtXFxubW0vdm1zY2FuLmM6MjIwNTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS92bXNjYW4uYy0yMjA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTc6NDYuODI0ODI1MjE2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzcxNjA4MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBNZW1vcnkgUmVjbGFpbSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gbWVtb3J5IHJlY2xhaW0gYW5kIHdhbnQgdG8gaWRlbnRpZnkgc29tZSBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24uIGByZWNsYWltX3BhZ2VzYCBkZWZpbml0ZWx5IGp1bXBzIG91dDsgaXQncyBub24tc3RhdGljIGFuZCBzZWVtcyB0byBiZSBhIGNlbnRyYWwgZnVuY3Rpb24sIGNhbGxlZCBieSBib3RoIGBtYWR2aXNlYCBhbmQgYGRhbW9uYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEl0J3MgYSBrZXkgcG9pbnQgdG8gZXhhbWluZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBzaHJpbmtfYWxsX21lbW9yeWAg4oCTIEkgcmVtZW1iZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCBoaWJlcm5hdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3Qgd2hlcmUgdGhlIGNvcmUsIGZyZXF1ZW50IHJlY2xhaW0gYWN0aXZpdHkgbGllcy4gVGhlIHJlYWwgYWN0aW9uIGlzIHByb2JhYmx5IGVsc2V3aGVyZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgZnVuY3Rpb25zIEkgd2FudCB0byBob25lIGluIG9uIGFyZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCwgb2YgY291cnNlLCBgcmVjbGFpbV9wYWdlc2AuIEdvdHRhIHNlZSBob3cgdGhvc2UgYWxsIHdvcmsuXG5cbldhaXQgYSBzZWNvbmTigKYgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjYWxsZWQgYnkgYF9fcGVyZm9ybV9yZWNsYWltYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYC4gQmluZ28hIFRoaXMgaXMgdGhlIGRpcmVjdCByZWNsYWltIHBhdGgsIGFuZCBpdCdzIGxvb2tpbmcgaG90LCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgdmVyeSBpbXBvcnRhbnQuIFRoYXQgaXMgYSB2ZXJ5IGRpcmVjdCBwYXRoIHRvIHRoZSByZWNsYWltIHByb2Nlc3MuXG5cblNvLCBpcyBgcmVjbGFpbV9wYWdlc2AgaXRzZWxmIHRoYXQgaG90PyBDaGVja2luZyBiYWNrLCBpdCdzIGNhbGxlZCBieSBgbWFkdmlzZShNQURWX1BBR0VPVVQpYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbWVhbnMgdGhpcyBjb3VsZCBiZSBhbiBleGNlbGxlbnQgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgdXNlci1jb250cm9sbGFibGUgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIGl0IGhpZ2ggdmFsdWUuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTg6MDQuMTk2NDM2NDgxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY0MDc2MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Mi1cXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vaW50ZXJuYWwuaC04NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE3NzE9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4MTUtXFxubW0vbWVtY29udHJvbC12MS5jOjE4MTY6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODE3LVxcdFxcdFxcdFxcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzND1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTEtXFxubW0vbWVtY29udHJvbC12MS5jOjE4NTI6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjM3Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWNsYWltX2hpZ2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzODgtXFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyMzg5OlxcdFxcdG5yX3JlY2xhaW1lZCArPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyxcXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MTItXFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyNzEzOlxcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODMyPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODczLVxcbm1tL21lbWNvbnRyb2wuYzo0ODc0OlxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gaGlnaCxcXG5tbS9tZW1jb250cm9sLmMtNDg3NS1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODkxPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5MzItXFx0XFx0aWYgKG5yX3JlY2xhaW1zKSB7XFxubW0vbWVtY29udHJvbC5jOjQ5MzM6XFx0XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcXG5tbS9tZW1jb250cm9sLmMtNDkzNC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NjI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5MDEtXFxubW0vdm1zY2FuLmM6NjkwMjp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY5MDMtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NDItI2Vsc2VcXG5tbS92bXNjYW4uYzo2OTQzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjk0NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDc2LVxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxubW0vdm1zY2FuLmM6ODA3NzpcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTgwNzgtXFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxODowNS44NjA1MjEyODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc5Njc3MDQ1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgUHJlc3N1cmUgYW5kIFJlY2xhbWF0aW9uKipcblxuT2theSwgc28gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24uIEl0J3MgdGhlIGx5bmNocGluIGZvciBkZWFsaW5nIHdpdGggbWVtb3J5IHByZXNzdXJlIHdpdGhpbiBjZ3JvdXBzLCBhbmQgaXRzIGNhbGxzIGZyb20gYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIHJlYWxseSBoaWdobGlnaHQgd2hlcmUgdGhlIHN5c3RlbSBpcyBmb2N1c2luZyBpdHMgcmVjbGFtYXRpb24gZWZmb3J0cy4gVGhhdCdzIGEgc29saWQgaW5kaWNhdG9yIG9mIHdoZXJlIHRvIGRpdmUgZGVlcGVyLlxuXG5gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBMZXQgbWUgZHJpbGwgZG93biBvbiB0aGF0IGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzICphY3RpdmVseSogYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeSwgYXMgb3Bwb3NlZCB0byBqdXN0IHJlYWN0aW5nIHRvIGFuIGFic29sdXRlIHRocmVzaG9sZC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbGllLCBhbmQgd2hlcmUgSSBjYW4gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBzdHJhdGVnaWVzIGJlaW5nIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY5NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE4OjIzLjgyODIyOTQ0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0ODg3NDg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9Njk5PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjcwMDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC03MDEtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNzItXFxubW0vbWVtY29udHJvbC5jOjUwNzM6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTA3NC1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy04MDA0LVxcbm1tL3Ztc2Nhbi5jOjgwMDU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTgwMDYtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODE1OD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNjMtXFxubW0vdm1zY2FuLmM6ODE2NDpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODE2NS1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE4OjI1LjM3NzExMDQ0OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjQ2Mzk0MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIEZvY3VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIHdvcmtzLCBzcGVjaWZpY2FsbHkgYXQgd2hhdCdzIGJlaW5nIGhpZ2hsaWdodGVkIGFzIGtleSBhcmVhcy4gSSBzZWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfcmVjbGFpbWAgd2hpY2ggSSBrbm93IGlzIGEgc3lzZnMvY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQsIGl0J3MgYSBzdHJvbmcgZm9jdXMgc3ltYm9sLlxuXG5UaGVuIEkgc2VlIHRoZSBjb3JlIGZvY3VzIHBvaW50cyBhcmU6IGByZWNsYWltX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5IbW0sIGB0cnlfdG9fZnJlZV9wYWdlc2AgZmVlbHMgYSBsaXR0bGUgZ2VuZXJpYywgaXQncyBicm9hZC4gQnV0IGByZWNsYWltX3BhZ2VzYCBhbmQgZXNwZWNpYWxseSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYXJlIHByZWNpc2VseSB3aGF0IEknbSBsb29raW5nIGZvciAtIHRoZXkncmUgcmlnaHQgb24gdGFyZ2V0LiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBjb250cm9sIHBvaW50cy5cblxuTm93LCBJJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQgZm9yIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhbmQgZm9yIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgdGhvdWdoIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBnZXRzIGNhbGxlZCBieSBgcmVjbGFpbV9zdG9yZWAgd2hpY2ggaXMgYXQgYSBub2RlIGxldmVsLiBJbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTg6MzQuNjIzNTA4MTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTY3MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDktXFxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTEtXFxuLS1cXG5tbS92bXNjYW4uYz0yNzcwPXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NzMtXFxubW0vdm1zY2FuLmM6Mjc3NDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjc3NS1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Mjg9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzQtXFxubW0vdm1zY2FuLmM6MjkzNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzNi1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yOTY4PXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTc0LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI5NzU6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5NzYtXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5OTU9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDMtXFxubW0vdm1zY2FuLmM6MzAwNDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAwNS1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyNy1cXG5tbS92bXNjYW4uYzozMDI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDI5LVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMzMtXFxubW0vdm1zY2FuLmM6MzAzNDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAzNS12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0MDg9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NDUzLVxcbm1tL3Ztc2Nhbi5jOjQ0NTQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQ0NTUtXFxuLS1cXG5tbS92bXNjYW4uYz00NjQ2PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NjY4LVxcbm1tL3Ztc2Nhbi5jOjQ2Njk6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Ztc2Nhbi5jLTQ2NzAtXFxuLS1cXG5tbS92bXNjYW4uYz01NjUyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NjY1LVxcbm1tL3Ztc2Nhbi5jOjU2NjY6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU2NjctXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTkxOD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkzNy1cXG5tbS92bXNjYW4uYzo1OTM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01OTM5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk1MT12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc3LVxcbm1tL3Ztc2Nhbi5jOjU5Nzg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Ztc2Nhbi5jLTU5NzktXFxuLS1cXG5tbS92bXNjYW4uYz02ODE2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg1OC1cXG5tbS92bXNjYW4uYzo2ODU5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy02ODYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxODozNC42NzA2ODI1NzhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MzEzNDIwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IHdpdGggQ09ORklHX01FTUNHKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aGVyZSBgQ09ORklHX01FTUNHYCBpcyBoZWF2aWx5IGludm9sdmVkLCB3aGljaCBpcyBxdWl0ZSBhIGJpdCBpbiBgbW0vdm1zY2FuLmNgLiBHaXZlbiB0aGF0LCBteSBFbmFibGVDb25maWdzIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYW5kIGBNRU1DR2AuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQsIHNvIEkndmUgaWRlbnRpZmllZCBgcmVjbGFpbV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhcyBteSBmb2N1cyBzeW1ib2xzLiBMZXQncyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IHN0YXRpYzsgaXQncyBhbHdheXMgZ29vZCB0byB2ZXJpZnkgdGhlc2UgdGhpbmdzLiBBbHJpZ2h0LCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgbm9uLXN0YXRpYyBhcyBleHBlY3RlZCwgYW5kIGl0J3MgZGVmaW5lZCByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUuIFNhbWUgZ29lcyBmb3IgYHJlY2xhaW1fcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEdvb2QuXG5cbk5vdywgdGhpcyBwYXRjaCB0b3VjaGVzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBUaW1lIHRvIHRyYWNlIHRoZXNlIHRocm91Z2ggdGhlIGNhbGwgZ3JhcGhzLiBJdCBsb29rcyBsaWtlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAuIGBzaHJpbmtfbm9kZWAgaXMgdGhlIGltcG9ydGFudCBvbmUgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBgc2hyaW5rX25vZGVgIGlzIGFsc28gY2FsbGVkIGJ5IGtzd2FwZCAodmlhIGBiYWxhbmNlX3BnZGF0YCkgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuT24gdGhlIGBldmljdF9mb2xpb3NgIHNpZGUsIGl0J3MgY2FsbGVkIGJ5IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBUaGUgZm9ybWVyJ3MgY2FsbCBjaGFpbiBpcyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGBscnVfZ2VuX3Nocmlua19ub2RlYCAtXHUwMDNlIGBzaHJpbmtfbm9kZWAuIFRoZSBsYXR0ZXIgaXMgZGlyZWN0bHkgY2FsbGVkIGJ5IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuU28sIGJhc2VkIG9uIHRoZXNlIGNhbGwgY2hhaW5zLCBpdCBzZWVtcyB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFyZSBleGNlbGxlbnQgZm9jdXMgc3ltYm9scyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHJlY2xhaW1fcGFnZXNgIGNhbGxzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgb3IgYGV2aWN0X2ZvbGlvc2AuIExldCdzIHNlZS4uLiBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIFdhaXQgYSBtaW51dGUsIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgKm5vdCogdGhlIHNhbWUgYXMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gUmlnaHQsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXNvbGF0ZXMgcGFnZXMgZnJvbSB0aGUgaW5hY3RpdmUgTFJVIGxpc3QgYW5kICp0aGVuKiBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBgcmVjbGFpbV9wYWdlc2Agd29ya3Mgd2l0aCBwYWdlcyB0aGF0IGFyZSBhbHJlYWR5IGlzb2xhdGVkLiBTbyBubywgYHJlY2xhaW1fcGFnZXNgIGRvZXMgKm5vdCogZGlyZWN0bHkgY2FsbCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIG9yIGBldmljdF9mb2xpb3NgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5ODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6MDMuMTAyMDI3Njg1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxNzI1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9mb2xpb19saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIwOTE9c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIxNzktXFxubW0vdm1zY2FuLmM6MjE4MDpzdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbm1tL3Ztc2Nhbi5jLTIxODEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMDU9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjI2LVxcbm1tL3Ztc2Nhbi5jOjIyMjc6XFx0XFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1fZm9saW9fbGlzdChcXHUwMDI2bm9kZV9mb2xpb19saXN0LCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtMjIyOC1cXHRcXHRuaWQgPSBmb2xpb19uaWQobHJ1X3RvX2ZvbGlvKGZvbGlvX2xpc3QpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMzAtXFxubW0vdm1zY2FuLmM6MjIzMTpcXHRucl9yZWNsYWltZWQgKz0gcmVjbGFpbV9mb2xpb19saXN0KFxcdTAwMjZub2RlX2ZvbGlvX2xpc3QsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy0yMjMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOTowMy4yMzgyMTAyNDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MzAzNzkwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVjbGFpbSBwcm9jZXNzLiBSaWdodCwgc28gYHJlY2xhaW1fcGFnZXNgIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdHMgZG9pbmcuIEl0J3MgY2xlYXIgdGhhdCBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNocmlua19mb2xpb19saXN0YC4gVGhhdCdzIHRoZSBjaGFpbiBvZiBjYWxscyBJIG5lZWQgdG8gZm9jdXMgb24uIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBpdCAqZG9lc24ndCogY2FsbCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIG9yIGBldmljdF9mb2xpb3NgLiBUaGlzIG1lYW5zIHRoYXQgYHJlY2xhaW1fcGFnZXNgIG9uIGl0cyBvd24gaXNuJ3QgdGhlIGJlc3QgcGxhY2UgdG8gbWFrZSBhbiBvYnNlcnZhdGlvbiBvbiB0aGUgd2hvbGUgcHJvY2Vzcy4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIE9rYXksIHNvIHdoYXQgaXMgYSBiZXR0ZXIgb3B0aW9uLCBtYXliZSBhIGhpZ2hlciBsZXZlbCBmdW5jdGlvbiwgdGhhdCBpcyBhd2FyZSBvZiBtb3JlIG9mIHRoZSBjYWxsIHBhdGhzPyBXaGF0IGFib3V0IGBzaHJpbmtfYWxsX21lbW9yeWA/IExldCBtZSBzZWUgd2hhdCB0aGF0IGVudGFpbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3MDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOToxNi43Njg1OTI4MTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjU0ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc2ODY9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzY5OS0gKi9cXG5tbS92bXNjYW4uYzo3NzAwOnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc3MDEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOToxNi44MjU4NTYxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDAzODQzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgZm9jdXNpbmcgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWVtb3J5IHNocmlua2luZzpcblxuKipNZW1vcnkgU2hyaW5raW5nIEFuYWx5c2lzKipcblxuT2theSwgc28gYHNocmlua19hbGxfbWVtb3J5YCBpcyB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIEknbSBpbnRlcmVzdGVkIGluIGhlcmUuIFRoYXQgY2FsbCBjaGFpbiAtIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbGluZyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCB3aGljaCB0aGVuIGNhbGxzIGBzaHJpbmtfem9uZXNgLCBhbmQgZmluYWxseSBkb3duIHRvIGBzaHJpbmtfbm9kZWAgLSB0ZWxscyBtZSB0aGUgaGlnaC1sZXZlbCBmbG93LiBgc2hyaW5rX2FsbF9tZW1vcnlgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbjsgaXQncyB0aGUgaW5pdGlhdGluZyBzeW1ib2wgZm9yIG1lbW9yeSByZWNsYW1hdGlvbi5cblxuTm93LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFub3RoZXIgZnVuY3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBnaXZlbiBpdHMgcm9sZSBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gSXQncyBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBob3RzcG90LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGlzIGNydWNpYWwuIEhvd2V2ZXIsIHNpbmNlIGl0J3MgdGhlIG1haW4gZW50cnksIGl0IG1heSBub3QgYmUgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbGllLiBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhhdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSByZWxldmFudD8gQWgsIGhlcmUncyBvbmU6IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIG9uZTsgaXQgbGlrZWx5IHRvdWNoZXMgdGhlIG1lbW9yeSBjZ3JvdXAgYXNwZWN0LiBJIHdhbnQgdG8gY2hlY2sgaXRzIGZ1bmN0aW9uIGluIG1lbW9yeSBzaHJpbmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTI4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6MzAuMjI5NzA0NTA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAyMjE2NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Ny1cXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpO1xcbm1tL2ludGVybmFsLmg6ODg6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9pbnRlcm5hbC5oLTg5LVxcdFxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI3Mj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTMxMS1cXHRcXHR9XFxubW0vbWVtY29udHJvbC12MS5jOjMxMjpcXHRcXHR0b3RhbCArPSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMTMtXFx0XFx0XFx0XFx0XFx0cGdkYXQsIFxcdTAwMjZucl9zY2FubmVkKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MTY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02ODYxLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2ODYyOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg2My1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE5OjMyLjAzMTkzMTA4NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTI4ODc2NjcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IHJlY2xhaW0gcGF0Y2gsIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdhdGhlcmVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZpbmQgYSBnb29kIGZvY3VzIHN5bWJvbCwgYW5kIGl0IGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCdzIG9ubHkgdXNlZCBkdXJpbmcgc29mdCBsaW1pdCByZWNsYWltIGFuZCBjYWxscyBgc2hyaW5rX25vZGVgLiBUaGF0LCBhbmQgdGhlIG90aGVyIGZvY3VzIHN5bWJvbHMsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCwgbG9vayBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgYHRocm90dGxlX2lzX3Rocm90dGxlZGAsIGFuZCB0aGF0J3MgY2FsbGVkIHdpdGhpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhlIGNvcmUgaWRlYSBpcyB0byB0aHJvdHRsZSByZWNsYWltIGlmIHdlJ3JlIGFjY3VtdWxhdGluZyB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuIEl0IHNlZW1zIGxpa2UgaWYgaXQncyBub3QgbWFraW5nIHByb2dyZXNzLCBpdCBiYWlscyBvdXQsIGFuZCBpbXBvcnRhbnRseSwgaXQgc2V0cyBgKmZhdGFsYCBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIGZhdGFsIHNpZ25hbCBwZW5kaW5nLlxuXG5IZXJlJ3MgdGhlIGNyaXRpY2FsIGJpdDogaWYgYCpmYXRhbGAgaXMgdHJ1ZSwgYHNocmlua19pbmFjdGl2ZV9saXN0YCByZXR1cm5zIGBTV0FQX0NMVVNURVJfTUFYYC4gQW5kIGlmIGAqZmF0YWxgIGlzIHRydWUsIGBldmljdF9mb2xpb3NgIGFkZHMgYFNXQVBfQ0xVU1RFUl9NQVhgIHRvIGBzYy1cdTAwM2Vucl9yZWNsYWltZWRgIGFuZCByZXR1cm5zIDAuIEkgc3VzcGVjdCB0aGlzIGlzIGEgZml4IHRvIHByZXZlbnQgYSBoYW5nIG9yIGxvb3AgY29uZGl0aW9uIHdoZXJlIGEgdGFzayBnZXRzIGtpbGxlZCAoc2F5LCBieSB0aGUgT09NIGtpbGxlcikgYnV0IGVuZHMgdXAgc3R1Y2sgaW4gcmVjbGFpbSBiZWNhdXNlIG9mIHRob3NlIHBlc2t5IGlzb2xhdGVkIGZvbGlvcy5cblxuVGhlcmVmb3JlLCBmdXp6aW5nIHRoaXMgZWZmZWN0aXZlbHkgcmVxdWlyZXMgdHJpZ2dlcmluZyBwYWdlIHJlY2xhaW0g4oCTIHdoaWNoIGFsbCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGRvIOKAkyBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBjYW4gYWxzbyBraWxsIHRhc2tzLCB3aGljaCBTeXprYWxsZXIsIHRoYW5rZnVsbHksIGhhbmRsZXMgbmF0dXJhbGx5LlxuXG5UaGUga2V5IGNvbmZpZ3MgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYC5cblxuSSdsbCB1c2Ugc2V0LXJlc3VsdHMgdG8gcmV0dXJuIG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjg4MCwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6NDcuMzIwNzAxODczWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1OTA1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gICAgXCJtZW1fY2dyb3VwX3Nocmlua19ub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgdG8gcHJldmVudCB0YXNrcyBmcm9tIGxvb3BpbmcgaW5kZWZpbml0ZWx5IG9uIHVuZXZpY3RhYmxlIGZvbGlvcyB3aGVuIHRoZXkgcmVjZWl2ZSBhIGZhdGFsIHNpZ25hbC4gSXQgdXBkYXRlcyBib3RoIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gKGBldmljdF9mb2xpb3NgKS4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBwYWdlIHJlY2xhaW0sIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1jZyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0sIHdpdGggTUdMUlUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6NDcuNDAxMzAxMDIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4ODk4MTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE5OjQ3LjQwMTk1MDI4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjM4ODMyODE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgLiBJdCB1c2VzIGEgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSBgZmF0YWxgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdHJhY2sgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhlIHZhcmlhYmxlIGBmYXRhbGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYCBiZWZvcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBlbnN1cmluZyBpdCBpcyBuZXZlciB1c2VkIHVuaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDMwMDhlNzk2NmI4YWZhNjY1MTE2NDVjYjExMDAwYzJjNjE3OTMxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE1OjE1OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uNmZlODgyNDQzMGFjYiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE4MTksNyArMTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cbiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uXG4gICovXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4rc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuIFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDtcbkBAIC0xODU2LDYgKzE4NTYsMzcgQEAgc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4gXHRyZXR1cm4gdG9vX21hbnk7XG4gfVxuIFxuKy8qXG4rICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlc1xuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXG4rICogdXAuIFJldHVybnMgdHJ1ZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbisgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuXG4rICogYmFpbCBvdXQgZmFzdGVyLlxuKyAqL1xuK3N0YXRpYyBib29sIHRocm90dGxlX2lzX3Rocm90dGxlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbClcbit7XG4rXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbitcbitcdCpmYXRhbCA9IGZhbHNlO1xuK1x0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4rXHRcdGlmIChzdGFsbGVkKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuK1x0XHRzdGFsbGVkID0gdHJ1ZTtcbitcdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcbitcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuK1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHQqZmF0YWwgPSB0cnVlO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC5cbiAgKlxuQEAgLTE5OTIsMTkgKzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbi1cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuLVxuLVx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4tXHRcdGlmIChzdGFsbGVkKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuLVx0XHRzdGFsbGVkID0gdHJ1ZTtcbi1cdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcdGJvb2wgZmF0YWw7XG4gXG4rXHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBmaWxlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4gXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi1cdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRpZiAoZmF0YWwpXG4gXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bHJ1X2FkZF9kcmFpbigpO1xuQEAgLTQ4NzcsMTIgKzQ5MDMsMzMgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuLVx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbitcdGludCBpLCBzY2FubmVkLCByZWNsYWltZWQ7XG4gXHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4rXHRib29sIGZhdGFsO1xuK1xuK1x0LypcbitcdCAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIGFuZFxuK1x0ICogaXNvbGF0ZV9mb2xpb3MoKSBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciB0eXBlLiBUaHJvdHRsZSBpZlxuK1x0ICogYW55IGV2aWN0YWJsZSB0eXBlIGhhcyB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbitcdFx0aWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgaSwgc2MsIFx1MDAyNmZhdGFsKSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZVxuK1x0XHRcdCAqIGxlZ2FjeSBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc29cbitcdFx0XHQgKiByZWNsYWltIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFja1xuK1x0XHRcdCAqIGludG8gdGhlIHRocm90dGxlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChmYXRhbClcbitcdFx0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xuK1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00ODkyLDYgKzQ5MzksOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbitcdGlmIChucl9pc29sYXRlZClcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIG5yX2lzb2xhdGVkKTtcbiBcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbkBAIC00OTU0LDYgKzUwMDQsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xuK1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcbiBcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOTo0Ny40MDE5NTEzMDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzODgzMDcwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBJbml0aWFsaXphdGlvbiBpbiBhIFJlY2xhaW0gVGhyb3R0bGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgdGhyb3R0bGluZyBsb2dpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBwdWxsaW5nIHRoZSB0aHJvdHRsaW5nIGJlaGF2aW9yIG91dCBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gVGhlIGdvYWwgaXMgdG8gdXNlIHRoaXMgbmV3IGZ1bmN0aW9uIGluIGBldmljdF9mb2xpb3NgIHRvIHRocm90dGxlIHJlY2xhaW0gd2hlbiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIGJ1aWxkaW5nIHVwLCBhbmQgdG8gdXBkYXRlIG5vZGUgcGFnZSBzdGF0ZSBgTlJfSVNPTEFURURfQU5PTiArIHR5cGVgIGFzIHdlbGwuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sIGZhdGFsO2AgdmFyaWFibGUgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhpcyB2YXJpYWJsZSBpcyB0aGVuIHBhc3NlZCB0byBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbjpcblxuYGBgY1xuc3RhdGljIGJvb2wgdGhyb3R0bGVfaXNfdGhyb3R0bGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcblx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXG57XG5cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuXG5cdCpmYXRhbCA9IGZhbHNlO1xuXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcblx0XHRpZiAoc3RhbGxlZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cblx0XHRzdGFsbGVkID0gdHJ1ZTtcblx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuXG5cdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuXHRcdFx0KmZhdGFsID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cbmBgYFxuXG5Pa2F5LCBzbyByaWdodCBhdCB0aGUgc3RhcnQsIGAqZmF0YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCAqaW5zaWRlKiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gVGhhdCdzIGdvb2QuIE5vIGNoYW5jZSBvZiB1c2luZyBhbiB1bmluaXRpYWxpemVkIHZhbHVlIHRoZXJlLlxuXG5CdXQgd2FpdCwgd2hhdCBpZiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYCAqcmV0dXJucyogZmFsc2U/IExldCdzIGNoZWNrIHdoZXJlIGl0J3MgY2FsbGVkOlxuXG5JbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgOlxuXG5gYGBjXG5cdGlmICh0aHJvdHRsZV9pc190aHJvdHRsZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcblx0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG5cdFx0aWYgKGZhdGFsKVxuXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG5cblx0XHRyZXR1cm4gMDtcblx0fVxuYGBgXG5cbklmIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIHJldHVybnMgZmFsc2UsIHRoZSBjb2RlIHNpbXBseSByZXR1cm5zIDAgKndpdGhvdXQqIHVzaW5nIGBmYXRhbGAuIFNlZW1zIGZpbmUuXG5cbkluIGBldmljdF9mb2xpb3NgOlxuXG5gYGBjXG5cdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcblx0XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG5cdFx0XHQvKlxuXHRcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZVxuXHRcdFx0ICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzb1xuXHRcdFx0ICogcmVjbGFpbSB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2tcblx0XHRcdCAqIGludG8gdGhlIHRocm90dGxlLlxuXHRcdFx0ICovXG5cdFx0XHRpZiAoZmF0YWwpXG5cdFx0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdH1cbmBgYFxuXG5BZ2FpbiwgaWYgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgcmV0dXJucyBmYWxzZSwgYGZhdGFsYCBpcyAqbm90KiB1c2VkLiBJdCdzIG9ubHkgdXNlZCBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCBpbiB3aGljaCBjYXNlIGBmYXRhbGAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCAoZWl0aGVyIHRvIGBmYWxzZWAgZHVyaW5nIHRoZSBgd2hpbGVgIGxvb3AsIG9yIHBvc3NpYmx5IHNldCB0byBgdHJ1ZWAgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZykuXG5cblNvLCBhZnRlciBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgY29kZSBwYXRocywgSSBhbSBwcmV0dHkgY29uZmlkZW50LiBUaGlzIGlzIGp1c3QgYSBsb2dpYyBjaGFuZ2Ugd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0sIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlcnNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgd29ya2VkIHdpdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBhcHBhcmVudCBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToyMDowMy43OTAyNjE0MDdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5zbvb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 14:42:02 +0000 UTC FinishedAt: 2026-08-18 15:20:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED", "MEMCG" ], "series_id": "e6a69dfb-7dab-4ff3-99b3-3f92d86585e9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_free_mem_cgroup_pages", "user_proactive_reclaim", "shrink_all_memory", "mem_cgroup_shrink_node" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGJlZm9yZSBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGVuc3VyaW5nIGl0IGlzIG5ldmVyIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgdG8gcHJldmVudCB0YXNrcyBmcm9tIGxvb3BpbmcgaW5kZWZpbml0ZWx5IG9uIHVuZXZpY3RhYmxlIGZvbGlvcyB3aGVuIHRoZXkgcmVjZWl2ZSBhIGZhdGFsIHNpZ25hbC4gSXQgdXBkYXRlcyBib3RoIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gKGBldmljdF9mb2xpb3NgKS4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBwYWdlIHJlY2xhaW0sIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1jZyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0sIHdpdGggTUdMUlUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQzMDA4ZTc5NjZiOGFmYTY2NTExNjQ1Y2IxMTAwMGMyYzYxNzkzMTBcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxNToxNTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxOSw3ICYjNDM7MTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cbiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uXG4gICovXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4mIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbiBcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7XG5AQCAtMTg1Niw2ICYjNDM7MTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiBcdHJldHVybiB0b29fbWFueTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRocm90dGxlIHJlY2xhaW0gaWYgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zIGFyZSBwaWxpbmcgdXAuIElmIHRoaXMgbWFrZXNcbiYjNDM7ICogbm8gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIgaXMgcHJvYmFibHkgbG9vcGluZyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MsIHNvIGdpdmVcbiYjNDM7ICogdXAuIFJldHVybnMgdHJ1ZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhblxuJiM0MzsgKiBiYWlsIG91dCBmYXN0ZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc190aHJvdHRsZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdCpmYXRhbCA9IGZhbHNlO1xuJiM0MztcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuJiM0MztcdFx0aWYgKHN0YWxsZWQpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4mIzQzO1x0XHRzdGFsbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4mIzQzO1xuJiM0MztcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuJiM0MztcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XG4mIzQzO1x0XHRcdCpmYXRhbCA9IHRydWU7XG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC5cbiAgKlxuQEAgLTE5OTIsMTkgJiM0MzsyMDIzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4tXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbi1cbi1cdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuLVx0XHRpZiAoc3RhbGxlZClcbi1cdFx0XHRyZXR1cm4gMDtcbi1cbi1cdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cbi1cdFx0c3RhbGxlZCA9IHRydWU7XG4tXHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4mIzQzO1x0Ym9vbCBmYXRhbDtcbiBcbiYjNDM7XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBmaWxlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4gXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi1cdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuJiM0MztcdFx0aWYgKGZhdGFsKVxuIFx0XHRcdHJldHVybiBTV0FQX0NMVVNURVJfTUFYO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bHJ1X2FkZF9kcmFpbigpO1xuQEAgLTQ4NzcsMTIgJiM0Mzs0OTAzLDMzIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaztcbi1cdGludCBzY2FubmVkLCByZWNsYWltZWQ7XG4mIzQzO1x0aW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDtcbiBcdGludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiYjNDM7XHRib29sIGZhdGFsO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIGFuZFxuJiM0MztcdCAqIGlzb2xhdGVfZm9saW9zKCkgbWF5IGZhbGwgYmFjayB0byB0aGUgb3RoZXIgdHlwZS4gVGhyb3R0bGUgaWZcbiYjNDM7XHQgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb3JfZWFjaF9ldmljdGFibGVfdHlwZShpLCBzd2FwcGluZXNzKSB7XG4mIzQzO1x0XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gTGlrZSB0aGVcbiYjNDM7XHRcdFx0ICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzb1xuJiM0MztcdFx0XHQgKiByZWNsYWltIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFja1xuJiM0MztcdFx0XHQgKiBpbnRvIHRoZSB0aHJvdHRsZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChmYXRhbClcbiYjNDM7XHRcdFx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00ODkyLDYgJiM0Mzs0OTM5LDkgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcbiBcdFx0XHRcdCBcdTAwMjZsaXN0LCBcdTAwMjZpc29sYXRlZCwgXHUwMDI2dHlwZSwgXHUwMDI2dHlwZV9zY2FubmVkKTtcbiBcdG5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7XG4mIzQzO1x0aWYgKG5yX2lzb2xhdGVkKVxuJiM0MztcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsXG4mIzQzO1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTQsNiAmIzQzOzUwMDQsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbiYjNDM7XHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsIC1ucl9pc29sYXRlZCk7XG4mIzQzO1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsXG4gXHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkMzAwOGU3OTY2YjhhZmE2NjUxMTY0NWNiMTEwMDBjMmM2MTc5MzEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTggMTU6MTU6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLjZmZTg4MjQ0MzBhY2IgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKQogICogdGhlIExSVSBsaXN0IHdpbGwgZ28gc21hbGwgYW5kIGJlIHNjYW5uZWQgZmFzdGVyIHRoYW4gbmVjZXNzYXJ5LCBsZWFkaW5nIHRvCiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uCiAgKi8KLXN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAomIzQzO3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSwKIAkJc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7CkBAIC0xODU2LDYgJiM0MzsxODU2LDM3IEBAIHN0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGludCBmaWxlLAogCXJldHVybiB0b29fbWFueTsKIH0KIAomIzQzOy8qCiYjNDM7ICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlcwomIzQzOyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlCiYjNDM7ICogdXAuIFJldHVybnMgdHJ1ZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWwKJiM0MzsgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuCiYjNDM7ICogYmFpbCBvdXQgZmFzdGVyLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHRocm90dGxlX2lzX3Rocm90dGxlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiYjNDM7CQkJCSAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKQomIzQzO3sKJiM0MzsJYm9vbCBzdGFsbGVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CSpmYXRhbCA9IGZhbHNlOwomIzQzOwl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKJiM0MzsJCWlmIChzdGFsbGVkKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KJiM0MzsJCXN0YWxsZWQgPSB0cnVlOwomIzQzOwkJcmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTsKJiM0MzsKJiM0MzsJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KJiM0MzsJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewomIzQzOwkJCSpmYXRhbCA9IHRydWU7CiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsKIC8qCiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LgogICoKQEAgLTE5OTIsMTkgJiM0MzsyMDIzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAlib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpOwogCWVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7Ci0JYm9vbCBzdGFsbGVkID0gZmFsc2U7Ci0KLQl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKLQkJaWYgKHN0YWxsZWQpCi0JCQlyZXR1cm4gMDsKLQotCQkvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqLwotCQlzdGFsbGVkID0gdHJ1ZTsKLQkJcmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTsKJiM0MzsJYm9vbCBmYXRhbDsKIAomIzQzOwlpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBmaWxlLCBzYywgJmFtcDtmYXRhbCkpIHsKIAkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwotCQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiYjNDM7CQlpZiAoZmF0YWwpCiAJCQlyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCXJldHVybiAwOwogCX0KIAogCWxydV9hZGRfZHJhaW4oKTsKQEAgLTQ4NzcsMTIgJiM0Mzs0OTAzLDMzIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCWVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7CiAJc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsazsKLQlpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkOwomIzQzOwlpbnQgaSwgc2Nhbm5lZCwgcmVjbGFpbWVkOwogCWludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkOwogCXVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDsKIAlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7CiYjNDM7CWJvb2wgZmF0YWw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIGFuZAomIzQzOwkgKiBpc29sYXRlX2ZvbGlvcygpIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIHR5cGUuIFRocm90dGxlIGlmCiYjNDM7CSAqIGFueSBldmljdGFibGUgdHlwZSBoYXMgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zLgomIzQzOwkgKi8KJiM0MzsJZm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykgewomIzQzOwkJaWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgaSwgc2MsICZhbXA7ZmF0YWwpKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlCiYjNDM7CQkJICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzbwomIzQzOwkJCSAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrCiYjNDM7CQkJICogaW50byB0aGUgdGhyb3R0bGUuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGZhdGFsKQomIzQzOwkJCQlzYy0mZ3Q7bnJfcmVjbGFpbWVkICYjNDM7PSBTV0FQX0NMVVNURVJfTUFYOwomIzQzOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwl9CiAKIAlscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTsKIApAQCAtNDg5Miw2ICYjNDM7NDkzOSw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCXNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLAogCQkJCSAmYW1wO2xpc3QsICZhbXA7aXNvbGF0ZWQsICZhbXA7dHlwZSwgJmFtcDt0eXBlX3NjYW5uZWQpOwogCW5yX2lzb2xhdGVkID0gaXNvbGF0ZWQ7CiYjNDM7CWlmIChucl9pc29sYXRlZCkKJiM0MzsJCV9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLAomIzQzOwkJCQkgICAgICBucl9pc29sYXRlZCk7CiAKIAkvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqLwogCWlmIChzY2FubmVkKQpAQCAtNDk1NCw2ICYjNDM7NTAwNCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQlnb3RvIHJldHJ5OwogCX0KIAomIzQzOwltb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IHR5cGUsIC1ucl9pc29sYXRlZCk7CiYjNDM7CiAJaWYgKG5yX2lzb2xhdGVkICZndDsgdG90YWxfcmVjbGFpbWVkKQogCQltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLAogCQkJCSBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzX3Rocm90dGxlZGAsIHdoaWNoIGJhc2ljYWxseSBjb25zb2xpZGF0ZXMgdGhlIGxvZ2ljIG9mIGB0b29fbWFueV9pc29sYXRlZGAgYW5kIGByZWNsYWltX3Rocm90dGxlYC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSBjaGFuZ2VzIHJpcHBsZSBvdXQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZXkmIzM5O3JlIG5vdyB1c2luZyB0aGlzIG5ldyB0aHJvdHRsaW5nIG1lY2hhbmlzbS4gUGx1cywgdGhlcmUgYXJlIHNvbWUgc3RhdGUgbW9kaWZpY2F0aW9ucyB3aXRoIGBfX21vZF9ub2RlX3BhZ2Vfc3RhdGVgIGFuZCBgbW9kX25vZGVfcGFnZV9zdGF0ZWAgYmVpbmcgdGhyb3duIGluLgoKVGhpcyBzbWVsbHMgbGlrZSBhIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gaG93IHBhZ2UgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGB2bXNjYW5gLCBiZWhhdmVzLiBHaXZlbiBpdHMgZnVuY3Rpb25hbCBpbXBhY3QsIGZ1enppbmcgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IG9uIHRoZSB0by1kbyBsaXN0LgoKVGltZSB0byBkcmlsbCBkb3duLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC4gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AsIGJvdGggc3RhdGljIGZ1bmN0aW9ucy4gTm93LCB0aGUgc3RhdGljLW5lc3MgbWVhbnMgd2UgbmVlZCB0byB0cmFjZSB0aGUgKm5vbi1zdGF0aWMqIGVudHJ5IHBvaW50cyB3aGVyZSB0aGlzIGxvZ2ljIGdldHMgdHJpZ2dlcmVkLiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGxpa2VseSBjYWxsZWQgYnkgZWl0aGVyIGBzaHJpbmtfbGlzdGAgb3IgYHNocmlua19scnV2ZWNgLiBBcyBmb3IgYGV2aWN0X2ZvbGlvc2AsIHRoYXQmIzM5O3MgbGlrZWx5IGhhcHBlbmluZyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLgoKSSYjMzk7bGwgdXNlIGBnaXQgZ3JlcGAgdG8gY29uZmlybSB0aGUgY2FsbCBoaWVyYXJjaHkgZm9yIGJvdGggb2YgdGhvc2UgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgY2FsbCBncmFwaCB0byBwcm9wZXJseSBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q9NTM5PVNvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdW5ldmljdGFibGUgcGFnZXMgb24gdGhlIExSVSBsaXN0cyBhcmU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0LTU1MC1cbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdDo1NTE6dm1zY2FuJiMzOTtzIHNocmlua19pbmFjdGl2ZV9saXN0KCkgYW5kIHNocmlua19mb2xpb19saXN0KCkgYWxzbyBkaXZlcnQgb2J2aW91c2x5XG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTUyLXVuZXZpY3RhYmxlIHBhZ2VzIGZvdW5kIG9uIHRoZSBpbmFjdGl2ZSBsaXN0cyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNncm91cFxuLS1cbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmM9NzY9c3RhdGljIHN0cnVjdCBjcmFzaHBvaW50IGNyYXNocG9pbnRzW10gPSB7XG4tLVxuZHJpdmVycy9taXNjL2xrZHRtL2NvcmUuYy04Mi1cdENSQVNIUE9JTlQoXCYjMzQ7RlNfU1VCTUlUX0JIXCYjMzQ7LFx0XHQgXCYjMzQ7c3VibWl0X2JoXCYjMzQ7KSxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmM6ODM6XHRDUkFTSFBPSU5UKFwmIzM0O01FTV9TV0FQT1VUXCYjMzQ7LFx0IFwmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0XCYjMzQ7KSxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmMtODQtXHRDUkFTSFBPSU5UKFwmIzM0O1RJTUVSQUREXCYjMzQ7LFx0XHQgXCYjMzQ7aHJ0aW1lcl9zdGFydFwmIzM0OyksXG4tLVxuZnMvbmZzZC92ZnMuYz0xNDI2PW5mc2RfdmZzX3dyaXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBzdmNfZmggKmZocCxcbi0tXG5mcy9uZnNkL3Zmcy5jLTE0NTMtXHRcdCAqIFdlIHdhbnQgdGhyb3R0bGluZyBpbiBiYWxhbmNlX2RpcnR5X3BhZ2VzKClcbmZzL25mc2QvdmZzLmM6MTQ1NDpcdFx0ICogYW5kIHNocmlua19pbmFjdGl2ZV9saXN0KCkgdG8gb25seSBjb25zaWRlclxuZnMvbmZzZC92ZnMuYy0xNDU1LVx0XHQgKiB0aGUgYmFja2luZ2RldiB3ZSBhcmUgd3JpdGluZyB0bywgc28gdGhhdCBuZnMgdG9cbi0tXG5tbS92bXNjYW4uYz0xOTcyPXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwMTAtLypcbm1tL3Ztc2Nhbi5jOjIwMTE6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxubW0vdm1zY2FuLmMtMjAxMi0gKiBvZiByZWNsYWltZWQgcGFnZXNcbm1tL3Ztc2Nhbi5jLTIwMTMtICovXG5tbS92bXNjYW4uYzoyMDE0OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTIwMTUtXHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmM9MjIzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIyNDgtXG5tbS92bXNjYW4uYzoyMjQ5Olx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XG5tbS92bXNjYW4uYy0yMjUwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjU4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgTGlzdCBTaHJpbmtpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgZGVmaW5pdGVseSBiZWluZyBjYWxsZWQgYnkgYHNocmlua19saXN0YC4gVGhhdCYjMzk7cyB0aGUgZXN0YWJsaXNoZWQgcmVsYXRpb25zaGlwLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpicm9hZGVyKiBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzaHJpbmtfbGlzdGAgaXRzZWxmIGlzIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGVzZSBsaXN0IHNocmlua2luZyBvcGVyYXRpb25zIGhhcHBlbmluZyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gVG8gZ2FpbiBhIGhvbGlzdGljIHZpZXcsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGBzaHJpbmtfbGlzdGAgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBsaXN0IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlc2Ugc2hyaW5raW5nIG9wZXJhdGlvbnMsIGxlYWRpbmcgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YC4gS25vd2luZyB0aGUgY2FsbGluZyBsb2NhdGlvbnMgd2lsbCBoZWxwIGluIGRldGVybWluaW5nIHRoZSBsYXJnZXIgaW50ZW50IG9mIHRoZXNlIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfbGlzdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0PTEzOTI9ZF9hbGxvY19wYXJhbGxlbCgpIG5vIGxvbmdlciByZXF1aXJlcyBhIHdhaXRxdWV1ZV9oZWFkLlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTM5Ny1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3Q6MTM5ODpkX2Rpc3Bvc2VfaWZfdW51c2VkKCkgaXMgZ29uZTsgdXNlIF9fbW92ZV90b19zaHJpbmtfbGlzdCgpIGlmIHlvdSByZWFsbHlcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTM5OS1uZWVkIHRoYXQgZnVuY3Rpb25hbGl0eSwgYnV0IHdhdGNoIG91dCBmb3IgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgLSBqdXN0XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oPTI5MD1zdGF0aWMgaW5saW5lIGJvb2xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaDoyOTE6aTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3QoY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaC0yOTIte1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaD0yMzk9c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaC02NzYtXHRcdC8qKlxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oOjY3NzpcdFx0ICogRWxlbWVudCB3aXRoaW4gaTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdCBvciBpOTE1LVx1MDAzZW1tLnB1cmdlX2xpc3QsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgtNjc4LVx0XHQgKiBsb2NrZWQgYnkgaTkxNS1cdTAwM2VtbS5vYmpfbG9jay5cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYz0yMz12b2lkIF9faTkxNV9nZW1fb2JqZWN0X3NldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTgwLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM6ODE6XHRpZiAoc2hyaW5rYWJsZSBcdTAwMjZcdTAwMjYgIWk5MTVfZ2VtX29iamVjdF9oYXNfc2VsZl9tYW5hZ2VkX3Nocmlua19saXN0KG9iaikpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTgyLVx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0O1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTkzLVx0XHRlbHNlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzo5NDpcdFx0XHRsaXN0ID0gXHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTk1LVx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNm9iai1cdTAwM2VtbS5saW5rLCBsaXN0KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYz0yMTQ9X19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjYtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzoyMjc6XHRpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfc2VsZl9tYW5hZ2VkX3Nocmlua19saXN0KG9iaikpXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjgtXHRcdGk5MTVfZ2VtX29iamVjdF9tYWtlX3Vuc2hyaW5rYWJsZShvYmopO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jPTEzNj12b2lkIGk5MTVfZ2VtX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSlcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYy0xMzktXHRzdHJ1Y3QgbGlzdF9oZWFkICpwaGFzZXNbXSA9IHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jOjE0MDpcdFx0XHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdCxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jLTE0MS1cdFx0XHUwMDI2aTkxNS1cdTAwM2VtbS5wdXJnZV9saXN0LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jPTE5OD1pbnQgaTkxNV9nZW1fZnJlZXplX2xhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BtLmMtMjIyLVx0d2JpbnZkX29uX2FsbF9jcHVzKCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYzoyMjM6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgXHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdCwgbW0ubGluaylcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jLTIyNC1cdFx0X19zdGFydF9jcHVfd3JpdGUob2JqKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz0xMDQ9aTkxNV9nZW1fc2hyaW5rKHN0cnVjdCBpOTE1X2dlbV93d19jdHggKnd3LFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTExNS1cdFx0e1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6MTE2Olx0XHRcdFx1MDAyNmk5MTUtXHUwMDNlbW0uc2hyaW5rX2xpc3QsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0xMTctXHRcdFx0STkxNV9TSFJJTktfQk9VTkQgfCBJOTE1X1NIUklOS19VTkJPVU5EXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM9MzQ4PWk5MTVfZ2VtX3Nocmlua2VyX29vbShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmMtMzY5LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aTkxNS1cdTAwM2VtbS5vYmpfbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6MzcwOlx0bGlzdF9mb3JfZWFjaF9lbnRyeShvYmosIFx1MDAyNmk5MTUtXHUwMDNlbW0uc2hyaW5rX2xpc3QsIG1tLmxpbmspIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTM3MS1cdFx0aWYgKCFjYW5fcmVsZWFzZV9wYWdlcyhvYmopKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jPTU0ND12b2lkIF9faTkxNV9nZW1fb2JqZWN0X21ha2Vfc2hyaW5rYWJsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTU0Ni1cdF9fX2k5MTVfZ2VtX29iamVjdF9tYWtlX3Nocmlua2FibGUob2JqLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6NTQ3Olx0XHRcdFx0XHQgICBcdTAwMjZvYmpfdG9faTkxNShvYmopLVx1MDAzZW1tLnNocmlua19saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTU0OC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaD0xMDc9c3RydWN0IGk5MTVfZ2VtX21tIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oLTEzMC1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaDoxMzE6XHRzdHJ1Y3QgbGlzdF9oZWFkIHNocmlua19saXN0O1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaC0xMzItXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYz0xMDI5PWk5MTVfZ2VtX21hZHZpc2VfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jLTEwNzQtXHRpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19wYWdlcyhvYmopIHx8XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEwNzU6XHQgICAgaTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3Qob2JqKSkge1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMDc2LVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTA4NC1cdFx0XHRlbHNlXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEwODU6XHRcdFx0XHRsaXN0ID0gXHUwMDI2aTkxNS1cdTAwM2VtbS5zaHJpbmtfbGlzdDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTA4Ni1cdFx0XHRsaXN0X21vdmVfdGFpbChcdTAwMjZvYmotXHUwMDNlbW0ubGluaywgbGlzdCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYz0xMjg2PXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2luaXRfX21tKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTI5Mi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmk5MTUtXHUwMDNlbW0ucHVyZ2VfbGlzdCk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEyOTM6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpOTE1LVx1MDAzZW1tLnNocmlua19saXN0KTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTI5NC1cbi0tXG5mcy9kY2FjaGUuYz0xMDU0PUVYUE9SVF9TWU1CT0woZF9tYWtlX2Rpc2NhcmRhYmxlKTtcbi0tXG5mcy9kY2FjaGUuYy0xMDU2LS8qKlxuZnMvZGNhY2hlLmM6MTA1NzogKiBfX21vdmVfdG9fc2hyaW5rX2xpc3QgLSB0cnkgdG8gcGxhY2UgYSBkZW50cnkgaW50byBhIHNocmluayBsaXN0XG5mcy9kY2FjaGUuYy0xMDU4LSAqIEBkZW50cnk6XHRkZW50cnkgdG8gdHJ5IHB1dHRpbmcgaW50byBzaHJpbmsgbGlzdFxuLS1cbmZzL2RjYWNoZS5jLTEwNjYtICogZGVudHJ5X2ZyZWUoQGRlbnRyeSkgcHJpb3IgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgUkNVIHJlYWQtc2lkZSBjcml0aWNhbFxuZnMvZGNhY2hlLmM6MTA2NzogKiBhcmVhIGluIHdoaWNoIF9fbW92ZV90b19zaHJpbmtfbGlzdChAZGVudHJ5LCBAbGlzdCkgaXMgY2FsbGVkLlxuZnMvZGNhY2hlLmMtMTA2OC0gKlxuLS1cbmZzL2RjYWNoZS5jLTEwNzItXG5mcy9kY2FjaGUuYzoxMDczOmJvb2wgX19tb3ZlX3RvX3Nocmlua19saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbmZzL2RjYWNoZS5jLTEwNzQtX19tdXN0X2hvbGQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jaylcbi0tXG5mcy9kY2FjaGUuYy0xMDg0LX1cbmZzL2RjYWNoZS5jOjEwODU6RVhQT1JUX1NZTUJPTChfX21vdmVfdG9fc2hyaW5rX2xpc3QpO1xuZnMvZGNhY2hlLmMtMTA4Ni1cbmZzL2RjYWNoZS5jPTEwODc9dm9pZCBkcHV0X3RvX2xpc3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbmZzL2RjYWNoZS5jLTEwOTAtXHRcdHJldHVybjtcbmZzL2RjYWNoZS5jOjEwOTE6XHRfX21vdmVfdG9fc2hyaW5rX2xpc3QoZGVudHJ5LCBsaXN0KTtcbmZzL2RjYWNoZS5jLTEwOTItXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbi0tXG5mcy9kY2FjaGUuYz0xMjU2PXZvaWQgZF9wcnVuZV9hbGlhc2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZGNhY2hlLmMtMTI2NC1cdFx0aWYgKGxpa2VseSghKGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNiBEQ0FDSEVfTk9SQ1UpKSlcbmZzL2RjYWNoZS5jOjEyNjU6XHRcdFx0X19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXHUwMDI2ZGlzcG9zZSk7XG5mcy9kY2FjaGUuYy0xMjY2LVx0XHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbi0tXG5mcy9kY2FjaGUuYz0xNjM5PXN0YXRpYyBlbnVtIGRfd2Fsa19yZXQgc2VsZWN0X2NvbGxlY3Qodm9pZCAqX2RhdGEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbi0tXG5mcy9kY2FjaGUuYy0xNjQ3LVx0aWYgKGRlbnRyeS1cdTAwM2VkX2xvY2tyZWYuY291bnQgXHUwMDNjPSAwKSB7XG5mcy9kY2FjaGUuYzoxNjQ4Olx0XHRfX21vdmVfdG9fc2hyaW5rX2xpc3QoZGVudHJ5LCBcdTAwMjZkYXRhLVx1MDAzZWRpc3Bvc2UpO1xuZnMvZGNhY2hlLmMtMTY0OS1cdFx0ZGF0YS1cdTAwM2Vmb3VuZCYjNDM7JiM0Mzs7XG4tLVxuZnMvZGNhY2hlLmM9MTY3MT1zdGF0aWMgZW51bSBkX3dhbGtfcmV0IHNlbGVjdF9jb2xsZWN0Mih2b2lkICpfZGF0YSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTE2NzktXHRpZiAoZGVudHJ5LVx1MDAzZWRfbG9ja3JlZi5jb3VudCBcdTAwM2M9IDApIHtcbmZzL2RjYWNoZS5jOjE2ODA6XHRcdGlmICghX19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXHUwMDI2ZGF0YS1cdTAwM2VkaXNwb3NlKSkge1xuZnMvZGNhY2hlLmMtMTY4MS1cdFx0XHQvKlxuLS1cbmZzL2Z1c2UvZGlyLmM9MTU5PXN0YXRpYyB2b2lkIGZ1c2VfZGVudHJ5X3RyZWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZnMvZnVzZS9kaXIuYy0xNzgtXHRcdFx0ZmQtXHUwMDNlZGVudHJ5LVx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX09QX0RFTEVURTtcbmZzL2Z1c2UvZGlyLmM6MTc5Olx0XHRcdF9fbW92ZV90b19zaHJpbmtfbGlzdChmZC1cdTAwM2VkZW50cnksIFx1MDAyNmRpc3Bvc2UpO1xuZnMvZnVzZS9kaXIuYy0xODAtXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZmQtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4tLVxuZnMvbmFtZXNwYWNlLmM9OTc3PXN0YXRpYyB2b2lkIF9fdG91Y2hfbW50X25hbWVzcGFjZShzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXG4tLVxuZnMvbmFtZXNwYWNlLmMtOTg3LSAqL1xuZnMvbmFtZXNwYWNlLmM6OTg4OnN0YXRpYyB2b2lkIF9fdW1vdW50X21udChzdHJ1Y3QgbW91bnQgKm1udCwgc3RydWN0IGxpc3RfaGVhZCAqc2hyaW5rX2xpc3QpXG5mcy9uYW1lc3BhY2UuYy05ODkte1xuLS1cbmZzL25hbWVzcGFjZS5jLTEwMDAtXHRtbnQtXHUwMDNlbW50X21wID0gTlVMTDtcbmZzL25hbWVzcGFjZS5jOjEwMDE6XHRtYXliZV9mcmVlX21vdW50cG9pbnQobXAsIHNocmlua19saXN0KTtcbmZzL25hbWVzcGFjZS5jLTEwMDItfVxuLS1cbmluY2x1ZGUvbGludXgvZGNhY2hlLmg9MjgyPWV4dGVybiB2b2lkIGRfcHJ1bmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKik7XG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oOjI4MzpleHRlcm4gYm9vbCBfX21vdmVfdG9fc2hyaW5rX2xpc3Qoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopO1xuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0yODQtZXh0ZXJuIHZvaWQgc2hyaW5rX2RlbnRyeV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKik7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYz0yNDM9c3RhdGljIHVuc2lnbmVkIGludCBfX2JwZl9scnVfbGlzdF9zaHJpbmsoc3RydWN0IGJwZl9scnUgKmxydSxcbi0tXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI1MC1cdHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUsICp0bXBfbm9kZTtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjUxOlx0c3RydWN0IGxpc3RfaGVhZCAqZm9yY2Vfc2hyaW5rX2xpc3Q7XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI1Mi1cdHVuc2lnbmVkIGludCBuc2hyaW5rZWQ7XG4tLVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0yNjAtXHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bC1cdTAwM2VsaXN0c1tCUEZfTFJVX0xJU1RfVF9JTkFDVElWRV0pKVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzoyNjE6XHRcdGZvcmNlX3Nocmlua19saXN0ID0gXHUwMDI2bC1cdTAwM2VsaXN0c1tCUEZfTFJVX0xJU1RfVF9JTkFDVElWRV07XG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2Mi1cdGVsc2Vcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjYzOlx0XHRmb3JjZV9zaHJpbmtfbGlzdCA9IFx1MDAyNmwtXHUwMDNlbGlzdHNbQlBGX0xSVV9MSVNUX1RfQUNUSVZFXTtcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjY0LVxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzoyNjU6XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShub2RlLCB0bXBfbm9kZSwgZm9yY2Vfc2hyaW5rX2xpc3QsXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2Ni1cdFx0XHRcdFx0IGxpc3QpIHtcbi0tXG5tbS9zaG1lbS5jPTI0Mjg9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yNTUwLVx0XHQgKiBfY2FyZWZ1bCB0byBkZWZlbmQgYWdhaW5zdCB1bmxvY2tlZCBhY2Nlc3MgdG9cbm1tL3NobWVtLmM6MjU1MTpcdFx0ICogLVx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXG5tbS9zaG1lbS5jLTI1NTItXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTc2PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xubW0vdm1zY2FuLmM6Nzc6XHQvKiBIb3cgbWFueSBwYWdlcyBzaHJpbmtfbGlzdCgpIHNob3VsZCByZWNsYWltICovXG5tbS92bXNjYW4uYy03OC1cdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcbi0tXG5tbS92bXNjYW4uYz0yMjA1PXVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuLS1cbm1tL3Ztc2Nhbi5jLTIyMzctXG5tbS92bXNjYW4uYzoyMjM4OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMjM5LVx0XHRcdFx0IHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjA2NC1cbm1tL3Ztc2Nhbi5jOjYwNjU6XHRcdFx0XHRucl9yZWNsYWltZWQgJiM0Mzs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2Nhbixcbm1tL3Ztc2Nhbi5jLTYwNjYtXHRcdFx0XHRcdFx0XHQgICAgbHJ1dmVjLCBzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIEkgc2VlIGl0OgoKKipEaWdnaW5nIGludG8gUGFnZSBSZWNsYW1hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIHBhZ2UgcmVjbGFtYXRpb24gbG9naWMgaGVyZS4gSXQgbG9va3MgbGlrZSBgc2hyaW5rX2xydXZlY2AgaXMgYSBrZXkgZnVuY3Rpb24uIEkgc2VlIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gSG93ZXZlciwgd2hhdCByZWFsbHkgY2F0Y2hlcyBteSBleWUgaXMgdGhhdCBgc2hyaW5rX2xydXZlY2AgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBzaHJpbmtfbm9kZWAuIE5vdywgKnRoYXQmIzM5O3MqIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgYHNocmlua19ub2RlYCBpcyBpbnZva2VkIGZyb20gYSBidW5jaCBvZiBjb3JlIHBhdGhzLCBpbmNsdWRpbmcgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCBhbmQgYGJhbGFuY2VfcGdkYXRgIHdoaWNoIGFyZSBib3RoIGNyaXRpY2FsIHRvIGhvdyB3ZSBtYW5hZ2UgbWVtb3J5LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgdG9nZXRoZXIgaW4gdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgaG93IGl0IGltcGFjdHMgb3VyIHJlY2xhbWF0aW9uIGVmZm9ydHMuCgpJIHRoaW5rIGl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgaG93IGBldmljdF9mb2xpb3NgIGZpdHMgaW50byBhbGwgdGhpcyBhcyBpdCBzaG91bGQgcHJvYmFibHkgYmUgaW52b2tlZCB3aXRoaW4gb25lIG9mIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz00ODYyPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDg5NS1cbm1tL3Ztc2Nhbi5jOjQ4OTY6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYy00ODk3LVx0XHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYz01MDk5PXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTEyMi1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1MTIzOlx0XHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MTI0LVx0XHRpZiAoIWRlbHRhKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTc0Ni1cdFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVx1MDAzZW5yX3JlY2xhaW1lZCwgTUFYX0xSVV9CQVRDSCk7XG5tbS92bXNjYW4uYzo1NzQ3Olx0XHRpZiAoIWV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcykpXG5tbS92bXNjYW4uYy01NzQ4LVx0XHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzAKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1HTFJVIGFuZCBMZWdhY3kgTFJVIFJlY2xhaW0gQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byB0aGUgTUdMUlUgYW5kIGxlZ2FjeSBMUlUgcmVjbGFpbSBtZWNoYW5pc21zLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGhlcmUsIGFzIGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLCB3aGljaCBhcmUgY29yZSBjb21wb25lbnRzIG9mIHRoZSBNdWx0aS1HZW4gTFJVIHN5c3RlbS4gVGhpcyBtZWFucyB0aGUgY2hhbmdlcyBhcmUgaW1wYWN0aW5nIGJvdGggdGhlIG5ldyBNR0xSVSBhcHByb2FjaCBhbmQgdGhlIGV4aXN0aW5nIExSVSByZWNsYWltLCBzcGVjaWZpY2FsbHkgYHNocmlua19pbmFjdGl2ZV9saXN0YC4KCkdpdmVuIHRoZSBzY29wZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyBzZXQgb2YgZnVuY3Rpb25zLCB3aGljaCBJJiMzOTt2ZSBpZGVudGlmaWVkIGFzOiBgc2hyaW5rX25vZGVgLCBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgYmFsYW5jZV9wZ2RhdGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGBzaHJpbmtfbHJ1dmVjYCwgYHRyeV90b19zaHJpbmtfbHJ1dmVjYCwgYW5kIGBydW5fZXZpY3Rpb25gLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLiBMb29rcyBsaWtlIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGlzIHN0YXRpYywgc28gSSYjMzk7bGwgcHV0IHRoYXQgYXNpZGUsIEkgY2FuJiMzOTt0IHJlYWxseSBmb2N1cyBvbiBpdC4gU2FtZSBmb3IgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGBzaHJpbmtfbHJ1dmVjYCwgYW5kIGBzaHJpbmtfbm9kZWAuCgpUaGF0IGxlYXZlcyBtZSB3aXRoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYGJhbGFuY2VfcGdkYXRgIGFuZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhcyB0aGUgbW9zdCBpbnRlcmVzdGluZyBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uIFRoZXNlIGFyZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvciBpbnRlcmZhY2UgY2hhbmdlcyB3aWxsIGxpa2VseSByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCByZWNsYWltIHByb2Nlc3MsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGxlZ2FjeSBhbmQgTUdMUlUgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2Z1c2UvZmlsZS5jPTIzNTE9c3RhdGljIHZvaWQgZnVzZV92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZnMvZnVzZS9maWxlLmMtMjM3MS0gKiAtIHN5bmMoMilcbmZzL2Z1c2UvZmlsZS5jOjIzNzI6ICogLSB0cnlfdG9fZnJlZV9wYWdlcygpIHdpdGggb3JkZXIgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSXG5mcy9mdXNlL2ZpbGUuYy0yMzczLSAqL1xuLS1cbm1tL2ludGVybmFsLmg9Njk9dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbm1tL2ludGVybmFsLmg6NzA6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS9pbnRlcm5hbC5oLTcxLVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm1hc2spO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz00NDM4PV9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQ0NTAtXG5tbS9wYWdlX2FsbG9jLmM6NDQ1MTpcdHByb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoYWMtXHUwMDNlem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayxcbm1tL3BhZ2VfYWxsb2MuYy00NDUyLVx0XHRcdFx0XHRcdFx0XHRhYy1cdTAwM2Vub2RlbWFzayk7XG4tLVxubW0vdm1zY2FuLmM9NjU2Mz1zdGF0aWMgdm9pZCBzbmFwc2hvdF9yZWZhdWx0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTY1OTMtICovXG5tbS92bXNjYW4uYzo2NTk0OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG5tbS92bXNjYW4uYy02NTk1LVx0XHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTY3MzY9c3RhdGljIGJvb2wgdGhyb3R0bGVfZGlyZWN0X3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjgxNS1cbm1tL3Ztc2Nhbi5jOjY4MTY6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG5tbS92bXNjYW4uYy02ODE3LVx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTAtXG5tbS92bXNjYW4uYzo2ODUxOlx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY4NTItXG4tLVxubW0vdm1zY2FuLmM9NjkwMj11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY5MzMtXG5tbS92bXNjYW4uYzo2OTM0Olx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTY5MzUtXG4tLVxubW0vdm1zY2FuLmM9NzcwMD11bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSlcbi0tXG5tbS92bXNjYW4uYy03NzE5LVxubW0vdm1zY2FuLmM6NzcyMDpcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy03NzIxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTQwMQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBQb2ludHMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB3aGVyZSB0byBkaXJlY3QgbXkgYXR0ZW50aW9uIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBGcm9tIGEgaGlnaCBsZXZlbCwgYHRyeV90b19mcmVlX3BhZ2VzYCBzZWVtcyBsaWtlIGEgc29saWQgc3ltYm9sIHRvIHN0YXJ0IHdpdGgg4oCTIGl0JiMzOTtzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIGluIHJlY2xhaW1pbmcgbWVtb3J5LiBUaGVuLCBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYmVjYXVzZSwgb2YgY291cnNlLCBtZW1vcnkgY2dyb3VwcyBhcmUgYSBjZW50cmFsIGNvbXBvbmVudCB0aGVzZSBkYXlzLiBUaGF0IGlzIHZlcnkgaW1wb3J0YW50LiBJIHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBiYWxhbmNlX3BnZGF0YCwgYmVjYXVzZSB0aGF0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciB0aGUgb3ZlcmFsbCBiYWxhbmNpbmcgb2YgbWVtb3J5IGFjcm9zcyBOVU1BIG5vZGVzLCBzb21ldGhpbmcgdGhhdCBpcyBpbXBvcnRhbnQgdG8gY29uc2lkZXIuIExldCYjMzk7cyBkaWcgaW50byBgYmFsYW5jZV9wZ2RhdGAgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFsYW5jZV9wZ2RhdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD03Nj1UUkFDRV9FVkVOVChtbV92bXNjYW5fa3N3YXBkX3dha2UsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtOTgtXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDo5OTpUUkFDRV9FVkVOVChtbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9iZWdpbixcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTEwMC1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xMjItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaDoxMjM6VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfZW5kLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTI0LVxuLS1cbm1tL3Ztc2Nhbi5jPTY4NjI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy02ODg4LVx0ICogaGVyZSBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGl0IGxpbWl0cyB0aGUgcGFnZXMgd2UgY2FuIHNjYW4uXG5tbS92bXNjYW4uYzo2ODg5Olx0ICogaWYgd2UgZG9uJiMzOTt0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNjg5MC1cdCAqIHdpbGwgcGljayB1cCBwYWdlcyBmcm9tIG90aGVyIG1lbSBjZ3JvdXAmIzM5O3MgYXMgd2VsbC4gV2UgaGFja1xuLS1cbm1tL3Ztc2Nhbi5jPTcwOTI9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTcwOTUtXHQvKlxubW0vdm1zY2FuLmM6NzA5NjpcdCAqIFRoZSB0aHJvdHRsZWQgcHJvY2Vzc2VzIGFyZSBub3JtYWxseSB3b2tlbiB1cCBpbiBiYWxhbmNlX3BnZGF0KCkgYXNcbm1tL3Ztc2Nhbi5jLTcwOTctXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXG4tLVxubW0vdm1zY2FuLmMtNzEwMC1cdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXG5tbS92bXNjYW4uYzo3MTAxOlx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXG5tbS92bXNjYW4uYy03MTAyLVx0ICogdGhlIHdha2UgdXAgY2hlY2tzLiBJZiBrc3dhcGQgaXMgZ29pbmcgdG8gc2xlZXAsIG5vIHByb2Nlc3Mgc2hvdWxkXG4tLVxubW0vdm1zY2FuLmMtNzEwNC1cdCAqIHRoZSB3YWtlIHVwIGlzIHByZW1hdHVyZSwgcHJvY2Vzc2VzIHdpbGwgd2FrZSBrc3dhcGQgYW5kIGdldFxubW0vdm1zY2FuLmM6NzEwNTpcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcbm1tL3Ztc2Nhbi5jLTcxMDYtXHQgKiB0aGF0IGhlcmUgd2UgYXJlIHVuZGVyIHByZXBhcmVfdG9fd2FpdCgpLlxuLS1cbm1tL3Ztc2Nhbi5jPTcxODY9Y2xlYXJfcmVjbGFpbV9hY3RpdmUocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MTkxLS8qXG5tbS92bXNjYW4uYzo3MTkyOiAqIEZvciBrc3dhcGQsIGJhbGFuY2VfcGdkYXQoKSB3aWxsIHJlY2xhaW0gcGFnZXMgYWNyb3NzIGEgbm9kZSBmcm9tIHpvbmVzXG5tbS92bXNjYW4uYy03MTkzLSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xuLS1cbm1tL3Ztc2Nhbi5jLTcyMDMtICovXG5tbS92bXNjYW4uYzo3MjA0OnN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYy03MjA1LXtcbi0tXG5tbS92bXNjYW4uYy03MjE5LVxubW0vdm1zY2FuLmM6NzIyMDpcdHRyYWNlX21tX3Ztc2Nhbl9iYWxhbmNlX3BnZGF0X2JlZ2luKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG9yZGVyLFxubW0vdm1zY2FuLmMtNzIyMS1cdFx0XHRcdFx0ICAgIGhpZ2hlc3Rfem9uZWlkeCk7XG4tLVxubW0vdm1zY2FuLmMtNzQxNC1cbm1tL3Ztc2Nhbi5jOjc0MTU6XHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2Mub3JkZXIsXG5tbS92bXNjYW4uYy03NDE2LVx0XHRcdFx0XHQgIGhpZ2hlc3Rfem9uZWlkeCwgc2MubnJfcmVjbGFpbWVkKTtcbi0tXG5tbS92bXNjYW4uYz03NTM5PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4tLVxubW0vdm1zY2FuLmMtNzU4NS1cdFx0Lypcbm1tL3Ztc2Nhbi5jOjc1ODY6XHRcdCAqIFdlIGNhbiBzcGVlZCB1cCB0aGF3aW5nIHRhc2tzIGlmIHdlIGRvbiYjMzk7dCBjYWxsIGJhbGFuY2VfcGdkYXRcbm1tL3Ztc2Nhbi5jLTc1ODctXHRcdCAqIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3Jcbi0tXG5tbS92bXNjYW4uYy03NjAxLVx0XHRcdFx0XHRcdGFsbG9jX29yZGVyKTtcbm1tL3Ztc2Nhbi5jOjc2MDI6XHRcdHJlY2xhaW1fb3JkZXIgPSBiYWxhbmNlX3BnZGF0KHBnZGF0LCBhbGxvY19vcmRlcixcbm1tL3Ztc2Nhbi5jLTc2MDMtXHRcdFx0XHRcdFx0aGlnaGVzdF96b25laWR4KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3MjIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgYmFsYW5jZV9wZ2RhdGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIHRoZW4gYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCwgYWxsIG9mIHdoaWNoIGFyZSAqbm90KiBzdGF0aWMuIFJpZ2h0IGF3YXksIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBqdW1wIG91dCBhcyBpbnRlcmVzdGluZyBhcmVhcyB0byBkZWx2ZSBpbnRvIGZ1cnRoZXIg4oCTIHNvbGlkIGZvY3VzIHN5bWJvbHMgaGVyZS4KCkFoLCBidXQgdGhpcyBwYXRjaC4uLiBpdCYjMzk7cyBjaGFuZ2luZyBgdG9vX21hbnlfaXNvbGF0ZWRgIHRvIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgLiBUaGF0JiMzOTtzIGEga2V5IHNoaWZ0IGluIGhvdyB0aHJvdHRsaW5nIGlzIHJlcHJlc2VudGVkLCBhbmQgaXQmIzM5O3MgYWxzbyBhZGRpbmcgY2hlY2tzIGZvciBgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudClgICphbmQqIHNldHRpbmcgYCpmYXRhbGAuIFRoaXMgaXMgY2xlYXJseSBkZXNpZ25lZCB0byBwcmV2ZW50IGluZGVmaW5pdGUgbG9vcGluZyBvbiBmb2xpb3MgdGhhdCBjYW4mIzM5O3QgYmUgZXZpY3RlZCB3aGVuIGEgdGFzayBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBraWxsZWQuIEkgc2VlIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBoZXJlLiBJJiMzOTttIHRoaW5raW5nLCBgQ09ORklHX01FTUNHYCBkZWZpbml0ZWx5IGFwcGxpZXMgdG8gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBvYnZpb3VzbHkuIEJ1dCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNvcmUsIGFsd2F5cyBwcmVzZW50LiBOb3csIGlzIE1HTFJVIHJlbGV2YW50IGhlcmU/IEFoLCBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBNR0xSVSBjb25maWcuIFNvIEkgbmVlZCB0byBnbyBzZWUgaWYgYGV2aWN0X2ZvbGlvc2AgaXMgd3JhcHBlZCBieSBgQ09ORklHX0xSVV9HRU5gIG9yIG5vdC4gVGhhdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIGZpZ3VyZSBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19MUlVfR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD0xMz1CdWlsZCB0aGUga2VybmVsIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9ucy5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xNC1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNToqIGBgQ09ORklHX0xSVV9HRU49eWBgXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTY6KiBgYENPTkZJR19MUlVfR0VOX0VOQUJMRUQ9eWBgXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTctXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTI4PWZvbGxvd2luZyBjb21wb25lbnRzLiBJdHMgZGVmYXVsdCB2YWx1ZSBkZXBlbmRzIG9uXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6Mjk6YGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYGAuIEFsbCB0aGUgY29tcG9uZW50cyBzaG91bGQgYmUgZW5hYmxlZFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTMwLXVubGVzcyBzb21lIG9mIHRoZW0gaGF2ZSB1bmZvcmVzZWVuIHNpZGUgZWZmZWN0cy4gV3JpdGluZyB0b1xuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD04OD1jb25jYXRlbmF0aW9uIHdpdGggZGVsaW1pdGVycyBgYCxgYCBhbmQgYGA7YGAuXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTkwLWBgL3N5cy9rZXJuZWwvZGVidWcvbHJ1X2dlbl9mdWxsYGAgcHJvdmlkZXMgYWRkaXRpb25hbCBzdGF0cyBmb3JcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo5MTpkZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0LTkyLWV2aWN0ZWQgZ2VuZXJhdGlvbnMgaW4gdGhpcyBmaWxlLlxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTIwMj1zdHJ1Y3QgbWVtX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc4LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Mjc5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI4MC1cdC8qIHBlci1tZW1jZyBtbV9zdHJ1Y3QgbGlzdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9ODI9c3RhdGljIF9fYWx3YXlzX2lubGluZSBlbnVtIGxydV9saXN0IGZvbGlvX2xydV9saXN0KGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC05Ny1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6OTg6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTk5LVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xMDA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fc3dpdGNoaW5nKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMDUtfVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxMDY6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTA3LXN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxMi19XG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxMzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzE0LVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzQzLX1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzQ0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNDUtXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MDItI2VuZGlmIC8qIENPTkZJR19LU00gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDA0LVx0XHRzdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDE3LVx0XHR9IGxydV9nZW47XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQxODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxOS0jaWZkZWYgQ09ORklHX01NX0lEXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE0ODA9c3RhdGljIGlubGluZSBjcHVtYXNrX3QgKm1tX2NwdW1hc2soc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0ODQtXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQ4NTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg2LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE0ODc9c3RydWN0IGxydV9nZW5fbW1fbGlzdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTMtXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTQ5NDojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk1LVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTctXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MTE9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIwLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MjE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MjItXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1Mzk9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQyLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1NDM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1NDQtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01MjU9c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MjYtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUyNzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI4LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NTM0PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTQ0LS8qIHdoZXRoZXIgdG8ga2VlcCBoaXN0b3JpY2FsIHN0YXRzIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1NDU6I2lmZGVmIENPTkZJR19MUlVfR0VOX1NUQVRTXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ni0jZGVmaW5lIE5SX0hJU1RfR0VOU1x0XHRNQVhfTlJfR0VOU1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzAyPXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MDMtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwNDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzA1LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzU0PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03NTctXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzU5LVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY2PXN0cnVjdCBscnV2ZWMge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzg1LVx0dW5zaWduZWQgbG9uZ1x0XHRcdGZsYWdzO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3ODY6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4Ny1cdC8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGludG8gZ2VuZXJhdGlvbnMgKi9cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzg4LVx0c3RydWN0IGxydV9nZW5fZm9saW9cdFx0bHJ1Z2VuO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3ODk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTAtXHQvKiB0byBjb25jdXJyZW50bHkgaXRlcmF0ZSBscnVfZ2VuX21tX2xpc3QgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5Mi0jZW5kaWZcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzkzOiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTQtI2lmZGVmIENPTkZJR19NRU1DR1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTQ3OD10eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk1LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTk2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk3LVx0Lyoga3N3YXAgbW0gd2FsayBkYXRhICovXG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTgyNj1zdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDI0LSNlbmRpZlxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEwMjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNi1cdC8qIHdoZXRoZXIgdGhlIExSVSBhbGdvcml0aG0gbWF5IGFwcGx5IHRvIHRoaXMgYWNjZXNzICovXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9MTQ2PXN0cnVjdCByZWNsYWltX3N0YXRlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xNDgtXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbmluY2x1ZGUvbGludXgvc3dhcC5oOjE0OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbmluY2x1ZGUvbGludXgvc3dhcC5oLTE1MC1cdC8qIHBlci10aHJlYWQgbW0gd2FsayBkYXRhICovXG4tLVxua2VybmVsL2JvdW5kcy5jPTE3PWludCBtYWluKHZvaWQpXG4tLVxua2VybmVsL2JvdW5kcy5jLTI1LVx0REVGSU5FKFNQSU5MT0NLX1NJWkUsIHNpemVvZihzcGlubG9ja190KSk7XG5rZXJuZWwvYm91bmRzLmM6MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5rZXJuZWwvYm91bmRzLmMtMjctXHRERUZJTkUoTFJVX0dFTl9XSURUSCwgb3JkZXJfYmFzZV8yKE1BWF9OUl9HRU5TICYjNDM7IDEpKTtcbi0tXG5rZXJuZWwvZm9yay5jPTI2OTQ9cGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcbi0tXG5rZXJuZWwvZm9yay5jLTI3NzEtXG5rZXJuZWwvZm9yay5jOjI3NzI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUpIFx1MDAyNlx1MDAyNiAhKGNsb25lX2ZsYWdzIFx1MDAyNiBDTE9ORV9WTSkpIHtcbmtlcm5lbC9mb3JrLmMtMjc3My1cdFx0LyogbG9jayB0aGUgdGFzayB0byBzeW5jaHJvbml6ZSB3aXRoIG1lbWNnIG1pZ3JhdGlvbiAqL1xuLS1cbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy0zNTEtXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL2ZvbGlvLmMtMzUzLVxuLS1cbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2ZvbGlvLmMtMzk1LVxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXG5tbS9mb2xpby5jLTM5Ny1cbi0tXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTQwNi1cbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vZm9saW8uYy00MDgtXG4tLVxubW0vbWVtY29udHJvbC5jPTQ2MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYzNy1cbm1tL21lbWNvbnRyb2wuYzo0NjM4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vbWVtY29udHJvbC5jLTQ2Mzktc3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpXG4tLVxubW0vbWVtY29udHJvbC5jPTQ2NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XG5tbS9tZW1jb250cm9sLmM6NDY1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL21lbWNvbnRyb2wuYy00NjU5LVxuLS1cbm1tL21lbW9yeS5jPTY3MjY9c3RhdGljIGlubGluZSB2b2lkIG1tX2FjY291bnRfZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwdF9yZWdzICpyZWdzLFxuLS1cbm1tL21lbW9yeS5jLTY3NzgtXG5tbS9tZW1vcnkuYzo2Nzc5OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vbWVtb3J5LmMtNjc4MC1zdGF0aWMgdm9pZCBscnVfZ2VuX2VudGVyX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbW9yeS5jPTY3OTU9c3RhdGljIHZvaWQgbHJ1X2dlbl9leGl0X2ZhdWx0KHZvaWQpXG4tLVxubW0vbWVtb3J5LmMtNjc5Ny19XG5tbS9tZW1vcnkuYzo2Nzk4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vbWVtb3J5LmMtNjc5OS1cbi0tXG5tbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzItXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzQtLypcbi0tXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2NS19XG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04NjctXG4tLVxubW0vdm1zY2FuLmM9MjcwNj1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI3MTctXG5tbS92bXNjYW4uYzoyNzE4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjcxOS1cbm1tL3Ztc2Nhbi5jPTI3MjA9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNzIxOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNzIyLURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5MDY9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjkyNS1cbm1tL3Ztc2Nhbi5jOjI5MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkyNy1cbi0tXG5tbS92bXNjYW4uYz0zMDM1PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwNjMtXG5tbS92bXNjYW4uYzozMDY0OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwNjUtXG4tLVxubW0vdm1zY2FuLmM9NTk5NT1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTk2LVxubW0vdm1zY2FuLmM6NTk5NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5OTgtXG4tLVxubW0vdm1zY2FuLmM9NjAwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYwMTMtXG5tbS92bXNjYW4uYzo2MDE0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjAxNS1cbi0tXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcbi0tXG5tbS93b3JraW5nc2V0LmMtMjMyLVxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3dvcmtpbmdzZXQuYy0yMzQtXG4tLVxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxuLS1cbm1tL3dvcmtpbmdzZXQuYy0zMzYtXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vd29ya2luZ3NldC5jLTMzOC1cbi0tXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTM1My1cbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS93b3JraW5nc2V0LmMtMzU1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM4MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKk1HTFJVIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIE1HTFJVIGlzIGRlZmluaXRlbHkgc2l0dGluZyB1bmRlciBgQ09ORklHX0xSVV9HRU5gLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBTaW5jZSBNR0xSVSByZWxpZXMgb24gaXQsIGVuYWJsaW5nIGBDT05GSUdfTFJVX0dFTmAgbG9va3MgbGlrZSBhIHNtYXJ0IG1vdmUuIEFuZCwgb2YgY291cnNlLCBlbmFibGluZyBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgbWFrZXMgaW50dWl0aXZlIHNlbnNlIHRvIGFjdHVhbGx5IGxldmVyYWdlIHRoZSBmZWF0dXJlLiBOb3csIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcgc3BlY2lmaWMuLi4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayBpZiB0aGUgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24gaXMgYWxzbyBwYXJ0IG9mIHRoYXQgYENPTkZJR19MUlVfR0VOYCB1bWJyZWxsYS4gSnVzdCB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBwYXJ0cyBhcmUgYWxsIGVuYWJsZWQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy00ODk1LVxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTQ4OTctXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTIyLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUxMjM6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUxMjQtXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01NzQ2LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU3NDc6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU3NDgtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDMyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFdmljdGlvbiBGdW5jdGlvbiYjMzk7cyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byB0aGlzIGBldmljdF9mb2xpb3NgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGxpbmUgbnVtYmVyIGFwcGVhcnMgdG8gYmUgYXJvdW5kIDQ4OTYuIE5vdywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgY29kZWJhc2UsIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgQ09ORklHX0xSVV9HRU5gLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYGV2aWN0X2ZvbGlvc2AgaXMgd3JhcHBlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2suIFRoaXMgdGVsbHMgbWUgYSBsb3QgYWJvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgYWN0aXZlLiBVbmRlcnN0YW5kaW5nIHRoaXMgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHdoZW4gYW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWN0dWFsbHkgYmUgY29tcGlsZWQgYW5kIHVzZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IGhlcmUgYW5kIGEgcXVpY2sgY2hlY2sgY2FuIHNhdmUgbWUgYSBsb3Qgb2YgdGltZSBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjcxNTpcdFx0XHRcdCAgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xuMjcxNjpcdH1cbjI3MTc6XHRcbjI3MTg6XHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cbjI3MTk6XHRcbjI3MjA6XHRERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbjI3MjE6XHQjaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxuMjcyMjpcdERFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuMjcyMzpcdCNkZWZpbmUgZ2V0X2NhcChjYXApXHRzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcbjI3MjQ6XHQjZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIENPTkZJR19MUlVfR0VOIGluIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfTFJVX0dFTmAgaXMgaW5kZWVkIGluaXRpYWxpemVkIGF0IDI3MTguIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHVuZGVyc3RhbmRpbmcgaXRzIGZpbmFsIHZhbHVlLiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gYW55IGNvbmRpdGlvbmFsIGxvZ2ljIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgaXQmIzM5O3MgdWx0aW1hdGVseSByZXNvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGAjaWZkZWZgIGRpcmVjdGl2ZXMsIGFuZCBsb29rIGZvciBhbnkgc3ltYm9sIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGR5bmFtaWNhbGx5IGFkanVzdCBpdHMgdmFsdWUgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB3aGV0aGVyIGl0cyBmaW5hbCB2YWx1ZSBpcyBoYXJkY29kZWQsIGNhbGN1bGF0ZWQgYmFzZWQgb24gb3RoZXIgcGFyYW1ldGVycywgb3IgZGV0ZXJtaW5lZCBieSBzb21lIGV4dGVybmFsIGZhY3RvciBsaWtlIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBmb2xsb3cgdGhlIGNvZGUgZmxvdyB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgbGlmZWN5Y2xlLiBUaGlzIGlzIG1vcmUgdGhhbiBqdXN0IGtub3dpbmcgd2hlcmUgaXQgKmJlZ2lucyo7IEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGNvbXBsZXRlIGNvbnRyb2wgZmxvdyB0byBzZWUgd2hlcmUgaXQgKmVuZHMqIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1OTkwOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlbl9mdWxsXCYjMzQ7LCAwNDQ0LCBOVUxMLCBOVUxMLCB0cnVlLFxuNTk5MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XG41OTkyOlx0XG41OTkzOlx0XHRyZXR1cm4gMDtcbjU5OTQ6XHR9O1xuNTk5NTpcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbjU5OTY6XHRcbjU5OTc6XHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbjU5OTg6XHRcbjU5OTk6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjAwMDpcdHtcbjYwMDE6XHRcdEJVSUxEX0JVRygpO1xuNjAwMjpcdH1cbjYwMDM6XHRcbjYwMDQ6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYwMDU6XHR7XG42MDA2Olx0XHRCVUlMRF9CVUcoKTtcbjYwMDc6XHR9XG42MDA4Olx0XG42MDA5Olx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbjYwMTA6XHR7XG42MDExOlx0XHRCVUlMRF9CVUcoKTtcbjYwMTI6XHR9XG42MDEzOlx0XG42MDE0Olx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG42MDE1Olx0XG42MDE2Olx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNjAxNzpcdHtcbjYwMTg6XHRcdHVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTtcbjYwMTk6XHRcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0c1tOUl9MUlVfTElTVFNdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwOQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTFJVIFJlY2xhaW0gUGF0aCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTFJVX0dFTmAuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBuZWVkIHRvIGJlIGNvcnJlY3RseSBwbGFjZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIGEga2V5IGZpcnN0IGNoZWNrLgoKTm93LCB3aGF0IGFib3V0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGA/IExvb2tpbmcgYXQgdGhlIGxpbmUgbnVtYmVyLCBhcm91bmQgbGluZSAyMDE0LCBpdCYjMzk7cyBiZWZvcmUgdGhlIGBDT05GSUdfTFJVX0dFTmAgY29uZGl0aW9uYWwuIFRoYXQgdGVsbHMgbWUgaXQmIzM5O3MgcGFydCBvZiB0aGUgbGVnYWN5IExSVSByZWNsYWltIHBhdGguIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYm90aCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSBpdCYjMzk7cyBoYW5kbGluZyB0aHJvdHRsaW5nIGFuZCBmYXRhbCBzaWduYWwgaGFuZGxpbmcgaW4gYSBtb3JlIHJvYnVzdCB3YXkgYWNyb3NzIGJvdGggdHlwZXMuIFRoYXQmIzM5O3MgYSBnb29kIHNpZ24g4oCTIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBmdW5kYW1lbnRhbCBwcm9ibGVtIHdpdGggbG9vcHMgb24gdW5ldmljdGFibGUgZm9saW9zLgoKSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzeW1ib2xzIGludm9sdmVkIGhlcmUgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBob3cgaXQgdXNlcyBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBUaG9zZSBhcmUgdGhlIGNvcmUgZnVuY3Rpb25zIHRoYXQgcHJvYmFibHkgYXJlIGJlaW5nIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgdGhyb3R0bGluZyBhbmQgc2lnbmFsIGJhaWxvdXRzLiBJIHdhcyBhbHNvIGdvaW5nIHRvIGxvb2sgYXQgYGJhbGFuY2VfcGdkYXRgLCBidXQgd2FpdC4uLiB0aGF0JiMzOTtzIHN0YXRpYy4gUmlnaHQsIGNhbiYjMzk7dCB1c2UgaXQgZGlyZWN0bHkuIFNvLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB3aGVyZSBhbmQgaG93IGBiYWxhbmNlX3BnZGF0YCBpcyB1c2VkIGFuZCBpZiBpdCYjMzk7cyBpbmRpcmVjdGx5IGJlaW5nIGFmZmVjdGVkIG9yIGlmIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWxhbmNlX3BnZGF0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4ODgtXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cbm1tL3Ztc2Nhbi5jOjY4ODk6XHQgKiBpZiB3ZSBkb24mIzM5O3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XG5tbS92bXNjYW4uYy02ODkwLVx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCYjMzk7cyBhcyB3ZWxsLiBXZSBoYWNrXG4tLVxubW0vdm1zY2FuLmM9NzA5Mj1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzA5NS1cdC8qXG5tbS92bXNjYW4uYzo3MDk2Olx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xubW0vdm1zY2FuLmMtNzA5Ny1cdCAqIHNvb24gYXMgYWxsb3dfZGlyZWN0X3JlY2xhaW0oKSBpcyB0cnVlLiBCdXQgdGhlcmUgaXMgYSBwb3RlbnRpYWxcbi0tXG5tbS92bXNjYW4uYy03MTAwLVx0ICogdGhyb3R0bGVkLCBrc3dhcGQgd2FrZXMsIGEgbGFyZ2UgcHJvY2VzcyBleGl0cyB0aGVyZWJ5IGJhbGFuY2luZyB0aGVcbm1tL3Ztc2Nhbi5jOjcxMDE6XHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcbm1tL3Ztc2Nhbi5jLTcxMDItXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcbi0tXG5tbS92bXNjYW4uYy03MTA0LVx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XG5tbS92bXNjYW4uYzo3MTA1Olx0ICogdGhyb3R0bGVkIGFnYWluLiBUaGUgZGlmZmVyZW5jZSBmcm9tIHdha2UgdXBzIGluIGJhbGFuY2VfcGdkYXQoKSBpc1xubW0vdm1zY2FuLmMtNzEwNi1cdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXG4tLVxubW0vdm1zY2FuLmM9NzE4Nj1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcxOTEtLypcbm1tL3Ztc2Nhbi5jOjcxOTI6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcbm1tL3Ztc2Nhbi5jLTcxOTMtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXG4tLVxubW0vdm1zY2FuLmMtNzIwMy0gKi9cbm1tL3Ztc2Nhbi5jOjcyMDQ6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbm1tL3Ztc2Nhbi5jLTcyMDUte1xuLS1cbm1tL3Ztc2Nhbi5jLTcyMTktXG5tbS92bXNjYW4uYzo3MjIwOlx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgb3JkZXIsXG5tbS92bXNjYW4uYy03MjIxLVx0XHRcdFx0XHQgICAgaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYy03NDE0LVxubW0vdm1zY2FuLmM6NzQxNTpcdHRyYWNlX21tX3Ztc2Nhbl9iYWxhbmNlX3BnZGF0X2VuZChwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5vcmRlcixcbm1tL3Ztc2Nhbi5jLTc0MTYtXHRcdFx0XHRcdCAgaGlnaGVzdF96b25laWR4LCBzYy5ucl9yZWNsYWltZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTc1Mzk9c3RhdGljIGludCBrc3dhcGQodm9pZCAqcClcbi0tXG5tbS92bXNjYW4uYy03NTg1LVx0XHQvKlxubW0vdm1zY2FuLmM6NzU4NjpcdFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJiMzOTt0IGNhbGwgYmFsYW5jZV9wZ2RhdFxubW0vdm1zY2FuLmMtNzU4Ny1cdFx0ICogYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIHJlZnJpZ2VyYXRvclxuLS1cbm1tL3Ztc2Nhbi5jLTc2MDEtXHRcdFx0XHRcdFx0YWxsb2Nfb3JkZXIpO1xubW0vdm1zY2FuLmM6NzYwMjpcdFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxubW0vdm1zY2FuLmMtNzYwMy1cdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDcxNwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipJbnRlcm5hbCBNZW1vcnkgTWFuYWdlbWVudCBNdXNpbmdzKioKClJpZ2h0LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBoZXJlLiBMZXQmIzM5O3Mgc2VlLi4uICpiYWxhbmNlX3BnZGF0KiBpcyBkZWZpbml0ZWx5IGEgc3RhdGljIHZhcmlhYmxlLCBhbmQgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gbWFrZSBhIG5vdGUgb2YuIEFsd2F5cyBnb29kIHRvIHJlZnJlc2ggb24gdGhlIGJhc2ljcy4gSSYjMzk7bSB0cnlpbmcgdG8gcmVtZW1iZXIgd2hhdCBjb250ZXh0IHRoYXQgaXMgaW4gYW5kIGhvdyBpdOKAmXMgYmVpbmcgdXNlZC4gTm93LCAqa3N3YXBkX3J1biouLi5obW1tLiBUaGF0JiMzOTtzIGEgZGlmZmVyZW50IGJlYXN0IGVudGlyZWx5LiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIGl0JiMzOTtzIHJlbGF0aW9uIHRvIGJhbGFuY2VfcGdkYXQuIEhvdyBpcyB0aGUga2VybmVsJiMzOTtzIHN3YXBwaW5nIGRhZW1vbiwgYGtzd2FwZF9ydW5gLCBpbnRlcmFjdGluZyB3aXRoIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBpdCYjMzk7cyB1c2luZz8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3N3YXBkX3J1biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaD0zMzg9dm9pZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zMzktXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNDA6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0zNDEtZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9zdG9wKGludCBuaWQpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMS1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIzMjpcdGtzd2FwZF9ydW4obmlkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMy1cdGtjb21wYWN0ZF9ydW4obmlkKTtcbi0tXG5tbS92bXNjYW4uYz03NzAwPXVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxuLS1cbm1tL3Ztc2Nhbi5jLTc3MzItICovXG5tbS92bXNjYW4uYzo3NzMzOnZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTc3MzQte1xuLS1cbm1tL3Ztc2Nhbi5jPTc3OTM9c3RhdGljIGludCBfX2luaXQga3N3YXBkX2luaXQodm9pZClcbi0tXG5tbS92bXNjYW4uYy03Nzk3LVx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKVxubW0vdm1zY2FuLmM6Nzc5ODogXHRcdGtzd2FwZF9ydW4obmlkKTtcbm1tL3Ztc2Nhbi5jLTc3OTktXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcJiMzNDt2bVwmIzM0Oywgdm1zY2FuX3N5c2N0bF90YWJsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMzQwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRoaW5raW5nIFRocm91Z2ggTWVtb3J5IFJlY2xhbWF0aW9uKioKCk9rYXksIHNvIGBrc3dhcGRfcnVuYCwgcmlnaHQ/IEl0JiMzOTtzIGp1c3QgdGhlIGluaXRpYWwgdGhyZWFkIGxhdW5jaCwgc2V0dGluZyB0aGUgd2hvbGUgdGhpbmcgaW4gbW90aW9uLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgZ3VuLgoKQnV0IHdoYXQgYWJvdXQgdGhlIGNvcmUgZnVuY3Rpb24/IGByZWNsYWltX3BhZ2VzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgaGFwcGVucy4gV2hhdCYjMzk7cyBpdCBkb2luZyBhdCBhIGZ1bmN0aW9uYWwgbGV2ZWw/IFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIGludm9sdmVkPyBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoYXQgZnVuY3Rpb24uIFRoYXTigJlzIHdoZXJlIHRoZSBrZXkgcHJvY2Vzc2VzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9wYWdlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9MjU3PXN0YXRpYyB2b2lkIHNneF9yZWNsYWltZXJfd3JpdGUoc3RydWN0IHNneF9lcGNfcGFnZSAqZXBjX3BhZ2UsXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTMwMi0gKi9cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozMDM6c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1fcGFnZXModm9pZClcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0zOTY9dm9pZCBzZ3hfcmVjbGFpbV9kaXJlY3Qodm9pZClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtMzk4LVx0aWYgKHNneF9zaG91bGRfcmVjbGFpbShTR1hfTlJfTE9XX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XHRcdHNneF9yZWNsYWltX3BhZ2VzKCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM9NDAyPXN0YXRpYyBpbnQga3NneGQodm9pZCAqcClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDIxLVx0XHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo0MjI6XHRcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy00MjMtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTU2Nz1zdHJ1Y3Qgc2d4X2VwY19wYWdlICpzZ3hfYWxsb2NfZXBjX3BhZ2Uodm9pZCAqb3duZXIsIGJvb2wgcmVjbGFpbSlcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjU5MTpcdFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy01OTItXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jPTM4Nz1zdGF0aWMgdm9pZCBzbGFfZnJlZShzdHJ1Y3Qgc2xhX2FkZHJfdCBzbGEsIHNpemVfdCBsZW4sIGJvb2wgZmlybXdhcmVfc3RhdGUpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDAzLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM6NDA0Olx0XHRcdFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDUtXHRcdFx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwOC1cdFx0fSBlbHNlIHtcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jOjQwOTpcdFx0XHRyZXQgPSBzbnBfcmVjbGFpbV9wYWdlcyhzbGFfdG9fcGEoc2xhKSwgMSwgZmFsc2UpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDEwLVx0XHR9XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODMtXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4NS17XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0MTg6RVhQT1JUX1NZTUJPTF9HUEwoc25wX3JlY2xhaW1fcGFnZXMpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTktXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDM4LVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjQzOTpcdHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBpLCBsb2NrZWQpO1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz00Nzk9c3RhdGljIHZvaWQgX19zbnBfZnJlZV9maXJtd2FyZV9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyLCBib29sIGxvY2tlZClcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQ4OC1cdGlmIChzZXYtXHUwMDNlc25wX2luaXRpYWxpemVkIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XHQgICAgc25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIG5wYWdlcywgbG9ja2VkKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNDkwLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjEtXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NzIyOlx0aWYgKHNucF9yZWNsYWltX3BhZ2VzKCpkZXNjLVx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy03MjMtXHRcdHByX3dhcm4oXCYjMzQ7RmFpbGVkIHRvIHJlY2xhaW0gZmlybXdhcmUtb3duZWQgcGFnZXMgd2hpbGUgaXNzdWluZyBTRVYgbGVnYWN5IGNvbW1hbmQuXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1Zilcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0Mi1cdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo4NDM6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQ0LVx0XHRcdHJldHVybiAtRUZBVUxUO1xuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMTQ5NC1cdFx0ICogVGhpcyBleGVjdXRlcyB3aXRoIHRoZSBzZXZfY21kX211dGV4IGhlbGQgc28gZG93biB0aGUgc3RhY2tcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MTQ5NTpcdFx0ICogc25wX3JlY2xhaW1fcGFnZXMobG9ja2VkPWZhbHNlKSBtaWdodCBiZSBuZWVkZWQgKHdoaWNoIGlzIGV4dHJlbWVseVxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk2LVx0XHQgKiB1bmxpa2VseSkgYnV0IHdpbGwgY2F1c2UgYSBkZWFkbG9jay5cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcbi0tXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDctXHRcdCAqIFRoZSBzdGF0dXMgcGFnZSB3aWxsIGJlIGluIFJlY2xhaW0gc3RhdGUgb24gc3VjY2Vzcywgb3IgbGVmdFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoyNDA4Olx0XHQgKiBpbiBGaXJtd2FyZSBzdGF0ZSBvbiBmYWlsdXJlLiBVc2Ugc25wX3JlY2xhaW1fcGFnZXMoKSB0b1xuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDA5LVx0XHQgKiB0cmFuc2l0aW9uIGVpdGhlciBjYXNlIGJhY2sgdG8gSHlwZXJ2aXNvci1vd25lZCBzdGF0ZS5cbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMC1cdFx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MTE6XHRcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGRhdGEpLCAxLCB0cnVlKSlcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQxMi1cdFx0XHRyZXR1cm4gLUVGQVVMVDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jPTI4MD12b2lkIG1seDVfcGFnZXNfZGVidWdmc19pbml0KHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXHRkZWJ1Z2ZzX2NyZWF0ZV91MzIoXCYjMzQ7ZndfcGFnZXNfcmVjbGFpbV9kaXNjYXJkXCYjMzQ7LCAwNDAwLCBwYWdlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmM6MjkxOlx0XHRcdCAgIFx1MDAyNmRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jLTI5Mi19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTQ4LVx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9saWIvdG91dC5jOjE0OTpcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fUEFHRVNfTVMsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV92ZnNfcGFnZXNfdG8sIG91dCwgZGV2LCBNTFg1X1RPX1JFQ0xBSU1fVkZTX1BBR0VTX01TLCAwKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01MzctXHRcdFx0ICAgICB1MzIgKmluLCBpbnQgaW5fc2l6ZSwgdTMyICpvdXQsIGludCBvdXRfc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjU3NTpzdGF0aWMgaW50IHJlY2xhaW1fcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldiwgdTE2IGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy01NzYtXHRcdFx0IGludCBucGFnZXMsIGludCAqbmNsYWltZWQsIGJvb2wgZXZlbnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwNi1cdFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjA3Olx0ZXJyID0gcmVjbGFpbV9wYWdlc19jbWQoZGV2LCBpbiwgc2l6ZW9mKGluKSwgb3V0LCBvdXRsZW4pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDktXHRcdG5wYWdlcyA9IE1MWDVfR0VUKG1hbmFnZV9wYWdlc19pbiwgaW4sIGlucHV0X251bV9lbnRyaWVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2MTA6XHRcdGRldi1cdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCAmIzQzOz0gbnBhZ2VzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYxMS1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NjQzPXN0YXRpYyB2b2lkIHBhZ2VzX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTY1MS1cdGVsc2UgaWYgKHJlcS1cdTAwM2VucGFnZXMgXHUwMDNjIDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NjUyOlx0XHRlcnIgPSByZWNsYWltX3BhZ2VzKGRldiwgcmVxLVx1MDAzZWZ1bmNfaWQsIC0xICogcmVxLVx1MDAzZW5wYWdlcywgTlVMTCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTMtXHRcdFx0XHQgICAgdHJ1ZSwgcmVxLVx1MDAzZWVjX2Z1bmN0aW9uKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9ODMwPXN0YXRpYyBpbnQgbWx4NV9yZWNsYWltX3Jvb3RfcGFnZXMoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjg0MjpcdFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIGZ1bmNfdmhjYV9pZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDMtXHRcdFx0XHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ2LVx0XHRcdG1seDVfY29yZV93YXJuKGRldixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XHRcdFx0XHQgICAgICAgXCYjMzQ7cmVjbGFpbV9wYWdlcyBlcnIgKCVkKSBmdW5jX3ZoY2FfaWQ9MHgleCBlY19mdW5jPTB4JXhcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVx0XHRcdFx0ICAgICAgIGVyciwgZnVuY192aGNhX2lkLCBlY19mdW5jdGlvbik7XG4tLVxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvZHJpdmVyLmgtNTg3LVx0dTMyXHRcdFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oOjU4ODpcdHUzMlx0XHRcdHJlY2xhaW1fcGFnZXNfZGlzY2FyZDtcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXHRlbnVtIG1seDVfcGFnZV9tZ3RfbW9kZVx0cGFnZV9tZ3RfbW9kZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaD0zNDU1PXN0cnVjdCBtbHg1X2lmY19kdG9yX3JlZ19iaXRzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg6MzQ3NjpcdHN0cnVjdCBtbHg1X2lmY19kZWZhdWx0X3RpbWVvdXRfYml0cyByZWNsYWltX3BhZ2VzX3RvO1xuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cbi0tXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaD0xMDgxPXZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTA4My12b2lkIHNucF9mcmVlX2Zpcm13YXJlX3BhZ2Uodm9pZCAqYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXG4tLVxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTExOS1cbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTIxLXtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTQzMy1cbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzEtXHRcdGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKGZpbHRlcik7XG5tbS9kYW1vbi9wYWRkci5jOjI3MjpcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS9pbnRlcm5hbC5oPTExOTk9ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgIF9fbXVzdF9jaGVjayB2bV9tbWFwX3Bnb2ZmKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsXG4tLVxubW0vaW50ZXJuYWwuaC0xMjAyLVxubW0vaW50ZXJuYWwuaDoxMjAzOnVuc2lnbmVkIGxvbmcgcmVjbGFpbV9wYWdlcyhzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KTtcbm1tL2ludGVybmFsLmgtMTIwNC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy00NDMtXHRcdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjQ0NDpcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xubW0vbWFkdmlzZS5jLTQ0NS1cdFx0cmV0dXJuIDA7XG4tLVxubW0vbWFkdmlzZS5jLTU2Mi1cdGlmIChwYWdlb3V0KVxubW0vbWFkdmlzZS5jOjU2MzpcdFx0cmVjbGFpbV9wYWdlcyhcdTAwMjZmb2xpb19saXN0KTtcbm1tL21hZHZpc2UuYy01NjQtXHRjb25kX3Jlc2NoZWQoKTtcbi0tXG5tbS92bXNjYW4uYz0yMTgwPXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjE5OS1cdH1cbm1tL3Ztc2Nhbi5jOjIyMDA6XHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYy5ucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQpO1xubW0vdm1zY2FuLmMtMjIwMS1cbi0tXG5tbS92bXNjYW4uYy0yMjA0LVxubW0vdm1zY2FuLmM6MjIwNTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbm1tL3Ztc2Nhbi5jLTIyMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkyMwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgTWVtb3J5IFJlY2xhaW0gQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gbWVtb3J5IHJlY2xhaW0gYW5kIHdhbnQgdG8gaWRlbnRpZnkgc29tZSBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24uIGByZWNsYWltX3BhZ2VzYCBkZWZpbml0ZWx5IGp1bXBzIG91dDsgaXQmIzM5O3Mgbm9uLXN0YXRpYyBhbmQgc2VlbXMgdG8gYmUgYSBjZW50cmFsIGZ1bmN0aW9uLCBjYWxsZWQgYnkgYm90aCBgbWFkdmlzZWAgYW5kIGBkYW1vbmAsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBJdCYjMzk7cyBhIGtleSBwb2ludCB0byBleGFtaW5lLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgc2hyaW5rX2FsbF9tZW1vcnlgIOKAkyBJIHJlbWVtYmVyIHRoYXQmIzM5O3MgYXNzb2NpYXRlZCB3aXRoIGhpYmVybmF0aW9uLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3Qgd2hlcmUgdGhlIGNvcmUsIGZyZXF1ZW50IHJlY2xhaW0gYWN0aXZpdHkgbGllcy4gVGhlIHJlYWwgYWN0aW9uIGlzIHByb2JhYmx5IGVsc2V3aGVyZS4KCkFscmlnaHQsIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIHdhbnQgdG8gaG9uZSBpbiBvbiBhcmUgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQsIG9mIGNvdXJzZSwgYHJlY2xhaW1fcGFnZXNgLiBHb3R0YSBzZWUgaG93IHRob3NlIGFsbCB3b3JrLgoKV2FpdCBhIHNlY29uZOKApiBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGNhbGxlZCBieSBgX19wZXJmb3JtX3JlY2xhaW1gLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBieSBgX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfc2xvd3BhdGhgLiBCaW5nbyEgVGhpcyBpcyB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCwgYW5kIGl0JiMzOTtzIGxvb2tpbmcgaG90LCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgdmVyeSBpbXBvcnRhbnQuIFRoYXQgaXMgYSB2ZXJ5IGRpcmVjdCBwYXRoIHRvIHRoZSByZWNsYWltIHByb2Nlc3MuCgpTbywgaXMgYHJlY2xhaW1fcGFnZXNgIGl0c2VsZiB0aGF0IGhvdD8gQ2hlY2tpbmcgYmFjaywgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtYWR2aXNlKE1BRFZfUEFHRU9VVClgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgaXQgbWVhbnMgdGhpcyBjb3VsZCBiZSBhbiBleGNlbGxlbnQgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgdXNlci1jb250cm9sbGFibGUgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIGl0IGhpZ2ggdmFsdWUuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuLS1cbm1tL2ludGVybmFsLmgtODItXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg0LVx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzcxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODE2Olx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTgxNy1cdFx0XHRcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4MzQ9c3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1MS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODUyOlx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG5tbS9tZW1jb250cm9sLXYxLmMtMTg1My1cdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzczPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlY2xhaW1faGlnaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTIzODgtXHRcdHBzaV9tZW1zdGFsbF9lbnRlcihcdTAwMjZwZmxhZ3MpO1xubW0vbWVtY29udHJvbC5jOjIzODk6XHRcdG5yX3JlY2xhaW1lZCAmIzQzOz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgbnJfcGFnZXMsXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cdFx0XHRcdFx0XHRcdGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNzEyLVx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9tZW1jb250cm9sLmM6MjcxMzpcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxubW0vbWVtY29udHJvbC5jLTI3MTQtXHRcdFx0XHRcdFx0ICAgIGdmcF9tYXNrLCByZWNsYWltX29wdGlvbnMsIE5VTEwpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00ODMyPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbi0tXG5tbS9tZW1jb250cm9sLmMtNDg3My1cbm1tL21lbWNvbnRyb2wuYzo0ODc0Olx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIGhpZ2gsXG5tbS9tZW1jb250cm9sLmMtNDg3NS1cdFx0XHRcdFx0R0ZQX0tFUk5FTCwgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQ4OTE9c3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ5MzItXHRcdGlmIChucl9yZWNsYWltcykge1xubW0vbWVtY29udHJvbC5jOjQ5MzM6XHRcdFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcbm1tL21lbWNvbnRyb2wuYy00OTM0LVx0XHRcdFx0XHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbi0tXG5tbS92bXNjYW4uYz02ODYyPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vdm1zY2FuLmMtNjkwMS1cbm1tL3Ztc2Nhbi5jOjY5MDI6dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL3Ztc2Nhbi5jLTY5MDMtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vdm1zY2FuLmMtNjk0Mi0jZWxzZVxubW0vdm1zY2FuLmM6Njk0Mzp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vdm1zY2FuLmMtNjk0NC1cdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz04MDA1PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDc2LVx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFO1xubW0vdm1zY2FuLmM6ODA3NzpcdFx0XHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxubW0vdm1zY2FuLmMtODA3OC1cdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njk2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBQcmVzc3VyZSBhbmQgUmVjbGFtYXRpb24qKgoKT2theSwgc28gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBseW5jaHBpbiBmb3IgZGVhbGluZyB3aXRoIG1lbW9yeSBwcmVzc3VyZSB3aXRoaW4gY2dyb3VwcywgYW5kIGl0cyBjYWxscyBmcm9tIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCByZWFsbHkgaGlnaGxpZ2h0IHdoZXJlIHRoZSBzeXN0ZW0gaXMgZm9jdXNpbmcgaXRzIHJlY2xhbWF0aW9uIGVmZm9ydHMuIFRoYXQmIzM5O3MgYSBzb2xpZCBpbmRpY2F0b3Igb2Ygd2hlcmUgdG8gZGl2ZSBkZWVwZXIuCgpgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBMZXQgbWUgZHJpbGwgZG93biBvbiB0aGF0IGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzICphY3RpdmVseSogYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeSwgYXMgb3Bwb3NlZCB0byBqdXN0IHJlYWN0aW5nIHRvIGFuIGFic29sdXRlIHRocmVzaG9sZC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbGllLCBhbmQgd2hlcmUgSSBjYW4gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBzdHJhdGVnaWVzIGJlaW5nIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9Njk5PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcbm1tL2ludGVybmFsLmg6NzAwOmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbm1tL2ludGVybmFsLmgtNzAxLVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdCk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwNjc9c3RhdGljIHNzaXplX3QgbWVtb3J5X3JlY2xhaW0oc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLCBjaGFyICpidWYsXG4tLVxubW0vbWVtY29udHJvbC5jLTUwNzItXG5tbS9tZW1jb250cm9sLmM6NTA3MzpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oYnVmLCBtZW1jZywgTlVMTCk7XG5tbS9tZW1jb250cm9sLmMtNTA3NC1cdGlmIChyZXQpXG4tLVxubW0vdm1zY2FuLmM9Nzk5OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtODAwNC1cbm1tL3Ztc2Nhbi5jOjgwMDU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtODAwNi1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODE1OD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MTYzLVxubW0vdm1zY2FuLmM6ODE2NDpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgxNjUtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MzY4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IHJlY2xhaW0gd29ya3MsIHNwZWNpZmljYWxseSBhdCB3aGF0JiMzOTtzIGJlaW5nIGhpZ2hsaWdodGVkIGFzIGtleSBhcmVhcy4gSSBzZWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfcmVjbGFpbWAgd2hpY2ggSSBrbm93IGlzIGEgc3lzZnMvY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQsIGl0JiMzOTtzIGEgc3Ryb25nIGZvY3VzIHN5bWJvbC4KClRoZW4gSSBzZWUgdGhlIGNvcmUgZm9jdXMgcG9pbnRzIGFyZTogYHJlY2xhaW1fcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpIbW0sIGB0cnlfdG9fZnJlZV9wYWdlc2AgZmVlbHMgYSBsaXR0bGUgZ2VuZXJpYywgaXQmIzM5O3MgYnJvYWQuIEJ1dCBgcmVjbGFpbV9wYWdlc2AgYW5kIGVzcGVjaWFsbHkgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFyZSBwcmVjaXNlbHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIC0gdGhleSYjMzk7cmUgcmlnaHQgb24gdGFyZ2V0LiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBjb250cm9sIHBvaW50cy4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZXF1aXJlZCBmb3IgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFuZCBmb3IgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCB0aG91Z2ggYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGdldHMgY2FsbGVkIGJ5IGByZWNsYWltX3N0b3JlYCB3aGljaCBpcyBhdCBhIG5vZGUgbGV2ZWwuIEludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtMjA5LVxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIxMS1cbi0tXG5tbS92bXNjYW4uYz0yNzcwPXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy0yNzczLVxubW0vdm1zY2FuLmM6Mjc3NDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yNzc1LVx0aWYgKG1lbWNnKSB7XG4tLVxubW0vdm1zY2FuLmM9MjkyOD1zdGF0aWMgc3RydWN0IGxydV9nZW5fbW1fbGlzdCAqZ2V0X21tX2xpc3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5MzQtXG5tbS92bXNjYW4uYzoyOTM1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzYtXHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9Mjk2OD12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTI5NzQtXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbHJ1X2dlbi5saXN0KSk7XG5tbS92bXNjYW4uYzoyOTc1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5NzYtXHRWTV9XQVJOX09OX09OQ0UobW0tXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XG4tLVxubW0vdm1zY2FuLmM9Mjk5NT12b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMDMtXG5tbS92bXNjYW4uYzozMDA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMDUtXHRtZW1jZyA9IG1tLVx1MDAzZWxydV9nZW4ubWVtY2c7XG4tLVxubW0vdm1zY2FuLmMtMzAyNy1cbm1tL3Ztc2Nhbi5jOjMwMjg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMzAyOS1cdG1lbV9jZ3JvdXBfcHV0KG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jLTMwMzMtXG5tbS92bXNjYW4uYzozMDM0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTMwMzUtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmM9NDQwOD1zdGF0aWMgdm9pZCBscnVfZ2VuX3JvdGF0ZV9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCBvcClcbi0tXG5tbS92bXNjYW4uYy00NDUzLVxubW0vdm1zY2FuLmM6NDQ1NDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy00NDU1LVxuLS1cbm1tL3Ztc2Nhbi5jPTQ2NDY9dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjY4LVxubW0vdm1zY2FuLmM6NDY2OTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS92bXNjYW4uYy00NjcwLVxuLS1cbm1tL3Ztc2Nhbi5jPTU2NTI9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS92bXNjYW4uYy01NjY1LVxubW0vdm1zY2FuLmM6NTY2NjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01NjY3LVx0XHRpZiAobWVtY2cpXG4tLVxubW0vdm1zY2FuLmM9NTkxOD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5MzctXG5tbS92bXNjYW4uYzo1OTM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTU5MzktXG4tLVxubW0vdm1zY2FuLmM9NTk1MT12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vdm1zY2FuLmMtNTk3Ny1cbm1tL3Ztc2Nhbi5jOjU5Nzg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vdm1zY2FuLmMtNTk3OS1cbi0tXG5tbS92bXNjYW4uYz02ODE2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTY4NTgtXG5tbS92bXNjYW4uYzo2ODU5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTY4NjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTg1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCB3aXRoIENPTkZJR19NRU1DRyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aGVyZSBgQ09ORklHX01FTUNHYCBpcyBoZWF2aWx5IGludm9sdmVkLCB3aGljaCBpcyBxdWl0ZSBhIGJpdCBpbiBgbW0vdm1zY2FuLmNgLiBHaXZlbiB0aGF0LCBteSBFbmFibGVDb25maWdzIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYW5kIGBNRU1DR2AuCgpJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGByZWNsYWltX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGFzIG15IGZvY3VzIHN5bWJvbHMuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhlc2UgYXJlbiYjMzk7dCBzdGF0aWM7IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeSB0aGVzZSB0aGluZ3MuIEFscmlnaHQsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBub24tc3RhdGljIGFzIGV4cGVjdGVkLCBhbmQgaXQmIzM5O3MgZGVmaW5lZCByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUuIFNhbWUgZ29lcyBmb3IgYHJlY2xhaW1fcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEdvb2QuCgpOb3csIHRoaXMgcGF0Y2ggdG91Y2hlcyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGltZSB0byB0cmFjZSB0aGVzZSB0aHJvdWdoIHRoZSBjYWxsIGdyYXBocy4gSXQgbG9va3MgbGlrZSBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xpc3RgIHdoaWNoIGlzIGNhbGxlZCBieSBgc2hyaW5rX2xydXZlY2AsIHdoaWNoIGlzIGNhbGxlZCBieSBgc2hyaW5rX25vZGVgLiBgc2hyaW5rX25vZGVgIGlzIHRoZSBpbXBvcnRhbnQgb25lIGJlY2F1c2UgaXQgaXMgY2FsbGVkIGJ5IGBkb190cnlfdG9fZnJlZV9wYWdlc2AsIHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gYHNocmlua19ub2RlYCBpcyBhbHNvIGNhbGxlZCBieSBrc3dhcGQgKHZpYSBgYmFsYW5jZV9wZ2RhdGApIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpPbiB0aGUgYGV2aWN0X2ZvbGlvc2Agc2lkZSwgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBUaGUgZm9ybWVyJiMzOTtzIGNhbGwgY2hhaW4gaXMgYGxydV9nZW5fc2hyaW5rX2xydXZlY2AgLSZndDsgYGxydV9nZW5fc2hyaW5rX25vZGVgIC0mZ3Q7IGBzaHJpbmtfbm9kZWAuIFRoZSBsYXR0ZXIgaXMgZGlyZWN0bHkgY2FsbGVkIGJ5IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4KClNvLCBiYXNlZCBvbiB0aGVzZSBjYWxsIGNoYWlucywgaXQgc2VlbXMgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhcmUgZXhjZWxsZW50IGZvY3VzIHN5bWJvbHMgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIHBhdGNoLgoKSSBzaG91bGQgYWxzbyBjaGVjayBpZiBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBvciBgZXZpY3RfZm9saW9zYC4gTGV0JiMzOTtzIHNlZS4uLiBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIFdhaXQgYSBtaW51dGUsIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgKm5vdCogdGhlIHNhbWUgYXMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gUmlnaHQsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXNvbGF0ZXMgcGFnZXMgZnJvbSB0aGUgaW5hY3RpdmUgTFJVIGxpc3QgYW5kICp0aGVuKiBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBgcmVjbGFpbV9wYWdlc2Agd29ya3Mgd2l0aCBwYWdlcyB0aGF0IGFyZSBhbHJlYWR5IGlzb2xhdGVkLiBTbyBubywgYHJlY2xhaW1fcGFnZXNgIGRvZXMgKm5vdCogZGlyZWN0bHkgY2FsbCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIG9yIGBldmljdF9mb2xpb3NgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY2xhaW1fZm9saW9fbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIwOTE9c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMTc5LVxubW0vdm1zY2FuLmM6MjE4MDpzdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxubW0vdm1zY2FuLmMtMjE4MS1cdFx0XHRcdCAgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9MjIwNT11bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbi0tXG5tbS92bXNjYW4uYy0yMjI2LVxubW0vdm1zY2FuLmM6MjIyNzpcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltX2ZvbGlvX2xpc3QoXHUwMDI2bm9kZV9mb2xpb19saXN0LCBOT0RFX0RBVEEobmlkKSk7XG5tbS92bXNjYW4uYy0yMjI4LVx0XHRuaWQgPSBmb2xpb19uaWQobHJ1X3RvX2ZvbGlvKGZvbGlvX2xpc3QpKTtcbi0tXG5tbS92bXNjYW4uYy0yMjMwLVxubW0vdm1zY2FuLmM6MjIzMTpcdG5yX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbV9mb2xpb19saXN0KFx1MDAyNm5vZGVfZm9saW9fbGlzdCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtMjIzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE3MDYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2xhaW0gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHJlY2xhaW0gcHJvY2Vzcy4gUmlnaHQsIHNvIGByZWNsYWltX3BhZ2VzYCDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBtYWluIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBkb2luZy4gSXQmIzM5O3MgY2xlYXIgdGhhdCBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNocmlua19mb2xpb19saXN0YC4gVGhhdCYjMzk7cyB0aGUgY2hhaW4gb2YgY2FsbHMgSSBuZWVkIHRvIGZvY3VzIG9uLiBCdXQsIGFuZCB0aGlzIGlzIGltcG9ydGFudCwgaXQgKmRvZXNuJiMzOTt0KiBjYWxsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgb3IgYGV2aWN0X2ZvbGlvc2AuIFRoaXMgbWVhbnMgdGhhdCBgcmVjbGFpbV9wYWdlc2Agb24gaXRzIG93biBpc24mIzM5O3QgdGhlIGJlc3QgcGxhY2UgdG8gbWFrZSBhbiBvYnNlcnZhdGlvbiBvbiB0aGUgd2hvbGUgcHJvY2Vzcy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuCgpJIG5lZWQgdG8gZXhwYW5kIG15IHNlYXJjaC4gT2theSwgc28gd2hhdCBpcyBhIGJldHRlciBvcHRpb24sIG1heWJlIGEgaGlnaGVyIGxldmVsIGZ1bmN0aW9uLCB0aGF0IGlzIGF3YXJlIG9mIG1vcmUgb2YgdGhlIGNhbGwgcGF0aHM/IFdoYXQgYWJvdXQgYHNocmlua19hbGxfbWVtb3J5YD8gTGV0IG1lIHNlZSB3aGF0IHRoYXQgZW50YWlscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2ODY9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc2OTktICovXG5tbS92bXNjYW4uYzo3NzAwOnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxubW0vdm1zY2FuLmMtNzcwMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTI4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgZm9jdXNpbmcgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWVtb3J5IHNocmlua2luZzoKCioqTWVtb3J5IFNocmlua2luZyBBbmFseXNpcyoqCgpPa2F5LCBzbyBgc2hyaW5rX2FsbF9tZW1vcnlgIGlzIHRoZSB0b3AtbGV2ZWwgZnVuY3Rpb24gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhlcmUuIFRoYXQgY2FsbCBjaGFpbiAtIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbGluZyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCB3aGljaCB0aGVuIGNhbGxzIGBzaHJpbmtfem9uZXNgLCBhbmQgZmluYWxseSBkb3duIHRvIGBzaHJpbmtfbm9kZWAgLSB0ZWxscyBtZSB0aGUgaGlnaC1sZXZlbCBmbG93LiBgc2hyaW5rX2FsbF9tZW1vcnlgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbjsgaXQmIzM5O3MgdGhlIGluaXRpYXRpbmcgc3ltYm9sIGZvciBtZW1vcnkgcmVjbGFtYXRpb24uCgpOb3csIGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGNvbWVzIHRvIG1pbmQsIGdpdmVuIGl0cyByb2xlIGFzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50LiBJdCYjMzk7cyBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBob3RzcG90LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGlzIGNydWNpYWwuIEhvd2V2ZXIsIHNpbmNlIGl0JiMzOTtzIHRoZSBtYWluIGVudHJ5LCBpdCBtYXkgbm90IGJlIHdoZXJlIHRoZSBtb3N0IGludGVyZXN0aW5nIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGxpZS4gSSBuZWVkIHRvIGxvb2sgYmV5b25kIHRoYXQgb2J2aW91cyBzdGFydGluZyBwb2ludC4gSXMgdGhlcmUgYSBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IEFoLCBoZXJlJiMzOTtzIG9uZTogYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZTsgaXQgbGlrZWx5IHRvdWNoZXMgdGhlIG1lbW9yeSBjZ3JvdXAgYXNwZWN0LiBJIHdhbnQgdG8gY2hlY2sgaXRzIGZ1bmN0aW9uIGluIG1lbW9yeSBzaHJpbmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL2ludGVybmFsLmgtODctXHRcdFx0XHRcdCAgIGludCAqc3dhcHBpbmVzcyk7XG5tbS9pbnRlcm5hbC5oOjg4OnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9pbnRlcm5hbC5oLTg5LVx0XHRcdFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTI3Mj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0zMTEtXHRcdH1cbm1tL21lbWNvbnRyb2wtdjEuYzozMTI6XHRcdHRvdGFsICYjNDM7PSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxubW0vbWVtY29udHJvbC12MS5jLTMxMy1cdFx0XHRcdFx0cGdkYXQsIFx1MDAyNm5yX3NjYW5uZWQpO1xuLS1cbm1tL3Ztc2Nhbi5jPTY4MTY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjg2MS0vKiBPbmx5IHVzZWQgYnkgc29mdCBsaW1pdCByZWNsYWltLiBEbyBub3QgcmV1c2UgZm9yIGFueXRoaW5nIGVsc2UuICovXG5tbS92bXNjYW4uYzo2ODYyOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS92bXNjYW4uYy02ODYzLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI4ODAKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogMzM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIG1lbW9yeSByZWNsYWltIHBhdGNoLCBhbmQgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdhdGhlcmVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZpbmQgYSBnb29kIGZvY3VzIHN5bWJvbCwgYW5kIGl0IGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCYjMzk7cyBvbmx5IHVzZWQgZHVyaW5nIHNvZnQgbGltaXQgcmVjbGFpbSBhbmQgY2FsbHMgYHNocmlua19ub2RlYC4gVGhhdCwgYW5kIHRoZSBvdGhlciBmb2N1cyBzeW1ib2xzLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgYW5kIGBzaHJpbmtfYWxsX21lbW9yeWAsIGxvb2sgcHJvbWlzaW5nLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgbW9kaWZ5aW5nIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgLCBhbmQgdGhhdCYjMzk7cyBjYWxsZWQgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBUaGUgY29yZSBpZGVhIGlzIHRvIHRocm90dGxlIHJlY2xhaW0gaWYgd2UmIzM5O3JlIGFjY3VtdWxhdGluZyB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuIEl0IHNlZW1zIGxpa2UgaWYgaXQmIzM5O3Mgbm90IG1ha2luZyBwcm9ncmVzcywgaXQgYmFpbHMgb3V0LCBhbmQgaW1wb3J0YW50bHksIGl0IHNldHMgYCpmYXRhbGAgaWYgdGhlIGN1cnJlbnQgdGFzayBoYXMgYSBmYXRhbCBzaWduYWwgcGVuZGluZy4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIGJpdDogaWYgYCpmYXRhbGAgaXMgdHJ1ZSwgYHNocmlua19pbmFjdGl2ZV9saXN0YCByZXR1cm5zIGBTV0FQX0NMVVNURVJfTUFYYC4gQW5kIGlmIGAqZmF0YWxgIGlzIHRydWUsIGBldmljdF9mb2xpb3NgIGFkZHMgYFNXQVBfQ0xVU1RFUl9NQVhgIHRvIGBzYy0mZ3Q7bnJfcmVjbGFpbWVkYCBhbmQgcmV0dXJucyAwLiBJIHN1c3BlY3QgdGhpcyBpcyBhIGZpeCB0byBwcmV2ZW50IGEgaGFuZyBvciBsb29wIGNvbmRpdGlvbiB3aGVyZSBhIHRhc2sgZ2V0cyBraWxsZWQgKHNheSwgYnkgdGhlIE9PTSBraWxsZXIpIGJ1dCBlbmRzIHVwIHN0dWNrIGluIHJlY2xhaW0gYmVjYXVzZSBvZiB0aG9zZSBwZXNreSBpc29sYXRlZCBmb2xpb3MuCgpUaGVyZWZvcmUsIGZ1enppbmcgdGhpcyBlZmZlY3RpdmVseSByZXF1aXJlcyB0cmlnZ2VyaW5nIHBhZ2UgcmVjbGFpbSDigJMgd2hpY2ggYWxsIHRoZSBmb2N1cyBzeW1ib2xzIHdpbGwgZG8g4oCTIGFuZCBlbnN1cmluZyB0aGF0IHdlIGNhbiBhbHNvIGtpbGwgdGFza3MsIHdoaWNoIFN5emthbGxlciwgdGhhbmtmdWxseSwgaGFuZGxlcyBuYXR1cmFsbHkuCgpUaGUga2V5IGNvbmZpZ3MgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYC4KCkkmIzM5O2xsIHVzZSBzZXQtcmVzdWx0cyB0byByZXR1cm4gbXkgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWxsX21lbW9yeSYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX3Nocmlua19ub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgICAmIzM0O3Nocmlua19hbGxfbWVtb3J5JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfc2hyaW5rX25vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgdG8gcHJldmVudCB0YXNrcyBmcm9tIGxvb3BpbmcgaW5kZWZpbml0ZWx5IG9uIHVuZXZpY3RhYmxlIGZvbGlvcyB3aGVuIHRoZXkgcmVjZWl2ZSBhIGZhdGFsIHNpZ25hbC4gSXQgdXBkYXRlcyBib3RoIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gKGBldmljdF9mb2xpb3NgKS4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBwYWdlIHJlY2xhaW0sIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1jZyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0sIHdpdGggTUdMUlUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToxOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGJlZm9yZSBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGVuc3VyaW5nIGl0IGlzIG5ldmVyIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDMwMDhlNzk2NmI4YWZhNjY1MTE2NDVjYjExMDAwYzJjNjE3OTMxMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDE1OjE1OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTgxOSw3ICYjNDM7MTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbykKICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0bwogICogdW5uZWNlc3Nhcnkgc3dhcHBpbmcsIHRocmFzaGluZyBhbmQgT09NLgogICovCi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSwKJiM0MztzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCiAJCXN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXVuc2lnbmVkIGxvbmcgaW5hY3RpdmUsIGlzb2xhdGVkOwpAQCAtMTg1Niw2ICYjNDM7MTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSwKIAlyZXR1cm4gdG9vX21hbnk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFRocm90dGxlIHJlY2xhaW0gaWYgdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zIGFyZSBwaWxpbmcgdXAuIElmIHRoaXMgbWFrZXMKJiM0MzsgKiBubyBwcm9ncmVzcywgdGhlIGNhbGxlciBpcyBwcm9iYWJseSBsb29waW5nIG9uIHVuZXZpY3RhYmxlIGZvbGlvcywgc28gZ2l2ZQomIzQzOyAqIHVwLiBSZXR1cm5zIHRydWUgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsCiYjNDM7ICogaWYgdGhlIHRhc2sgcmVjZWl2ZWQgYSBmYXRhbCBzaWduYWwgd2hpbGUgd2FpdGluZywgc28gdGhhdCB0aGUgY2FsbGVyIGNhbgomIzQzOyAqIGJhaWwgb3V0IGZhc3Rlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCB0aHJvdHRsZV9pc190aHJvdHRsZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLAomIzQzOwkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbCkKJiM0Mzt7CiYjNDM7CWJvb2wgc3RhbGxlZCA9IGZhbHNlOwomIzQzOwomIzQzOwkqZmF0YWwgPSBmYWxzZTsKJiM0MzsJd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7CiYjNDM7CQlpZiAoc3RhbGxlZCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MzsJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCiYjNDM7CQlzdGFsbGVkID0gdHJ1ZTsKJiM0MzsJCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CiYjNDM7CQkvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovCiYjNDM7CQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKJiM0MzsJCQkqZmF0YWwgPSB0cnVlOwomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC4KICAqCkBAIC0xOTkyLDE5ICYjNDM7MjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwotCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwotCi0Jd2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7Ci0JCWlmIChzdGFsbGVkKQotCQkJcmV0dXJuIDA7Ci0KLQkJLyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi8KLQkJc3RhbGxlZCA9IHRydWU7Ci0JCXJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7CiYjNDM7CWJvb2wgZmF0YWw7CiAKJiM0MzsJaWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CiAJCS8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi8KLQkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQomIzQzOwkJaWYgKGZhdGFsKQogCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CiYjNDM7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlscnVfYWRkX2RyYWluKCk7CkBAIC00ODc3LDEyICYjNDM7NDkwMywzMyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7Ci0JaW50IHNjYW5uZWQsIHJlY2xhaW1lZDsKJiM0MzsJaW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDsKIAlpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX3JlY2xhaW1lZCA9IDA7CiAJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwomIzQzOwlib29sIGZhdGFsOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBhbmQKJiM0MzsJICogaXNvbGF0ZV9mb2xpb3MoKSBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciB0eXBlLiBUaHJvdHRsZSBpZgomIzQzOwkgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy4KJiM0MzsJICovCiYjNDM7CWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKJiM0MzsJCWlmICh0aHJvdHRsZV9pc190aHJvdHRsZWQocGdkYXQsIGksIHNjLCAmYW1wO2ZhdGFsKSkgewomIzQzOwkJCS8qCiYjNDM7CQkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZQomIzQzOwkJCSAqIGxlZ2FjeSBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc28KJiM0MzsJCQkgKiByZWNsYWltIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFjawomIzQzOwkJCSAqIGludG8gdGhlIHRocm90dGxlLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChmYXRhbCkKJiM0MzsJCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKJiM0MzsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsJfQogCiAJbHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7CiAKQEAgLTQ4OTIsNiAmIzQzOzQ5MzksOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcywKIAkJCQkgJmFtcDtsaXN0LCAmYW1wO2lzb2xhdGVkLCAmYW1wO3R5cGUsICZhbXA7dHlwZV9zY2FubmVkKTsKIAlucl9pc29sYXRlZCA9IGlzb2xhdGVkOwomIzQzOwlpZiAobnJfaXNvbGF0ZWQpCiYjNDM7CQlfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZSwKJiM0MzsJCQkJICAgICAgbnJfaXNvbGF0ZWQpOwogCiAJLyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi8KIAlpZiAoc2Nhbm5lZCkKQEAgLTQ5NTQsNiAmIzQzOzUwMDQsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJZ290byByZXRyeTsKIAl9CiAKJiM0MzsJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyB0eXBlLCAtbnJfaXNvbGF0ZWQpOwomIzQzOwogCWlmIChucl9pc29sYXRlZCAmZ3Q7IHRvdGFsX3JlY2xhaW1lZCkKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgdHlwZSwKIAkJCQkgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiA3NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBJbml0aWFsaXphdGlvbiBpbiBhIFJlY2xhaW0gVGhyb3R0bGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyByZWZhY3RvcmluZyB0aGUgdGhyb3R0bGluZyBsb2dpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgcHVsbGluZyB0aGUgdGhyb3R0bGluZyBiZWhhdmlvciBvdXQgb2YgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgaW50byBhIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIFRoZSBnb2FsIGlzIHRvIHVzZSB0aGlzIG5ldyBmdW5jdGlvbiBpbiBgZXZpY3RfZm9saW9zYCB0byB0aHJvdHRsZSByZWNsYWltIHdoZW4gdG9vIG1hbnkgaXNvbGF0ZWQgZm9saW9zIGFyZSBidWlsZGluZyB1cCwgYW5kIHRvIHVwZGF0ZSBub2RlIHBhZ2Ugc3RhdGUgYE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgdHlwZWAgYXMgd2VsbC4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sIGZhdGFsO2AgdmFyaWFibGUgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhpcyB2YXJpYWJsZSBpcyB0aGVuIHBhc3NlZCB0byBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgZnVuY3Rpb246CgpgYGBjCnN0YXRpYyBib29sIHRocm90dGxlX2lzX3Rocm90dGxlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsCgkJCQkgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbCkKewoJYm9vbCBzdGFsbGVkID0gZmFsc2U7CgoJKmZhdGFsID0gZmFsc2U7Cgl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKCQlpZiAoc3RhbGxlZCkKCQkJcmV0dXJuIHRydWU7CgoJCS8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovCgkJc3RhbGxlZCA9IHRydWU7CgkJcmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTsKCgkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwoJCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewoJCQkqZmF0YWwgPSB0cnVlOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9CmBgYAoKT2theSwgc28gcmlnaHQgYXQgdGhlIHN0YXJ0LCBgKmZhdGFsYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHRvIGBmYWxzZWAgKmluc2lkZSogYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIFRoYXQmIzM5O3MgZ29vZC4gTm8gY2hhbmNlIG9mIHVzaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgdGhlcmUuCgpCdXQgd2FpdCwgd2hhdCBpZiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYCAqcmV0dXJucyogZmFsc2U/IExldCYjMzk7cyBjaGVjayB3aGVyZSBpdCYjMzk7cyBjYWxsZWQ6CgpJbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgOgoKYGBgYwoJaWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgZmlsZSwgc2MsICZhbXA7ZmF0YWwpKSB7CgkJLyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqLwoJCWlmIChmYXRhbCkKCQkJcmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7CgoJCXJldHVybiAwOwoJfQpgYGAKCklmIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIHJldHVybnMgZmFsc2UsIHRoZSBjb2RlIHNpbXBseSByZXR1cm5zIDAgKndpdGhvdXQqIHVzaW5nIGBmYXRhbGAuIFNlZW1zIGZpbmUuCgpJbiBgZXZpY3RfZm9saW9zYDoKCmBgYGMKCWZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHsKCQlpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgJmFtcDtmYXRhbCkpIHsKCQkJLyoKCQkJICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZQoJCQkgKiBsZWdhY3kgcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvCgkJCSAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrCgkJCSAqIGludG8gdGhlIHRocm90dGxlLgoJCQkgKi8KCQkJaWYgKGZhdGFsKQoJCQkJc2MtJmd0O25yX3JlY2xhaW1lZCAmIzQzOz0gU1dBUF9DTFVTVEVSX01BWDsKCgkJCXJldHVybiAwOwoJCX0KCX0KYGBgCgpBZ2FpbiwgaWYgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgcmV0dXJucyBmYWxzZSwgYGZhdGFsYCBpcyAqbm90KiB1c2VkLiBJdCYjMzk7cyBvbmx5IHVzZWQgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBgZmF0YWxgIGlzIGd1YXJhbnRlZWQgdG8gYmUgaW5pdGlhbGl6ZWQgKGVpdGhlciB0byBgZmFsc2VgIGR1cmluZyB0aGUgYHdoaWxlYCBsb29wLCBvciBwb3NzaWJseSBzZXQgdG8gYHRydWVgIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcpLgoKU28sIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBjb2RlIHBhdGhzLCBJIGFtIHByZXR0eSBjb25maWRlbnQuIFRoaXMgaXMganVzdCBhIGxvZ2ljIGNoYW5nZSB3aXRoaW4gdGhlIHBhZ2UgcmVjbGFpbSwgbm8gbmV3IHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBhbmQgc2VudCB0byB1c2Vyc3BhY2UsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyB3b3JrZWQgd2l0aC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGFwcGFyZW50IGhlcmUuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxNToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIHRocm90dGxpbmcgbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyBhIG5ldyBoZWxwZXIgZnVuY3Rpb24gYHRocm90dGxlX2lzX3Rocm90dGxlZGAuIEl0IHVzZXMgYSBsb2NhbCBib29sZWFuIHZhcmlhYmxlIGBmYXRhbGAgcGFzc2VkIGJ5IHJlZmVyZW5jZSB0byB0cmFjayBpZiBhIGZhdGFsIHNpZ25hbCBpcyBwZW5kaW5nLiBUaGUgdmFyaWFibGUgYGZhdGFsYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGJlZm9yZSBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGVuc3VyaW5nIGl0IGlzIG5ldmVyIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGNhdXNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNToxMC42MTQ0MTM1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MzE3NTg3OTMyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjEwLjYxNDQyMDkzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDQyNDM4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMzAwOGU3OTY2YjhhZmE2NjUxMTY0NWNiMTEwMDBjMmM2MTc5MzEwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDE1OjE1OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cXG4gICogdW5uZWNlc3Nhcnkgc3dhcHBpbmcsIHRocmFzaGluZyBhbmQgT09NLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXFxuK3N0YXRpYyBib29sIHRvb19tYW55X2lzb2xhdGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4gXFx0XFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBpbmFjdGl2ZSwgaXNvbGF0ZWQ7XFxuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcXG4gXFx0cmV0dXJuIHRvb19tYW55O1xcbiB9XFxuIFxcbisvKlxcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXFxuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXFxuKyAqIHVwLiBSZXR1cm5zIHRydWUgdG8gdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgcmVjbGFpbWluZywgYW5kIHNldHMgQGZhdGFsXFxuKyAqIGlmIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW5cXG4rICogYmFpbCBvdXQgZmFzdGVyLlxcbisgKi9cXG4rc3RhdGljIGJvb2wgdGhyb3R0bGVfaXNfdGhyb3R0bGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXFxuK3tcXG4rXFx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XFxuK1xcbitcXHQqZmF0YWwgPSBmYWxzZTtcXG4rXFx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XFxuK1xcdFxcdGlmIChzdGFsbGVkKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdFxcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXFxuK1xcdFxcdHN0YWxsZWQgPSB0cnVlO1xcbitcXHRcXHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xcbitcXG4rXFx0XFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xcbitcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4rXFx0XFx0XFx0KmZhdGFsID0gdHJ1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxcbiAgKlxcbkBAIC0xOTkyLDE5ICsyMDIzLDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4gXFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcXG4gXFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuLVxcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbi1cXG4tXFx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XFxuLVxcdFxcdGlmIChzdGFsbGVkKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFxuLVxcdFxcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXFxuLVxcdFxcdHN0YWxsZWQgPSB0cnVlO1xcbi1cXHRcXHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xcbitcXHRib29sIGZhdGFsO1xcbiBcXG4rXFx0aWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgZmlsZSwgc2MsIFxcdTAwMjZmYXRhbCkpIHtcXG4gXFx0XFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xcbi1cXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuK1xcdFxcdGlmIChmYXRhbClcXG4gXFx0XFx0XFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XFxuK1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0bHJ1X2FkZF9kcmFpbigpO1xcbkBAIC00ODc3LDEyICs0OTAzLDMzIEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4gXFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcXG4tXFx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4rXFx0aW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDtcXG4gXFx0aW50IGlzb2xhdGVkID0gMCwgbnJfaXNvbGF0ZWQgPSAwLCB0eXBlLCB0eXBlX3NjYW5uZWQ7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcXG4gXFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGxydXZlY19tZW1jZyhscnV2ZWMpO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuK1xcdGJvb2wgZmF0YWw7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgdHlwZSB0byBpc29sYXRlIGlzIHVua25vd24gdW50aWwgaXNvbGF0aW9uLCBhbmRcXG4rXFx0ICogaXNvbGF0ZV9mb2xpb3MoKSBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciB0eXBlLiBUaHJvdHRsZSBpZlxcbitcXHQgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy5cXG4rXFx0ICovXFxuK1xcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcXG4rXFx0XFx0aWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgaSwgc2MsIFxcdTAwMjZmYXRhbCkpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZVxcbitcXHRcXHRcXHQgKiBsZWdhY3kgcGF0aCwgcHJldGVuZCBzb21lIHBhZ2VzIHdlcmUgcmVjbGFpbWVkIHNvXFxuK1xcdFxcdFxcdCAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrXFxuK1xcdFxcdFxcdCAqIGludG8gdGhlIHRocm90dGxlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGZhdGFsKVxcbitcXHRcXHRcXHRcXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IFNXQVBfQ0xVU1RFUl9NQVg7XFxuK1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcbiBcXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcXG4gXFxuQEAgLTQ4OTIsNiArNDkzOSw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbiBcXHRzY2FubmVkID0gaXNvbGF0ZV9mb2xpb3MobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyxcXG4gXFx0XFx0XFx0XFx0IFxcdTAwMjZsaXN0LCBcXHUwMDI2aXNvbGF0ZWQsIFxcdTAwMjZ0eXBlLCBcXHUwMDI2dHlwZV9zY2FubmVkKTtcXG4gXFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG4rXFx0aWYgKG5yX2lzb2xhdGVkKVxcbitcXHRcXHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICBucl9pc29sYXRlZCk7XFxuIFxcbiBcXHQvKiBTY2FubmluZyBtYXkgaGF2ZSBlbXB0aWVkIHRoZSBvbGRlc3QgZ2VuLCBmbHVzaCBpdCAqL1xcbiBcXHRpZiAoc2Nhbm5lZClcXG5AQCAtNDk1NCw2ICs1MDA0LDggQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdFxcdGdvdG8gcmV0cnk7XFxuIFxcdH1cXG4gXFxuK1xcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xcbitcXG4gXFx0aWYgKG5yX2lzb2xhdGVkIFxcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxcbiBcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjExLjE1OTU4NDgyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI3NjI0MTcxMTUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc1wiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiLFxuICAgIFwic2hyaW5rX2FsbF9tZW1vcnlcIixcbiAgICBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBwYWdlIHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCB0byBwcmV2ZW50IHRhc2tzIGZyb20gbG9vcGluZyBpbmRlZmluaXRlbHkgb24gdW5ldmljdGFibGUgZm9saW9zIHdoZW4gdGhleSByZWNlaXZlIGEgZmF0YWwgc2lnbmFsLiBJdCB1cGRhdGVzIGJvdGggdGhlIGxlZ2FjeSBMUlUgcmVjbGFpbSAoYHNocmlua19pbmFjdGl2ZV9saXN0YCkgYW5kIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgcmVjbGFpbSAoYGV2aWN0X2ZvbGlvc2ApLiBUaGVzZSBhcmUgaGlnaGx5IHJlYWNoYWJsZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHBhdGhzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBlbnRyeSBwb2ludHMgdGhhdCB0cmlnZ2VyIHBhZ2UgcmVjbGFpbSwgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIG1lbWNnIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSwgd2l0aCBNR0xSVSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkMzAwOGU3OTY2YjhhZmE2NjUxMTY0NWNiMTEwMDBjMmM2MTc5MzEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTggMTU6MTU6MDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li42ZmU4ODI0NDMwYWNiIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgYm9vbCBmb2xpb19pc29sYXRlX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuICAqIHRoZSBMUlUgbGlzdCB3aWxsIGdvIHNtYWxsIGFuZCBiZSBzY2FubmVkIGZhc3RlciB0aGFuIG5lY2Vzc2FyeSwgbGVhZGluZyB0b1xuICAqIHVubmVjZXNzYXJ5IHN3YXBwaW5nLCB0aHJhc2hpbmcgYW5kIE9PTS5cbiAgKi9cbi1zdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbitzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4gXHRcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgaW5hY3RpdmUsIGlzb2xhdGVkO1xuQEAgLTE4NTYsNiArMTg1NiwzNyBAQCBzdGF0aWMgYm9vbCB0b29fbWFueV9pc29sYXRlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBpbnQgZmlsZSxcbiBcdHJldHVybiB0b29fbWFueTtcbiB9XG4gXG4rLypcbisgKiBUaHJvdHRsZSByZWNsYWltIGlmIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcyBhcmUgcGlsaW5nIHVwLiBJZiB0aGlzIG1ha2VzXG4rICogbm8gcHJvZ3Jlc3MsIHRoZSBjYWxsZXIgaXMgcHJvYmFibHkgbG9vcGluZyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MsIHNvIGdpdmVcbisgKiB1cC4gUmV0dXJucyB0cnVlIHRvIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIHJlY2xhaW1pbmcsIGFuZCBzZXRzIEBmYXRhbFxuKyAqIGlmIHRoZSB0YXNrIHJlY2VpdmVkIGEgZmF0YWwgc2lnbmFsIHdoaWxlIHdhaXRpbmcsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW5cbisgKiBiYWlsIG91dCBmYXN0ZXIuXG4rICovXG4rc3RhdGljIGJvb2wgdGhyb3R0bGVfaXNfdGhyb3R0bGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcbitcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGJvb2wgKmZhdGFsKVxuK3tcbitcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1xuK1x0KmZhdGFsID0gZmFsc2U7XG4rXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbitcdFx0aWYgKHN0YWxsZWQpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4rXHRcdHN0YWxsZWQgPSB0cnVlO1xuK1x0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1xuK1x0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG4rXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuK1x0XHRcdCpmYXRhbCA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gLypcbiAgKiBtb3ZlX2ZvbGlvc190b19scnUoKSBtb3ZlcyBmb2xpb3MgZnJvbSBwcml2YXRlIEBsaXN0IHRvIGFwcHJvcHJpYXRlIExSVSBsaXN0LlxuICAqXG5AQCAtMTk5MiwxOSArMjAyMywxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuLVx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4tXG4tXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbi1cdFx0aWYgKHN0YWxsZWQpXG4tXHRcdFx0cmV0dXJuIDA7XG4tXG4tXHRcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXG4tXHRcdHN0YWxsZWQgPSB0cnVlO1xuLVx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuK1x0Ym9vbCBmYXRhbDtcbiBcbitcdGlmICh0aHJvdHRsZV9pc190aHJvdHRsZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcbiBcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuLVx0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4rXHRcdGlmIChmYXRhbClcbiBcdFx0XHRyZXR1cm4gU1dBUF9DTFVTVEVSX01BWDtcbitcbitcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRscnVfYWRkX2RyYWluKCk7XG5AQCAtNDg3NywxMiArNDkwMywzMyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG4tXHRpbnQgc2Nhbm5lZCwgcmVjbGFpbWVkO1xuK1x0aW50IGksIHNjYW5uZWQsIHJlY2xhaW1lZDtcbiBcdGludCBpc29sYXRlZCA9IDAsIG5yX2lzb2xhdGVkID0gMCwgdHlwZSwgdHlwZV9zY2FubmVkO1xuIFx0dW5zaWduZWQgbG9uZyB0b3RhbF9yZWNsYWltZWQgPSAwO1xuIFx0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbitcdGJvb2wgZmF0YWw7XG4rXG4rXHQvKlxuK1x0ICogVGhlIHR5cGUgdG8gaXNvbGF0ZSBpcyB1bmtub3duIHVudGlsIGlzb2xhdGlvbiwgYW5kXG4rXHQgKiBpc29sYXRlX2ZvbGlvcygpIG1heSBmYWxsIGJhY2sgdG8gdGhlIG90aGVyIHR5cGUuIFRocm90dGxlIGlmXG4rXHQgKiBhbnkgZXZpY3RhYmxlIHR5cGUgaGFzIHRvbyBtYW55IGlzb2xhdGVkIGZvbGlvcy5cbitcdCAqL1xuK1x0Zm9yX2VhY2hfZXZpY3RhYmxlX3R5cGUoaSwgc3dhcHBpbmVzcykge1xuK1x0XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIExpa2UgdGhlXG4rXHRcdFx0ICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzb1xuK1x0XHRcdCAqIHJlY2xhaW0gdW53aW5kcyBxdWlja2x5IGluc3RlYWQgb2YgbG9vcGluZyBiYWNrXG4rXHRcdFx0ICogaW50byB0aGUgdGhyb3R0bGUuXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGZhdGFsKVxuK1x0XHRcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICs9IFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdH1cbiBcbiBcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuIFxuQEAgLTQ4OTIsNiArNDkzOSw5IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0c2Nhbm5lZCA9IGlzb2xhdGVfZm9saW9zKG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIHN3YXBwaW5lc3MsXG4gXHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG4gXHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuK1x0aWYgKG5yX2lzb2xhdGVkKVxuK1x0XHRfX21vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLFxuK1x0XHRcdFx0ICAgICAgbnJfaXNvbGF0ZWQpO1xuIFxuIFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbiBcdGlmIChzY2FubmVkKVxuQEAgLTQ5NTQsNiArNTAwNCw4IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIFx0XHRnb3RvIHJldHJ5O1xuIFx0fVxuIFxuK1x0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIHR5cGUsIC1ucl9pc29sYXRlZCk7XG4rXG4gXHRpZiAobnJfaXNvbGF0ZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyB0eXBlLFxuIFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjExLjE1OTU4NjYxNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NjMyNzA1OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3Ztc2Nhbi5jYC4gSXQncyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBmdW5jdGlvbiwgYHRocm90dGxlX2lzX3Rocm90dGxlZGAsIHdoaWNoIGJhc2ljYWxseSBjb25zb2xpZGF0ZXMgdGhlIGxvZ2ljIG9mIGB0b29fbWFueV9pc29sYXRlZGAgYW5kIGByZWNsYWltX3Rocm90dGxlYC4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIHRoZSBjaGFuZ2VzIHJpcHBsZSBvdXQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZXkncmUgbm93IHVzaW5nIHRoaXMgbmV3IHRocm90dGxpbmcgbWVjaGFuaXNtLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBzdGF0ZSBtb2RpZmljYXRpb25zIHdpdGggYF9fbW9kX25vZGVfcGFnZV9zdGF0ZWAgYW5kIGBtb2Rfbm9kZV9wYWdlX3N0YXRlYCBiZWluZyB0aHJvd24gaW4uXG5cblRoaXMgc21lbGxzIGxpa2UgYSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGhvdyBwYWdlIHJlY2xhaW0sIHNwZWNpZmljYWxseSBgdm1zY2FuYCwgYmVoYXZlcy4gR2l2ZW4gaXRzIGZ1bmN0aW9uYWwgaW1wYWN0LCBmdXp6aW5nIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSBvbiB0aGUgdG8tZG8gbGlzdC5cblxuVGltZSB0byBkcmlsbCBkb3duLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGJlZW4gbW9kaWZpZWQuIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLCBib3RoIHN0YXRpYyBmdW5jdGlvbnMuIE5vdywgdGhlIHN0YXRpYy1uZXNzIG1lYW5zIHdlIG5lZWQgdG8gdHJhY2UgdGhlICpub24tc3RhdGljKiBlbnRyeSBwb2ludHMgd2hlcmUgdGhpcyBsb2dpYyBnZXRzIHRyaWdnZXJlZC4gYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBsaWtlbHkgY2FsbGVkIGJ5IGVpdGhlciBgc2hyaW5rX2xpc3RgIG9yIGBzaHJpbmtfbHJ1dmVjYC4gQXMgZm9yIGBldmljdF9mb2xpb3NgLCB0aGF0J3MgbGlrZWx5IGhhcHBlbmluZyB0aHJvdWdoIHNvbWV0aGluZyBsaWtlIGBscnVfZ2VuX3Nocmlua19scnV2ZWNgLlxuXG5JJ2xsIHVzZSBgZ2l0IGdyZXBgIHRvIGNvbmZpcm0gdGhlIGNhbGwgaGllcmFyY2h5IGZvciBib3RoIG9mIHRob3NlIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGNhbGwgZ3JhcGggdG8gcHJvcGVybHkgYXNzZXNzIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNToyMC45MjI4NjI2MDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxNDc4Njk0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q9NTM5PVNvbWUgZXhhbXBsZXMgb2YgdGhlc2UgdW5ldmljdGFibGUgcGFnZXMgb24gdGhlIExSVSBsaXN0cyBhcmU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTUwLVxcbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdDo1NTE6dm1zY2FuJ3Mgc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBhbmQgc2hyaW5rX2ZvbGlvX2xpc3QoKSBhbHNvIGRpdmVydCBvYnZpb3VzbHlcXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTUyLXVuZXZpY3RhYmxlIHBhZ2VzIGZvdW5kIG9uIHRoZSBpbmFjdGl2ZSBsaXN0cyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNncm91cFxcbi0tXFxuZHJpdmVycy9taXNjL2xrZHRtL2NvcmUuYz03Nj1zdGF0aWMgc3RydWN0IGNyYXNocG9pbnQgY3Jhc2hwb2ludHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmMtODItXFx0Q1JBU0hQT0lOVChcXFwiRlNfU1VCTUlUX0JIXFxcIixcXHRcXHQgXFxcInN1Ym1pdF9iaFxcXCIpLFxcbmRyaXZlcnMvbWlzYy9sa2R0bS9jb3JlLmM6ODM6XFx0Q1JBU0hQT0lOVChcXFwiTUVNX1NXQVBPVVRcXFwiLFxcdCBcXFwic2hyaW5rX2luYWN0aXZlX2xpc3RcXFwiKSxcXG5kcml2ZXJzL21pc2MvbGtkdG0vY29yZS5jLTg0LVxcdENSQVNIUE9JTlQoXFxcIlRJTUVSQUREXFxcIixcXHRcXHQgXFxcImhydGltZXJfc3RhcnRcXFwiKSxcXG4tLVxcbmZzL25mc2QvdmZzLmM9MTQyNj1uZnNkX3Zmc193cml0ZShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBzdHJ1Y3Qgc3ZjX2ZoICpmaHAsXFxuLS1cXG5mcy9uZnNkL3Zmcy5jLTE0NTMtXFx0XFx0ICogV2Ugd2FudCB0aHJvdHRsaW5nIGluIGJhbGFuY2VfZGlydHlfcGFnZXMoKVxcbmZzL25mc2QvdmZzLmM6MTQ1NDpcXHRcXHQgKiBhbmQgc2hyaW5rX2luYWN0aXZlX2xpc3QoKSB0byBvbmx5IGNvbnNpZGVyXFxuZnMvbmZzZC92ZnMuYy0xNDU1LVxcdFxcdCAqIHRoZSBiYWNraW5nZGV2IHdlIGFyZSB3cml0aW5nIHRvLCBzbyB0aGF0IG5mcyB0b1xcbi0tXFxubW0vdm1zY2FuLmM9MTk3Mj1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwMTAtLypcXG5tbS92bXNjYW4uYzoyMDExOiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5tbS92bXNjYW4uYy0yMDEyLSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xcbm1tL3Ztc2Nhbi5jLTIwMTMtICovXFxubW0vdm1zY2FuLmM6MjAxNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjAxNS1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmM9MjIzOD1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjI0OC1cXG5tbS92bXNjYW4uYzoyMjQ5OlxcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xcbm1tL3Ztc2Nhbi5jLTIyNTAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNToyMi45Mzc2NzY1OTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODYyNTQ4OTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBMaXN0IFNocmlua2luZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGRlZmluaXRlbHkgYmVpbmcgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAuIFRoYXQncyB0aGUgZXN0YWJsaXNoZWQgcmVsYXRpb25zaGlwLiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpicm9hZGVyKiBjb250ZXh0IGhlcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBzaHJpbmtfbGlzdGAgaXRzZWxmIGlzIGJlaW5nIHVzZWQuIFdoZXJlIGFyZSB0aGVzZSBsaXN0IHNocmlua2luZyBvcGVyYXRpb25zIGhhcHBlbmluZyBpbiB0aGUgZ3JhbmQgc2NoZW1lIG9mIHRoaW5ncz8gVG8gZ2FpbiBhIGhvbGlzdGljIHZpZXcsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGxlcnMgb2YgdGhlIGBzaHJpbmtfbGlzdGAgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGNydWNpYWwgaW5zaWdodHMgaW50byB0aGUgb3ZlcmFsbCBsaXN0IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIHdoYXQgdHJpZ2dlcnMgdGhlc2Ugc2hyaW5raW5nIG9wZXJhdGlvbnMsIGxlYWRpbmcgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YC4gS25vd2luZyB0aGUgY2FsbGluZyBsb2NhdGlvbnMgd2lsbCBoZWxwIGluIGRldGVybWluaW5nIHRoZSBsYXJnZXIgaW50ZW50IG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY1OCwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjI1LjgwMDIyODgxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzcwNzMyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2xpc3RcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdD0xMzkyPWRfYWxsb2NfcGFyYWxsZWwoKSBubyBsb25nZXIgcmVxdWlyZXMgYSB3YWl0cXVldWVfaGVhZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9ydGluZy5yc3QtMTM5Ny1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvcnRpbmcucnN0OjEzOTg6ZF9kaXNwb3NlX2lmX3VudXNlZCgpIGlzIGdvbmU7IHVzZSBfX21vdmVfdG9fc2hyaW5rX2xpc3QoKSBpZiB5b3UgcmVhbGx5XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb3J0aW5nLnJzdC0xMzk5LW5lZWQgdGhhdCBmdW5jdGlvbmFsaXR5LCBidXQgd2F0Y2ggb3V0IGZvciBtZW1vcnkgc2FmZXR5IGlzc3VlcyAtIGp1c3RcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaD0yOTA9c3RhdGljIGlubGluZSBib29sXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oOjI5MTppOTE1X2dlbV9vYmplY3RfaGFzX3NlbGZfbWFuYWdlZF9zaHJpbmtfbGlzdChjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaC0yOTIte1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oPTIzOT1zdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgtNjc2LVxcdFxcdC8qKlxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaDo2Nzc6XFx0XFx0ICogRWxlbWVudCB3aXRoaW4gaTkxNS1cXHUwMDNlbW0uc2hyaW5rX2xpc3Qgb3IgaTkxNS1cXHUwMDNlbW0ucHVyZ2VfbGlzdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0X3R5cGVzLmgtNjc4LVxcdFxcdCAqIGxvY2tlZCBieSBpOTE1LVxcdTAwM2VtbS5vYmpfbG9jay5cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jPTIzPXZvaWQgX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy04MC1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYzo4MTpcXHRpZiAoc2hyaW5rYWJsZSBcXHUwMDI2XFx1MDAyNiAhaTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3Qob2JqKSkge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jLTgyLVxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy05My1cXHRcXHRlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM6OTQ6XFx0XFx0XFx0bGlzdCA9IFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy05NS1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZvYmotXFx1MDAzZW1tLmxpbmssIGxpc3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM9MjE0PV9faTkxNV9nZW1fb2JqZWN0X3Vuc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjYtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmM6MjI3OlxcdGlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19zZWxmX21hbmFnZWRfc2hyaW5rX2xpc3Qob2JqKSlcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcGFnZXMuYy0yMjgtXFx0XFx0aTkxNV9nZW1fb2JqZWN0X21ha2VfdW5zaHJpbmthYmxlKG9iaik7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYz0xMzY9dm9pZCBpOTE1X2dlbV9zdXNwZW5kX2xhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYy0xMzktXFx0c3RydWN0IGxpc3RfaGVhZCAqcGhhc2VzW10gPSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BtLmM6MTQwOlxcdFxcdFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYy0xNDEtXFx0XFx0XFx1MDAyNmk5MTUtXFx1MDAzZW1tLnB1cmdlX2xpc3QsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYz0xOTg9aW50IGk5MTVfZ2VtX2ZyZWV6ZV9sYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BtLmMtMjIyLVxcdHdiaW52ZF9vbl9hbGxfY3B1cygpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jOjIyMzpcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgXFx1MDAyNmk5MTUtXFx1MDAzZW1tLnNocmlua19saXN0LCBtbS5saW5rKVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wbS5jLTIyNC1cXHRcXHRfX3N0YXJ0X2NwdV93cml0ZShvYmopO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM9MTA0PWk5MTVfZ2VtX3NocmluayhzdHJ1Y3QgaTkxNV9nZW1fd3dfY3R4ICp3dyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTExNS1cXHRcXHR7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3Nocmlua2VyLmM6MTE2OlxcdFxcdFxcdFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdCxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy0xMTctXFx0XFx0XFx0STkxNV9TSFJJTktfQk9VTkQgfCBJOTE1X1NIUklOS19VTkJPVU5EXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz0zNDg9aTkxNV9nZW1fc2hyaW5rZXJfb29tKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTM2OS1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aTkxNS1cXHUwMDNlbW0ub2JqX2xvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYzozNzA6XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvYmosIFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5zaHJpbmtfbGlzdCwgbW0ubGluaykge1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTM3MS1cXHRcXHRpZiAoIWNhbl9yZWxlYXNlX3BhZ2VzKG9iaikpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYz01NDQ9dm9pZCBfX2k5MTVfZ2VtX29iamVjdF9tYWtlX3Nocmlua2FibGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iailcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaHJpbmtlci5jLTU0Ni1cXHRfX19pOTE1X2dlbV9vYmplY3RfbWFrZV9zaHJpbmthYmxlKG9iaixcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYzo1NDc6XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm9ial90b19pOTE1KG9iaiktXFx1MDAzZW1tLnNocmlua19saXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2hyaW5rZXIuYy01NDgtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaD0xMDc9c3RydWN0IGk5MTVfZ2VtX21tIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgtMTMwLVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2Lmg6MTMxOlxcdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rX2xpc3Q7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaC0xMzItXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jPTEwMjk9aTkxNV9nZW1fbWFkdmlzZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMDc0LVxcdGlmIChpOTE1X2dlbV9vYmplY3RfaGFzX3BhZ2VzKG9iaikgfHxcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEwNzU6XFx0ICAgIGk5MTVfZ2VtX29iamVjdF9oYXNfc2VsZl9tYW5hZ2VkX3Nocmlua19saXN0KG9iaikpIHtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jLTEwNzYtXFx0XFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMtMTA4NC1cXHRcXHRcXHRlbHNlXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYzoxMDg1OlxcdFxcdFxcdFxcdGxpc3QgPSBcXHUwMDI2aTkxNS1cXHUwMDNlbW0uc2hyaW5rX2xpc3Q7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMDg2LVxcdFxcdFxcdGxpc3RfbW92ZV90YWlsKFxcdTAwMjZvYmotXFx1MDAzZW1tLmxpbmssIGxpc3QpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYz0xMjg2PXN0YXRpYyB2b2lkIGk5MTVfZ2VtX2luaXRfX21tKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYy0xMjkyLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZpOTE1LVxcdTAwM2VtbS5wdXJnZV9saXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jOjEyOTM6XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmk5MTUtXFx1MDAzZW1tLnNocmlua19saXN0KTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jLTEyOTQtXFxuLS1cXG5mcy9kY2FjaGUuYz0xMDU0PUVYUE9SVF9TWU1CT0woZF9tYWtlX2Rpc2NhcmRhYmxlKTtcXG4tLVxcbmZzL2RjYWNoZS5jLTEwNTYtLyoqXFxuZnMvZGNhY2hlLmM6MTA1NzogKiBfX21vdmVfdG9fc2hyaW5rX2xpc3QgLSB0cnkgdG8gcGxhY2UgYSBkZW50cnkgaW50byBhIHNocmluayBsaXN0XFxuZnMvZGNhY2hlLmMtMTA1OC0gKiBAZGVudHJ5OlxcdGRlbnRyeSB0byB0cnkgcHV0dGluZyBpbnRvIHNocmluayBsaXN0XFxuLS1cXG5mcy9kY2FjaGUuYy0xMDY2LSAqIGRlbnRyeV9mcmVlKEBkZW50cnkpIHByaW9yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIFJDVSByZWFkLXNpZGUgY3JpdGljYWxcXG5mcy9kY2FjaGUuYzoxMDY3OiAqIGFyZWEgaW4gd2hpY2ggX19tb3ZlX3RvX3Nocmlua19saXN0KEBkZW50cnksIEBsaXN0KSBpcyBjYWxsZWQuXFxuZnMvZGNhY2hlLmMtMTA2OC0gKlxcbi0tXFxuZnMvZGNhY2hlLmMtMTA3Mi1cXG5mcy9kY2FjaGUuYzoxMDczOmJvb2wgX19tb3ZlX3RvX3Nocmlua19saXN0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5mcy9kY2FjaGUuYy0xMDc0LV9fbXVzdF9ob2xkKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jaylcXG4tLVxcbmZzL2RjYWNoZS5jLTEwODQtfVxcbmZzL2RjYWNoZS5jOjEwODU6RVhQT1JUX1NZTUJPTChfX21vdmVfdG9fc2hyaW5rX2xpc3QpO1xcbmZzL2RjYWNoZS5jLTEwODYtXFxuZnMvZGNhY2hlLmM9MTA4Nz12b2lkIGRwdXRfdG9fbGlzdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5mcy9kY2FjaGUuYy0xMDkwLVxcdFxcdHJldHVybjtcXG5mcy9kY2FjaGUuYzoxMDkxOlxcdF9fbW92ZV90b19zaHJpbmtfbGlzdChkZW50cnksIGxpc3QpO1xcbmZzL2RjYWNoZS5jLTEwOTItXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4tLVxcbmZzL2RjYWNoZS5jPTEyNTY9dm9pZCBkX3BydW5lX2FsaWFzZXMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTEyNjQtXFx0XFx0aWYgKGxpa2VseSghKGRlbnRyeS1cXHUwMDNlZF9mbGFncyBcXHUwMDI2IERDQUNIRV9OT1JDVSkpKVxcbmZzL2RjYWNoZS5jOjEyNjU6XFx0XFx0XFx0X19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXFx1MDAyNmRpc3Bvc2UpO1xcbmZzL2RjYWNoZS5jLTEyNjYtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9sb2NrKTtcXG4tLVxcbmZzL2RjYWNoZS5jPTE2Mzk9c3RhdGljIGVudW0gZF93YWxrX3JldCBzZWxlY3RfY29sbGVjdCh2b2lkICpfZGF0YSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvZGNhY2hlLmMtMTY0Ny1cXHRpZiAoZGVudHJ5LVxcdTAwM2VkX2xvY2tyZWYuY291bnQgXFx1MDAzYz0gMCkge1xcbmZzL2RjYWNoZS5jOjE2NDg6XFx0XFx0X19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXFx1MDAyNmRhdGEtXFx1MDAzZWRpc3Bvc2UpO1xcbmZzL2RjYWNoZS5jLTE2NDktXFx0XFx0ZGF0YS1cXHUwMDNlZm91bmQrKztcXG4tLVxcbmZzL2RjYWNoZS5jPTE2NzE9c3RhdGljIGVudW0gZF93YWxrX3JldCBzZWxlY3RfY29sbGVjdDIodm9pZCAqX2RhdGEsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTE2NzktXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9sb2NrcmVmLmNvdW50IFxcdTAwM2M9IDApIHtcXG5mcy9kY2FjaGUuYzoxNjgwOlxcdFxcdGlmICghX19tb3ZlX3RvX3Nocmlua19saXN0KGRlbnRyeSwgXFx1MDAyNmRhdGEtXFx1MDAzZWRpc3Bvc2UpKSB7XFxuZnMvZGNhY2hlLmMtMTY4MS1cXHRcXHRcXHQvKlxcbi0tXFxuZnMvZnVzZS9kaXIuYz0xNTk9c3RhdGljIHZvaWQgZnVzZV9kZW50cnlfdHJlZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmZzL2Z1c2UvZGlyLmMtMTc4LVxcdFxcdFxcdGZkLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfZmxhZ3MgfD0gRENBQ0hFX09QX0RFTEVURTtcXG5mcy9mdXNlL2Rpci5jOjE3OTpcXHRcXHRcXHRfX21vdmVfdG9fc2hyaW5rX2xpc3QoZmQtXFx1MDAzZWRlbnRyeSwgXFx1MDAyNmRpc3Bvc2UpO1xcbmZzL2Z1c2UvZGlyLmMtMTgwLVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZmZC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbi0tXFxuZnMvbmFtZXNwYWNlLmM9OTc3PXN0YXRpYyB2b2lkIF9fdG91Y2hfbW50X25hbWVzcGFjZShzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpXFxuLS1cXG5mcy9uYW1lc3BhY2UuYy05ODctICovXFxuZnMvbmFtZXNwYWNlLmM6OTg4OnN0YXRpYyB2b2lkIF9fdW1vdW50X21udChzdHJ1Y3QgbW91bnQgKm1udCwgc3RydWN0IGxpc3RfaGVhZCAqc2hyaW5rX2xpc3QpXFxuZnMvbmFtZXNwYWNlLmMtOTg5LXtcXG4tLVxcbmZzL25hbWVzcGFjZS5jLTEwMDAtXFx0bW50LVxcdTAwM2VtbnRfbXAgPSBOVUxMO1xcbmZzL25hbWVzcGFjZS5jOjEwMDE6XFx0bWF5YmVfZnJlZV9tb3VudHBvaW50KG1wLCBzaHJpbmtfbGlzdCk7XFxuZnMvbmFtZXNwYWNlLmMtMTAwMi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RjYWNoZS5oPTI4Mj1leHRlcm4gdm9pZCBkX3BydW5lX2FsaWFzZXMoc3RydWN0IGlub2RlICopO1xcbmluY2x1ZGUvbGludXgvZGNhY2hlLmg6MjgzOmV4dGVybiBib29sIF9fbW92ZV90b19zaHJpbmtfbGlzdChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBsaXN0X2hlYWQgKik7XFxuaW5jbHVkZS9saW51eC9kY2FjaGUuaC0yODQtZXh0ZXJuIHZvaWQgc2hyaW5rX2RlbnRyeV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKik7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jPTI0Mz1zdGF0aWMgdW5zaWduZWQgaW50IF9fYnBmX2xydV9saXN0X3NocmluayhzdHJ1Y3QgYnBmX2xydSAqbHJ1LFxcbi0tXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYy0yNTAtXFx0c3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSwgKnRtcF9ub2RlO1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjUxOlxcdHN0cnVjdCBsaXN0X2hlYWQgKmZvcmNlX3Nocmlua19saXN0O1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjUyLVxcdHVuc2lnbmVkIGludCBuc2hyaW5rZWQ7XFxuLS1cXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2MC1cXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmwtXFx1MDAzZWxpc3RzW0JQRl9MUlVfTElTVF9UX0lOQUNUSVZFXSkpXFxua2VybmVsL2JwZi9icGZfbHJ1X2xpc3QuYzoyNjE6XFx0XFx0Zm9yY2Vfc2hyaW5rX2xpc3QgPSBcXHUwMDI2bC1cXHUwMDNlbGlzdHNbQlBGX0xSVV9MSVNUX1RfSU5BQ1RJVkVdO1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjYyLVxcdGVsc2VcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jOjI2MzpcXHRcXHRmb3JjZV9zaHJpbmtfbGlzdCA9IFxcdTAwMjZsLVxcdTAwM2VsaXN0c1tCUEZfTFJVX0xJU1RfVF9BQ1RJVkVdO1xcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmMtMjY0LVxcbmtlcm5lbC9icGYvYnBmX2xydV9saXN0LmM6MjY1OlxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKG5vZGUsIHRtcF9ub2RlLCBmb3JjZV9zaHJpbmtfbGlzdCxcXG5rZXJuZWwvYnBmL2JwZl9scnVfbGlzdC5jLTI2Ni1cXHRcXHRcXHRcXHRcXHQgbGlzdCkge1xcbi0tXFxubW0vc2htZW0uYz0yNDI4PXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTUwLVxcdFxcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xcbm1tL3NobWVtLmM6MjU1MTpcXHRcXHQgKiAtXFx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXFxubW0vc2htZW0uYy0yNTUyLVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XFxubW0vdm1zY2FuLmM6Nzc6XFx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jLTc4LVxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMDU9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjM3LVxcbm1tL3Ztc2Nhbi5jOjIyMzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMjM5LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjAxNj1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MDY0LVxcbm1tL3Ztc2Nhbi5jOjYwNjU6XFx0XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy02MDY2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6MjcuNjc3MzA5NTM0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTExMzYyMTI0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDpcblxuKipEaWdnaW5nIGludG8gUGFnZSBSZWNsYW1hdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBwYWdlIHJlY2xhbWF0aW9uIGxvZ2ljIGhlcmUuIEl0IGxvb2tzIGxpa2UgYHNocmlua19scnV2ZWNgIGlzIGEga2V5IGZ1bmN0aW9uLiBJIHNlZSB0aGF0IGl0J3MgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGluIGl0c2VsZi4gSG93ZXZlciwgd2hhdCByZWFsbHkgY2F0Y2hlcyBteSBleWUgaXMgdGhhdCBgc2hyaW5rX2xydXZlY2AgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBzaHJpbmtfbm9kZWAuIE5vdywgKnRoYXQncyogd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYmVjYXVzZSBgc2hyaW5rX25vZGVgIGlzIGludm9rZWQgZnJvbSBhIGJ1bmNoIG9mIGNvcmUgcGF0aHMsIGluY2x1ZGluZyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgIGFuZCBgYmFsYW5jZV9wZ2RhdGAgd2hpY2ggYXJlIGJvdGggY3JpdGljYWwgdG8gaG93IHdlIG1hbmFnZSBtZW1vcnkuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGZpdCB0b2dldGhlciBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBvdXIgcmVjbGFtYXRpb24gZWZmb3J0cy5cblxuSSB0aGluayBpdCdzIHRpbWUgdG8gY2hlY2sgaG93IGBldmljdF9mb2xpb3NgIGZpdHMgaW50byBhbGwgdGhpcyBhcyBpdCBzaG91bGQgcHJvYmFibHkgYmUgaW52b2tlZCB3aXRoaW4gb25lIG9mIHRoZSBmdW5jdGlvbnMgbWVudGlvbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcmVsYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjY1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6MzguODEzNTI0OTMzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI1NjE3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXZpY3RfZm9saW9zXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ4NjI9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ4OTUtXFxubW0vdm1zY2FuLmM6NDg5NjpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy00ODk3LVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwOTk9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMjItXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTEyMzpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTEyNC1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTcyNj1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3NDYtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU3NDc6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU3NDgtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE1OjQwLjQ3NjA5MzI3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjI3NDQyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNR0xSVSBhbmQgTGVnYWN5IExSVSBSZWNsYWltIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIHRoZSBNR0xSVSBhbmQgbGVnYWN5IExSVSByZWNsYWltIG1lY2hhbmlzbXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBldmljdF9mb2xpb3NgIGlzIHRoZSBrZXkgZnVuY3Rpb24gaGVyZSwgYXMgaXQncyBjYWxsZWQgYnkgYm90aCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgIGFuZCBgcnVuX2V2aWN0aW9uYCwgd2hpY2ggYXJlIGNvcmUgY29tcG9uZW50cyBvZiB0aGUgTXVsdGktR2VuIExSVSBzeXN0ZW0uIFRoaXMgbWVhbnMgdGhlIGNoYW5nZXMgYXJlIGltcGFjdGluZyBib3RoIHRoZSBuZXcgTUdMUlUgYXBwcm9hY2ggYW5kIHRoZSBleGlzdGluZyBMUlUgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuXG5cbkdpdmVuIHRoZSBzY29wZSwgSSBuZWVkIHRvIHpvb20gaW4gb24gYSBzcGVjaWZpYyBzZXQgb2YgZnVuY3Rpb25zLCB3aGljaCBJJ3ZlIGlkZW50aWZpZWQgYXM6IGBzaHJpbmtfbm9kZWAsIGBkb190cnlfdG9fZnJlZV9wYWdlc2AsIGBiYWxhbmNlX3BnZGF0YCwgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHNocmlua19scnV2ZWNgLCBgdHJ5X3RvX3Nocmlua19scnV2ZWNgLCBhbmQgYHJ1bl9ldmljdGlvbmAuXG5cbk5vdywgbGV0J3MgY29uc2lkZXIgdGhlIHN0YXRpYyBuYXR1cmUgb2YgdGhlc2UgZnVuY3Rpb25zLiBMb29rcyBsaWtlIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIGlzIHN0YXRpYywgc28gSSdsbCBwdXQgdGhhdCBhc2lkZSwgSSBjYW4ndCByZWFsbHkgZm9jdXMgb24gaXQuIFNhbWUgZm9yIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBldmljdF9mb2xpb3NgLCBgc2hyaW5rX2xydXZlY2AsIGFuZCBgc2hyaW5rX25vZGVgLlxuXG5UaGF0IGxlYXZlcyBtZSB3aXRoIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgYGJhbGFuY2VfcGdkYXRgIGFuZCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBhcyB0aGUgbW9zdCBpbnRlcmVzdGluZyBjYW5kaWRhdGVzIGZvciBmdXJ0aGVyIGluc3BlY3Rpb24uIFRoZXNlIGFyZSB3aGVyZSB0aGUgY29yZSBsb2dpYyBvciBpbnRlcmZhY2UgY2hhbmdlcyB3aWxsIGxpa2VseSByZXNpZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCByZWNsYWltIHByb2Nlc3MsIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIGxlZ2FjeSBhbmQgTUdMUlUgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6NTAuNzAzNTM4NzkxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjYzMTMxNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Z1c2UvZmlsZS5jPTIzNTE9c3RhdGljIHZvaWQgZnVzZV92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5mcy9mdXNlL2ZpbGUuYy0yMzcxLSAqIC0gc3luYygyKVxcbmZzL2Z1c2UvZmlsZS5jOjIzNzI6ICogLSB0cnlfdG9fZnJlZV9wYWdlcygpIHdpdGggb3JkZXIgXFx1MDAzZSBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUlxcbmZzL2Z1c2UvZmlsZS5jLTIzNzMtICovXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTY5PXVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XFxubW0vaW50ZXJuYWwuaDo3MDp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcXG5tbS9pbnRlcm5hbC5oLTcxLVxcdFxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBjb25zdCBub2RlbWFza190ICptYXNrKTtcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00NDM4PV9fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDQ1MC1cXG5tbS9wYWdlX2FsbG9jLmM6NDQ1MTpcXHRwcm9ncmVzcyA9IHRyeV90b19mcmVlX3BhZ2VzKGFjLVxcdTAwM2V6b25lbGlzdCwgb3JkZXIsIGdmcF9tYXNrLFxcbm1tL3BhZ2VfYWxsb2MuYy00NDUyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vub2RlbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYz02NTYzPXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTkzLSAqL1xcbm1tL3Ztc2Nhbi5jOjY1OTQ6c3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCxcXG5tbS92bXNjYW4uYy02NTk1LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYz02NzM2PXN0YXRpYyBib29sIHRocm90dGxlX2RpcmVjdF9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjgxNS1cXG5tbS92bXNjYW4uYzo2ODE2OnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTY4MTctXFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2ssIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vdm1zY2FuLmMtNjg1MC1cXG5tbS92bXNjYW4uYzo2ODUxOlxcdG5yX3JlY2xhaW1lZCA9IGRvX3RyeV90b19mcmVlX3BhZ2VzKHpvbmVsaXN0LCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTY4NTItXFxuLS1cXG5tbS92bXNjYW4uYz02OTAyPXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02OTMzLVxcbm1tL3Ztc2Nhbi5jOjY5MzQ6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNjkzNS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzE5LVxcbm1tL3Ztc2Nhbi5jOjc3MjA6XFx0bnJfcmVjbGFpbWVkID0gZG9fdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzcyMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTU6NTIuMzY2Njc3OTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDQxNDY5NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGb2N1cyBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gZGlyZWN0IG15IGF0dGVudGlvbiB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gRnJvbSBhIGhpZ2ggbGV2ZWwsIGB0cnlfdG9fZnJlZV9wYWdlc2Agc2VlbXMgbGlrZSBhIHNvbGlkIHN5bWJvbCB0byBzdGFydCB3aXRoIOKAkyBpdCdzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIGluIHJlY2xhaW1pbmcgbWVtb3J5LiBUaGVuLCBJIGFsc28gc2hvdWxkIGNvbnNpZGVyIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYmVjYXVzZSwgb2YgY291cnNlLCBtZW1vcnkgY2dyb3VwcyBhcmUgYSBjZW50cmFsIGNvbXBvbmVudCB0aGVzZSBkYXlzLiBUaGF0IGlzIHZlcnkgaW1wb3J0YW50LiBJIHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyaW5nIGBiYWxhbmNlX3BnZGF0YCwgYmVjYXVzZSB0aGF0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBvdmVyYWxsIGJhbGFuY2luZyBvZiBtZW1vcnkgYWNyb3NzIE5VTUEgbm9kZXMsIHNvbWV0aGluZyB0aGF0IGlzIGltcG9ydGFudCB0byBjb25zaWRlci4gTGV0J3MgZGlnIGludG8gYGJhbGFuY2VfcGdkYXRgIGZvciBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDAxLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6MDMuNDA4MTUwODE1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5ODgzMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhbGFuY2VfcGdkYXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg9NzY9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2tzd2FwZF93YWtlLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtOTgtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg6OTk6VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4sXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTAwLVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTIyLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjEyMzpUUkFDRV9FVkVOVChtbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtMTI0LVxcbi0tXFxubW0vdm1zY2FuLmM9Njg2Mj11bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg4OC1cXHQgKiBoZXJlIGlzIG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgbGltaXRzIHRoZSBwYWdlcyB3ZSBjYW4gc2Nhbi5cXG5tbS92bXNjYW4uYzo2ODg5OlxcdCAqIGlmIHdlIGRvbid0IHJlY2xhaW0gaGVyZSwgdGhlIHNocmlua19ub2RlIGZyb20gYmFsYW5jZV9wZ2RhdFxcbm1tL3Ztc2Nhbi5jLTY4OTAtXFx0ICogd2lsbCBwaWNrIHVwIHBhZ2VzIGZyb20gb3RoZXIgbWVtIGNncm91cCdzIGFzIHdlbGwuIFdlIGhhY2tcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwOTI9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA5NS1cXHQvKlxcbm1tL3Ztc2Nhbi5jOjcwOTY6XFx0ICogVGhlIHRocm90dGxlZCBwcm9jZXNzZXMgYXJlIG5vcm1hbGx5IHdva2VuIHVwIGluIGJhbGFuY2VfcGdkYXQoKSBhc1xcbm1tL3Ztc2Nhbi5jLTcwOTctXFx0ICogc29vbiBhcyBhbGxvd19kaXJlY3RfcmVjbGFpbSgpIGlzIHRydWUuIEJ1dCB0aGVyZSBpcyBhIHBvdGVudGlhbFxcbi0tXFxubW0vdm1zY2FuLmMtNzEwMC1cXHQgKiB0aHJvdHRsZWQsIGtzd2FwZCB3YWtlcywgYSBsYXJnZSBwcm9jZXNzIGV4aXRzIHRoZXJlYnkgYmFsYW5jaW5nIHRoZVxcbm1tL3Ztc2Nhbi5jOjcxMDE6XFx0ICogem9uZXMsIHdoaWNoIGNhdXNlcyBrc3dhcGQgdG8gZXhpdCBiYWxhbmNlX3BnZGF0KCkgYmVmb3JlIHJlYWNoaW5nXFxubW0vdm1zY2FuLmMtNzEwMi1cXHQgKiB0aGUgd2FrZSB1cCBjaGVja3MuIElmIGtzd2FwZCBpcyBnb2luZyB0byBzbGVlcCwgbm8gcHJvY2VzcyBzaG91bGRcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcxMDQtXFx0ICogdGhlIHdha2UgdXAgaXMgcHJlbWF0dXJlLCBwcm9jZXNzZXMgd2lsbCB3YWtlIGtzd2FwZCBhbmQgZ2V0XFxubW0vdm1zY2FuLmM6NzEwNTpcXHQgKiB0aHJvdHRsZWQgYWdhaW4uIFRoZSBkaWZmZXJlbmNlIGZyb20gd2FrZSB1cHMgaW4gYmFsYW5jZV9wZ2RhdCgpIGlzXFxubW0vdm1zY2FuLmMtNzEwNi1cXHQgKiB0aGF0IGhlcmUgd2UgYXJlIHVuZGVyIHByZXBhcmVfdG9fd2FpdCgpLlxcbi0tXFxubW0vdm1zY2FuLmM9NzE4Nj1jbGVhcl9yZWNsYWltX2FjdGl2ZShwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNzE5MS0vKlxcbm1tL3Ztc2Nhbi5jOjcxOTI6ICogRm9yIGtzd2FwZCwgYmFsYW5jZV9wZ2RhdCgpIHdpbGwgcmVjbGFpbSBwYWdlcyBhY3Jvc3MgYSBub2RlIGZyb20gem9uZXNcXG5tbS92bXNjYW4uYy03MTkzLSAqIHRoYXQgYXJlIGVsaWdpYmxlIGZvciB1c2UgYnkgdGhlIGNhbGxlciB1bnRpbCBhdCBsZWFzdCBvbmUgem9uZSBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzIwMy0gKi9cXG5tbS92bXNjYW4uYzo3MjA0OnN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxubW0vdm1zY2FuLmMtNzIwNS17XFxuLS1cXG5tbS92bXNjYW4uYy03MjE5LVxcbm1tL3Ztc2Nhbi5jOjcyMjA6XFx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIG9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTcyMjEtXFx0XFx0XFx0XFx0XFx0ICAgIGhpZ2hlc3Rfem9uZWlkeCk7XFxuLS1cXG5tbS92bXNjYW4uYy03NDE0LVxcbm1tL3Ztc2Nhbi5jOjc0MTU6XFx0dHJhY2VfbW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfZW5kKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYy5vcmRlcixcXG5tbS92bXNjYW4uYy03NDE2LVxcdFxcdFxcdFxcdFxcdCAgaGlnaGVzdF96b25laWR4LCBzYy5ucl9yZWNsYWltZWQpO1xcbi0tXFxubW0vdm1zY2FuLmM9NzUzOT1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU4NS1cXHRcXHQvKlxcbm1tL3Ztc2Nhbi5jOjc1ODY6XFx0XFx0ICogV2UgY2FuIHNwZWVkIHVwIHRoYXdpbmcgdGFza3MgaWYgd2UgZG9uJ3QgY2FsbCBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNzU4Ny1cXHRcXHQgKiBhZnRlciByZXR1cm5pbmcgZnJvbSB0aGUgcmVmcmlnZXJhdG9yXFxuLS1cXG5tbS92bXNjYW4uYy03NjAxLVxcdFxcdFxcdFxcdFxcdFxcdGFsbG9jX29yZGVyKTtcXG5tbS92bXNjYW4uYzo3NjAyOlxcdFxcdHJlY2xhaW1fb3JkZXIgPSBiYWxhbmNlX3BnZGF0KHBnZGF0LCBhbGxvY19vcmRlcixcXG5tbS92bXNjYW4uYy03NjAzLVxcdFxcdFxcdFxcdFxcdFxcdGhpZ2hlc3Rfem9uZWlkeCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjA1LjA0ODA0ODgwNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg2ODY3NjY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgYmFsYW5jZV9wZ2RhdGAsIHdoaWNoIGlzIHN0YXRpYywgYW5kIHRoZW4gYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCwgYWxsIG9mIHdoaWNoIGFyZSAqbm90KiBzdGF0aWMuIFJpZ2h0IGF3YXksIGB0cnlfdG9fZnJlZV9wYWdlc2AgYW5kIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBqdW1wIG91dCBhcyBpbnRlcmVzdGluZyBhcmVhcyB0byBkZWx2ZSBpbnRvIGZ1cnRoZXIg4oCTIHNvbGlkIGZvY3VzIHN5bWJvbHMgaGVyZS5cblxuQWgsIGJ1dCB0aGlzIHBhdGNoLi4uIGl0J3MgY2hhbmdpbmcgYHRvb19tYW55X2lzb2xhdGVkYCB0byBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gVGhhdCdzIGEga2V5IHNoaWZ0IGluIGhvdyB0aHJvdHRsaW5nIGlzIHJlcHJlc2VudGVkLCBhbmQgaXQncyBhbHNvIGFkZGluZyBjaGVja3MgZm9yIGBmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KWAgKmFuZCogc2V0dGluZyBgKmZhdGFsYC4gVGhpcyBpcyBjbGVhcmx5IGRlc2lnbmVkIHRvIHByZXZlbnQgaW5kZWZpbml0ZSBsb29waW5nIG9uIGZvbGlvcyB0aGF0IGNhbid0IGJlIGV2aWN0ZWQgd2hlbiBhIHRhc2sgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcga2lsbGVkLiBJIHNlZSB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nIHdpdGhpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSByZWxldmFudCBoZXJlLiBJJ20gdGhpbmtpbmcsIGBDT05GSUdfTUVNQ0dgIGRlZmluaXRlbHkgYXBwbGllcyB0byBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIG9idmlvdXNseS4gQnV0IGB0cnlfdG9fZnJlZV9wYWdlc2AgaXMgY29yZSwgYWx3YXlzIHByZXNlbnQuIE5vdywgaXMgTUdMUlUgcmVsZXZhbnQgaGVyZT8gQWgsIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIE1HTFJVIGNvbmZpZy4gU28gSSBuZWVkIHRvIGdvIHNlZSBpZiBgZXZpY3RfZm9saW9zYCBpcyB3cmFwcGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAgb3Igbm90LiBUaGF0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gZmlndXJlIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MjIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6MjMuOTE2NzI4NTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTQ5ODg1NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0PTEzPUJ1aWxkIHRoZSBrZXJuZWwgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0xNC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6MTU6KiBgYENPTkZJR19MUlVfR0VOPXlgYFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDoxNjoqIGBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRD15YGBcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtMTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q9Mjg9Zm9sbG93aW5nIGNvbXBvbmVudHMuIEl0cyBkZWZhdWx0IHZhbHVlIGRlcGVuZHMgb25cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3Q6Mjk6YGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYGAuIEFsbCB0aGUgY29tcG9uZW50cyBzaG91bGQgYmUgZW5hYmxlZFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC0zMC11bmxlc3Mgc29tZSBvZiB0aGVtIGhhdmUgdW5mb3Jlc2VlbiBzaWRlIGVmZmVjdHMuIFdyaXRpbmcgdG9cXG4tLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdD04OD1jb25jYXRlbmF0aW9uIHdpdGggZGVsaW1pdGVycyBgYCxgYCBhbmQgYGA7YGAuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QtOTAtYGAvc3lzL2tlcm5lbC9kZWJ1Zy9scnVfZ2VuX2Z1bGxgYCBwcm92aWRlcyBhZGRpdGlvbmFsIHN0YXRzIGZvclxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdDo5MTpkZWJ1Z2dpbmcuIGBgQ09ORklHX0xSVV9HRU5fU1RBVFM9eWBgIGtlZXBzIGhpc3RvcmljYWwgc3RhdHMgZnJvbVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdC05Mi1ldmljdGVkIGdlbmVyYXRpb25zIGluIHRoaXMgZmlsZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTIwMj1zdHJ1Y3QgbWVtX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNzgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6Mjc5OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yODAtXFx0LyogcGVyLW1lbWNnIG1tX3N0cnVjdCBsaXN0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTgyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgZW51bSBscnVfbGlzdCBmb2xpb19scnVfbGlzdChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC05Ny1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjk4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtOTktXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xMDA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fc3dpdGNoaW5nKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNS19XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxMDY6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNy1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9lbmFibGVkKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzEyLX1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxMzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxNC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9MzQwPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19taWdyYXRlX3JlZnMoc3RydWN0IGZvbGlvICpuZXcsIGNvbnN0IHN0cnVjdCBmb2xpbyAqb2xkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zNDMtfVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzQ0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzQ1LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNzU9c3RydWN0IG1tX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwMi0jZW5kaWYgLyogQ09ORklHX0tTTSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDAzOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQwNC1cXHRcXHRzdHJ1Y3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0MTctXFx0XFx0fSBscnVfZ2VuO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDE4OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTQxOS0jaWZkZWYgQ09ORklHX01NX0lEXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTQ4MD1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCAqbW1fY3B1bWFzayhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg0LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxNDg1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDg2LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD0xNDg3PXN0cnVjdCBscnVfZ2VuX21tX2xpc3Qge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTMtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE0OTUtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE0OTY6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNDk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1MTE9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1MjAtXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1MjE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTIyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTE1Mzk9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5fdXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTE1NDItXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjE1NDM6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xNTQ0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01MjU9c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI2LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NTI3OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD01MzQ9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0NC0vKiB3aGV0aGVyIHRvIGtlZXAgaGlzdG9yaWNhbCBzdGF0cyBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjU0NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fU1RBVFNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTU0Ni0jZGVmaW5lIE5SX0hJU1RfR0VOU1xcdFxcdE1BWF9OUl9HRU5TXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwMj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwMy1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcwNDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcwNS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzU0PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1Ny1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc1ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc1OS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzY2PXN0cnVjdCBscnV2ZWMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03ODUtXFx0dW5zaWduZWQgbG9uZ1xcdFxcdFxcdGZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6Nzg2OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzg3LVxcdC8qIGV2aWN0YWJsZSBwYWdlcyBkaXZpZGVkIGludG8gZ2VuZXJhdGlvbnMgKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc4OC1cXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpb1xcdFxcdGxydWdlbjtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc4OTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03OTAtXFx0LyogdG8gY29uY3VycmVudGx5IGl0ZXJhdGUgbHJ1X2dlbl9tbV9saXN0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5Mi0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjc5MzojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTc5NC0jaWZkZWYgQ09ORklHX01FTUNHXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0Nzg9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTk1LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU5NjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1OTctXFx0Lyoga3N3YXAgbW0gd2FsayBkYXRhICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAyNTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAyNi1cXHQvKiB3aGV0aGVyIHRoZSBMUlUgYWxnb3JpdGhtIG1heSBhcHBseSB0byB0aGlzIGFjY2VzcyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9MTQ2PXN0cnVjdCByZWNsYWltX3N0YXRlIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTE0OC1cXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxNDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMTUwLVxcdC8qIHBlci10aHJlYWQgbW0gd2FsayBkYXRhICovXFxuLS1cXG5rZXJuZWwvYm91bmRzLmM9MTc9aW50IG1haW4odm9pZClcXG4tLVxcbmtlcm5lbC9ib3VuZHMuYy0yNS1cXHRERUZJTkUoU1BJTkxPQ0tfU0laRSwgc2l6ZW9mKHNwaW5sb2NrX3QpKTtcXG5rZXJuZWwvYm91bmRzLmM6MjY6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxua2VybmVsL2JvdW5kcy5jLTI3LVxcdERFRklORShMUlVfR0VOX1dJRFRILCBvcmRlcl9iYXNlXzIoTUFYX05SX0dFTlMgKyAxKSk7XFxuLS1cXG5rZXJuZWwvZm9yay5jPTI2OTQ9cGlkX3Qga2VybmVsX2Nsb25lKHN0cnVjdCBrZXJuZWxfY2xvbmVfYXJncyAqYXJncylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMjc3MS1cXG5rZXJuZWwvZm9yay5jOjI3NzI6XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VKSBcXHUwMDI2XFx1MDAyNiAhKGNsb25lX2ZsYWdzIFxcdTAwMjYgQ0xPTkVfVk0pKSB7XFxua2VybmVsL2ZvcmsuYy0yNzczLVxcdFxcdC8qIGxvY2sgdGhlIHRhc2sgdG8gc3luY2hyb25pemUgd2l0aCBtZW1jZyBtaWdyYXRpb24gKi9cXG4tLVxcbm1tL2ZvbGlvLmM9MzIyPXN0YXRpYyB2b2lkIF9fbHJ1X2NhY2hlX2FjdGl2YXRlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTM1MS1cXG5tbS9mb2xpby5jOjM1MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9mb2xpby5jLTM1My1cXG4tLVxcbm1tL2ZvbGlvLmM9Mzc4PXN0YXRpYyBib29sIGxydV9nZW5fY2xlYXJfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy0zOTUtXFxubW0vZm9saW8uYzozOTY6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxubW0vZm9saW8uYy0zOTctXFxuLS1cXG5tbS9mb2xpby5jPTQwMj1zdGF0aWMgYm9vbCBscnVfZ2VuX2NsZWFyX3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNDA2LVxcbm1tL2ZvbGlvLmM6NDA3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL2ZvbGlvLmMtNDA4LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2MjE9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjM3LVxcbm1tL21lbWNvbnRyb2wuYzo0NjM4OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL21lbWNvbnRyb2wuYy00NjM5LXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbHJ1X2dlbl9hdHRhY2goc3RydWN0IGNncm91cF90YXNrc2V0ICp0c2V0KVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ2NTc9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9scnVfZ2VuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQgKnRzZXQpIHt9XFxubW0vbWVtY29udHJvbC5jOjQ2NTg6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vbWVtY29udHJvbC5jLTQ2NTktXFxuLS1cXG5tbS9tZW1vcnkuYz02NzI2PXN0YXRpYyBpbmxpbmUgdm9pZCBtbV9hY2NvdW50X2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyxcXG4tLVxcbm1tL21lbW9yeS5jLTY3NzgtXFxubW0vbWVtb3J5LmM6Njc3OTojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS9tZW1vcnkuYy02NzgwLXN0YXRpYyB2b2lkIGxydV9nZW5fZW50ZXJfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1vcnkuYz02Nzk1PXN0YXRpYyB2b2lkIGxydV9nZW5fZXhpdF9mYXVsdCh2b2lkKVxcbi0tXFxubW0vbWVtb3J5LmMtNjc5Ny19XFxubW0vbWVtb3J5LmM6Njc5ODojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG5tbS9tZW1vcnkuYy02Nzk5LVxcbi0tXFxubW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODYyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2NS19XFxubW0vdm1zY2FuLmM6ODY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI3MDY9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3MTctXFxubW0vdm1zY2FuLmM6MjcxODojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNzE5LVxcbm1tL3Ztc2Nhbi5jPTI3MjA9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjcyMTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI3MjItREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yOTA2PXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjkyNS1cXG5tbS92bXNjYW4uYzoyOTI2OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTI3LVxcbi0tXFxubW0vdm1zY2FuLmM9MzAzNT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwNjMtXFxubW0vdm1zY2FuLmM6MzA2NDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzA2NS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5OTU9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5OTYtXFxubW0vdm1zY2FuLmM6NTk5NzojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTk4LVxcbi0tXFxubW0vdm1zY2FuLmM9NjAwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjAxMy1cXG5tbS92bXNjYW4uYzo2MDE0OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYwMTUtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MjEzPXN0YXRpYyB2b2lkIHVucGFja19zaGFkb3codm9pZCAqc2hhZG93LCBpbnQgKm1lbWNnaWRwLCBwZ19kYXRhX3QgKipwZ2RhdCxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYy0yMzItXFxubW0vd29ya2luZ3NldC5jOjIzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS93b3JraW5nc2V0LmMtMjM0LVxcbi0tXFxubW0vd29ya2luZ3NldC5jPTI5Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTMzNi1cXG5tbS93b3JraW5nc2V0LmM6MzM3OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3dvcmtpbmdzZXQuYy0zMzgtXFxuLS1cXG5tbS93b3JraW5nc2V0LmM9MzUwPXN0YXRpYyB2b2lkIGxydV9nZW5fcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtMzUzLVxcbm1tL3dvcmtpbmdzZXQuYzozNTQ6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vd29ya2luZ3NldC5jLTM1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6MjUuNjcxNzIzNDA5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDczMzY0MjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipNR0xSVSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuUmlnaHQsIHNvIE1HTFJVIGlzIGRlZmluaXRlbHkgc2l0dGluZyB1bmRlciBgQ09ORklHX0xSVV9HRU5gLiBUaGF0J3MgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFNpbmNlIE1HTFJVIHJlbGllcyBvbiBpdCwgZW5hYmxpbmcgYENPTkZJR19MUlVfR0VOYCBsb29rcyBsaWtlIGEgc21hcnQgbW92ZS4gQW5kLCBvZiBjb3Vyc2UsIGVuYWJsaW5nIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBtYWtlcyBpbnR1aXRpdmUgc2Vuc2UgdG8gYWN0dWFsbHkgbGV2ZXJhZ2UgdGhlIGZlYXR1cmUuIE5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHNvbWV0aGluZyBzcGVjaWZpYy4uLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIGlmIHRoZSBgZXZpY3RfZm9saW9zYCBmdW5jdGlvbiBpcyBhbHNvIHBhcnQgb2YgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHVtYnJlbGxhLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBjb3JlIHBhcnRzIGFyZSBhbGwgZW5hYmxlZCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczODIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNjo0MC43NDUwODk1ODVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MTMyODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2aWN0X2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz00ODYyPXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy00ODk1LVxcbm1tL3Ztc2Nhbi5jOjQ4OTY6c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxubW0vdm1zY2FuLmMtNDg5Ny1cXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYz01MDk5PXN0YXRpYyBib29sIHRyeV90b19zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01MTIyLVxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3NjYW4sIE1JTl9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjUxMjM6XFx0XFx0ZGVsdGEgPSBldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpO1xcbm1tL3Ztc2Nhbi5jLTUxMjQtXFx0XFx0aWYgKCFkZWx0YSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3MjY9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy01NzQ2LVxcdFxcdG5yX2JhdGNoID0gbWluKG5yX3RvX3JlY2xhaW0gLSBzYy1cXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcXG5tbS92bXNjYW4uYzo1NzQ3OlxcdFxcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcXG5tbS92bXNjYW4uYy01NzQ4LVxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxNjo0MC43OTQyMzM5NTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA4MjkwOTc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV2aWN0aW9uIEZ1bmN0aW9uJ3MgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIHRoaXMgYGV2aWN0X2ZvbGlvc2AgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBjb2RlLiBMZXQncyBzZWUuLi4gdGhlIGxpbmUgbnVtYmVyIGFwcGVhcnMgdG8gYmUgYXJvdW5kIDQ4OTYuIE5vdywgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoaXMgY29kZWJhc2UsIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgd2l0aCBgQ09ORklHX0xSVV9HRU5gLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgZXZpY3RfZm9saW9zYCBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhpcyB0ZWxscyBtZSBhIGxvdCBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoaXMgY29kZSBpcyBhY3RpdmUuIFVuZGVyc3RhbmRpbmcgdGhpcyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgd2hlbiBhbmQgaG93IHRoaXMgZnVuY3Rpb24gd2lsbCBhY3R1YWxseSBiZSBjb21waWxlZCBhbmQgdXNlZC4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBoZXJlIGFuZCBhIHF1aWNrIGNoZWNrIGNhbiBzYXZlIG1lIGEgbG90IG9mIHRpbWUgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDMyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTY6NDguODc3MTQ2MTY1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzE1LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNzE1OlxcdFxcdFxcdFxcdCAgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xcbjI3MTY6XFx0fVxcbjI3MTc6XFx0XFxuMjcxODpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG4yNzE5OlxcdFxcbjI3MjA6XFx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxuMjcyMTpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbjI3MjI6XFx0REVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuMjcyMzpcXHQjZGVmaW5lIGdldF9jYXAoY2FwKVxcdHN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZscnVfZ2VuX2NhcHNbY2FwXSlcXG4yNzI0OlxcdCNlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjQ4Ljg3NzQzOTU5NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTI5MTg0MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDT05GSUdfTFJVX0dFTiBpbiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBDT05GSUdfTFJVX0dFTmAgaXMgaW5kZWVkIGluaXRpYWxpemVkIGF0IDI3MTguIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IHByaW1hcnkgY29uY2VybiBub3cgaXMgdW5kZXJzdGFuZGluZyBpdHMgZmluYWwgdmFsdWUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ugd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiBhbnkgY29uZGl0aW9uYWwgbG9naWMgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBpdCdzIHVsdGltYXRlbHkgcmVzb2x2ZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGAjaWZkZWZgIGRpcmVjdGl2ZXMsIGFuZCBsb29rIGZvciBhbnkgc3ltYm9sIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIGR5bmFtaWNhbGx5IGFkanVzdCBpdHMgdmFsdWUgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgaXRzIGZpbmFsIHZhbHVlIGlzIGhhcmRjb2RlZCwgY2FsY3VsYXRlZCBiYXNlZCBvbiBvdGhlciBwYXJhbWV0ZXJzLCBvciBkZXRlcm1pbmVkIGJ5IHNvbWUgZXh0ZXJuYWwgZmFjdG9yIGxpa2UgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZm9sbG93IHRoZSBjb2RlIGZsb3cgdG8gZW5zdXJlIEkgaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIGxpZmVjeWNsZS4gVGhpcyBpcyBtb3JlIHRoYW4ganVzdCBrbm93aW5nIHdoZXJlIGl0ICpiZWdpbnMqOyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBjb21wbGV0ZSBjb250cm9sIGZsb3cgdG8gc2VlIHdoZXJlIGl0ICplbmRzKiB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg0NzMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjU4LjgwNjYyNzI4MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjk2NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTk5MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTk5MDpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNTk5MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNTk5MjpcXHRcXG41OTkzOlxcdFxcdHJldHVybiAwO1xcbjU5OTQ6XFx0fTtcXG41OTk1OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG41OTk2OlxcdFxcbjU5OTc6XFx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuNTk5ODpcXHRcXG41OTk5OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjAwMDpcXHR7XFxuNjAwMTpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MDAyOlxcdH1cXG42MDAzOlxcdFxcbjYwMDQ6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuNjAwNTpcXHR7XFxuNjAwNjpcXHRcXHRCVUlMRF9CVUcoKTtcXG42MDA3OlxcdH1cXG42MDA4OlxcdFxcbjYwMDk6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zaHJpbmtfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG42MDEwOlxcdHtcXG42MDExOlxcdFxcdEJVSUxEX0JVRygpO1xcbjYwMTI6XFx0fVxcbjYwMTM6XFx0XFxuNjAxNDpcXHQjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG42MDE1OlxcdFxcbjYwMTY6XFx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjYwMTc6XFx0e1xcbjYwMTg6XFx0XFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xcbjYwMTk6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW05SX0xSVV9MSVNUU107XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE2OjU4LjgwNzE1OTExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODc1MDExNjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBMUlUgUmVjbGFpbSBQYXRoIFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUgZmlyc3QgdGhpbmcgSSBzZWUgaXMgdGhhdCBgZXZpY3RfZm9saW9zYCBpcyBkZWZpbml0ZWx5IHVuZGVyIGBDT05GSUdfTFJVX0dFTmAuIFRoaXMgbWVhbnMgdGhhdCBib3RoIGBDT05GSUdfTFJVX0dFTmAgYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBuZWVkIHRvIGJlIGNvcnJlY3RseSBwbGFjZWQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgYSBrZXkgZmlyc3QgY2hlY2suXG5cbk5vdywgd2hhdCBhYm91dCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgPyBMb29raW5nIGF0IHRoZSBsaW5lIG51bWJlciwgYXJvdW5kIGxpbmUgMjAxNCwgaXQncyBiZWZvcmUgdGhlIGBDT05GSUdfTFJVX0dFTmAgY29uZGl0aW9uYWwuIFRoYXQgdGVsbHMgbWUgaXQncyBwYXJ0IG9mIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gcGF0aC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBib3RoLCB3aGljaCBtYWtlcyBzZW5zZSBiZWNhdXNlIGl0J3MgaGFuZGxpbmcgdGhyb3R0bGluZyBhbmQgZmF0YWwgc2lnbmFsIGhhbmRsaW5nIGluIGEgbW9yZSByb2J1c3Qgd2F5IGFjcm9zcyBib3RoIHR5cGVzLiBUaGF0J3MgYSBnb29kIHNpZ24g4oCTIGl0J3MgYWRkcmVzc2luZyBhIGZ1bmRhbWVudGFsIHByb2JsZW0gd2l0aCBsb29wcyBvbiB1bmV2aWN0YWJsZSBmb2xpb3MuXG5cbkkgbmVlZCB0byBmb2N1cyBvbiB0aGUgc3ltYm9scyBpbnZvbHZlZCBoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGl0IHVzZXMgYHRyeV90b19mcmVlX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YC4gVGhvc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IHByb2JhYmx5IGFyZSBiZWluZyBtb2RpZmllZCB0byBoYW5kbGUgdGhlIHRocm90dGxpbmcgYW5kIHNpZ25hbCBiYWlsb3V0cy4gSSB3YXMgYWxzbyBnb2luZyB0byBsb29rIGF0IGBiYWxhbmNlX3BnZGF0YCwgYnV0IHdhaXQuLi4gdGhhdCdzIHN0YXRpYy4gUmlnaHQsIGNhbid0IHVzZSBpdCBkaXJlY3RseS4gU28sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hlcmUgYW5kIGhvdyBgYmFsYW5jZV9wZ2RhdGAgaXMgdXNlZCBhbmQgaWYgaXQncyBpbmRpcmVjdGx5IGJlaW5nIGFmZmVjdGVkIG9yIGlmIEkgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIwOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE3OjA5LjY4MjE3NDk3OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0ODgzNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFsYW5jZV9wZ2RhdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz02ODYyPXVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLS1cXG5tbS92bXNjYW4uYy02ODg4LVxcdCAqIGhlcmUgaXMgbm90IGEgZ29vZCBpZGVhLCBzaW5jZSBpdCBsaW1pdHMgdGhlIHBhZ2VzIHdlIGNhbiBzY2FuLlxcbm1tL3Ztc2Nhbi5jOjY4ODk6XFx0ICogaWYgd2UgZG9uJ3QgcmVjbGFpbSBoZXJlLCB0aGUgc2hyaW5rX25vZGUgZnJvbSBiYWxhbmNlX3BnZGF0XFxubW0vdm1zY2FuLmMtNjg5MC1cXHQgKiB3aWxsIHBpY2sgdXAgcGFnZXMgZnJvbSBvdGhlciBtZW0gY2dyb3VwJ3MgYXMgd2VsbC4gV2UgaGFja1xcbi0tXFxubW0vdm1zY2FuLmM9NzA5Mj1zdGF0aWMgYm9vbCBwcmVwYXJlX2tzd2FwZF9zbGVlcChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03MDk1LVxcdC8qXFxubW0vdm1zY2FuLmM6NzA5NjpcXHQgKiBUaGUgdGhyb3R0bGVkIHByb2Nlc3NlcyBhcmUgbm9ybWFsbHkgd29rZW4gdXAgaW4gYmFsYW5jZV9wZ2RhdCgpIGFzXFxubW0vdm1zY2FuLmMtNzA5Ny1cXHQgKiBzb29uIGFzIGFsbG93X2RpcmVjdF9yZWNsYWltKCkgaXMgdHJ1ZS4gQnV0IHRoZXJlIGlzIGEgcG90ZW50aWFsXFxuLS1cXG5tbS92bXNjYW4uYy03MTAwLVxcdCAqIHRocm90dGxlZCwga3N3YXBkIHdha2VzLCBhIGxhcmdlIHByb2Nlc3MgZXhpdHMgdGhlcmVieSBiYWxhbmNpbmcgdGhlXFxubW0vdm1zY2FuLmM6NzEwMTpcXHQgKiB6b25lcywgd2hpY2ggY2F1c2VzIGtzd2FwZCB0byBleGl0IGJhbGFuY2VfcGdkYXQoKSBiZWZvcmUgcmVhY2hpbmdcXG5tbS92bXNjYW4uYy03MTAyLVxcdCAqIHRoZSB3YWtlIHVwIGNoZWNrcy4gSWYga3N3YXBkIGlzIGdvaW5nIHRvIHNsZWVwLCBubyBwcm9jZXNzIHNob3VsZFxcbi0tXFxubW0vdm1zY2FuLmMtNzEwNC1cXHQgKiB0aGUgd2FrZSB1cCBpcyBwcmVtYXR1cmUsIHByb2Nlc3NlcyB3aWxsIHdha2Uga3N3YXBkIGFuZCBnZXRcXG5tbS92bXNjYW4uYzo3MTA1OlxcdCAqIHRocm90dGxlZCBhZ2Fpbi4gVGhlIGRpZmZlcmVuY2UgZnJvbSB3YWtlIHVwcyBpbiBiYWxhbmNlX3BnZGF0KCkgaXNcXG5tbS92bXNjYW4uYy03MTA2LVxcdCAqIHRoYXQgaGVyZSB3ZSBhcmUgdW5kZXIgcHJlcGFyZV90b193YWl0KCkuXFxuLS1cXG5tbS92bXNjYW4uYz03MTg2PWNsZWFyX3JlY2xhaW1fYWN0aXZlKHBnX2RhdGFfdCAqcGdkYXQsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MTkxLS8qXFxubW0vdm1zY2FuLmM6NzE5MjogKiBGb3Iga3N3YXBkLCBiYWxhbmNlX3BnZGF0KCkgd2lsbCByZWNsYWltIHBhZ2VzIGFjcm9zcyBhIG5vZGUgZnJvbSB6b25lc1xcbm1tL3Ztc2Nhbi5jLTcxOTMtICogdGhhdCBhcmUgZWxpZ2libGUgZm9yIHVzZSBieSB0aGUgY2FsbGVyIHVudGlsIGF0IGxlYXN0IG9uZSB6b25lIGlzXFxuLS1cXG5tbS92bXNjYW4uYy03MjAzLSAqL1xcbm1tL3Ztc2Nhbi5jOjcyMDQ6c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy03MjA1LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcyMTktXFxubW0vdm1zY2FuLmM6NzIyMDpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9iZWdpbihwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzIyMS1cXHRcXHRcXHRcXHRcXHQgICAgaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc0MTQtXFxubW0vdm1zY2FuLmM6NzQxNTpcXHR0cmFjZV9tbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLm9yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc0MTYtXFx0XFx0XFx0XFx0XFx0ICBoaWdoZXN0X3pvbmVpZHgsIHNjLm5yX3JlY2xhaW1lZCk7XFxuLS1cXG5tbS92bXNjYW4uYz03NTM5PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuLS1cXG5tbS92bXNjYW4uYy03NTg1LVxcdFxcdC8qXFxubW0vdm1zY2FuLmM6NzU4NjpcXHRcXHQgKiBXZSBjYW4gc3BlZWQgdXAgdGhhd2luZyB0YXNrcyBpZiB3ZSBkb24ndCBjYWxsIGJhbGFuY2VfcGdkYXRcXG5tbS92bXNjYW4uYy03NTg3LVxcdFxcdCAqIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZSByZWZyaWdlcmF0b3JcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MDEtXFx0XFx0XFx0XFx0XFx0XFx0YWxsb2Nfb3JkZXIpO1xcbm1tL3Ztc2Nhbi5jOjc2MDI6XFx0XFx0cmVjbGFpbV9vcmRlciA9IGJhbGFuY2VfcGdkYXQocGdkYXQsIGFsbG9jX29yZGVyLFxcbm1tL3Ztc2Nhbi5jLTc2MDMtXFx0XFx0XFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTc6MDkuNzMzNjY5OTU3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwNDYwNjk4NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQ6XG5cbioqSW50ZXJuYWwgTWVtb3J5IE1hbmFnZW1lbnQgTXVzaW5ncyoqXG5cblJpZ2h0LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhlIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGhlcmUuIExldCdzIHNlZS4uLiAqYmFsYW5jZV9wZ2RhdCogaXMgZGVmaW5pdGVseSBhIHN0YXRpYyB2YXJpYWJsZSwgYW5kIHRoYXQncyBzb21ldGhpbmcgdG8gbWFrZSBhIG5vdGUgb2YuIEFsd2F5cyBnb29kIHRvIHJlZnJlc2ggb24gdGhlIGJhc2ljcy4gSSdtIHRyeWluZyB0byByZW1lbWJlciB3aGF0IGNvbnRleHQgdGhhdCBpcyBpbiBhbmQgaG93IGl04oCZcyBiZWluZyB1c2VkLiBOb3csICprc3dhcGRfcnVuKi4uLmhtbW0uIFRoYXQncyBhIGRpZmZlcmVudCBiZWFzdCBlbnRpcmVseS4gTm93IEkgbmVlZCB0byBjb25zaWRlciBpdCdzIHJlbGF0aW9uIHRvIGJhbGFuY2VfcGdkYXQuIEhvdyBpcyB0aGUga2VybmVsJ3Mgc3dhcHBpbmcgZGFlbW9uLCBga3N3YXBkX3J1bmAsIGludGVyYWN0aW5nIHdpdGggdGhlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGl0J3MgdXNpbmc/IEkgbmVlZCB0byB0aGluayBhYm91dCB0aGF0IGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzE3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTc6MzAuMTk0MzczNjQ5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjMwNzU0MTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZF9ydW5cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zd2FwLmg9MzM4PXZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTMzOS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDozNDA6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZCk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtMzQxLWV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfc3RvcChpbnQgbmlkKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjMxLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIzMjpcXHRrc3dhcGRfcnVuKG5pZCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMjMzLVxcdGtjb21wYWN0ZF9ydW4obmlkKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3MDA9dW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0pXFxuLS1cXG5tbS92bXNjYW4uYy03NzMyLSAqL1xcbm1tL3Ztc2Nhbi5jOjc3MzM6dm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTc3MzQte1xcbi0tXFxubW0vdm1zY2FuLmM9Nzc5Mz1zdGF0aWMgaW50IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmMtNzc5Ny1cXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxubW0vdm1zY2FuLmM6Nzc5ODogXFx0XFx0a3N3YXBkX3J1bihuaWQpO1xcbm1tL3Ztc2Nhbi5jLTc3OTktXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgdm1zY2FuX3N5c2N0bF90YWJsZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE3OjMxLjgyNTEzMzEyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzM0NDA3MTc4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVGhpbmtpbmcgVGhyb3VnaCBNZW1vcnkgUmVjbGFtYXRpb24qKlxuXG5Pa2F5LCBzbyBga3N3YXBkX3J1bmAsIHJpZ2h0PyBJdCdzIGp1c3QgdGhlIGluaXRpYWwgdGhyZWFkIGxhdW5jaCwgc2V0dGluZyB0aGUgd2hvbGUgdGhpbmcgaW4gbW90aW9uLiBJdCdzIHRoZSBzdGFydGluZyBndW4uXG5cbkJ1dCB3aGF0IGFib3V0IHRoZSBjb3JlIGZ1bmN0aW9uPyBgcmVjbGFpbV9wYWdlc2AuIFRoYXQncyB3aGVyZSB0aGUgYWN0dWFsIGhlYXZ5IGxpZnRpbmcgaGFwcGVucy4gV2hhdCdzIGl0IGRvaW5nIGF0IGEgZnVuY3Rpb25hbCBsZXZlbD8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYW5kIGFsZ29yaXRobXMgaW52b2x2ZWQ/IEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhhdCBmdW5jdGlvbi4gVGhhdOKAmXMgd2hlcmUgdGhlIGtleSBwcm9jZXNzZXMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM0MCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE3OjQ1LjE2OTIwNzMyNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NTYwODgxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWNsYWltX3BhZ2VzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz0yNTc9c3RhdGljIHZvaWQgc2d4X3JlY2xhaW1lcl93cml0ZShzdHJ1Y3Qgc2d4X2VwY19wYWdlICplcGNfcGFnZSxcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDItICovXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jOjMwMzpzdGF0aWMgdm9pZCBzZ3hfcmVjbGFpbV9wYWdlcyh2b2lkKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYy0zMDQte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jPTM5Nj12b2lkIHNneF9yZWNsYWltX2RpcmVjdCh2b2lkKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTM5OC1cXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9MT1dfUEFHRVMpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzozOTk6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNDAwLX1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz00MDI9c3RhdGljIGludCBrc2d4ZCh2b2lkICpwKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMS1cXHRcXHRpZiAoc2d4X3Nob3VsZF9yZWNsYWltKFNHWF9OUl9ISUdIX1BBR0VTKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmM6NDIyOlxcdFxcdFxcdHNneF9yZWNsYWltX3BhZ2VzKCk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvbWFpbi5jLTQyMy1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYz01Njc9c3RydWN0IHNneF9lcGNfcGFnZSAqc2d4X2FsbG9jX2VwY19wYWdlKHZvaWQgKm93bmVyLCBib29sIHJlY2xhaW0pXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkwLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L21haW4uYzo1OTE6XFx0XFx0c2d4X3JlY2xhaW1fcGFnZXMoKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9tYWluLmMtNTkyLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmM9Mzg3PXN0YXRpYyB2b2lkIHNsYV9mcmVlKHN0cnVjdCBzbGFfYWRkcl90IHNsYSwgc2l6ZV90IGxlbiwgYm9vbCBmaXJtd2FyZV9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LXRpby5jLTQwMy1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDQ6XFx0XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNjYXR0ZXJbaV0pLCAxLCBmYWxzZSk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYtdGlvLmMtNDA1LVxcdFxcdFxcdFxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MDgtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYzo0MDk6XFx0XFx0XFx0cmV0ID0gc25wX3JlY2xhaW1fcGFnZXMoc2xhX3RvX3BhKHNsYSksIDEsIGZhbHNlKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi10aW8uYy00MTAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz0zNTg9c3RhdGljIGludCBzZXZfd3JpdGVfaW5pdF9leF9maWxlX2lmX3JlcXVpcmVkKGludCBjbWRfaWQpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTM4My1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjM4NDppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0zODUte1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MTctfVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6NDE4OkVYUE9SVF9TWU1CT0xfR1BMKHNucF9yZWNsYWltX3BhZ2VzKTtcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTQxOS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQyMD1zdGF0aWMgaW50IHJtcF9tYXJrX3BhZ2VzX2Zpcm13YXJlKHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGludCBucGFnZXMsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00MzgtXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0Mzk6XFx0c25wX3JlY2xhaW1fcGFnZXMocGFkZHIsIGksIGxvY2tlZCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00NDAtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTQ3OT1zdGF0aWMgdm9pZCBfX3NucF9mcmVlX2Zpcm13YXJlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIsIGJvb2wgbG9ja2VkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00ODgtXFx0aWYgKHNldi1cXHUwMDNlc25wX2luaXRpYWxpemVkIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzo0ODk6XFx0ICAgIHNucF9yZWNsYWltX3BhZ2VzKHBhZGRyLCBucGFnZXMsIGxvY2tlZCkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy00OTAtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYz03MTI9c3RhdGljIGludCBzbnBfdW5tYXBfY21kX2J1Zl9kZXNjKHN0cnVjdCBjbWRfYnVmX2Rlc2MgKmRlc2MpXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTcyMS1cXHQvKiBUcmFuc2l0aW9uIHRoZSBidWZmZXJzIGJhY2sgdG8gaHlwZXJ2aXNvci1vd25lZC4gKi9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjcyMjpcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoKmRlc2MtXFx1MDAzZXBhZGRyX3B0ciwgbnBhZ2VzLCB0cnVlKSkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtNzIzLVxcdFxcdHByX3dhcm4oXFxcIkZhaWxlZCB0byByZWNsYWltIGZpcm13YXJlLW93bmVkIHBhZ2VzIHdoaWxlIGlzc3VpbmcgU0VWIGxlZ2FjeSBjb21tYW5kLlxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTgzMz1zdGF0aWMgaW50IHNucF9yZWNsYWltX2NtZF9idWYoaW50IGNtZCwgdm9pZCAqY21kX2J1ZilcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtODQyLVxcdGlmIChzZXZfY21kX2J1Zl93cml0YWJsZShjbWQpKVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6ODQzOlxcdFxcdGlmIChzbnBfcmVjbGFpbV9wYWdlcyhfX3BhKGNtZF9idWYpLCAxLCB0cnVlKSlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTg0NC1cXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM9MTM1NT1zdGF0aWMgaW50IF9fc2V2X3NucF9pbml0X2xvY2tlZChpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbWF4X3NucF9hc2lkKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0xNDk0LVxcdFxcdCAqIFRoaXMgZXhlY3V0ZXMgd2l0aCB0aGUgc2V2X2NtZF9tdXRleCBoZWxkIHNvIGRvd24gdGhlIHN0YWNrXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYzoxNDk1OlxcdFxcdCAqIHNucF9yZWNsYWltX3BhZ2VzKGxvY2tlZD1mYWxzZSkgbWlnaHQgYmUgbmVlZGVkICh3aGljaCBpcyBleHRyZW1lbHlcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTE0OTYtXFx0XFx0ICogdW5saWtlbHkpIGJ1dCB3aWxsIGNhdXNlIGEgZGVhZGxvY2suXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jPTIzNzI9c3RhdGljIGludCBfX3Nldl9kb19zbnBfcGxhdGZvcm1fc3RhdHVzKHN0cnVjdCBzZXZfdXNlcl9kYXRhX3NucF9zdGF0dXMgKnN0YXR1cyxcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmMtMjQwNy1cXHRcXHQgKiBUaGUgc3RhdHVzIHBhZ2Ugd2lsbCBiZSBpbiBSZWNsYWltIHN0YXRlIG9uIHN1Y2Nlc3MsIG9yIGxlZnRcXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jOjI0MDg6XFx0XFx0ICogaW4gRmlybXdhcmUgc3RhdGUgb24gZmFpbHVyZS4gVXNlIHNucF9yZWNsYWltX3BhZ2VzKCkgdG9cXG5kcml2ZXJzL2NyeXB0by9jY3Avc2V2LWRldi5jLTI0MDktXFx0XFx0ICogdHJhbnNpdGlvbiBlaXRoZXIgY2FzZSBiYWNrIHRvIEh5cGVydmlzb3Itb3duZWQgc3RhdGUuXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEwLVxcdFxcdCAqL1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9zZXYtZGV2LmM6MjQxMTpcXHRcXHRpZiAoc25wX3JlY2xhaW1fcGFnZXMoX19wYShkYXRhKSwgMSwgdHJ1ZSkpXFxuZHJpdmVycy9jcnlwdG8vY2NwL3Nldi1kZXYuYy0yNDEyLVxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYz0yODA9dm9pZCBtbHg1X3BhZ2VzX2RlYnVnZnNfaW5pdChzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTAtXFx0ZGVidWdmc19jcmVhdGVfdTMyKFxcXCJmd19wYWdlc19yZWNsYWltX2Rpc2NhcmRcXFwiLCAwNDAwLCBwYWdlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jOjI5MTpcXHRcXHRcXHQgICBcXHUwMDI2ZGV2LVxcdTAwM2Vwcml2LnJlY2xhaW1fcGFnZXNfZGlzY2FyZCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYy0yOTItfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmM9MTI3PXN0YXRpYyBpbnQgdG91dF9xdWVyeV9kdG9yKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYy0xNDgtXFx0TUxYNV9USU1FT1VUX0ZJTEwoZnNtX3JlYWN0aXZhdGVfdG8sIG91dCwgZGV2LCBNTFg1X1RPX0ZTTV9SRUFDVElWQVRFX01TLCAwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGliL3RvdXQuYzoxNDk6XFx0TUxYNV9USU1FT1VUX0ZJTEwocmVjbGFpbV9wYWdlc190bywgb3V0LCBkZXYsIE1MWDVfVE9fUkVDTEFJTV9QQUdFU19NUywgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xpYi90b3V0LmMtMTUwLVxcdE1MWDVfVElNRU9VVF9GSUxMKHJlY2xhaW1fdmZzX3BhZ2VzX3RvLCBvdXQsIGRldiwgTUxYNV9UT19SRUNMQUlNX1ZGU19QQUdFU19NUywgMCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM9NTE4PXN0YXRpYyB1MzIgZndwX2ZpbGxfbWFuYWdlX3BhZ2VzX291dChzdHJ1Y3QgZndfcGFnZSAqZndwLCB1MzIgKm91dCwgdTMyIGluZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTUzNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6NTM2OnN0YXRpYyBpbnQgcmVjbGFpbV9wYWdlc19jbWQoc3RydWN0IG1seDVfY29yZV9kZXYgKmRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTM3LVxcdFxcdFxcdCAgICAgdTMyICppbiwgaW50IGluX3NpemUsIHUzMiAqb3V0LCBpbnQgb3V0X3NpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNTc0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo1NzU6c3RhdGljIGludCByZWNsYWltX3BhZ2VzKHN0cnVjdCBtbHg1X2NvcmVfZGV2ICpkZXYsIHUxNiBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTU3Ni1cXHRcXHRcXHQgaW50IG5wYWdlcywgaW50ICpuY2xhaW1lZCwgYm9vbCBldmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02MDYtXFx0XFx0ICAgICAgbWx4NV9wYWdlX21ndF9tb2RlX2lzX3ZoY2FfaWQoZGV2KSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYwNzpcXHRlcnIgPSByZWNsYWltX3BhZ2VzX2NtZChkZXYsIGluLCBzaXplb2YoaW4pLCBvdXQsIG91dGxlbik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOC1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTYwOS1cXHRcXHRucGFnZXMgPSBNTFg1X0dFVChtYW5hZ2VfcGFnZXNfaW4sIGluLCBpbnB1dF9udW1fZW50cmllcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jOjYxMDpcXHRcXHRkZXYtXFx1MDAzZXByaXYucmVjbGFpbV9wYWdlc19kaXNjYXJkICs9IG5wYWdlcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjExLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz02NDM9c3RhdGljIHZvaWQgcGFnZXNfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy02NTEtXFx0ZWxzZSBpZiAocmVxLVxcdTAwM2VucGFnZXMgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo2NTI6XFx0XFx0ZXJyID0gcmVjbGFpbV9wYWdlcyhkZXYsIHJlcS1cXHUwMDNlZnVuY19pZCwgLTEgKiByZXEtXFx1MDAzZW5wYWdlcywgTlVMTCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtNjUzLVxcdFxcdFxcdFxcdCAgICB0cnVlLCByZXEtXFx1MDAzZWVjX2Z1bmN0aW9uKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYz04MzA9c3RhdGljIGludCBtbHg1X3JlY2xhaW1fcm9vdF9wYWdlcyhzdHJ1Y3QgbWx4NV9jb3JlX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmM6ODQyOlxcdFxcdGVyciA9IHJlY2xhaW1fcGFnZXMoZGV2LCBmdW5jX3ZoY2FfaWQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL3BhZ2VhbGxvYy5jLTg0My1cXHRcXHRcXHRcXHQgICAgb3B0aW1hbF9yZWNsYWltZWRfcGFnZXMoKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYy04NDYtXFx0XFx0XFx0bWx4NV9jb3JlX3dhcm4oZGV2LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9wYWdlYWxsb2MuYzo4NDc6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJyZWNsYWltX3BhZ2VzIGVyciAoJWQpIGZ1bmNfdmhjYV9pZD0weCV4IGVjX2Z1bmM9MHgleFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvcGFnZWFsbG9jLmMtODQ4LVxcdFxcdFxcdFxcdCAgICAgICBlcnIsIGZ1bmNfdmhjYV9pZCwgZWNfZnVuY3Rpb24pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L2RyaXZlci5oPTU3Mz1zdHJ1Y3QgbWx4NV9wcml2IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODctXFx0dTMyXFx0XFx0XFx0Z2l2ZV9wYWdlc19kcm9wcGVkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaDo1ODg6XFx0dTMyXFx0XFx0XFx0cmVjbGFpbV9wYWdlc19kaXNjYXJkO1xcbmluY2x1ZGUvbGludXgvbWx4NS9kcml2ZXIuaC01ODktXFx0ZW51bSBtbHg1X3BhZ2VfbWd0X21vZGVcXHRwYWdlX21ndF9tb2RlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmg9MzQ1NT1zdHJ1Y3QgbWx4NV9pZmNfZHRvcl9yZWdfYml0cyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21seDUvbWx4NV9pZmMuaC0zNDc1LVxcbmluY2x1ZGUvbGludXgvbWx4NS9tbHg1X2lmYy5oOjM0NzY6XFx0c3RydWN0IG1seDVfaWZjX2RlZmF1bHRfdGltZW91dF9iaXRzIHJlY2xhaW1fcGFnZXNfdG87XFxuaW5jbHVkZS9saW51eC9tbHg1L21seDVfaWZjLmgtMzQ3Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oPTEwODE9dm9pZCAqc25wX2FsbG9jX2Zpcm13YXJlX3BhZ2UoZ2ZwX3QgbWFzayk7XFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg6MTA4MjppbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpO1xcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oLTEwODMtdm9pZCBzbnBfZnJlZV9maXJtd2FyZV9wYWdlKHZvaWQgKmFkZHIpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2Lmg9MTExNT1zdGF0aWMgaW5saW5lIHZvaWQgKnNucF9hbGxvY19maXJtd2FyZV9wYWdlKGdmcF90IG1hc2spXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BzcC1zZXYuaC0xMTE5LVxcbmluY2x1ZGUvbGludXgvcHNwLXNldi5oOjExMjA6c3RhdGljIGlubGluZSBpbnQgc25wX3JlY2xhaW1fcGFnZXModW5zaWduZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgaW50IG5wYWdlcywgYm9vbCBsb2NrZWQpXFxuaW5jbHVkZS9saW51eC9wc3Atc2V2LmgtMTEyMS17XFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD00MDk9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX3dyaXRlX2ZvbGlvLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmgtNDMxLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjQzMjpUUkFDRV9FVkVOVChtbV92bXNjYW5fcmVjbGFpbV9wYWdlcyxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC00MzMtXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTI3MS1cXHRcXHRkYW1vc19kZXN0cm95X2ZpbHRlcihmaWx0ZXIpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjcyOlxcdGFwcGxpZWQgPSByZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9kYW1vbi9wYWRkci5jLTI3My1cXHRjb25kX3Jlc2NoZWQoKTtcXG4tLVxcbm1tL2ludGVybmFsLmg9MTE5OT1leHRlcm4gdW5zaWduZWQgbG9uZyAgX19tdXN0X2NoZWNrIHZtX21tYXBfcGdvZmYoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZyxcXG4tLVxcbm1tL2ludGVybmFsLmgtMTIwMi1cXG5tbS9pbnRlcm5hbC5oOjEyMDM6dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpO1xcbm1tL2ludGVybmFsLmgtMTIwNC11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNDQzLVxcdFxcdGlmIChwYWdlb3V0KVxcbm1tL21hZHZpc2UuYzo0NDQ6XFx0XFx0XFx0cmVjbGFpbV9wYWdlcyhcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vbWFkdmlzZS5jLTQ0NS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21hZHZpc2UuYy01NjItXFx0aWYgKHBhZ2VvdXQpXFxubW0vbWFkdmlzZS5jOjU2MzpcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9tYWR2aXNlLmMtNTY0LVxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjE4MD1zdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtMjE5OS1cXHR9XFxubW0vdm1zY2FuLmM6MjIwMDpcXHR0cmFjZV9tbV92bXNjYW5fcmVjbGFpbV9wYWdlcyhwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgc2MubnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCk7XFxubW0vdm1zY2FuLmMtMjIwMS1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMDQtXFxubW0vdm1zY2FuLmM6MjIwNTp1bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcXG5tbS92bXNjYW4uYy0yMjA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTc6NDYuODI0ODI1MjE2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MzcxNjA4MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBNZW1vcnkgUmVjbGFpbSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gbWVtb3J5IHJlY2xhaW0gYW5kIHdhbnQgdG8gaWRlbnRpZnkgc29tZSBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24uIGByZWNsYWltX3BhZ2VzYCBkZWZpbml0ZWx5IGp1bXBzIG91dDsgaXQncyBub24tc3RhdGljIGFuZCBzZWVtcyB0byBiZSBhIGNlbnRyYWwgZnVuY3Rpb24sIGNhbGxlZCBieSBib3RoIGBtYWR2aXNlYCBhbmQgYGRhbW9uYCwgd2hpY2ggaXMgYSBnb29kIHNpZ24uIEl0J3MgYSBrZXkgcG9pbnQgdG8gZXhhbWluZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGBzaHJpbmtfYWxsX21lbW9yeWAg4oCTIEkgcmVtZW1iZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCBoaWJlcm5hdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3Qgd2hlcmUgdGhlIGNvcmUsIGZyZXF1ZW50IHJlY2xhaW0gYWN0aXZpdHkgbGllcy4gVGhlIHJlYWwgYWN0aW9uIGlzIHByb2JhYmx5IGVsc2V3aGVyZS5cblxuQWxyaWdodCwgdGhlIGNvcmUgZnVuY3Rpb25zIEkgd2FudCB0byBob25lIGluIG9uIGFyZSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCwgb2YgY291cnNlLCBgcmVjbGFpbV9wYWdlc2AuIEdvdHRhIHNlZSBob3cgdGhvc2UgYWxsIHdvcmsuXG5cbldhaXQgYSBzZWNvbmTigKYgYHRyeV90b19mcmVlX3BhZ2VzYCBpcyBjYWxsZWQgYnkgYF9fcGVyZm9ybV9yZWNsYWltYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgYnkgYF9fYWxsb2NfcGFnZXNfZGlyZWN0X3JlY2xhaW1gLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBfX2FsbG9jX3BhZ2VzX3Nsb3dwYXRoYC4gQmluZ28hIFRoaXMgaXMgdGhlIGRpcmVjdCByZWNsYWltIHBhdGgsIGFuZCBpdCdzIGxvb2tpbmcgaG90LCB3aGljaCBtZWFucyBpdCBzaG91bGQgYmUgdmVyeSBpbXBvcnRhbnQuIFRoYXQgaXMgYSB2ZXJ5IGRpcmVjdCBwYXRoIHRvIHRoZSByZWNsYWltIHByb2Nlc3MuXG5cblNvLCBpcyBgcmVjbGFpbV9wYWdlc2AgaXRzZWxmIHRoYXQgaG90PyBDaGVja2luZyBiYWNrLCBpdCdzIGNhbGxlZCBieSBgbWFkdmlzZShNQURWX1BBR0VPVVQpYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgaXQgbWVhbnMgdGhpcyBjb3VsZCBiZSBhbiBleGNlbGxlbnQgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgdXNlci1jb250cm9sbGFibGUgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIGl0IGhpZ2ggdmFsdWUuXG5cbkxldCBtZSB0YWtlIGEgcXVpY2sgbG9vayBhdCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AgbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MjMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTg6MDQuMTk2NDM2NDgxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY0MDc2MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD03Mj11bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Mi1cXG5tbS9pbnRlcm5hbC5oOjgzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vaW50ZXJuYWwuaC04NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE3NzE9c3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4MTUtXFxubW0vbWVtY29udHJvbC12MS5jOjE4MTY6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODE3LVxcdFxcdFxcdFxcdG1lbXN3ID8gMCA6IE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTgzND1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NTEtXFxubW0vbWVtY29udHJvbC12MS5jOjE4NTI6XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODUzLVxcdFxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjM3Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWNsYWltX2hpZ2goc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTIzODgtXFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyMzg5OlxcdFxcdG5yX3JlY2xhaW1lZCArPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyxcXG5tbS9tZW1jb250cm9sLmMtMjM5MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRnZnBfbWFzayxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNjQwPXN0YXRpYyBpbnQgdHJ5X2NoYXJnZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI3MTItXFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL21lbWNvbnRyb2wuYzoyNzEzOlxcdG5yX3JlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtX292ZXJfbGltaXQsIG5yX3BhZ2VzLFxcbm1tL21lbWNvbnRyb2wuYy0yNzE0LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBnZnBfbWFzaywgcmVjbGFpbV9vcHRpb25zLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODMyPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODczLVxcbm1tL21lbWNvbnRyb2wuYzo0ODc0OlxcdFxcdHJlY2xhaW1lZCA9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIG5yX3BhZ2VzIC0gaGlnaCxcXG5tbS9tZW1jb250cm9sLmMtNDg3NS1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00ODkxPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ5MzItXFx0XFx0aWYgKG5yX3JlY2xhaW1zKSB7XFxubW0vbWVtY29udHJvbC5jOjQ5MzM6XFx0XFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcyAtIG1heCxcXG5tbS9tZW1jb250cm9sLmMtNDkzNC1cXHRcXHRcXHRcXHRcXHRHRlBfS0VSTkVMLCBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4NjI9dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5MDEtXFxubW0vdm1zY2FuLmM6NjkwMjp1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTY5MDMtXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY5NDItI2Vsc2VcXG5tbS92bXNjYW4uYzo2OTQzOnVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjk0NC1cXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9ODAwNT1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDc2LVxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxubW0vdm1zY2FuLmM6ODA3NzpcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbm1tL3Ztc2Nhbi5jLTgwNzgtXFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxODowNS44NjA1MjEyODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc5Njc3MDQ1NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgUHJlc3N1cmUgYW5kIFJlY2xhbWF0aW9uKipcblxuT2theSwgc28gYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGlzIGEgY3JpdGljYWwgZnVuY3Rpb24uIEl0J3MgdGhlIGx5bmNocGluIGZvciBkZWFsaW5nIHdpdGggbWVtb3J5IHByZXNzdXJlIHdpdGhpbiBjZ3JvdXBzLCBhbmQgaXRzIGNhbGxzIGZyb20gYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIHJlYWxseSBoaWdobGlnaHQgd2hlcmUgdGhlIHN5c3RlbSBpcyBmb2N1c2luZyBpdHMgcmVjbGFtYXRpb24gZWZmb3J0cy4gVGhhdCdzIGEgc29saWQgaW5kaWNhdG9yIG9mIHdoZXJlIHRvIGRpdmUgZGVlcGVyLlxuXG5gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBMZXQgbWUgZHJpbGwgZG93biBvbiB0aGF0IGZ1bmN0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGlzICphY3RpdmVseSogYXR0ZW1wdGluZyB0byBmcmVlIG1lbW9yeSwgYXMgb3Bwb3NlZCB0byBqdXN0IHJlYWN0aW5nIHRvIGFuIGFic29sdXRlIHRocmVzaG9sZC4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbGllLCBhbmQgd2hlcmUgSSBjYW4gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcm9hY3RpdmUgcmVjbGFpbSBzdHJhdGVnaWVzIGJlaW5nIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY5NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE4OjIzLjgyODIyOTQ0NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0ODg3NDg5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9Njk5PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjcwMDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC03MDEtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDY3PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNzItXFxubW0vbWVtY29udHJvbC5jOjUwNzM6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTA3NC1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5OT1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy04MDA0LVxcbm1tL3Ztc2Nhbi5jOjgwMDU6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTgwMDYtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODE1OD1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNjMtXFxubW0vdm1zY2FuLmM6ODE2NDpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODE2NS1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE4OjI1LjM3NzExMDQ0OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MjQ2Mzk0MjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBSZWNsYWltIEZvY3VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSByZWNsYWltIHdvcmtzLCBzcGVjaWZpY2FsbHkgYXQgd2hhdCdzIGJlaW5nIGhpZ2hsaWdodGVkIGFzIGtleSBhcmVhcy4gSSBzZWUgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdHJpZ2dlcmVkIGJ5IGBtZW1vcnlfcmVjbGFpbWAgd2hpY2ggSSBrbm93IGlzIGEgc3lzZnMvY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc3RhcnRpbmcgcG9pbnQsIGl0J3MgYSBzdHJvbmcgZm9jdXMgc3ltYm9sLlxuXG5UaGVuIEkgc2VlIHRoZSBjb3JlIGZvY3VzIHBvaW50cyBhcmU6IGByZWNsYWltX3BhZ2VzYCwgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5IbW0sIGB0cnlfdG9fZnJlZV9wYWdlc2AgZmVlbHMgYSBsaXR0bGUgZ2VuZXJpYywgaXQncyBicm9hZC4gQnV0IGByZWNsYWltX3BhZ2VzYCBhbmQgZXNwZWNpYWxseSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYXJlIHByZWNpc2VseSB3aGF0IEknbSBsb29raW5nIGZvciAtIHRoZXkncmUgcmlnaHQgb24gdGFyZ2V0LiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjcml0aWNhbCBjb250cm9sIHBvaW50cy5cblxuTm93LCBJJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfTUVNQ0dgIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQgZm9yIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCBhbmQgZm9yIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgdGhvdWdoIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBnZXRzIGNhbGxlZCBieSBgcmVjbGFpbV9zdG9yZWAgd2hpY2ggaXMgYXQgYSBub2RlIGxldmVsLiBJbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgzNjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTg6MzQuNjIzNTA4MTJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTY3MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDM9c3RhdGljIGludCBzY19zd2FwcGluZXNzKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yMDktXFxubW0vdm1zY2FuLmM6MjEwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMTEtXFxuLS1cXG5tbS92bXNjYW4uYz0yNzcwPXN0YXRpYyBzdHJ1Y3QgbHJ1dmVjICpnZXRfbHJ1dmVjKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI3NzMtXFxubW0vdm1zY2FuLmM6Mjc3NDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjc3NS1cXHRpZiAobWVtY2cpIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5Mjg9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzQtXFxubW0vdm1zY2FuLmM6MjkzNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzNi1cXHRpZiAobWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYz0yOTY4PXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTc0LVxcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZWxydV9nZW4ubGlzdCkpO1xcbm1tL3Ztc2Nhbi5jOjI5NzU6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5NzYtXFx0Vk1fV0FSTl9PTl9PTkNFKG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5OTU9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMDMtXFxubW0vdm1zY2FuLmM6MzAwNDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAwNS1cXHRtZW1jZyA9IG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnO1xcbi0tXFxubW0vdm1zY2FuLmMtMzAyNy1cXG5tbS92bXNjYW4uYzozMDI4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0zMDI5LVxcdG1lbV9jZ3JvdXBfcHV0KG1tLVxcdTAwM2VscnVfZ2VuLm1lbWNnKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMzMtXFxubW0vdm1zY2FuLmM6MzAzNDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMzAzNS12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ0MDg9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NDUzLVxcbm1tL3Ztc2Nhbi5jOjQ0NTQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTQ0NTUtXFxuLS1cXG5tbS92bXNjYW4uYz00NjQ2PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy00NjY4LVxcbm1tL3Ztc2Nhbi5jOjQ2Njk6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Ztc2Nhbi5jLTQ2NzAtXFxuLS1cXG5tbS92bXNjYW4uYz01NjUyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS92bXNjYW4uYy01NjY1LVxcbm1tL3Ztc2Nhbi5jOjU2NjY6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTU2NjctXFx0XFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9NTkxOD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTkzNy1cXG5tbS92bXNjYW4uYzo1OTM4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01OTM5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk1MT12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc3LVxcbm1tL3Ztc2Nhbi5jOjU5Nzg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Ztc2Nhbi5jLTU5NzktXFxuLS1cXG5tbS92bXNjYW4uYz02ODE2PXVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNjg1OC1cXG5tbS92bXNjYW4uYzo2ODU5OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy02ODYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxODozNC42NzA2ODI1NzhaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MzEzNDIwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IHdpdGggQ09ORklHX01FTUNHKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgcGF0Y2ggaW50ZXJhY3RzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aGVyZSBgQ09ORklHX01FTUNHYCBpcyBoZWF2aWx5IGludm9sdmVkLCB3aGljaCBpcyBxdWl0ZSBhIGJpdCBpbiBgbW0vdm1zY2FuLmNgLiBHaXZlbiB0aGF0LCBteSBFbmFibGVDb25maWdzIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgYExSVV9HRU5gLCBgTFJVX0dFTl9FTkFCTEVEYCwgYW5kIGBNRU1DR2AuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQsIHNvIEkndmUgaWRlbnRpZmllZCBgcmVjbGFpbV9wYWdlc2AsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhcyBteSBmb2N1cyBzeW1ib2xzLiBMZXQncyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IHN0YXRpYzsgaXQncyBhbHdheXMgZ29vZCB0byB2ZXJpZnkgdGhlc2UgdGhpbmdzLiBBbHJpZ2h0LCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgbm9uLXN0YXRpYyBhcyBleHBlY3RlZCwgYW5kIGl0J3MgZGVmaW5lZCByaWdodCB3aGVyZSBpdCBzaG91bGQgYmUuIFNhbWUgZ29lcyBmb3IgYHJlY2xhaW1fcGFnZXNgIGFuZCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AuIEdvb2QuXG5cbk5vdywgdGhpcyBwYXRjaCB0b3VjaGVzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBUaW1lIHRvIHRyYWNlIHRoZXNlIHRocm91Z2ggdGhlIGNhbGwgZ3JhcGhzLiBJdCBsb29rcyBsaWtlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbGlzdGAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbHJ1dmVjYCwgd2hpY2ggaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbm9kZWAuIGBzaHJpbmtfbm9kZWAgaXMgdGhlIGltcG9ydGFudCBvbmUgYmVjYXVzZSBpdCBpcyBjYWxsZWQgYnkgYGRvX3RyeV90b19mcmVlX3BhZ2VzYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBieSBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlc2AsIGFuZCBgc2hyaW5rX2FsbF9tZW1vcnlgLiBgc2hyaW5rX25vZGVgIGlzIGFsc28gY2FsbGVkIGJ5IGtzd2FwZCAodmlhIGBiYWxhbmNlX3BnZGF0YCkgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuT24gdGhlIGBldmljdF9mb2xpb3NgIHNpZGUsIGl0J3MgY2FsbGVkIGJ5IGB0cnlfdG9fc2hyaW5rX2xydXZlY2AgYW5kIGBydW5fZXZpY3Rpb25gLiBUaGUgZm9ybWVyJ3MgY2FsbCBjaGFpbiBpcyBgbHJ1X2dlbl9zaHJpbmtfbHJ1dmVjYCAtXHUwMDNlIGBscnVfZ2VuX3Nocmlua19ub2RlYCAtXHUwMDNlIGBzaHJpbmtfbm9kZWAuIFRoZSBsYXR0ZXIgaXMgZGlyZWN0bHkgY2FsbGVkIGJ5IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC5cblxuU28sIGJhc2VkIG9uIHRoZXNlIGNhbGwgY2hhaW5zLCBpdCBzZWVtcyB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBhbmQgYHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNgIGFyZSBleGNlbGxlbnQgZm9jdXMgc3ltYm9scyBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wYWN0IG9mIHRoaXMgcGF0Y2guXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYHJlY2xhaW1fcGFnZXNgIGNhbGxzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgb3IgYGV2aWN0X2ZvbGlvc2AuIExldCdzIHNlZS4uLiBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAuIFdhaXQgYSBtaW51dGUsIGBzaHJpbmtfZm9saW9fbGlzdGAgaXMgKm5vdCogdGhlIHNhbWUgYXMgYHNocmlua19pbmFjdGl2ZV9saXN0YC4gUmlnaHQsIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXNvbGF0ZXMgcGFnZXMgZnJvbSB0aGUgaW5hY3RpdmUgTFJVIGxpc3QgYW5kICp0aGVuKiBjYWxscyBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBgcmVjbGFpbV9wYWdlc2Agd29ya3Mgd2l0aCBwYWdlcyB0aGF0IGFyZSBhbHJlYWR5IGlzb2xhdGVkLiBTbyBubywgYHJlY2xhaW1fcGFnZXNgIGRvZXMgKm5vdCogZGlyZWN0bHkgY2FsbCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIG9yIGBldmljdF9mb2xpb3NgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBkb3VibGUtY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5ODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6MDMuMTAyMDI3Njg1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxNzI1MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9mb2xpb19saXN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTIwOTE9c3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIxNzktXFxubW0vdm1zY2FuLmM6MjE4MDpzdGF0aWMgdW5zaWduZWQgaW50IHJlY2xhaW1fZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbm1tL3Ztc2Nhbi5jLTIxODEtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyMDU9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjI2LVxcbm1tL3Ztc2Nhbi5jOjIyMjc6XFx0XFx0bnJfcmVjbGFpbWVkICs9IHJlY2xhaW1fZm9saW9fbGlzdChcXHUwMDI2bm9kZV9mb2xpb19saXN0LCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtMjIyOC1cXHRcXHRuaWQgPSBmb2xpb19uaWQobHJ1X3RvX2ZvbGlvKGZvbGlvX2xpc3QpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIyMzAtXFxubW0vdm1zY2FuLmM6MjIzMTpcXHRucl9yZWNsYWltZWQgKz0gcmVjbGFpbV9mb2xpb19saXN0KFxcdTAwMjZub2RlX2ZvbGlvX2xpc3QsIE5PREVfREFUQShuaWQpKTtcXG5tbS92bXNjYW4uYy0yMjMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOTowMy4yMzgyMTAyNDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MzAzNzkwMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVjbGFpbSBwcm9jZXNzLiBSaWdodCwgc28gYHJlY2xhaW1fcGFnZXNgIOKAkyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdHMgZG9pbmcuIEl0J3MgY2xlYXIgdGhhdCBgcmVjbGFpbV9wYWdlc2AgY2FsbHMgYHJlY2xhaW1fZm9saW9fbGlzdGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHNocmlua19mb2xpb19saXN0YC4gVGhhdCdzIHRoZSBjaGFpbiBvZiBjYWxscyBJIG5lZWQgdG8gZm9jdXMgb24uIEJ1dCwgYW5kIHRoaXMgaXMgaW1wb3J0YW50LCBpdCAqZG9lc24ndCogY2FsbCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIG9yIGBldmljdF9mb2xpb3NgLiBUaGlzIG1lYW5zIHRoYXQgYHJlY2xhaW1fcGFnZXNgIG9uIGl0cyBvd24gaXNuJ3QgdGhlIGJlc3QgcGxhY2UgdG8gbWFrZSBhbiBvYnNlcnZhdGlvbiBvbiB0aGUgd2hvbGUgcHJvY2Vzcy4gVGhhdCdzIGdvb2QgdG8ga25vdy5cblxuSSBuZWVkIHRvIGV4cGFuZCBteSBzZWFyY2guIE9rYXksIHNvIHdoYXQgaXMgYSBiZXR0ZXIgb3B0aW9uLCBtYXliZSBhIGhpZ2hlciBsZXZlbCBmdW5jdGlvbiwgdGhhdCBpcyBhd2FyZSBvZiBtb3JlIG9mIHRoZSBjYWxsIHBhdGhzPyBXaGF0IGFib3V0IGBzaHJpbmtfYWxsX21lbW9yeWA/IExldCBtZSBzZWUgd2hhdCB0aGF0IGVudGFpbHMuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE3MDYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOToxNi43Njg1OTI4MTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjU0ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc2ODY9Ym9vbCBrc3dhcGRfdGVzdF9ob3BlbGVzcyhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzY5OS0gKi9cXG5tbS92bXNjYW4uYzo3NzAwOnVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltKVxcbm1tL3Ztc2Nhbi5jLTc3MDEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOToxNi44MjU4NTYxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDAzODQzODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgZm9jdXNpbmcgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWVtb3J5IHNocmlua2luZzpcblxuKipNZW1vcnkgU2hyaW5raW5nIEFuYWx5c2lzKipcblxuT2theSwgc28gYHNocmlua19hbGxfbWVtb3J5YCBpcyB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIEknbSBpbnRlcmVzdGVkIGluIGhlcmUuIFRoYXQgY2FsbCBjaGFpbiAtIGBzaHJpbmtfYWxsX21lbW9yeWAgY2FsbGluZyBgZG9fdHJ5X3RvX2ZyZWVfcGFnZXNgLCB3aGljaCB0aGVuIGNhbGxzIGBzaHJpbmtfem9uZXNgLCBhbmQgZmluYWxseSBkb3duIHRvIGBzaHJpbmtfbm9kZWAgLSB0ZWxscyBtZSB0aGUgaGlnaC1sZXZlbCBmbG93LiBgc2hyaW5rX2FsbF9tZW1vcnlgIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbjsgaXQncyB0aGUgaW5pdGlhdGluZyBzeW1ib2wgZm9yIG1lbW9yeSByZWNsYW1hdGlvbi5cblxuTm93LCBgdHJ5X3RvX2ZyZWVfcGFnZXNgIGlzIGFub3RoZXIgZnVuY3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBnaXZlbiBpdHMgcm9sZSBhcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gSXQncyBsaWtlbHkgdG8gYmUgYSBwZXJmb3JtYW5jZSBob3RzcG90LCBzbyB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIGlzIGNydWNpYWwuIEhvd2V2ZXIsIHNpbmNlIGl0J3MgdGhlIG1haW4gZW50cnksIGl0IG1heSBub3QgYmUgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgbGllLiBJIG5lZWQgdG8gbG9vayBiZXlvbmQgdGhhdCBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBtaWdodCBiZSByZWxldmFudD8gQWgsIGhlcmUncyBvbmU6IGBtZW1fY2dyb3VwX3Nocmlua19ub2RlYC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIG9uZTsgaXQgbGlrZWx5IHRvdWNoZXMgdGhlIG1lbW9yeSBjZ3JvdXAgYXNwZWN0LiBJIHdhbnQgdG8gY2hlY2sgaXRzIGZ1bmN0aW9uIGluIG1lbW9yeSBzaHJpbmtpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTI4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6MzAuMjI5NzA0NTA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAyMjE2NTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc2hyaW5rX25vZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD04Mz11bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vaW50ZXJuYWwuaC04Ny1cXHRcXHRcXHRcXHRcXHQgICBpbnQgKnN3YXBwaW5lc3MpO1xcbm1tL2ludGVybmFsLmg6ODg6dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9pbnRlcm5hbC5oLTg5LVxcdFxcdFxcdFxcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI3Mj1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTMxMS1cXHRcXHR9XFxubW0vbWVtY29udHJvbC12MS5jOjMxMjpcXHRcXHR0b3RhbCArPSBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHZpY3RpbSwgZ2ZwX21hc2ssIGZhbHNlLFxcbm1tL21lbWNvbnRyb2wtdjEuYy0zMTMtXFx0XFx0XFx0XFx0XFx0cGdkYXQsIFxcdTAwMjZucl9zY2FubmVkKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4MTY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02ODYxLS8qIE9ubHkgdXNlZCBieSBzb2Z0IGxpbWl0IHJlY2xhaW0uIERvIG5vdCByZXVzZSBmb3IgYW55dGhpbmcgZWxzZS4gKi9cXG5tbS92bXNjYW4uYzo2ODYyOnVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vdm1zY2FuLmMtNjg2My1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE5OjMyLjAzMTkzMTA4NloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTI4ODc2NjcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IHJlY2xhaW0gcGF0Y2gsIGFuZCBoZXJlJ3Mgd2hhdCBJJ3ZlIGdhdGhlcmVkLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZpbmQgYSBnb29kIGZvY3VzIHN5bWJvbCwgYW5kIGl0IGxvb2tzIGxpa2UgYG1lbV9jZ3JvdXBfc2hyaW5rX25vZGVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgYmVjYXVzZSBpdCdzIG9ubHkgdXNlZCBkdXJpbmcgc29mdCBsaW1pdCByZWNsYWltIGFuZCBjYWxscyBgc2hyaW5rX25vZGVgLiBUaGF0LCBhbmQgdGhlIG90aGVyIGZvY3VzIHN5bWJvbHMsIGB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzYCwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLCBhbmQgYHNocmlua19hbGxfbWVtb3J5YCwgbG9vayBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3MgY2lyY2xlIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBtb2RpZnlpbmcgYHRocm90dGxlX2lzX3Rocm90dGxlZGAsIGFuZCB0aGF0J3MgY2FsbGVkIHdpdGhpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhlIGNvcmUgaWRlYSBpcyB0byB0aHJvdHRsZSByZWNsYWltIGlmIHdlJ3JlIGFjY3VtdWxhdGluZyB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuIEl0IHNlZW1zIGxpa2UgaWYgaXQncyBub3QgbWFraW5nIHByb2dyZXNzLCBpdCBiYWlscyBvdXQsIGFuZCBpbXBvcnRhbnRseSwgaXQgc2V0cyBgKmZhdGFsYCBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyBhIGZhdGFsIHNpZ25hbCBwZW5kaW5nLlxuXG5IZXJlJ3MgdGhlIGNyaXRpY2FsIGJpdDogaWYgYCpmYXRhbGAgaXMgdHJ1ZSwgYHNocmlua19pbmFjdGl2ZV9saXN0YCByZXR1cm5zIGBTV0FQX0NMVVNURVJfTUFYYC4gQW5kIGlmIGAqZmF0YWxgIGlzIHRydWUsIGBldmljdF9mb2xpb3NgIGFkZHMgYFNXQVBfQ0xVU1RFUl9NQVhgIHRvIGBzYy1cdTAwM2Vucl9yZWNsYWltZWRgIGFuZCByZXR1cm5zIDAuIEkgc3VzcGVjdCB0aGlzIGlzIGEgZml4IHRvIHByZXZlbnQgYSBoYW5nIG9yIGxvb3AgY29uZGl0aW9uIHdoZXJlIGEgdGFzayBnZXRzIGtpbGxlZCAoc2F5LCBieSB0aGUgT09NIGtpbGxlcikgYnV0IGVuZHMgdXAgc3R1Y2sgaW4gcmVjbGFpbSBiZWNhdXNlIG9mIHRob3NlIHBlc2t5IGlzb2xhdGVkIGZvbGlvcy5cblxuVGhlcmVmb3JlLCBmdXp6aW5nIHRoaXMgZWZmZWN0aXZlbHkgcmVxdWlyZXMgdHJpZ2dlcmluZyBwYWdlIHJlY2xhaW0g4oCTIHdoaWNoIGFsbCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGRvIOKAkyBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBjYW4gYWxzbyBraWxsIHRhc2tzLCB3aGljaCBTeXprYWxsZXIsIHRoYW5rZnVsbHksIGhhbmRsZXMgbmF0dXJhbGx5LlxuXG5UaGUga2V5IGNvbmZpZ3MgdG8ga2VlcCBpbiBtaW5kIGFyZSBgTFJVX0dFTmAsIGBMUlVfR0VOX0VOQUJMRURgLCBhbmQgYE1FTUNHYC5cblxuSSdsbCB1c2Ugc2V0LXJlc3VsdHMgdG8gcmV0dXJuIG15IGZpbmRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjg4MCwiT3V0cHV0VG9rZW5zIjoyMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6NDcuMzIwNzAxODczWiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1OTA1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gICAgXCJzaHJpbmtfYWxsX21lbW9yeVwiLFxuICAgIFwibWVtX2Nncm91cF9zaHJpbmtfbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIHRvIHByZXZlbnQgdGFza3MgZnJvbSBsb29waW5nIGluZGVmaW5pdGVseSBvbiB1bmV2aWN0YWJsZSBmb2xpb3Mgd2hlbiB0aGV5IHJlY2VpdmUgYSBmYXRhbCBzaWduYWwuIEl0IHVwZGF0ZXMgYm90aCB0aGUgbGVnYWN5IExSVSByZWNsYWltIChgc2hyaW5rX2luYWN0aXZlX2xpc3RgKSBhbmQgdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSByZWNsYWltIChgZXZpY3RfZm9saW9zYCkuIFRoZXNlIGFyZSBoaWdobHkgcmVhY2hhYmxlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgcGF0aHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyB0aGF0IHRyaWdnZXIgcGFnZSByZWNsYWltLCBlc3BlY2lhbGx5IHRob3NlIHJlbGF0ZWQgdG8gbWVtY2cgYW5kIHByb2FjdGl2ZSByZWNsYWltLCB3aXRoIE1HTFJVIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXNcIixcbiAgICBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgICBcInNocmlua19hbGxfbWVtb3J5XCIsXG4gICAgXCJtZW1fY2dyb3VwX3Nocmlua19ub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgdG8gcHJldmVudCB0YXNrcyBmcm9tIGxvb3BpbmcgaW5kZWZpbml0ZWx5IG9uIHVuZXZpY3RhYmxlIGZvbGlvcyB3aGVuIHRoZXkgcmVjZWl2ZSBhIGZhdGFsIHNpZ25hbC4gSXQgdXBkYXRlcyBib3RoIHRoZSBsZWdhY3kgTFJVIHJlY2xhaW0gKGBzaHJpbmtfaW5hY3RpdmVfbGlzdGApIGFuZCB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHJlY2xhaW0gKGBldmljdF9mb2xpb3NgKS4gVGhlc2UgYXJlIGhpZ2hseSByZWFjaGFibGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBwYXRocy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIHRoYXQgdHJpZ2dlciBwYWdlIHJlY2xhaW0sIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBtZW1jZyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0sIHdpdGggTUdMUlUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTU6MTk6NDcuNDAxMzAxMDIxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM4ODk4MTQ4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDE1OjE5OjQ3LjQwMTk1MDI4MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNjM4ODMyODE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSB0aHJvdHRsaW5nIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgLiBJdCB1c2VzIGEgbG9jYWwgYm9vbGVhbiB2YXJpYWJsZSBgZmF0YWxgIHBhc3NlZCBieSByZWZlcmVuY2UgdG8gdHJhY2sgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZy4gVGhlIHZhcmlhYmxlIGBmYXRhbGAgaXMgYWx3YXlzIGluaXRpYWxpemVkIHRvIGBmYWxzZWAgYXQgdGhlIGJlZ2lubmluZyBvZiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYCBiZWZvcmUgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLCBlbnN1cmluZyBpdCBpcyBuZXZlciB1c2VkIHVuaW5pdGlhbGl6ZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgdXNlci1zcGFjZSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjYXVzZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDMwMDhlNzk2NmI4YWZhNjY1MTE2NDVjYjExMDAwYzJjNjE3OTMxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDE1OjE1OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uNmZlODgyNDQzMGFjYiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE4MTksNyArMTgxOSw3IEBAIGJvb2wgZm9saW9faXNvbGF0ZV9scnUoc3RydWN0IGZvbGlvICpmb2xpbylcbiAgKiB0aGUgTFJVIGxpc3Qgd2lsbCBnbyBzbWFsbCBhbmQgYmUgc2Nhbm5lZCBmYXN0ZXIgdGhhbiBuZWNlc3NhcnksIGxlYWRpbmcgdG9cbiAgKiB1bm5lY2Vzc2FyeSBzd2FwcGluZywgdGhyYXNoaW5nIGFuZCBPT00uXG4gICovXG4tc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4rc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgYm9vbCBmaWxlLFxuIFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIGluYWN0aXZlLCBpc29sYXRlZDtcbkBAIC0xODU2LDYgKzE4NTYsMzcgQEAgc3RhdGljIGJvb2wgdG9vX21hbnlfaXNvbGF0ZWQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgaW50IGZpbGUsXG4gXHRyZXR1cm4gdG9vX21hbnk7XG4gfVxuIFxuKy8qXG4rICogVGhyb3R0bGUgcmVjbGFpbSBpZiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIHBpbGluZyB1cC4gSWYgdGhpcyBtYWtlc1xuKyAqIG5vIHByb2dyZXNzLCB0aGUgY2FsbGVyIGlzIHByb2JhYmx5IGxvb3Bpbmcgb24gdW5ldmljdGFibGUgZm9saW9zLCBzbyBnaXZlXG4rICogdXAuIFJldHVybnMgdHJ1ZSB0byB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCByZWNsYWltaW5nLCBhbmQgc2V0cyBAZmF0YWxcbisgKiBpZiB0aGUgdGFzayByZWNlaXZlZCBhIGZhdGFsIHNpZ25hbCB3aGlsZSB3YWl0aW5nLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuXG4rICogYmFpbCBvdXQgZmFzdGVyLlxuKyAqL1xuK3N0YXRpYyBib29sIHRocm90dGxlX2lzX3Rocm90dGxlZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBib29sIGZpbGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBib29sICpmYXRhbClcbit7XG4rXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbitcbitcdCpmYXRhbCA9IGZhbHNlO1xuK1x0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4rXHRcdGlmIChzdGFsbGVkKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1xuK1x0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuK1x0XHRzdGFsbGVkID0gdHJ1ZTtcbitcdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcbitcdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuK1x0XHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbitcdFx0XHQqZmF0YWwgPSB0cnVlO1xuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIC8qXG4gICogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgbW92ZXMgZm9saW9zIGZyb20gcHJpdmF0ZSBAbGlzdCB0byBhcHByb3ByaWF0ZSBMUlUgbGlzdC5cbiAgKlxuQEAgLTE5OTIsMTkgKzIwMjMsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbi1cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuLVxuLVx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4tXHRcdGlmIChzdGFsbGVkKVxuLVx0XHRcdHJldHVybiAwO1xuLVxuLVx0XHQvKiB3YWl0IGEgYml0IGZvciB0aGUgcmVjbGFpbWVyLiAqL1xuLVx0XHRzdGFsbGVkID0gdHJ1ZTtcbi1cdFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX0lTT0xBVEVEKTtcbitcdGJvb2wgZmF0YWw7XG4gXG4rXHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBmaWxlLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG4gXHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbi1cdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuK1x0XHRpZiAoZmF0YWwpXG4gXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG4rXG4rXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIFx0bHJ1X2FkZF9kcmFpbigpO1xuQEAgLTQ4NzcsMTIgKzQ5MDMsMzMgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuLVx0aW50IHNjYW5uZWQsIHJlY2xhaW1lZDtcbitcdGludCBpLCBzY2FubmVkLCByZWNsYWltZWQ7XG4gXHRpbnQgaXNvbGF0ZWQgPSAwLCBucl9pc29sYXRlZCA9IDAsIHR5cGUsIHR5cGVfc2Nhbm5lZDtcbiBcdHVuc2lnbmVkIGxvbmcgdG90YWxfcmVjbGFpbWVkID0gMDtcbiBcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbHJ1dmVjX21lbWNnKGxydXZlYyk7XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4rXHRib29sIGZhdGFsO1xuK1xuK1x0LypcbitcdCAqIFRoZSB0eXBlIHRvIGlzb2xhdGUgaXMgdW5rbm93biB1bnRpbCBpc29sYXRpb24sIGFuZFxuK1x0ICogaXNvbGF0ZV9mb2xpb3MoKSBtYXkgZmFsbCBiYWNrIHRvIHRoZSBvdGhlciB0eXBlLiBUaHJvdHRsZSBpZlxuK1x0ICogYW55IGV2aWN0YWJsZSB0eXBlIGhhcyB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MuXG4rXHQgKi9cbitcdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcbitcdFx0aWYgKHRocm90dGxlX2lzX3Rocm90dGxlZChwZ2RhdCwgaSwgc2MsIFx1MDAyNmZhdGFsKSkge1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZVxuK1x0XHRcdCAqIGxlZ2FjeSBwYXRoLCBwcmV0ZW5kIHNvbWUgcGFnZXMgd2VyZSByZWNsYWltZWQgc29cbitcdFx0XHQgKiByZWNsYWltIHVud2luZHMgcXVpY2tseSBpbnN0ZWFkIG9mIGxvb3BpbmcgYmFja1xuK1x0XHRcdCAqIGludG8gdGhlIHRocm90dGxlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChmYXRhbClcbitcdFx0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xuK1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbiBcbkBAIC00ODkyLDYgKzQ5MzksOSBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHNjYW5uZWQgPSBpc29sYXRlX2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzLFxuIFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuIFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbitcdGlmIChucl9pc29sYXRlZClcbitcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgdHlwZSxcbitcdFx0XHRcdCAgICAgIG5yX2lzb2xhdGVkKTtcbiBcbiBcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG4gXHRpZiAoc2Nhbm5lZClcbkBAIC00OTU0LDYgKzUwMDQsOCBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0Z290byByZXRyeTtcbiBcdH1cbiBcbitcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyB0eXBlLCAtbnJfaXNvbGF0ZWQpO1xuK1xuIFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG4gXHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICsgdHlwZSxcbiBcdFx0XHRcdCBucl9pc29sYXRlZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToxOTo0Ny40MDE5NTEzMDFaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYzODgzMDcwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBJbml0aWFsaXphdGlvbiBpbiBhIFJlY2xhaW0gVGhyb3R0bGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyByZWZhY3RvcmluZyB0aGUgdGhyb3R0bGluZyBsb2dpYyB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBwdWxsaW5nIHRoZSB0aHJvdHRsaW5nIGJlaGF2aW9yIG91dCBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gVGhlIGdvYWwgaXMgdG8gdXNlIHRoaXMgbmV3IGZ1bmN0aW9uIGluIGBldmljdF9mb2xpb3NgIHRvIHRocm90dGxlIHJlY2xhaW0gd2hlbiB0b28gbWFueSBpc29sYXRlZCBmb2xpb3MgYXJlIGJ1aWxkaW5nIHVwLCBhbmQgdG8gdXBkYXRlIG5vZGUgcGFnZSBzdGF0ZSBgTlJfSVNPTEFURURfQU5PTiArIHR5cGVgIGFzIHdlbGwuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGBib29sIGZhdGFsO2AgdmFyaWFibGUgaW4gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYC4gVGhpcyB2YXJpYWJsZSBpcyB0aGVuIHBhc3NlZCB0byBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gTGV0J3MgZGlnIGludG8gdGhhdCBmdW5jdGlvbjpcblxuYGBgY1xuc3RhdGljIGJvb2wgdGhyb3R0bGVfaXNfdGhyb3R0bGVkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGJvb2wgZmlsZSxcblx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgYm9vbCAqZmF0YWwpXG57XG5cdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuXG5cdCpmYXRhbCA9IGZhbHNlO1xuXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcblx0XHRpZiAoc3RhbGxlZClcblx0XHRcdHJldHVybiB0cnVlO1xuXG5cdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cblx0XHRzdGFsbGVkID0gdHJ1ZTtcblx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfSVNPTEFURUQpO1xuXG5cdFx0LyogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBSZXR1cm4gbm93LiAqL1xuXHRcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuXHRcdFx0KmZhdGFsID0gdHJ1ZTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cbmBgYFxuXG5Pa2F5LCBzbyByaWdodCBhdCB0aGUgc3RhcnQsIGAqZmF0YWxgIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gYGZhbHNlYCAqaW5zaWRlKiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gVGhhdCdzIGdvb2QuIE5vIGNoYW5jZSBvZiB1c2luZyBhbiB1bmluaXRpYWxpemVkIHZhbHVlIHRoZXJlLlxuXG5CdXQgd2FpdCwgd2hhdCBpZiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYCAqcmV0dXJucyogZmFsc2U/IExldCdzIGNoZWNrIHdoZXJlIGl0J3MgY2FsbGVkOlxuXG5JbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgOlxuXG5gYGBjXG5cdGlmICh0aHJvdHRsZV9pc190aHJvdHRsZWQocGdkYXQsIGZpbGUsIHNjLCBcdTAwMjZmYXRhbCkpIHtcblx0XHQvKiBXZSBhcmUgYWJvdXQgdG8gZGllIGFuZCBmcmVlIG91ciBtZW1vcnkuIFJldHVybiBub3cuICovXG5cdFx0aWYgKGZhdGFsKVxuXHRcdFx0cmV0dXJuIFNXQVBfQ0xVU1RFUl9NQVg7XG5cblx0XHRyZXR1cm4gMDtcblx0fVxuYGBgXG5cbklmIGB0aHJvdHRsZV9pc190aHJvdHRsZWRgIHJldHVybnMgZmFsc2UsIHRoZSBjb2RlIHNpbXBseSByZXR1cm5zIDAgKndpdGhvdXQqIHVzaW5nIGBmYXRhbGAuIFNlZW1zIGZpbmUuXG5cbkluIGBldmljdF9mb2xpb3NgOlxuXG5gYGBjXG5cdGZvcl9lYWNoX2V2aWN0YWJsZV90eXBlKGksIHN3YXBwaW5lc3MpIHtcblx0XHRpZiAodGhyb3R0bGVfaXNfdGhyb3R0bGVkKHBnZGF0LCBpLCBzYywgXHUwMDI2ZmF0YWwpKSB7XG5cdFx0XHQvKlxuXHRcdFx0ICogV2UgYXJlIGFib3V0IHRvIGRpZSBhbmQgZnJlZSBvdXIgbWVtb3J5LiBMaWtlIHRoZVxuXHRcdFx0ICogbGVnYWN5IHBhdGgsIHByZXRlbmQgc29tZSBwYWdlcyB3ZXJlIHJlY2xhaW1lZCBzb1xuXHRcdFx0ICogcmVjbGFpbSB1bndpbmRzIHF1aWNrbHkgaW5zdGVhZCBvZiBsb29waW5nIGJhY2tcblx0XHRcdCAqIGludG8gdGhlIHRocm90dGxlLlxuXHRcdFx0ICovXG5cdFx0XHRpZiAoZmF0YWwpXG5cdFx0XHRcdHNjLVx1MDAzZW5yX3JlY2xhaW1lZCArPSBTV0FQX0NMVVNURVJfTUFYO1xuXG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cdH1cbmBgYFxuXG5BZ2FpbiwgaWYgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgcmV0dXJucyBmYWxzZSwgYGZhdGFsYCBpcyAqbm90KiB1c2VkLiBJdCdzIG9ubHkgdXNlZCBpZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCBpbiB3aGljaCBjYXNlIGBmYXRhbGAgaXMgZ3VhcmFudGVlZCB0byBiZSBpbml0aWFsaXplZCAoZWl0aGVyIHRvIGBmYWxzZWAgZHVyaW5nIHRoZSBgd2hpbGVgIGxvb3AsIG9yIHBvc3NpYmx5IHNldCB0byBgdHJ1ZWAgaWYgYSBmYXRhbCBzaWduYWwgaXMgcGVuZGluZykuXG5cblNvLCBhZnRlciBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgY29kZSBwYXRocywgSSBhbSBwcmV0dHkgY29uZmlkZW50LiBUaGlzIGlzIGp1c3QgYSBsb2dpYyBjaGFuZ2Ugd2l0aGluIHRoZSBwYWdlIHJlY2xhaW0sIG5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kIHNlbnQgdG8gdXNlcnNwYWNlLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgd29ya2VkIHdpdGguIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBhcHBhcmVudCBoZXJlLiBUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxNToyMDowMy43OTAyNjE0MDdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgdGhyb3R0bGluZyBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbiBgdGhyb3R0bGVfaXNfdGhyb3R0bGVkYC4gSXQgdXNlcyBhIGxvY2FsIGJvb2xlYW4gdmFyaWFibGUgYGZhdGFsYCBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRyYWNrIGlmIGEgZmF0YWwgc2lnbmFsIGlzIHBlbmRpbmcuIFRoZSB2YXJpYWJsZSBgZmF0YWxgIGlzIGFsd2F5cyBpbml0aWFsaXplZCB0byBgZmFsc2VgIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHRocm90dGxlX2lzX3Rocm90dGxlZGAgYmVmb3JlIGFueSBjb25kaXRpb25hbCBsb2dpYywgZW5zdXJpbmcgaXQgaXMgbmV2ZXIgdXNlZCB1bmluaXRpYWxpemVkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY2F1c2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow5zbvb[1] Phase: Succeeded StartedAt: 2026-08-18 15:20:15 +0000 UTC FinishedAt: 2026-08-18 15:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 15:20:15 +0000 UTC FinishedAt: 2026-08-18 15:20:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2] Phase: Succeeded StartedAt: 2026-08-18 15:20:15 +0000 UTC FinishedAt: 2026-08-18 19:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 15:20:15 +0000 UTC FinishedAt: 2026-08-18 19:04:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 15:20:15 +0000 UTC FinishedAt: 2026-08-18 15:20:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 15:20:15 +0000 UTC FinishedAt: 2026-08-18 15:20:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zbvb/series-workflow5zbvb-convert-artifact-3695006690/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 15:20:25 +0000 UTC FinishedAt: 2026-08-18 15:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 15:20:25 +0000 UTC FinishedAt: 2026-08-18 15:37:02 +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:*1d084a67-9b96-4b44-b4ac-a91b44d0d2fd,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-workflow5zbvb/series-workflow5zbvb-convert-artifact-3695006690/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": "e95d1e4c-5aea-4559-9988-973aab7fb41b", "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-workflow5zbvb/series-workflow5zbvb-build-action-3953699744/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 15:20:25 +0000 UTC FinishedAt: 2026-08-18 15:36:52 +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:*1d084a67-9b96-4b44-b4ac-a91b44d0d2fd,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-workflow5zbvb/series-workflow5zbvb-convert-artifact-3695006690/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": "e95d1e4c-5aea-4559-9988-973aab7fb41b", "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-workflow5zbvb/series-workflow5zbvb-build-action-3953699744/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 15:37:02 +0000 UTC FinishedAt: 2026-08-18 15:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 15:37:02 +0000 UTC FinishedAt: 2026-08-18 15:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 15:37:02 +0000 UTC FinishedAt: 2026-08-18 15:37:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 15:37:02 +0000 UTC FinishedAt: 2026-08-18 15:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zbvb/series-workflow5zbvb-convert-artifact-498439997/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 15:37:13 +0000 UTC FinishedAt: 2026-08-18 15:39:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 15:37:13 +0000 UTC FinishedAt: 2026-08-18 15:39:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e95d1e4c-5aea-4559-9988-973aab7fb41b,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-workflow5zbvb/series-workflow5zbvb-build-action-3953699744/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-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 15:39:31 +0000 UTC FinishedAt: 2026-08-18 15:39:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 15:39:31 +0000 UTC FinishedAt: 2026-08-18 15:39:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 15:39:31 +0000 UTC FinishedAt: 2026-08-18 15:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 15:39:31 +0000 UTC FinishedAt: 2026-08-18 15:56:34 +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:*1d084a67-9b96-4b44-b4ac-a91b44d0d2fd,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-workflow5zbvb/series-workflow5zbvb-convert-artifact-498439997/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": "ba7d0dc2-86f4-449e-b256-f1d0c71dabe4", "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-workflow5zbvb/series-workflow5zbvb-build-action-1921267353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 15:39:31 +0000 UTC FinishedAt: 2026-08-18 15:56:24 +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:*1d084a67-9b96-4b44-b4ac-a91b44d0d2fd,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-workflow5zbvb/series-workflow5zbvb-convert-artifact-498439997/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": "ba7d0dc2-86f4-449e-b256-f1d0c71dabe4", "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-workflow5zbvb/series-workflow5zbvb-build-action-1921267353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 15:56:34 +0000 UTC FinishedAt: 2026-08-18 15:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 15:56:34 +0000 UTC FinishedAt: 2026-08-18 15:56:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 15:56:34 +0000 UTC FinishedAt: 2026-08-18 15:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 15:56:34 +0000 UTC FinishedAt: 2026-08-18 15:58:44 +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:*ba7d0dc2-86f4-449e-b256-f1d0c71dabe4,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-workflow5zbvb/series-workflow5zbvb-build-action-1921267353/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-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 15:58:54 +0000 UTC FinishedAt: 2026-08-18 19:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 15:58:54 +0000 UTC FinishedAt: 2026-08-18 19:04:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*e95d1e4c-5aea-4559-9988-973aab7fb41b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba7d0dc2-86f4-449e-b256-f1d0c71dabe4,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-workflow5zbvb/series-workflow5zbvb-build-action-3953699744/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-workflow5zbvb/series-workflow5zbvb-build-action-1921267353/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 15:58:54 +0000 UTC FinishedAt: 2026-08-18 15:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 15:58:54 +0000 UTC FinishedAt: 2026-08-18 15:58:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5zbvb/series-workflow5zbvb-convert-artifact-3076818626/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 15:58:54 +0000 UTC FinishedAt: 2026-08-18 15:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 15:58:54 +0000 UTC FinishedAt: 2026-08-18 15:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 15:58:54 +0000 UTC FinishedAt: 2026-08-18 15:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 15:59:04 +0000 UTC FinishedAt: 2026-08-18 19:04:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5zbvb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_free_mem_cgroup_pages","user_proactive_reclaim","shrink_all_memory","mem_cgroup_shrink_node"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED","MEMCG"],"series_id":"e6a69dfb-7dab-4ff3-99b3-3f92d86585e9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 15:59:04 +0000 UTC FinishedAt: 2026-08-18 19:03:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e95d1e4c-5aea-4559-9988-973aab7fb41b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ba7d0dc2-86f4-449e-b256-f1d0c71dabe4,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-workflow5zbvb/series-workflow5zbvb-build-action-3953699744/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-workflow5zbvb/series-workflow5zbvb-build-action-1921267353/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-workflow5zbvb/series-workflow5zbvb-convert-artifact-3076818626/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,}