Name: series-workflowrlrxw Phase: Succeeded StartedAt: 2026-08-26 23:08:28 +0000 UTC FinishedAt: 2026-08-27 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[0] Phase: Succeeded StartedAt: 2026-08-26 23:08:28 +0000 UTC FinishedAt: 2026-08-26 23:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 23:08:28 +0000 UTC FinishedAt: 2026-08-26 23:24:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "21631741-87b3-4cdc-90a9-ac84e2b3d36c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_file_fsync", "hfsplus_map_extent", "hfsplus_iomap_cont_expand", "hfsplus_iomap_swap_activate", "hfsplus_get_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19tYXBfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZ2V0X2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0gZnJvbSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUuIEl0IGludHJvZHVjZXMgbmV3IGZpbGUgb3BlcmF0aW9ucywgaW9tYXAgY2FsbGJhY2tzLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgbG9naWMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0YW5kYXJkIFZGUyBhbmQgaW9tYXAgQVBJIHVzYWdlLCBzdWNoIGFzIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgaW9tYXBfemVyb19yYW5nZWAuIEZpbGUgZXhwYW5zaW9ucyBhcmUgcHJvcGVybHkgemVyb2VkIHVzaW5nIGBpb21hcF96ZXJvX3JhbmdlYCwgYW5kIG5ld2x5IGFsbG9jYXRlZCBibG9ja3MgYXJlIGZsYWdnZWQgd2l0aCBgSU9NQVBfRl9ORVdgLCB3aGljaCB0aGUgaW9tYXAgY29yZSBoYW5kbGVzIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCBkaXNrIGRhdGEgZXhwb3N1cmUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGlvY3RscywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PLCByZXBsYWNpbmcgdGhlIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXIgaGVhZCBiYXNlZCBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaW9tYXAgb3BlcmF0aW9ucyBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIHNlZWtpbmcsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGU1MTA0NWMwMDU0MzNhN2NkYTUwYWE2ZDBjZTA5OWUzMWYxNWQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZC4uYjQ0MzJjNjRkYjNiZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9LY29uZmlnXG5AQCAtNSw3ICYjNDM7NSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXG4gXHRzZWxlY3QgQlVGRkVSX0hFQURcbiBcdHNlbGVjdCBOTFNcbiBcdHNlbGVjdCBOTFNfVVRGOFxuLVx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiYjNDM7XHRzZWxlY3QgRlNfSU9NQVBcbiBcdGhlbHBcbiBcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XG4gXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL01ha2VmaWxlIGIvZnMvaGZzcGx1cy9NYWtlZmlsZVxuaW5kZXggZjJhOWFlNjk3ZTgxMS4uM2RkZWE2OWE5YzY5OCAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbkBAIC01LDggJiM0Mzs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgJiM0Mzs9IGhmc3BsdXMub1xuIFxuLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG4tXHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4mIzQzO2hmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGZpbGUubyBpb21hcC5vIGlvY3RsLm8gZXh0ZW50cy5vIFxcXG4mIzQzO1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4mIzQzO1x0XHR1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbiBcdFx0YXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vXG4gXG4gIyBLVW5pdCB0ZXN0c1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXG5pbmRleCAxYjNhZjhjODdjYWRiLi42MWM0OWNjYTRhN2EyIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xuQEAgLTM5LDYgJiM0MzszOSw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiM0MztcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciAmIzQzOyAob2Zmc2V0IFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XG4gXHRpID0gb2Zmc2V0ICUgMzI7XG5AQCAtNzUsNiAmIzQzOzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VyciYjNDM7JiM0Mzs7XG4gXHRcdH1cbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZT0gc2l6ZSlcbiBcdFx0XHRicmVhaztcbkBAIC04NCw2ICYjNDM7ODcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0XHRjdXJyID0gcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0aWYgKChzaXplIF4gb2Zmc2V0KSAvIFBBR0VfQ0FDSEVfQklUUylcbiBcdFx0XHRlbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTk4LDYgJiM0MzsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdHN0YXJ0ID0gb2Zmc2V0ICYjNDM7IChjdXJyIC0gcHB0cikgKiAzMiAmIzQzOyBpO1xuIFx0aWYgKHN0YXJ0IFx1MDAzZT0gc2l6ZSkge1xuIFx0XHRoZnNfZGJnKFwmIzM0O2JpdG1hcCBmdWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbiYjNDM7XHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuJiM0MztcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdC8qIGRvIGFueSBwYXJ0aWFsIHUzMiBhdCB0aGUgc3RhcnQgKi9cbkBAIC0xMjgsNiAmIzQzOzEzNiw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHR9XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0b2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsXG4gXHRcdFx0XHRcdCBOVUxMKTtcbkBAIC0xMzUsNiAmIzQzOzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuJiM0MztcdFx0bG9ja19wYWdlKHBhZ2UpO1xuJiM0MztcdFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XG4gXHRcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGN1cnIgPSBwcHRyO1xuIFx0XHRlbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTE1Miw2ICYjNDM7MTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHQqY3VyciA9IGNwdV90b19iZTMyKG4pO1xuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHQqbWF4ID0gb2Zmc2V0ICYjNDM7IChjdXJyIC0gcHB0cikgKiAzMiAmIzQzOyBpIC0gc3RhcnQ7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcbiBcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuQEAgLTE4NSw2ICYjNDM7MTk3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgcG5yLCBOVUxMKTtcbiBcdGlmIChJU19FUlIocGFnZSkpXG4gXHRcdGdvdG8ga2Fib29tO1xuJiM0MztcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciAmIzQzOyAob2Zmc2V0IFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XG4gXHRlbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTIxNiw5ICYjNDM7MjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCAmIzQzOyYjNDM7cG5yLCBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0XHRnb3RvIGthYm9vbTtcbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0XHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRjdXJyID0gcHB0cjtcbiBcdFx0ZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiAmIzQzOzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIG91dDpcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzICYjNDM7PSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLjhmN2Y1NjBjZWM2NDIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfcmF3LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuIFxuIC8qIENvbXBhcmUgdHdvIGV4dGVudHMga2V5cywgcmV0dXJucyAwIG9uIHNhbWUsIHBvcy9uZWcgZm9yIGRpZmZlcmVuY2UgKi9cbiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXG5AQCAtNDgsMTggJiM0Mzs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbiYjNDM7LypcbiYjNDM7ICogaGZzcGx1c19leHRfZmluZF9ibG9jaygpIC0gZmluZCBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJsb2NrXG4mIzQzOyAqXG4mIzQzOyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJiMzOTtvZmYmIzM5OyB3aXRoaW4gYW4gOC1lbnRyeVxuJiM0MzsgKiBleHRlbnQgcmVjb3JkLCBhbmQgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzXG4mIzQzOyAqIHRoYXQgYXJlIGNvbnRpZ3VvdXMgd2l0aCBpdCBpbiB0aGUgc2FtZSBleHRlbnQgZW50cnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYsXG4mIzQzO1x0XHRcdFx0IHUzMiAqZGJsb2NrKVxuIHtcbiBcdGludCBpO1xuIFx0dTMyIGNvdW50O1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuIFx0XHRjb3VudCA9IGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VibG9ja19jb3VudCk7XG4tXHRcdGlmIChvZmYgXHUwMDNjIGNvdW50KVxuLVx0XHRcdHJldHVybiBiZTMyX3RvX2NwdShleHQtXHUwMDNlc3RhcnRfYmxvY2spICYjNDM7IG9mZjtcbiYjNDM7XHRcdGlmIChvZmYgXHUwMDNjIGNvdW50KSB7XG4mIzQzO1x0XHRcdCpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlc3RhcnRfYmxvY2spICYjNDM7IG9mZjtcbiYjNDM7XHRcdFx0cmV0dXJuIGNvdW50IC0gb2ZmO1xuJiM0MztcdFx0fVxuIFx0XHRvZmYgLT0gY291bnQ7XG4gXHR9XG4gXHQvKiBwYW5pYz8gKi9cbiYjNDM7XHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICYjNDM7ODAsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZXh0X2Jsb2NrX2NvdW50KHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0KVxuIFx0aW50IGk7XG4gXHR1MzIgY291bnQgPSAwO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspXG4gXHRcdGNvdW50ICYjNDM7PSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbkBAIC0yMjMsMzcgJiM0MzsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX21hcF9leHRlbnQoKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBzZXF1ZW5jZSBvZiBhbGxvY2F0aW9uIGJsb2Nrc1xuJiM0MzsgKlxuJiM0MzsgKiBMb29rcyB1cCB0aGUgYWxsb2NhdGlvbiBibG9jayBhdCAmIzM5O2FibG9jayYjMzk7IGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuJiM0MzsgKiBmaWxlICh2aWEgaGZzcGx1c19maWxlX2V4dGVuZCgpLCBpbiBjbHVtcF9ibG9ja3Mtc2l6ZWQgY2h1bmtzKSB3aGVuXG4mIzQzOyAqICYjMzk7Y3JlYXRlJiMzOTsgaXMgc2V0IGFuZCAmIzM5O2FibG9jayYjMzk7IGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIE9uIHN1Y2Nlc3MsICpkYmxvY2sgaXMgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBiYWNraW5nICYjMzk7YWJsb2NrJiMzOTssXG4mIzQzOyAqIGFuZCAqbWF4X2Jsb2NrcyBpcyB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MgdGhhdCBhcmVcbiYjNDM7ICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbiYjNDM7ICogdGhhdCBjb250YWlucyAmIzM5O2FibG9jayYjMzk7KSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSYjMzk7c1xuJiM0MzsgKiByZW1haW5pbmcgYWxsb2NhdGlvbiB3aGVuIHRoZSBmb3JrIGlzIGZyYWdtZW50ZWQgYWNyb3NzIHNldmVyYWxcbiYjNDM7ICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4mIzQzOyAqIHJlcXVlc3QsICpiYWxsb2MgKHdoZW4gbm9uLU5VTEwpIGlzIHNldCB0byB0cnVlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuJiM0MztcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpXG4ge1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiBcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4tXHRpbnQgcmVzID0gLUVJTztcbi1cdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaztcbi1cdHNlY3Rvcl90IHNlY3Rvcjtcbi1cdGludCB3YXNfZGlydHkgPSAwO1xuJiM0MztcdGludCB3YXNfZGlydHk7XG4mIzQzO1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbiYjNDM7XHRpZiAoYmFsbG9jKVxuJiM0MztcdFx0KmJhbGxvYyA9IGZhbHNlO1xuIFxuLVx0aWYgKGlibG9jayBcdTAwM2U9IGhpcC1cdTAwM2Vmc19ibG9ja3MpIHtcbiYjNDM7XHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuJiM0MztcdFx0cmVzID0gaGZzcGx1c19maWxlX2V4dGVuZChpbm9kZSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGlmIChiYWxsb2MpXG4mIzQzO1x0XHRcdCpiYWxsb2MgPSB0cnVlO1xuJiM0MztcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuJiM0MztcdFx0Km1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VmaXJzdF9leHRlbnRzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFibG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gSEZTUExVU19FWFRfQ05JRClcbkBAIC0yNzIsMTEgJiM0MzsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhpcC1cdTAwM2VleHRlbnRzX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbi1cdGRibG9jayA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuLVx0XHRcdFx0XHRhYmxvY2sgLSBoaXAtXHUwMDNlY2FjaGVkX3N0YXJ0KTtcbiYjNDM7XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuJiM0MztcdFx0XHRcdFx0ICAgICBhYmxvY2sgLSBoaXAtXHUwMDNlY2FjaGVkX3N0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhpcC1cdTAwM2VleHRlbnRzX2xvY2spO1xuIFxuLWRvbmU6XG4mIzQzO1x0aWYgKHdhc19kaXJ0eSlcbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbiYjNDM7aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbiYjNDM7XHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1hc2ssIG1heF9ibG9ja3M7XG4mIzQzO1x0c2VjdG9yX3Qgc2VjdG9yO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4mIzQzO1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4mIzQzO1x0XHRpZiAoIWNyZWF0ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAoaWJsb2NrIFx1MDAzZSBoaXAtXHUwMDNlZnNfYmxvY2tzKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHR9IGVsc2VcbiYjNDM7XHRcdGNyZWF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBjcmVhdGUsIFx1MDAyNmRibG9jaywgXHUwMDI2bWF4X2Jsb2NrcyxcbiYjNDM7XHRcdFx0XHQgIE5VTEwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiBcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCYjMzQ7LFxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZylpYmxvY2ssIGRibG9jayk7XG4gXG5AQCAtMjkwLDkgJiM0MzszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuIFx0XHRoaXAtXHUwMDNlcGh5c19zaXplICYjNDM7PSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyYjNDM7JiM0Mzs7XG4gXHRcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0fVxuLVx0aWYgKGNyZWF0ZSB8fCB3YXNfZGlydHkpXG4gXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgJiM0Mzs2MDYsMzIgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIChsb25nIGxvbmcpaGlwLVx1MDAzZXBoeXNfc2l6ZSwgaW5vZGUtXHUwMDNlaV9zaXplKTtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDNlIGhpcC1cdTAwM2VwaHlzX3NpemUpIHtcbi1cdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHZvaWQgKmZzZGF0YSA9IE5VTEw7XG4tXHRcdGxvZmZfdCBzaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuJiM0MztcdFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0XHRcdHZvaWQgKmZzZGF0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0XHRcdCAgaW5vZGUtXHUwMDNlaV9zaXplLCAwLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2l6ZSwgMCwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4mIzQzO1x0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCxcbi1cdFx0XHRcdFx0ICBcdTAwMjZmb2xpbywgXHUwMDI2ZnNkYXRhKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm47XG4tXHRcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsXG4tXHRcdFx0XHRcdGZvbGlvLCBmc2RhdGEpO1xuLVx0XHRpZiAocmVzIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSBpZiAoaW5vZGUtXHUwMDNlaV9zaXplID09IGhpcC1cdTAwM2VwaHlzX3NpemUpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2ZpbGUuYyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODI2Nzg0ODhmYjA1NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9maWxlLmNcbkBAIC0wLDAgJiM0MzsxLDMwNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91aW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbiYjNDM7XHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuJiM0MztcdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuJiM0MztcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1xuJiM0MztcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuJiM0MztcdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4mIzQzO1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuJiM0MztcdFx0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuJiM0MztcdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuJiM0MztcdFx0XHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXHUwMDNlaV9pbm8sXG4mIzQzO1x0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbiYjNDM7XHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiYjNDM7XHRcdCAgICAgICBpbnQgZGF0YXN5bmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXHUwMDNlc192aGRyO1xuJiM0MztcdGludCBlcnJvciA9IDAsIGVycm9yMjtcbiYjNDM7XG4mIzQzO1x0aGZzX2RiZyhcJiMzNDtpbm9kZS1cdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfaW5vLCBzdGFydCwgZW5kKTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4mIzQzO1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4mIzQzO1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRlcnJvcjIgPVxuJiM0MztcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VleHRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuJiM0MztcdFx0aWYgKCFlcnJvcilcbiYjNDM7XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuJiM0MztcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdGVycm9yMiA9XG4mIzQzO1x0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbiYjNDM7XHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0XHRcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4mIzQzO1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKHNiaS1cdTAwM2VhbGxvY19maWxlKS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbiYjNDM7XHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXHUwMDI2c2JpLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSgpIC0gZmFsbCBiYWNrIHRvIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlXG4mIzQzOyAqIHRhaWwgb2YgYSB3cml0ZSB0aGF0IGlvbWFwX2Rpb19ydygpIGNvdWxkIG5vdCBwZXJmb3JtIGRpcmVjdGx5XG4mIzQzOyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb25cbiYjNDM7ICogb3V0c2lkZSB0aGUgZGlyZWN0IHBhdGgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiYjNDM7e1xuJiM0MztcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcywgZW5kO1xuJiM0MztcdHNzaXplX3Qgd3JpdHRlbjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcbiYjNDM7XHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdFx0ICAgIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdGVuZCA9IGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IHdyaXR0ZW4gLSAxO1xuJiM0MztcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdCAgIG9mZnNldCwgZW5kKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuJiM0MztcdFx0XHRcdCBvZmZzZXQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0IGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB3cml0dGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSxcbiYjNDM7XHRcdFx0ICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4mIzQzO1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfZGlvX29wcyxcbiYjNDM7XHRcdFx0ICAgMCwgTlVMTCwgMCk7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PVEJMSylcbiYjNDM7XHRcdHJldCA9IDA7XG4mIzQzO1x0ZWxzZSBpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4mIzQzO1x0XHRzc2l6ZV90IHdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdFx0d3JpdHRlbiA9IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSk7XG4mIzQzO1x0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHdyaXR0ZW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdGxvZmZfdCB0b3RhbF9jYXBhY2l0eTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgaXRlcik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cdTAwM2V0b3RhbF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlPSB0b3RhbF9jYXBhY2l0eSkge1xuJiM0MztcdFx0cmV0ID0gLUVGQklHO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiYjNDM7XHRcdGxvZmZfdCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiYjNDM7XHRcdGxvZmZfdCBuZXdfc2l6ZSA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkge1xuJiM0MztcdFx0XHRuZXdfc2l6ZSA9IG1heF90KGxvZmZfdCwgbmV3X3NpemUsXG4mIzQzO1x0XHRcdFx0XHQgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcbiYjNDM7XHRcdGVyciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuJiM0MztcdFx0cmV0ID0gaGZzcGx1c19kaW9fd3JpdGVfaXRlcihpb2NiLCBpdGVyKTtcbiYjNDM7XHRlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaXRlcixcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4mIzQzO1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcbiYjNDM7XHRcdGZpbGVfYWNjZXNzZWQoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdCAgIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0MztcdH0gZWxzZVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHdoZW5jZSkge1xuJiM0MztcdGNhc2UgU0VFS19IT0xFOlxuJiM0MztcdFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdFx0b2Zmc2V0ID0gaW9tYXBfc2Vla19ob2xlKGlub2RlLCBvZmZzZXQsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbiYjNDM7XHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTRUVLX0RBVEE6XG4mIzQzO1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2ZnNfc2V0cG9zKGZpbGUsIG9mZnNldCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX21heGJ5dGVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiYjNDM7XHQubGxzZWVrXHRcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcbiYjNDM7XHQucmVhZF9pdGVyXHQ9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIsXG4mIzQzO1x0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuJiM0MztcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuJiM0MztcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiYjNDM7XHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4mIzQzO1x0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3BlbixcbiYjNDM7XHQucmVsZWFzZVx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcbiYjNDM7XHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzguLjgxNjZhYmIyMjM5N2IgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbkBAIC0xNzUsNiAmIzQzOzE3NSwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHJldHVybiBzYi1cdTAwM2VzX2ZzX2luZm87XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBQaHlzaWNhbCBieXRlIG9mZnNldCBvZiBhbGxvY2F0aW9uIGJsb2NrICYjMzk7ZGJsb2NrJiMzOTsgb24gdGhlIHZvbHVtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgbG9mZl90IGhmc3BsdXNfYWJsb2NrX3RvX3BoeXNfYnl0ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4mIzQzO1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdHBoeXNfYnl0ZXMgPSBkYmxvY2s7XG4mIzQzO1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbiYjNDM7XHRwaHlzX2J5dGVzICYjNDM7PSBzYmktXHUwMDNlYmxvY2tvZmZzZXQ7XG4mIzQzO1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlzX2J5dGVzO1xuJiM0Mzt9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzMCwxMiAmIzQzOzQ0NiwxOSBAQCBpbnQgaGZzcGx1c19yZW5hbWVfY2F0KHUzMiBjbmlkLCBzdHJ1Y3QgaW5vZGUgKnNyY19kaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpzcmNfblxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7XG4gXG4mIzQzOy8qIGZpbGUuYyAqL1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuJiM0MztcdFx0ICAgICAgIGludCBkYXRhc3luYyk7XG4mIzQzO1xuIC8qIGV4dGVudHMuYyAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBcdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xuIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xuJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXG4mIzQzO1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7XG4gaW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxuIFx0XHQgICAgICBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaywgaW50IHR5cGUpO1xuIGludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dCk7XG5AQCAtNDQzLDYgJiM0Mzs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zO1xuIFxuQEAgLTQ2Miw4ICYjNDM7NDg2LDYgQEAgaW50IGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHQgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLFxuIFx0XHQgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTtcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5pbmRleCAxYzU3Yzg3M2YwNWQ2Li4wODczMWVjMGNlY2QzIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lub2RlLmNcbkBAIC0xOCwxNSAmIzQzOzE4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX2ZzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGF0dHIuaFwmIzM0O1xuLVxuLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbi19XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiBcbiBzdGF0aWMgdm9pZCBoZnNwbHVzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxuIHtcbkBAIC0xMjAsNjcgJiM0MzsxMTcsMTMgQEAgc3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXG4gXHRyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbi1cdHNzaXplX3QgcmV0O1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXG4tXHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4tXHQgKi9cbi1cdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuLVx0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuLVx0XHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XG4tXG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbi1cdFx0ICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLlxuLVx0XHQgKi9cbi1cdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuLVxuLVx0XHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuLVx0XHRlbmRfb2ZmID0gKGVuZCBcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xuLVxuLVx0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVxuLVx0XHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XG4tXHR9XG4tXG4tXHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcbi1cdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4tXHQgKi9cbi1cdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cbi1cdFx0aWYgKGVuZCBcdTAwM2UgaXNpemUpXG4tXHRcdFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcbi1cdH1cbi1cbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuIFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuLVx0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuJiM0MztcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbyxcbiYjNDM7XHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMsXG4gXHQud3JpdGVfYmVnaW5cdD0gaGZzcGx1c193cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmRcdD0gZ2VuZXJpY193cml0ZV9lbmQsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbkBAIC0xOTcsMTggJiM0MzsxNDAsNzAgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XG4gXHQucmVsZWFzZV9mb2xpb1x0PSBoZnNwbHVzX3JlbGVhc2VfZm9saW8sXG4gfTtcbiBcbi1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuIFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuLVx0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG4tXHQuZGlyZWN0X0lPXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuJiM0MztcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfc3ltbGlua193cml0ZXBhZ2VzLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoZnNwbHVzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbiYjNDM7e1xuJiM0MztcdGlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcbiYjNDM7XHRcdC5pbm9kZVx0PSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjXHQ9IHdiYyxcbiYjNDM7XHRcdC5vcHNcdD0gXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuJiM0MztcdC5yZWFkX2ZvbGlvXHRcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkYWhlYWRcdFx0PSBoZnNwbHVzX3JlYWRhaGVhZCxcbiYjNDM7XHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbiYjNDM7XHQuZGlydHlfZm9saW9cdFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbiYjNDM7XHQuYm1hcFx0XHRcdD0gaGZzcGx1c19hb3BfYm1hcCxcbiYjNDM7XHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbiYjNDM7XHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlXHQ9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbiYjNDM7XHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXHQ9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuJiM0MztcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiYjNDM7XHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuJiM0MztcdC5zd2FwX2FjdGl2YXRlXHRcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxuJiM0Mzt9O1xuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHtcbiBcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxuIFx0LmRfY29tcGFyZSAgICA9IGhmc3BsdXNfY29tcGFyZV9kZW50cnksXG5AQCAtMjY4LDM1ICYjNDM7MjYzLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIC1FSU87XG4gfVxuIFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4tXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuLVx0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbi1cdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4tXHRcdGlub2RlX2xvY2soaW5vZGUpO1xuLVx0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVx1MDAzZWlfaW5vLFxuLVx0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbi1cdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4tXHRcdH1cbi1cdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG5AQCAtMzExLDEwICYjNDM7Mjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdGxvZmZfdCBvbGRfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBhdHRyLVx1MDAzZWlhX3NpemUpO1xuJiM0MztcdFx0XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiBcdFx0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHRcdHRydW5jYXRlX3NldHNpemUoaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4gXHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG5AQCAtMzUzLDg2ICYjNDM7MzIzLDYgQEAgaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLVx1MDAzZXNfdmhkcjtcbi1cdGludCBlcnJvciA9IDAsIGVycm9yMjtcbi1cbi1cdGhmc19kYmcoXCYjMzQ7aW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cJiMzNDssXG4tXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBzdGFydCwgZW5kKTtcbi1cbi1cdGVycm9yID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0aW5vZGVfbG9jayhpbm9kZSk7XG4tXG4tXHQvKlxuLVx0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXG4tXHQgKi9cbi1cdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuLVx0ICovXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHR9XG4tXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPVxuLVx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuLVx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuLVx0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0ZXJyb3IyID1cbi1cdFx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXG4tXHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRcdGVycm9yID0gZXJyb3IyO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpKVxuLVx0XHRcdHByX2VycihcJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cJiMzNDspO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXG4tXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXG4tXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuLVx0XHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVxuLVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuIFx0LmdldGF0dHJcdD0gaGZzcGx1c19nZXRhdHRyLFxuQEAgLTQ1NCwxOSAmIzQzOzM0NCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5saXN0eGF0dHJcdD0gaGZzcGx1c19saXN0eGF0dHIsXG4gfTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuLVx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuLVx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4tXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4tXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbi1cdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbi1cdC5mc3luY1x0XHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcbi1cdC5vcGVuXHRcdD0gaGZzcGx1c19maWxlX29wZW4sXG4tXHQucmVsZWFzZVx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcbi1cdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXG4tfTtcbi1cbiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbkBAIC01MTMsNyAmIzQzOzM5MCw3IEBAIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHNiaS1cdTAwM2VmaWxlX2NvdW50JiM0MzsmIzQzOztcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4mIzQzO1x0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBcdFx0aGlwLVx1MDAzZWNsdW1wX2Jsb2NrcyA9IDE7XG4gXHR9IGVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbiBcdFx0ICAgU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTU09DSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG5AQCAtNjU0LDcgJiM0Mzs1MzEsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuJiM0MztcdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5jIGIvZnMvaGZzcGx1cy9pb21hcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWU2ZGZhNjkzNTI2ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5jXG5AQCAtMCwwICYjNDM7MSwxODkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogaW9tYXAgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0IGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGlvbWFwICppb21hcCwgYm9vbCBtYXlfYWxsb2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHUzMiBhYmxvY2ssIGRibG9jaywgbWF4X2Jsb2NrcztcbiYjNDM7XHRsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzO1xuJiM0MztcdGxvZmZfdCBibG9ja19zdGFydDtcbiYjNDM7XHRib29sIGlzX25ldztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heV9hbGxvYykge1xuJiM0MztcdFx0LyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovXG4mIzQzO1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VhZGRyID0gSU9NQVBfTlVMTF9BRERSO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogQ2xhbXAgbGVuZ3RoIGlmIHRoZSByZXF1ZXN0ZWQgcmFuZ2UgZ29lcyBiZXlvbmQgaV9zaXplICovXG4mIzQzO1x0XHRpZiAob2Zmc2V0ICYjNDM7IGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRsZW5ndGggPSByb3VuZF91cChpX3NpemUsIGJsb2Nrc2l6ZSkgLSBvZmZzZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhYmxvY2sgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgXHUwMDI2ZGJsb2NrLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0YWJsb2NrX29mZnNldCA9IG9mZnNldCBcdTAwMjYgKHNiaS1cdTAwM2VhbGxvY19ibGtzeiAtIDEpO1xuJiM0MztcdGFibG9ja19ieXRlcyA9IChsb2ZmX3QpbWF4X2Jsb2NrcyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xuJiM0MztcbiYjNDM7XHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7XG4mIzQzO1x0YmxvY2tfc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgaV9ibG9ja3NpemUoaW5vZGUpKTtcbiYjNDM7XHRpc19uZXcgPSBtYXlfYWxsb2MgXHUwMDI2XHUwMDI2IGJsb2NrX3N0YXJ0IFx1MDAzZT0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbiYjNDM7XHRpZiAobWF5X2FsbG9jIFx1MDAyNlx1MDAyNiAhaXNfbmV3IFx1MDAyNlx1MDAyNiBvZmZzZXQgXHUwMDNjIGhpcC1cdTAwM2VwaHlzX3NpemUpXG4mIzQzO1x0XHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgaGlwLVx1MDAzZXBoeXNfc2l6ZSAtIG9mZnNldCk7XG4mIzQzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWJkZXYgPSBzYi1cdTAwM2VzX2JkZXY7XG4mIzQzO1x0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRpb21hcC1cdTAwM2VhZGRyID0gaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzYiwgZGJsb2NrKSAmIzQzOyBhYmxvY2tfb2Zmc2V0O1xuJiM0MztcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4mIzQzO1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX25ldylcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZWZsYWdzIHw9IElPTUFQX0ZfTkVXO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgIGlvbWFwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdCAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgaW9tYXAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0ge1xuJiM0MztcdC5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpXG4mIzQzOyAqXG4mIzQzOyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFya1xuJiM0MzsgKiAoaGlwLVx1MDAzZXBoeXNfc2l6ZSAvIGhpcC1cdTAwM2Vmc19ibG9ja3MpIHRvIGNvdmVyIHRoZSBuZXdseSB3cml0dGVuIHJhbmdlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxuJiM0MztcdFx0XHRcdCAgIGxvZmZfdCBsZW5ndGgsIHNzaXplX3Qgd3JpdHRlbixcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuJiM0MztcdGxvZmZfdCBlbmQ7XG4mIzQzO1x0Ym9vbCBkaXJ0aWVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghd3JpdHRlbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlbmQgPSByb3VuZF91cChwb3MgJiM0Mzsgd3JpdHRlbiwgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGlwLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2MgZW5kKSB7XG4mIzQzO1x0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC1cdTAwM2VwaHlzX3NpemUpO1xuJiM0MztcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcbiYjNDM7XHRcdGhpcC1cdTAwM2Vmc19ibG9ja3MgPSBlbmQgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0XHRkaXJ0aWVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChkaXJ0aWVkKVxuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB3cml0dGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzID0ge1xuJiM0MztcdC5pb21hcF9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxuJiM0MztcdC5pb21hcF9lbmRcdD0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKClcbiYjNDM7ICpcbiYjNDM7ICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJiMzOTtzaXplJiMzOTsuXG4mIzQzOyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuXG4mIzQzOyAqL1xuJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4mIzQzO1x0bG9mZl90IHN0YXJ0ID0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgXHUwMDNjPSBzdGFydClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgc3RhcnQsIHNpemUgLSBzdGFydCwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFja1xuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGVcbiYjNDM7ICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbiYjNDM7XHQgICAgb2Zmc2V0IFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCAmIzQzOyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4mIzQzO1x0XHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgIG9mZnNldCwgbGVuLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHMgPSB7XG4mIzQzO1x0LndyaXRlYmFja19yYW5nZVx0PSBoZnNwbHVzX3dyaXRlYmFja19yYW5nZSxcbiYjNDM7XHQud3JpdGViYWNrX3N1Ym1pdFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuJiM0MztcdC5lbmRfaW9cdFx0PSBpb21hcF9kaW9fZW5kX2lvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaW9tYXBfc3dhcGZpbGVfYWN0aXZhdGUoc2lzLCBmaWxlLCBzcGFuLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lvbWFwLmhcbkBAIC0wLDAgJiM0MzsxLDE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuJiM0MzsjZGVmaW5lIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcztcbiYjNDM7XG4mIzQzO2ludCBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTtcbiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xuaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9zdXBlci5jXG5AQCAtNTcxLDYgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdGdvdG8gb3V0X2Nsb3NlX2F0dHJfdHJlZTtcbiBcdH1cbiBcdHNiaS1cdTAwM2VhbGxvY19maWxlID0gaW5vZGU7XG4mIzQzO1x0bWFwcGluZ19zZXRfc3RhYmxlX3dyaXRlcyhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuIFxuIFx0LyogTG9hZCB0aGUgcm9vdCBkaXJlY3RvcnkgKi9cbiBcdHJvb3QgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfUk9PVF9DTklEKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlLi4xNDE3ZTE5ZDk0YmNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5AQCAtMTcxLDE4ICYjNDM7MTcxLDIyIEBAIGVudW0ge1xuIFx0SEZTX1hBVFRSX05BTUUsXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcdCgzKVxuJiM0MztcbiBzdHJ1Y3QgaGZzX2V4dGVudCB7XG4gXHRfX2JlMTYgYmxvY2s7XG4gXHRfX2JlMTYgY291bnQ7XG4gfTtcbi10eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjWzNdO1xuJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlRcdCg4KVxuIFxuIC8qIEEgc2luZ2xlIGNvbnRpZ3VvdXMgYXJlYSBvZiBhIGZpbGUgKi9cbiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQge1xuIFx0X19iZTMyIHN0YXJ0X2Jsb2NrO1xuIFx0X19iZTMyIGJsb2NrX2NvdW50O1xuIH0gX19wYWNrZWQ7XG4tdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdO1xuJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XG4gXG4gLyogSW5mb3JtYXRpb24gZm9yIGEgXCYjMzQ7Rm9ya1wmIzM0OyBpbiBhIGZpbGUgKi9cbiBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCA1NmI0M2Q1OTRlNmUyLi41MGZlNjAzNmIwMWFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC01NjAsNiAmIzQzOzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XG4gXHRzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBEaXJlY3QgSS9PIGNvbXBsZXRpb24gaGFuZGxlclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztpbnQgaW9tYXBfZGlvX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNjIGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IHNpemUpIHtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgJiM0Mzsgc2l6ZSk7XG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2FpdCBmb3IgdGhlIEkvTyB0byBjb21wbGV0ZSBpbiBpb21hcF9kaW9fcncgZXZlbiBpZiB0aGUga2lvY2IgaXMgbm90XG4gICogc3luY2hyb25vdXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19tYXBfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZ2V0X2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PLCByZXBsYWNpbmcgdGhlIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXIgaGVhZCBiYXNlZCBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaW9tYXAgb3BlcmF0aW9ucyBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIHNlZWtpbmcsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGU1MTA0NWMwMDU0MzNhN2NkYTUwYWE2ZDBjZTA5OWUzMWYxNWQ3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9LY29uZmlnIGIvZnMvaGZzcGx1cy9LY29uZmlnCmluZGV4IGNhODQwMWNiNjk1NGQuLmI0NDMyYzY0ZGIzYmUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWcKQEAgLTUsNyAmIzQzOzUsNyBAQCBjb25maWcgSEZTUExVU19GUwogCXNlbGVjdCBCVUZGRVJfSEVBRAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgTkxTX1VURjgKLQlzZWxlY3QgTEVHQUNZX0RJUkVDVF9JTwomIzQzOwlzZWxlY3QgRlNfSU9NQVAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXQKIAkgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlCmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9NYWtlZmlsZQpAQCAtNSw4ICYjNDM7NSw5IEBACiAKIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSAmIzQzOz0gaGZzcGx1cy5vCiAKLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFwKLQkJYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXAomIzQzO2hmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGZpbGUubyBpb21hcC5vIGlvY3RsLm8gZXh0ZW50cy5vIFwKJiM0MzsJCWNhdGFsb2cubyBkaXIubyBidHJlZS5vIGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gXAomIzQzOwkJdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFwKIAkJYXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vCiAKICMgS1VuaXQgdGVzdHMKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jCmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuYwpAQCAtMzksNiAmIzQzOzM5LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCXN0YXJ0ID0gc2l6ZTsKIAkJZ290byBvdXQ7CiAJfQomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJaSA9IG9mZnNldCAlIDMyOwpAQCAtNzUsNiAmIzQzOzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQljdXJyJiM0MzsmIzQzOzsKIAkJfQogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJb2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7CiAJCWlmIChvZmZzZXQgJmd0Oz0gc2l6ZSkKIAkJCWJyZWFrOwpAQCAtODQsNiAmIzQzOzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQlzdGFydCA9IHNpemU7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJZm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7CiAJCWN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQlpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKQogCQkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTk4LDYgJiM0MzsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAlzdGFydCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaTsKIAlpZiAoc3RhcnQgJmd0Oz0gc2l6ZSkgewogCQloZnNfZGJnKCYjMzQ7Yml0bWFwIGZ1bGxcbiYjMzQ7KTsKJiM0MzsJCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJCXVubG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJc3RhcnQgPSBzaXplOwogCQlnb3RvIG91dDsKIAl9CiAJLyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqLwpAQCAtMTI4LDYgJiM0MzsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkJfQogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCW9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTOwogCQlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLAogCQkJCQkgTlVMTCk7CkBAIC0xMzUsNiAmIzQzOzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLAogCQkJc3RhcnQgPSBzaXplOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsJCWxvY2tfcGFnZShwYWdlKTsKJiM0MzsJCWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCQlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0cjsKIAkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTE1Miw2ICYjNDM7MTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJKmN1cnIgPSBjcHVfdG9fYmUzMihuKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CXVubG9ja19wYWdlKHBhZ2UpOwogCSptYXggPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGkgLSBzdGFydDsKIAlzYmktJmd0O2ZyZWVfYmxvY2tzIC09ICptYXg7CiAJaGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7CkBAIC0xODUsNiAmIzQzOzE5Nyw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpOwogCWlmIChJU19FUlIocGFnZSkpCiAJCWdvdG8ga2Fib29tOwomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTIxNiw5ICYjNDM7MjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCQkJYnJlYWs7CiAJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICYjNDM7JiM0MztwbnIsIE5VTEwpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKQogCQkJZ290byBrYWJvb207CiYjNDM7CQlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CQlmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTsKIAkJcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKIAkJY3VyciA9IHBwdHI7CiAJCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0yMzIsNiAmIzQzOzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogb3V0OgogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJdW5sb2NrX3BhZ2UocGFnZSk7CiAJc2JpLSZndDtmcmVlX2Jsb2NrcyAmIzQzOz0gbGVuOwogCWhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpOwogCW11dGV4X3VubG9jaygmYW1wO3NiaS0mZ3Q7YWxsb2NfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwppbmRleCA4MTNlNjhiOGVjZDY1Li44ZjdmNTYwY2VjNjQyIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX3Jhdy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmgmIzM0OwogCiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovCiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsCkBAIC00OCwxOCAmIzQzOzQ5LDI5IEBAIHN0YXRpYyB2b2lkIGhmc3BsdXNfZXh0X2J1aWxkX2tleShoZnNwbHVzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCwKIAlrZXktJmd0O2V4dC5wYWQgPSAwOwogfQogCi1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYpCiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKCkgLSBmaW5kIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYmxvY2sKJiM0MzsgKgomIzQzOyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJiMzOTtvZmYmIzM5OyB3aXRoaW4gYW4gOC1lbnRyeQomIzQzOyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZiwKJiM0MzsJCQkJIHUzMiAqZGJsb2NrKQogewogCWludCBpOwogCXUzMiBjb3VudDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKIAkJY291bnQgPSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKLQkJaWYgKG9mZiAmbHQ7IGNvdW50KQotCQkJcmV0dXJuIGJlMzJfdG9fY3B1KGV4dC0mZ3Q7c3RhcnRfYmxvY2spICYjNDM7IG9mZjsKJiM0MzsJCWlmIChvZmYgJmx0OyBjb3VudCkgewomIzQzOwkJCSpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtJmd0O3N0YXJ0X2Jsb2NrKSAmIzQzOyBvZmY7CiYjNDM7CQkJcmV0dXJuIGNvdW50IC0gb2ZmOwomIzQzOwkJfQogCQlvZmYgLT0gY291bnQ7CiAJfQogCS8qIHBhbmljPyAqLwomIzQzOwkqZGJsb2NrID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjgsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9ibG9ja19jb3VudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCkKIAlpbnQgaTsKIAl1MzIgY291bnQgPSAwOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IDg7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspCiAJCWNvdW50ICYjNDM7PSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yMjMsMzcgJiM0MzsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spCiAJcmV0dXJuIHJlczsKIH0KIAotLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi8KLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCi0JCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKgomIzQzOyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICYjMzk7YWJsb2NrJiMzOTsgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlCiYjNDM7ICogZmlsZSAodmlhIGhmc3BsdXNfZmlsZV9leHRlbmQoKSwgaW4gY2x1bXBfYmxvY2tzLXNpemVkIGNodW5rcykgd2hlbgomIzQzOyAqICYjMzk7Y3JlYXRlJiMzOTsgaXMgc2V0IGFuZCAmIzM5O2FibG9jayYjMzk7IGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAmIzM5O2FibG9jayYjMzk7LAomIzQzOyAqIGFuZCAqbWF4X2Jsb2NrcyBpcyB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MgdGhhdCBhcmUKJiM0MzsgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeQomIzQzOyAqIHRoYXQgY29udGFpbnMgJiMzOTthYmxvY2smIzM5OyksIHdoaWNoIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIHdob2xlIGZpbGUmIzM5O3MKJiM0MzsgKiByZW1haW5pbmcgYWxsb2NhdGlvbiB3aGVuIHRoZSBmb3JrIGlzIGZyYWdtZW50ZWQgYWNyb3NzIHNldmVyYWwKJiM0MzsgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGUKJiM0MzsgKiByZXF1ZXN0LCAqYmFsbG9jICh3aGVuIG5vbi1OVUxMKSBpcyBzZXQgdG8gdHJ1ZS4KJiM0MzsgKi8KJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsCiYjNDM7CQkJdTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKIAlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCWludCByZXMgPSAtRUlPOwotCXUzMiBhYmxvY2ssIGRibG9jaywgbWFzazsKLQlzZWN0b3JfdCBzZWN0b3I7Ci0JaW50IHdhc19kaXJ0eSA9IDA7CiYjNDM7CWludCB3YXNfZGlydHk7CiYjNDM7CWludCByZXM7CiAKLQkvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqLwotCWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlpZiAoYmFsbG9jKQomIzQzOwkJKmJhbGxvYyA9IGZhbHNlOwogCi0JaWYgKGlibG9jayAmZ3Q7PSBoaXAtJmd0O2ZzX2Jsb2NrcykgewomIzQzOwlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7CiAJCWlmICghY3JlYXRlKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKIAkJCXJldHVybiAtRUlPOwotCQlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7Ci0JCQlyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7Ci0JCQlpZiAocmVzKQotCQkJCXJldHVybiByZXM7Ci0JCX0KLQl9IGVsc2UKLQkJY3JlYXRlID0gMDsKJiM0MzsJCXJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCWlmIChiYWxsb2MpCiYjNDM7CQkJKmJhbGxvYyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChhYmxvY2sgJmx0OyBoaXAtJmd0O2ZpcnN0X2Jsb2NrcykgewotCQlkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywgYWJsb2NrKTsKLQkJZ290byBkb25lOwomIzQzOwkJKm1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywKJiM0MzsJCQkJCQkgICAgIGFibG9jaywKJiM0MzsJCQkJCQkgICAgIGRibG9jayk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IEhGU1BMVVNfRVhUX0NOSUQpCkBAIC0yNzIsMTEgJiM0MzsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7aGlwLSZndDtleHRlbnRzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAotCQkJCQlhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCk7CiYjNDM7CSptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAomIzQzOwkJCQkJICAgICBhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCwKJiM0MzsJCQkJCSAgICAgZGJsb2NrKTsKIAltdXRleF91bmxvY2soJmFtcDtoaXAtJmd0O2V4dGVudHNfbG9jayk7CiAKLWRvbmU6CiYjNDM7CWlmICh3YXNfZGlydHkpCiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovCiYjNDM7aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKJiM0MzsJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXNrLCBtYXhfYmxvY2tzOwomIzQzOwlzZWN0b3JfdCBzZWN0b3I7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovCiYjNDM7CWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwomIzQzOwlpZiAoaWJsb2NrICZndDs9IGhpcC0mZ3Q7ZnNfYmxvY2tzKSB7CiYjNDM7CQlpZiAoIWNyZWF0ZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsJfSBlbHNlCiYjNDM7CQljcmVhdGUgPSAwOwomIzQzOwomIzQzOwlyZXMgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgY3JlYXRlLCAmYW1wO2RibG9jaywgJmFtcDttYXhfYmxvY2tzLAomIzQzOwkJCQkgIE5VTEwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKIAloZnNfZGJnKCYjMzQ7aW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XG4mIzM0OywKIAkJaW5vZGUtJmd0O2lfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTsKIApAQCAtMjkwLDkgJiM0MzszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQloaXAtJmd0O3BoeXNfc2l6ZSAmIzQzOz0gc2ItJmd0O3NfYmxvY2tzaXplOwogCQloaXAtJmd0O2ZzX2Jsb2NrcyYjNDM7JiM0Mzs7CiAJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItJmd0O3NfYmxvY2tzaXplKTsKLQl9Ci0JaWYgKGNyZWF0ZSB8fCB3YXNfZGlydHkpCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1MywyMCAmIzQzOzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlpbm9kZS0mZ3Q7aV9pbm8sIChsb25nIGxvbmcpaGlwLSZndDtwaHlzX3NpemUsIGlub2RlLSZndDtpX3NpemUpOwogCiAJaWYgKGlub2RlLSZndDtpX3NpemUgJmd0OyBoaXAtJmd0O3BoeXNfc2l6ZSkgewotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXZvaWQgKmZzZGF0YSA9IE5VTEw7Ci0JCWxvZmZfdCBzaXplID0gaW5vZGUtJmd0O2lfc2l6ZTsKJiM0MzsJCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJcmVzID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJCQl2b2lkICpmc2RhdGEgPSBOVUxMOwomIzQzOwomIzQzOwkJCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywKJiM0MzsJCQkJCQkgIGlub2RlLSZndDtpX3NpemUsIDAsCiYjNDM7CQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsCiYjNDM7CQkJCQkJaW5vZGUtJmd0O2lfc2l6ZSwgMCwgMCwKJiM0MzsJCQkJCQlmb2xpbywgZnNkYXRhKTsKJiM0MzsJCQlpZiAocmVzICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQogCi0JCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwKLQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm47Ci0JCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsCi0JCQkJCWZvbGlvLCBmc2RhdGEpOwotCQlpZiAocmVzICZsdDsgMCkKLQkJCXJldHVybjsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKGlub2RlLSZndDtpX3NpemUgPT0gaGlwLSZndDtwaHlzX3NpemUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZmlsZS5jIGIvZnMvaGZzcGx1cy9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODI2Nzg0ODhmYjA1NAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jCkBAIC0wLDAgJiM0MzsxLDMwNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQomIzQzOwkJaW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLSZndDtyc3JjX2lub2RlOwomIzQzOwlpZiAoIShmaWxlLSZndDtmX2ZsYWdzICZhbXA7IE9fTEFSR0VGSUxFKSAmYW1wOyZhbXA7IGlfc2l6ZV9yZWFkKGlub2RlKSAmZ3Q7IE1BWF9OT05fTEZTKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KTsKJiM0MzsJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsKJiM0MzsJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiYjNDM7CQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7SEZTUExVU19JKGlub2RlKS0mZ3Q7b3BlbmNudCkpIHsKJiM0MzsJCWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKJiM0MzsJCWlmIChpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOyBTX0RFQUQpIHsKJiM0MzsJCQloZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtJmd0O2lfaW5vLAomIzQzOwkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwomIzQzOwkJCWhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCX0KJiM0MzsJCWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKJiM0MzsJCSAgICAgICBpbnQgZGF0YXN5bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwomIzQzOwlpbnQgZXJyb3IgPSAwLCBlcnJvcjI7CiYjNDM7CiYjNDM7CWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAomIzQzOwkJaW5vZGUtJmd0O2lfaW5vLCBzdGFydCwgZW5kKTsKJiM0MzsKJiM0MzsJZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLgomIzQzOwkgKi8KJiM0MzsJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAomIzQzOwkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKJiM0MzsJCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0KJiM0MzsJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7ZXh0X3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJaWYgKCFlcnJvcikKJiM0MzsJCQllcnJvciA9IGVycm9yMjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKJiM0MzsJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWVycm9yMiA9CiYjNDM7CQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoCiYjNDM7CQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJCWlmICghZXJyb3IpCiYjNDM7CQkJCWVycm9yID0gZXJyb3IyOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKSkKJiM0MzsJCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koc2JpLSZndDthbGxvY19maWxlKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQlpZiAoIWVycm9yKQomIzQzOwkJCWVycm9yID0gZXJyb3IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKJiM0MzsJaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7CiYjNDM7CiYjNDM7CWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsICZhbXA7c2JpLSZndDtmbGFncykpCiYjNDM7CQlibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGUKJiM0MzsgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseQomIzQzOyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb24KJiM0MzsgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQkJc3RydWN0IGlvdl9pdGVyICpmcm9tKQomIzQzO3sKJiM0MzsJbG9mZl90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcywgZW5kOwomIzQzOwlzc2l6ZV90IHdyaXR0ZW47CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sCiYjNDM7CQkJCQkgICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkJCSAgICBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CiYjNDM7CWVuZCA9IGlvY2ItJmd0O2tpX3BvcyAmIzQzOyB3cml0dGVuIC0gMTsKJiM0MzsJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmcsCiYjNDM7CQkJCQkgICBvZmZzZXQsIGVuZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZywKJiM0MzsJCQkJIG9mZnNldCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQkgZW5kICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQlzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sCiYjNDM7CQkJICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkgICAmYW1wO2hmc3BsdXNfd3JpdGVfZGlvX29wcywKJiM0MzsJCQkgICAwLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7CiYjNDM7CWVsc2UgaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHsKJiM0MzsJCXNzaXplX3Qgd3JpdHRlbjsKJiM0MzsKJiM0MzsJCXdyaXR0ZW4gPSBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20pOwomIzQzOwkJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJCXJldHVybiB3cml0dGVuOwomIzQzOwkJcmV0ICYjNDM7PSB3cml0dGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlsb2ZmX3QgdG90YWxfY2FwYWNpdHk7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgaXRlcik7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwl0b3RhbF9jYXBhY2l0eSA9IChsb2ZmX3Qpc2JpLSZndDt0b3RhbF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7PSB0b3RhbF9jYXBhY2l0eSkgewomIzQzOwkJcmV0ID0gLUVGQklHOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkgewomIzQzOwkJbG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwkJbG9mZl90IG5ld19zaXplID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKSB7CiYjNDM7CQkJbmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLAomIzQzOwkJCQkJICBIRlNQTFVTX0koaW5vZGUpLSZndDtwaHlzX3NpemUpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBuZXdfc2l6ZSk7CiYjNDM7CQllcnIgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpb2NiLSZndDtraV9wb3MpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpOwomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9IGVsc2UgaWYgKChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkgJmFtcDsmYW1wOwomIzQzOwkJICAgSEZTUExVU19JKGlub2RlKS0mZ3Q7cGh5c19zaXplICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQlpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktJmd0O3BoeXNfc2l6ZSk7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpCiYjNDM7CQlyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpOwomIzQzOwllbHNlIHsKJiM0MzsJCXJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaXRlciwKJiM0MzsJCQkJCQkmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCQkJCU5VTEwsIE5VTEwpOwomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwlpbm9kZV91bmxvY2soaW5vZGUpOwomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCkKJiM0MzsJCXJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpIHsKJiM0MzsJCWZpbGVfYWNjZXNzZWQoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwKJiM0MzsJCQkJICAgJmFtcDtoZnNwbHVzX2lvbWFwX29wcywKJiM0MzsJCQkJICAgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CX0gZWxzZQomIzQzOwkJcmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTsKJiM0MzsKJiM0MzsJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CiYjNDM7CXN3aXRjaCAod2hlbmNlKSB7CiYjNDM7CWNhc2UgU0VFS19IT0xFOgomIzQzOwkJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwkJb2Zmc2V0ID0gaW9tYXBfc2Vla19ob2xlKGlub2RlLCBvZmZzZXQsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzOwkJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTRUVLX0RBVEE6CiYjNDM7CQlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgJmFtcDtoZnNwbHVzX2lvbWFwX29wcyk7CiYjNDM7CQlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGdlbmVyaWNfZmlsZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19tYXhieXRlcyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7CiYjNDM7CS5sbHNlZWsJCT0gaGZzcGx1c19maWxlX2xsc2VlaywKJiM0MzsJLnJlYWRfaXRlcgk9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsCiYjNDM7CS53cml0ZV9pdGVyCT0gaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKJiM0MzsJLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKJiM0MzsJLm9wZW4JCT0gaGZzcGx1c19maWxlX29wZW4sCiYjNDM7CS5yZWxlYXNlCT0gaGZzcGx1c19maWxlX3JlbGVhc2UsCiYjNDM7CS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTE3NSw2ICYjNDM7MTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXJldHVybiBzYi0mZ3Q7c19mc19pbmZvOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQaHlzaWNhbCBieXRlIG9mZnNldCBvZiBhbGxvY2F0aW9uIGJsb2NrICYjMzk7ZGJsb2NrJiMzOTsgb24gdGhlIHZvbHVtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCQkJICB1MzIgZGJsb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiYjNDM7CWxvZmZfdCBwaHlzX2J5dGVzOwomIzQzOwomIzQzOwlwaHlzX2J5dGVzID0gZGJsb2NrOwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlwaHlzX2J5dGVzICYjNDM7PSBzYmktJmd0O2Jsb2Nrb2Zmc2V0OwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeXNfYnl0ZXM7CiYjNDM7fQogCiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHsKIAlhdG9taWNfdCBvcGVuY250OwpAQCAtNDMwLDEyICYjNDM7NDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7CiAKJiM0MzsvKiBmaWxlLmMgKi8KJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MztpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiYjNDM7CQkgICAgICAgaW50IGRhdGFzeW5jKTsKJiM0MzsKIC8qIGV4dGVudHMuYyAqLwogaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLAogCQkJY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsyKTsKIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLAomIzQzOwkJCXUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7CiBpbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsCiAJCSAgICAgIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSk7CiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpOwpAQCAtNDQzLDYgJiM0Mzs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC00NjIsOCAmIzQzOzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCQkgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLAogCQkgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTsKLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKLQkJICAgICAgIGludCBkYXRhc3luYyk7CiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCAxYzU3Yzg3M2YwNWQ2Li4wODczMWVjMGNlY2QzIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xOCwxNSAmIzQzOzE4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwotCi1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKLXsKLQlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7Ci19CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKIAogc3RhdGljIHZvaWQgaGZzcGx1c193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bykKIHsKQEAgLTEyMCw2NyAmIzQzOzExNywxMyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaykKIAlyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTsKIH0KIAotc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCWxvZmZfdCBpc2l6ZTsKLQlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKLQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwotCXNzaXplX3QgcmV0OwotCi0JLyoKLQkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgotCSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KLQkgKi8KLQlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKLQkJbG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlOwotCi0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCS8qCi0JCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQotCQkgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuCi0JCSAqLwotCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7Ci0KLQkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X29mZiA9IGlzaXplOwotCQllbmRfb2ZmID0gKGVuZCAmZ3Q7IDApID8gZW5kIC0gMSA6IGVuZDsKLQotCQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KLQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpOwotCX0KLQotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKLQkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgotCSAqLwotCWlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IHJldCAmbHQ7IDApKSB7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCWlmIChlbmQgJmd0OyBpc2l6ZSkKLQkJCWhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiB9CkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbywKJiM0MzsJLndyaXRlcGFnZXMJPSBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMsCiAJLndyaXRlX2JlZ2luCT0gaGZzcGx1c193cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kCT0gZ2VuZXJpY193cml0ZV9lbmQsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKQEAgLTE5NywxOCAmIzQzOzE0MCw3MCBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHsKIAkucmVsZWFzZV9mb2xpbwk9IGhmc3BsdXNfcmVsZWFzZV9mb2xpbywKIH07CiAKLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0gewomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLAogCS53cml0ZV9iZWdpbgk9IGhmc3BsdXNfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZAk9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5ibWFwCQk9IGhmc3BsdXNfYm1hcCwKLQkuZGlyZWN0X0lPCT0gaGZzcGx1c19kaXJlY3RfSU8sCi0JLndyaXRlcGFnZXMJPSBoZnNwbHVzX3dyaXRlcGFnZXMsCiYjNDM7CS53cml0ZXBhZ2VzCT0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIH07CiAKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhmc3BsdXNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZQk9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjCT0gd2JjLAomIzQzOwkJLm9wcwk9ICZhbXA7aGZzcGx1c193cml0ZWJhY2tfb3BzLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7CS5yZWFkX2ZvbGlvCQk9IGhmc3BsdXNfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZAkJPSBoZnNwbHVzX3JlYWRhaGVhZCwKJiM0MzsJLndyaXRlcGFnZXMJCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5ibWFwCQkJPSBoZnNwbHVzX2FvcF9ibWFwLAomIzQzOwkubWlncmF0ZV9mb2xpbwkJPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUJPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8JPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0MzsJLnJlbGVhc2VfZm9saW8JCT0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuc3dhcF9hY3RpdmF0ZQkJPSBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUsCiYjNDM7fTsKJiM0MzsKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LApAQCAtMjY4LDM1ICYjNDM7MjYzLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKCEoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX0xBUkdFRklMRSkgJmFtcDsmYW1wOyBpX3NpemVfcmVhZChpbm9kZSkgJmd0OyBNQVhfTk9OX0xGUykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewotCQlpbm9kZV9sb2NrKGlub2RlKTsKLQkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKLQkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewotCQkJaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLSZndDtpX2lubywKLQkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwotCQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwotCQl9Ci0JCWlub2RlX3VubG9jayhpbm9kZSk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMzExLDEwICYjNDM7Mjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSAgICBhdHRyLSZndDtpYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiAJCWlmIChhdHRyLSZndDtpYV9zaXplICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewotCQkJZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwKLQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKLQkJCWlmIChlcnJvcikKJiM0MzsJCQlsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS0mZ3Q7aV9zaXplOwomIzQzOwomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci0mZ3Q7aWFfc2l6ZSk7CiYjNDM7CQkJZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7CiAJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCX0KIAkJfQogCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKIAkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKQEAgLTM1Myw4NiAmIzQzOzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCXJldHVybiAwOwogfQogCi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLSZndDtpX3NiKTsKLQlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwotCWludCBlcnJvciA9IDAsIGVycm9yMjsKLQotCWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAotCQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwotCi0JZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWlub2RlX2xvY2soaW5vZGUpOwotCi0JLyoKLQkgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy4KLQkgKi8KLQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQotCS8qCi0JICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCi0JICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAotCQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7Ci0JCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCi0JCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQljbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0KLQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwotCQkJZXJyb3IyID0KLQkJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KAotCQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IGVycm9yMjsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncykpCi0JCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQltdXRleF9sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7Ci0JaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKLQltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKLQotCWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyb3IyOwotCi0JaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKLQkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCi0JaW5vZGVfdW5sb2NrKGlub2RlKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gaGZzcGx1c19zZXRhdHRyLAogCS5nZXRhdHRyCT0gaGZzcGx1c19nZXRhdHRyLApAQCAtNDU0LDE5ICYjNDM7MzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5saXN0eGF0dHIJPSBoZnNwbHVzX2xpc3R4YXR0ciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi0JLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKLQkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCi19OwotCiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXVtb2RlX3QgbW9kZSkKIHsKQEAgLTUxMyw3ICYjNDM7MzkwLDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJc2JpLSZndDtmaWxlX2NvdW50JiM0MzsmIzQzOzsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19hb3BzOwogCQloaXAtJmd0O2NsdW1wX2Jsb2NrcyA9IDE7CiAJfSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkgfHwKIAkJICAgU19JU0ZJRk8oaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtJmd0O2lfbW9kZSkpIHsKQEAgLTY1NCw3ICYjNDM7NTMxLDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWlub2RlX25vaGlnaG1lbShpbm9kZSk7Ci0JCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfYW9wczsKIAkJfSBlbHNlIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5jCkBAIC0wLDAgJiM0MzsxLDE4OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJCQkJIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCQkJIHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzOwomIzQzOwlsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzOwomIzQzOwlsb2ZmX3QgYmxvY2tfc3RhcnQ7CiYjNDM7CWJvb2wgaXNfbmV3OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIW1heV9hbGxvYykgewomIzQzOwkJLyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovCiYjNDM7CQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpICZsdDs9IG9mZnNldCkgewomIzQzOwkJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCQlpb21hcC0mZ3Q7YWRkciA9IElPTUFQX05VTExfQUREUjsKJiM0MzsJCQlpb21hcC0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwkJCWlvbWFwLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBDbGFtcCBsZW5ndGggaWYgdGhlIHJlcXVlc3RlZCByYW5nZSBnb2VzIGJleW9uZCBpX3NpemUgKi8KJiM0MzsJCWlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQkJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gaV9ibG9ja3NpemUoaW5vZGUpOwomIzQzOwomIzQzOwkJCWxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlhYmxvY2sgPSBvZmZzZXQgJmd0OyZndDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJZXJyID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgJmFtcDtkYmxvY2ssCiYjNDM7CQkJCSAmYW1wO21heF9ibG9ja3MsIE5VTEwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWJsb2NrX29mZnNldCA9IG9mZnNldCAmYW1wOyAoc2JpLSZndDthbGxvY19ibGtzeiAtIDEpOwomIzQzOwlhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJbGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGFibG9ja19ieXRlcyAtIGFibG9ja19vZmZzZXQpOwomIzQzOwlibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpOwomIzQzOwlpc19uZXcgPSBtYXlfYWxsb2MgJmFtcDsmYW1wOyBibG9ja19zdGFydCAmZ3Q7PSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsJaWYgKG1heV9hbGxvYyAmYW1wOyZhbXA7ICFpc19uZXcgJmFtcDsmYW1wOyBvZmZzZXQgJmx0OyBoaXAtJmd0O3BoeXNfc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtJmd0O3BoeXNfc2l6ZSAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gc2ItJmd0O3NfYmRldjsKJiM0MzsJaW9tYXAtJmd0O29mZnNldCA9IG9mZnNldDsKJiM0MzsJaW9tYXAtJmd0O2xlbmd0aCA9IGxlbmd0aDsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICYjNDM7IGFibG9ja19vZmZzZXQ7CiYjNDM7CWlvbWFwLSZndDt0eXBlID0gSU9NQVBfTUFQUEVEOwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0MzsKJiM0MzsJaWYgKGlzX25ldykKJiM0MzsJCWlvbWFwLSZndDtmbGFncyB8PSBJT01BUF9GX05FVzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwkJCQlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CQkJCSAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJCQkgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4gPSBoZnNwbHVzX2lvbWFwX2JlZ2luLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpCiYjNDM7ICoKJiM0MzsgKiBBZHZhbmNlIHRoZSBhbGxvY2F0ZWQtYW5kLXplcm9lZCBoaWdoLXdhdGVyIG1hcmsKJiM0MzsgKiAoaGlwLSZndDtwaHlzX3NpemUgLyBoaXAtJmd0O2ZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAomIzQzOwkJCQkgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJbG9mZl90IGVuZDsKJiM0MzsJYm9vbCBkaXJ0aWVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghd3JpdHRlbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllbmQgPSByb3VuZF91cChwb3MgJiM0Mzsgd3JpdHRlbiwgc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsKJiM0MzsJaWYgKGhpcC0mZ3Q7cGh5c19zaXplICZsdDsgZW5kKSB7CiYjNDM7CQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC0mZ3Q7cGh5c19zaXplKTsKJiM0MzsJCWhpcC0mZ3Q7cGh5c19zaXplID0gZW5kOwomIzQzOwkJaGlwLSZndDtmc19ibG9ja3MgPSBlbmQgJmd0OyZndDsgc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CQlkaXJ0aWVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZGlydGllZCkKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luCT0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbiwKJiM0MzsJLmlvbWFwX2VuZAk9IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKCkKJiM0MzsgKgomIzQzOyAqIFplcm8tZXh0ZW5kIHRoZSBiYWNraW5nIHN0b3JlIGZyb20gdGhlIGN1cnJlbnQgcGh5c19zaXplIHVwIHRvICYjMzk7c2l6ZSYjMzk7LgomIzQzOyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuCiYjNDM7ICovCiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlsb2ZmX3Qgc3RhcnQgPSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgJmx0Oz0gc3RhcnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsCiYjNDM7CQkJCSZhbXA7aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFjawomIzQzOyAqCiYjNDM7ICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlCiYjNDM7ICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAob2Zmc2V0ICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJICAgIG9mZnNldCAmZ3Q7PSB3cGMtJmd0O2lvbWFwLm9mZnNldCAmIzQzOyB3cGMtJmd0O2lvbWFwLmxlbmd0aCkgewomIzQzOwkJZXJyID0gX19oZnNwbHVzX2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsCiYjNDM7CQkJCQkgICAgb2Zmc2V0LCBsZW4sIDAsCiYjNDM7CQkJCQkgICAgJmFtcDt3cGMtJmd0O2lvbWFwLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHsKJiM0MzsJLndyaXRlYmFja19yYW5nZQk9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdAk9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHMgPSB7CiYjNDM7CS5lbmRfaW8JCT0gaW9tYXBfZGlvX2VuZF9pbywKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywKJiM0MzsJCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3BhbikKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuaCBiL2ZzL2hmc3BsdXMvaW9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbQomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wczsKJiM0MzsKJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLAomIzQzOwkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfSEZTUExVU19JT01BUF9IICovCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtNTcxLDYgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWdvdG8gb3V0X2Nsb3NlX2F0dHJfdHJlZTsKIAl9CiAJc2JpLSZndDthbGxvY19maWxlID0gaW5vZGU7CiYjNDM7CW1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAKIAkvKiBMb2FkIHRoZSByb290IGRpcmVjdG9yeSAqLwogCXJvb3QgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfUk9PVF9DTklEKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKQEAgLTE3MSwxOCAmIzQzOzE3MSwyMiBAQCBlbnVtIHsKIAlIRlNfWEFUVFJfTkFNRSwKIH07CiAKJiM0MzsjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVAkoMykKJiM0MzsKIHN0cnVjdCBoZnNfZXh0ZW50IHsKIAlfX2JlMTYgYmxvY2s7CiAJX19iZTE2IGNvdW50OwogfTsKLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107CiYjNDM7dHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1tIRlNfRk9SS19FWFRFTlRfQ09VTlRdOwomIzQzOwomIzQzOyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVAkoOCkKIAogLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZXh0ZW50IHsKIAlfX2JlMzIgc3RhcnRfYmxvY2s7CiAJX19iZTMyIGJsb2NrX2NvdW50OwogfSBfX3BhY2tlZDsKLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTsKJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07CiAKIC8qIEluZm9ybWF0aW9uIGZvciBhICYjMzQ7Rm9yayYjMzQ7IGluIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTIuLjUwZmU2MDM2YjAxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTU2MCw2ICYjNDM7NTYwLDI2IEBAIHN0cnVjdCBpb21hcF9kaW9fb3BzIHsKIAlzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIERpcmVjdCBJL08gY29tcGxldGlvbiBoYW5kbGVyCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO2ludCBpb21hcF9kaW9fZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLAomIzQzOwkJICAgICBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChzaXplICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZsdDsgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpOwomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFdhaXQgZm9yIHRoZSBJL08gdG8gY29tcGxldGUgaW4gaW9tYXBfZGlvX3J3IGV2ZW4gaWYgdGhlIGtpb2NiIGlzIG5vdAogICogc3luY2hyb25vdXMuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTU5CgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUyYjNDM7IGlvbWFwIENvbnZlcnNpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBIRlMmIzQzOyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBvdmVyaGF1bC4gVGhlIGNvcmUgaWRlYSBpcyB0byBtaWdyYXRlIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtJiMzOTtzIEkvTyBwYXRoIHRvIHV0aWxpemUgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIG9mZmVyIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGFuZCBmbGV4aWJpbGl0eSBhZHZhbnRhZ2VzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlcGxhY2luZyBgTEVHQUNZX0RJUkVDVF9JT2Agd2l0aCBgRlNfSU9NQVBgIGluIGBLY29uZmlnYCBwcmV0dHkgbXVjaCBjb25maXJtcyB0aGlzIG1ham9yIGFyY2hpdGVjdHVyYWwgc2hpZnQuCgpUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5jdGlvbmFsIHRyYW5zZm9ybWF0aW9uLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXcgZmlsZXMgKGBmaWxlLmNgLCBgaW9tYXAuY2ApIGFuZCBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIGZpbGVzeXN0ZW0gY29tcG9uZW50czogYGJpdG1hcC5jYCAocGFnZSBsb2NraW5nIGFuZCB3cml0ZSBzdGFiaWxpdHkpLCBgZXh0ZW50cy5jYCAod2l0aCB0aGUgbmV3IGBoZnNwbHVzX21hcF9leHRlbnRgIGFuZCB1cGRhdGVzIHRvIGJsb2NrLXJlbGF0ZWQgZnVuY3Rpb25zKSwgYGlub2RlLmNgIChpbnRlZ3JhdGluZyBpb21hcCBmb3IgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBzZXBhcmF0aW5nIGJ0cmVlIGFuZCBzeW1saW5rIGFvcHMpLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGFkZGl0aW9uIG9mIGBpb21hcC5jYCBhbmQgYGlvbWFwLmhgIHdpdGggYWxsIHRoZSBpb21hcC1zcGVjaWZpYyBvcGVyYXRpb25zLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgYXJlYXMuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgcmVhbGx5IHNjcnV0aW5pemluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIGZ1bmN0aW9ucyBsaWtlIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYCwgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLCBhbmQgYGhmc3BsdXNfZmlsZV9mc3luY2Agc2luY2UgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXcgSS9PIHBhdGguIEkmIzM5O2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleHRlbnQgbWFwcGluZyAoYGhmc3BsdXNfbWFwX2V4dGVudGApIGFuZCB0aGUgaW9tYXAgY29udGludWF0aW9uIChgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBfX2hmc3BsdXNfaW9tYXBfYmVnaW5gLCBgaGZzcGx1c193cml0ZV9pb21hcF9lbmRgLCBgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2VgKS4gVGhlc2UgYXJlIGNydWNpYWwgZm9yIHRoZSBpb21hcCYjMzk7cyBjb3JyZWN0IG9wZXJhdGlvbi4KCkkgc2hvdWxkIHZlcmlmeSB0aGUgcmVxdWlyZWQgY29uZmlncyBhcmUgbWV0LCBsaWtlIGBDT05GSUdfSEZTUExVU19GU2AuCgpJJiMzOTtsbCBydW4gc29tZSBgZ3JlcHBlcmAgc2VhcmNoZXMgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBpbnNpZGUgb2YgYGZzL2hmc3BsdXMvZmlsZS5jYCBhbmQgYGZzL2hmc3BsdXMvaW9tYXAuY2AgdG8gc2VlIGhvdyB0aGUgY2hhbmdlcyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8c3NpemVfdHxsb2ZmX3R8c3RhdGljIGludHxzdGF0aWMgc3NpemVfdHxzdGF0aWMgbG9mZl90KSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZmlsZS5jLTE0LVxuZnMvaGZzcGx1cy9maWxlLmM6MTU6c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL2hmc3BsdXMvZmlsZS5jLTE2LXtcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNS1cbmZzL2hmc3BsdXMvZmlsZS5jOjI2OnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNy17XG4tLVxuZnMvaGZzcGx1cy9maWxlLmMtNDQtXG5mcy9oZnNwbHVzL2ZpbGUuYzo0NTppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5mcy9oZnNwbHVzL2ZpbGUuYy00Ni1cdFx0ICAgICAgIGludCBkYXRhc3luYylcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0xMjctICovXG5mcy9oZnNwbHVzL2ZpbGUuYzoxMjg6c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2ZpbGUuYy0xMjktXHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2hmc3BsdXMvZmlsZS5jLTE1NS1cbmZzL2hmc3BsdXMvZmlsZS5jOjE1NjpzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbmZzL2hmc3BsdXMvZmlsZS5jLTE1Ny1cdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2hmc3BsdXMvZmlsZS5jLTE4MS1cbmZzL2hmc3BsdXMvZmlsZS5jOjE4MjpzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2ZpbGUuYy0xODMtXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNDktXG5mcy9oZnNwbHVzL2ZpbGUuYzoyNTA6c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNTEtXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNzAtXG5mcy9oZnNwbHVzL2ZpbGUuYzoyNzE6c3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuZnMvaGZzcGx1cy9maWxlLmMtMjcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc4MgoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGhvdyBIRlMmIzQzOyBkZWFscyB3aXRoIEkvTyBtYXBwaW5nLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGhlYWQgaXMgYGZzL2hmc3BsdXMvaW9tYXAuY2AuIFRoYXQgZmlsZSBpcyB0aGUgbGlrZWx5IHJlcG9zaXRvcnkgZm9yIHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayB0cmFuc2xhdGlvbiwgZXh0ZW50IG1hbmFnZW1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBtZWNoYW5pY3Mgb2YgaG93IEhGUyYjNDM7IGFycmFuZ2VzIGRhdGEgb24gdGhlIGRpc2suIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIGZpbGUgc3lzdGVtIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2lvbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pb21hcC5jLTEyLVxuZnMvaGZzcGx1cy9pb21hcC5jOjEzOnN0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTQtXHRcdFx0XHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYy03My1cbmZzL2hmc3BsdXMvaW9tYXAuYzo3NDpzdGF0aWMgaW50IGhmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbmZzL2hmc3BsdXMvaW9tYXAuYy03NS1cdFx0XHRcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmMtODItXG5mcy9oZnNwbHVzL2lvbWFwLmM6ODM6c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9oZnNwbHVzL2lvbWFwLmMtODQtXHRcdFx0XHQgICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmM9OTI9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTAxLSAqL1xuZnMvaGZzcGx1cy9pb21hcC5jOjEwMjpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTAzLVx0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYz0xMjk9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTM5LSAqL1xuZnMvaGZzcGx1cy9pb21hcC5jOjE0MDppbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbmZzL2hmc3BsdXMvaW9tYXAuYy0xNDEte1xuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYy0xNTctICovXG5mcy9oZnNwbHVzL2lvbWFwLmM6MTU4OnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTU5LVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LFxuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYz0xODE9Y29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYy0xODQtXG5mcy9oZnNwbHVzL2lvbWFwLmM6MTg1OmludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xODYtXHRcdFx0XHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzYxCgkJCQkJCQlvdXRwdXQ6IDc3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYGZzL2hmc3BsdXMvZXh0ZW50cy5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBIRlMmIzQzOyBleHRlbnQgbWFuYWdlbWVudCBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgZnMvaGZzcGx1cy9leHRlbnRzLmNgIGZpbGUgaXMgcHJvYmFibHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBFeHRlbnRzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgSEZTJiM0Mzsgb3JnYW5pemVzIGRhdGEsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGFsbG9jYXRpbmcsIGRlYWxsb2NhdGluZywgYW5kIG1hbmFnaW5nIHRob3NlIGJsb2NrcyB3b3VsZCByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpbmdzIGxpa2UgbWFwcGluZyBsb2dpY2FsIGJsb2NrIG51bWJlcnMgdG8gcGh5c2ljYWwgb25lcywgaGFuZGxpbmcgZnJhZ21lbnRlZCBmaWxlcywgYW5kIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGJpdG1hcHMgaWYgSEZTJiM0MzsgdXNlcyBvbmUuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEhGUyYjNDM7IGRhdGEgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIGhvdyBleHRlbnRzIGFyZSBzdG9yZWQgb24gZGlzay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdHx1MzJ8c3RhdGljIHUzMikgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYy0yMC0vKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMTppbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMi1cdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDI9c3RhdGljIHZvaWQgaGZzcGx1c19leHRfYnVpbGRfa2V5KGhmc3BsdXNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTU4LSAqL1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTk6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNjAtXHRcdFx0XHQgdTMyICpkYmxvY2spXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNzctXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo3ODpzdGF0aWMgaW50IGhmc3BsdXNfZXh0X2Jsb2NrX2NvdW50KHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0KVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNzkte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTg3LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6ODg6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04OS17XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtOTgtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo5OTpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMDAtXHRcdHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDItXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxNDM6c3RhdGljIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDQte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1OC1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE1OTppbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNjAte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE5MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjE5LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjIwOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLXtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNTItICovXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyNTM6aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjU0LVx0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDctLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjMwODppbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzA5LVx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zNTI9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zNjMtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozNjQ6c3RhdGljIGludCBoZnNwbHVzX2FkZF9leHRlbnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHRlbnQsIHUzMiBvZmZzZXQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zNjUtXHRcdFx0ICAgICAgdTMyIGFsbG9jX2Jsb2NrLCB1MzIgYmxvY2tfY291bnQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzkxLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MzkyOnN0YXRpYyBpbnQgaGZzcGx1c19mcmVlX2V4dGVudHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTM5My1cdFx0XHRcdHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0ZW50LFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ0NS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQ0NjppbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDctXHRcdHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00OTAtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0OTE6aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIEhGUyYjNDM7IGZpbGUgc3lzdGVtIGZ1bmN0aW9ucyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBJIHNob3VsZCBzdGFydCB3aXRoIHRoZXNlOiBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJgLCBgaGZzcGx1c19maWxlX2xsc2Vla2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBhbmQgYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBidWlsZGluZyBibG9ja3MgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBJL08gYW5kIGV4dGVudCBtYXBwaW5nIHdpdGhpbiB0aGUgSEZTJiM0MzsgY29udGV4dC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgYGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZWAuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGEgbG9vaywgdGhvdWdoIEkmIzM5O2xsIG5lZWQgdG8gcHJpb3JpdGl6ZS4gSSYjMzk7bGwgYWxzbyBjaGVjayBvdXQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBzaW5jZSBpdCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrYCB3YXMgYWxzbyB1cGRhdGVkIGJ1dCBpdCYjMzk7cyBzdGF0aWMsIHNvIGl0IG1heSBub3QgYmUgYXMgY3JpdGljYWwgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIHRoaXMgbGF0ZXIuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgYGZzL2hmc3BsdXMvS2NvbmZpZ2AgZmlsZS4gVGhhdCB3aWxsIHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4gSSBjYW4mIzM5O3QgZ2V0IHRoZSBmdWxsIHBpY3R1cmUgd2l0aG91dCB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU1BMVVNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBOTFNcbiAgIDc6XHRcdHNlbGVjdCBOTFNfVVRGOFxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuICAxMTpcdFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUyYjNDM7IGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXG4gIDE0Olx0XHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcbiAgMTU6XHRcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxuICAxNjpcdFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDIwOlx0XHRkZXBlbmRzIG9uIEhGU1BMVVNfRlMgXHUwMDI2XHUwMDI2IEtVTklUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTEyCgkJCQkJCQlvdXRwdXQ6IDE3MwoJCQkJCQkJdGhvdWdodHM6IDEwMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhGUyYjNDM7IEkvTyBPcGVyYXRpb25zIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGdpdmVuIHRoZSBgSEZTUExVU19GU2AgY29uZmlnLCBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZyBhZnRlciB0aGlzIEhGUyYjNDM7IGlvbWFwIGNvbnZlcnNpb24uIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIGVudHJ5IHBvaW50cyBmb3IgZmlsZSBJL08gb3BlcmF0aW9ucyBhbmQgcmVsYXRlZCBleHRlbnQvYmxvY2sgbWFuYWdlbWVudC4KCkZpcnN0LCBJIHJldmlld2VkIHRoZSBjYW5kaWRhdGUgZnVuY3Rpb25zOiBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJgLCBgaGZzcGx1c19maWxlX2xsc2Vla2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGFuZCBgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBzaW5jZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBgaGZzcGx1c19maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAgYW5kIHJlcHJlc2VudHMgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9uIGV4cGxpY2l0bHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgY2FuZGlkYXRlcy4gYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCBpcyB0ZW1wdGluZywgYnV0IHN0YXRpYywgYW5kIEkgbmVlZCB0byBwcmlvcml0aXplIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBUaHVzLCBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfbWFwX2V4dGVudGAsIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYCwgYGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZWAsIGFuZCBgaGZzcGx1c19nZXRfYmxvY2tgIGFyZSBkZWZpbml0ZWx5IGluIHNjb3BlLgoKSSBtYWRlIHN1cmUgdG8gcmUtY2hlY2sgYWxsIHRoZSBjb2RlLiBJIHZlcmlmaWVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgbm9uLXN0YXRpYywgYnkgbG9va2luZyB0aHJvdWdoIGBmcy9oZnNwbHVzL2ZpbGUuY2AsIGBmcy9oZnNwbHVzL2lvbWFwLmNgLCBhbmQgYGZzL2hmc3BsdXMvZXh0ZW50cy5jYC4gSSBjb25maXJtZWQgdGhhdCB0aGUgZGVmaW5pdGlvbnMgb2YgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLCBhbmQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhcmUgZXhhY3RseSBhcyBJIGV4cGVjdC4KCkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgdGhpcyBwYXRjaCByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdCB3aXRoIGlvbWFwLCB3aGljaCB0b3VjaGVzIG9uIHRoZSBjb3JlIGZpbGUgc3lzdGVtLCBibG9jayBhbGxvY2F0aW9uLCBleHRlbnQgbWFwcGluZywgYW5kIEkvTyBoYW5kbGluZywgYW5kIHRoZXJlZm9yZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgZXhjZWxsZW50IGZ1enppbmcgdGFyZ2V0cyB0byBjb3ZlciBrZXkgZW50cnlwb2ludHMgZm9yIGZpbGUgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19tYXBfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZ2V0X2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PLCByZXBsYWNpbmcgdGhlIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXIgaGVhZCBiYXNlZCBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaW9tYXAgb3BlcmF0aW9ucyBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIHNlZWtpbmcsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzcGx1c19maWxlX2ZzeW5jJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfbWFwX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2dldF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSB0byB1c2UgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTywgcmVwbGFjaW5nIHRoZSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyIGhlYWQgYmFzZWQgcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGlvbWFwIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBzZWVraW5nLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udmVydHMgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbSBmcm9tIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gdG8gdGhlIG1vZGVybiBpb21hcCBpbmZyYXN0cnVjdHVyZS4gSXQgaW50cm9kdWNlcyBuZXcgZmlsZSBvcGVyYXRpb25zLCBpb21hcCBjYWxsYmFja3MsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBsb2dpYy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RhbmRhcmQgVkZTIGFuZCBpb21hcCBBUEkgdXNhZ2UsIHN1Y2ggYXMgYGlvbWFwX2Rpb19yd2AsIGBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlYCwgYW5kIGBpb21hcF96ZXJvX3JhbmdlYC4gRmlsZSBleHBhbnNpb25zIGFyZSBwcm9wZXJseSB6ZXJvZWQgdXNpbmcgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGJsb2NrcyBhcmUgZmxhZ2dlZCB3aXRoIGBJT01BUF9GX05FV2AsIHdoaWNoIHRoZSBpb21hcCBjb3JlIGhhbmRsZXMgdG8gcHJldmVudCB1bmluaXRpYWxpemVkIGRpc2sgZGF0YSBleHBvc3VyZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgaW9jdGxzLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGU1MTA0NWMwMDU0MzNhN2NkYTUwYWE2ZDBjZTA5OWUzMWYxNWQ3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9LY29uZmlnIGIvZnMvaGZzcGx1cy9LY29uZmlnCmluZGV4IGNhODQwMWNiNjk1NGQuLmI0NDMyYzY0ZGIzYmUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWcKQEAgLTUsNyAmIzQzOzUsNyBAQCBjb25maWcgSEZTUExVU19GUwogCXNlbGVjdCBCVUZGRVJfSEVBRAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgTkxTX1VURjgKLQlzZWxlY3QgTEVHQUNZX0RJUkVDVF9JTwomIzQzOwlzZWxlY3QgRlNfSU9NQVAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXQKIAkgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlCmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9NYWtlZmlsZQpAQCAtNSw4ICYjNDM7NSw5IEBACiAKIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSAmIzQzOz0gaGZzcGx1cy5vCiAKLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFwKLQkJYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXAomIzQzO2hmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGZpbGUubyBpb21hcC5vIGlvY3RsLm8gZXh0ZW50cy5vIFwKJiM0MzsJCWNhdGFsb2cubyBkaXIubyBidHJlZS5vIGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gXAomIzQzOwkJdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFwKIAkJYXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vCiAKICMgS1VuaXQgdGVzdHMKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jCmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuYwpAQCAtMzksNiAmIzQzOzM5LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCXN0YXJ0ID0gc2l6ZTsKIAkJZ290byBvdXQ7CiAJfQomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJaSA9IG9mZnNldCAlIDMyOwpAQCAtNzUsNiAmIzQzOzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQljdXJyJiM0MzsmIzQzOzsKIAkJfQogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJb2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7CiAJCWlmIChvZmZzZXQgJmd0Oz0gc2l6ZSkKIAkJCWJyZWFrOwpAQCAtODQsNiAmIzQzOzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQlzdGFydCA9IHNpemU7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJZm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7CiAJCWN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQlpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKQogCQkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTk4LDYgJiM0MzsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAlzdGFydCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaTsKIAlpZiAoc3RhcnQgJmd0Oz0gc2l6ZSkgewogCQloZnNfZGJnKCYjMzQ7Yml0bWFwIGZ1bGxcbiYjMzQ7KTsKJiM0MzsJCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJCXVubG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJc3RhcnQgPSBzaXplOwogCQlnb3RvIG91dDsKIAl9CiAJLyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqLwpAQCAtMTI4LDYgJiM0MzsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkJfQogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCW9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTOwogCQlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLAogCQkJCQkgTlVMTCk7CkBAIC0xMzUsNiAmIzQzOzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLAogCQkJc3RhcnQgPSBzaXplOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsJCWxvY2tfcGFnZShwYWdlKTsKJiM0MzsJCWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCQlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0cjsKIAkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTE1Miw2ICYjNDM7MTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJKmN1cnIgPSBjcHVfdG9fYmUzMihuKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CXVubG9ja19wYWdlKHBhZ2UpOwogCSptYXggPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGkgLSBzdGFydDsKIAlzYmktJmd0O2ZyZWVfYmxvY2tzIC09ICptYXg7CiAJaGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7CkBAIC0xODUsNiAmIzQzOzE5Nyw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpOwogCWlmIChJU19FUlIocGFnZSkpCiAJCWdvdG8ga2Fib29tOwomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTIxNiw5ICYjNDM7MjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCQkJYnJlYWs7CiAJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICYjNDM7JiM0MztwbnIsIE5VTEwpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKQogCQkJZ290byBrYWJvb207CiYjNDM7CQlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CQlmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTsKIAkJcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKIAkJY3VyciA9IHBwdHI7CiAJCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0yMzIsNiAmIzQzOzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogb3V0OgogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJdW5sb2NrX3BhZ2UocGFnZSk7CiAJc2JpLSZndDtmcmVlX2Jsb2NrcyAmIzQzOz0gbGVuOwogCWhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpOwogCW11dGV4X3VubG9jaygmYW1wO3NiaS0mZ3Q7YWxsb2NfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwppbmRleCA4MTNlNjhiOGVjZDY1Li44ZjdmNTYwY2VjNjQyIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX3Jhdy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmgmIzM0OwogCiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovCiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsCkBAIC00OCwxOCAmIzQzOzQ5LDI5IEBAIHN0YXRpYyB2b2lkIGhmc3BsdXNfZXh0X2J1aWxkX2tleShoZnNwbHVzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCwKIAlrZXktJmd0O2V4dC5wYWQgPSAwOwogfQogCi1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYpCiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKCkgLSBmaW5kIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYmxvY2sKJiM0MzsgKgomIzQzOyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJiMzOTtvZmYmIzM5OyB3aXRoaW4gYW4gOC1lbnRyeQomIzQzOyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZiwKJiM0MzsJCQkJIHUzMiAqZGJsb2NrKQogewogCWludCBpOwogCXUzMiBjb3VudDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKIAkJY291bnQgPSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKLQkJaWYgKG9mZiAmbHQ7IGNvdW50KQotCQkJcmV0dXJuIGJlMzJfdG9fY3B1KGV4dC0mZ3Q7c3RhcnRfYmxvY2spICYjNDM7IG9mZjsKJiM0MzsJCWlmIChvZmYgJmx0OyBjb3VudCkgewomIzQzOwkJCSpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtJmd0O3N0YXJ0X2Jsb2NrKSAmIzQzOyBvZmY7CiYjNDM7CQkJcmV0dXJuIGNvdW50IC0gb2ZmOwomIzQzOwkJfQogCQlvZmYgLT0gY291bnQ7CiAJfQogCS8qIHBhbmljPyAqLwomIzQzOwkqZGJsb2NrID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjgsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9ibG9ja19jb3VudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCkKIAlpbnQgaTsKIAl1MzIgY291bnQgPSAwOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IDg7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspCiAJCWNvdW50ICYjNDM7PSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yMjMsMzcgJiM0MzsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spCiAJcmV0dXJuIHJlczsKIH0KIAotLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi8KLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCi0JCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKgomIzQzOyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICYjMzk7YWJsb2NrJiMzOTsgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlCiYjNDM7ICogZmlsZSAodmlhIGhmc3BsdXNfZmlsZV9leHRlbmQoKSwgaW4gY2x1bXBfYmxvY2tzLXNpemVkIGNodW5rcykgd2hlbgomIzQzOyAqICYjMzk7Y3JlYXRlJiMzOTsgaXMgc2V0IGFuZCAmIzM5O2FibG9jayYjMzk7IGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAmIzM5O2FibG9jayYjMzk7LAomIzQzOyAqIGFuZCAqbWF4X2Jsb2NrcyBpcyB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MgdGhhdCBhcmUKJiM0MzsgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeQomIzQzOyAqIHRoYXQgY29udGFpbnMgJiMzOTthYmxvY2smIzM5OyksIHdoaWNoIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIHdob2xlIGZpbGUmIzM5O3MKJiM0MzsgKiByZW1haW5pbmcgYWxsb2NhdGlvbiB3aGVuIHRoZSBmb3JrIGlzIGZyYWdtZW50ZWQgYWNyb3NzIHNldmVyYWwKJiM0MzsgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGUKJiM0MzsgKiByZXF1ZXN0LCAqYmFsbG9jICh3aGVuIG5vbi1OVUxMKSBpcyBzZXQgdG8gdHJ1ZS4KJiM0MzsgKi8KJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsCiYjNDM7CQkJdTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKIAlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCWludCByZXMgPSAtRUlPOwotCXUzMiBhYmxvY2ssIGRibG9jaywgbWFzazsKLQlzZWN0b3JfdCBzZWN0b3I7Ci0JaW50IHdhc19kaXJ0eSA9IDA7CiYjNDM7CWludCB3YXNfZGlydHk7CiYjNDM7CWludCByZXM7CiAKLQkvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqLwotCWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlpZiAoYmFsbG9jKQomIzQzOwkJKmJhbGxvYyA9IGZhbHNlOwogCi0JaWYgKGlibG9jayAmZ3Q7PSBoaXAtJmd0O2ZzX2Jsb2NrcykgewomIzQzOwlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7CiAJCWlmICghY3JlYXRlKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKIAkJCXJldHVybiAtRUlPOwotCQlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7Ci0JCQlyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7Ci0JCQlpZiAocmVzKQotCQkJCXJldHVybiByZXM7Ci0JCX0KLQl9IGVsc2UKLQkJY3JlYXRlID0gMDsKJiM0MzsJCXJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCWlmIChiYWxsb2MpCiYjNDM7CQkJKmJhbGxvYyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChhYmxvY2sgJmx0OyBoaXAtJmd0O2ZpcnN0X2Jsb2NrcykgewotCQlkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywgYWJsb2NrKTsKLQkJZ290byBkb25lOwomIzQzOwkJKm1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywKJiM0MzsJCQkJCQkgICAgIGFibG9jaywKJiM0MzsJCQkJCQkgICAgIGRibG9jayk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IEhGU1BMVVNfRVhUX0NOSUQpCkBAIC0yNzIsMTEgJiM0MzsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7aGlwLSZndDtleHRlbnRzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAotCQkJCQlhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCk7CiYjNDM7CSptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAomIzQzOwkJCQkJICAgICBhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCwKJiM0MzsJCQkJCSAgICAgZGJsb2NrKTsKIAltdXRleF91bmxvY2soJmFtcDtoaXAtJmd0O2V4dGVudHNfbG9jayk7CiAKLWRvbmU6CiYjNDM7CWlmICh3YXNfZGlydHkpCiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovCiYjNDM7aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKJiM0MzsJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXNrLCBtYXhfYmxvY2tzOwomIzQzOwlzZWN0b3JfdCBzZWN0b3I7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovCiYjNDM7CWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwomIzQzOwlpZiAoaWJsb2NrICZndDs9IGhpcC0mZ3Q7ZnNfYmxvY2tzKSB7CiYjNDM7CQlpZiAoIWNyZWF0ZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsJfSBlbHNlCiYjNDM7CQljcmVhdGUgPSAwOwomIzQzOwomIzQzOwlyZXMgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgY3JlYXRlLCAmYW1wO2RibG9jaywgJmFtcDttYXhfYmxvY2tzLAomIzQzOwkJCQkgIE5VTEwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKIAloZnNfZGJnKCYjMzQ7aW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XG4mIzM0OywKIAkJaW5vZGUtJmd0O2lfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTsKIApAQCAtMjkwLDkgJiM0MzszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQloaXAtJmd0O3BoeXNfc2l6ZSAmIzQzOz0gc2ItJmd0O3NfYmxvY2tzaXplOwogCQloaXAtJmd0O2ZzX2Jsb2NrcyYjNDM7JiM0Mzs7CiAJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItJmd0O3NfYmxvY2tzaXplKTsKLQl9Ci0JaWYgKGNyZWF0ZSB8fCB3YXNfZGlydHkpCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1MywyMCAmIzQzOzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlpbm9kZS0mZ3Q7aV9pbm8sIChsb25nIGxvbmcpaGlwLSZndDtwaHlzX3NpemUsIGlub2RlLSZndDtpX3NpemUpOwogCiAJaWYgKGlub2RlLSZndDtpX3NpemUgJmd0OyBoaXAtJmd0O3BoeXNfc2l6ZSkgewotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXZvaWQgKmZzZGF0YSA9IE5VTEw7Ci0JCWxvZmZfdCBzaXplID0gaW5vZGUtJmd0O2lfc2l6ZTsKJiM0MzsJCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJcmVzID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJCQl2b2lkICpmc2RhdGEgPSBOVUxMOwomIzQzOwomIzQzOwkJCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywKJiM0MzsJCQkJCQkgIGlub2RlLSZndDtpX3NpemUsIDAsCiYjNDM7CQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsCiYjNDM7CQkJCQkJaW5vZGUtJmd0O2lfc2l6ZSwgMCwgMCwKJiM0MzsJCQkJCQlmb2xpbywgZnNkYXRhKTsKJiM0MzsJCQlpZiAocmVzICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQogCi0JCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwKLQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm47Ci0JCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsCi0JCQkJCWZvbGlvLCBmc2RhdGEpOwotCQlpZiAocmVzICZsdDsgMCkKLQkJCXJldHVybjsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKGlub2RlLSZndDtpX3NpemUgPT0gaGlwLSZndDtwaHlzX3NpemUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZmlsZS5jIGIvZnMvaGZzcGx1cy9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODI2Nzg0ODhmYjA1NAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jCkBAIC0wLDAgJiM0MzsxLDMwNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQomIzQzOwkJaW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLSZndDtyc3JjX2lub2RlOwomIzQzOwlpZiAoIShmaWxlLSZndDtmX2ZsYWdzICZhbXA7IE9fTEFSR0VGSUxFKSAmYW1wOyZhbXA7IGlfc2l6ZV9yZWFkKGlub2RlKSAmZ3Q7IE1BWF9OT05fTEZTKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KTsKJiM0MzsJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsKJiM0MzsJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiYjNDM7CQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7SEZTUExVU19JKGlub2RlKS0mZ3Q7b3BlbmNudCkpIHsKJiM0MzsJCWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKJiM0MzsJCWlmIChpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOyBTX0RFQUQpIHsKJiM0MzsJCQloZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtJmd0O2lfaW5vLAomIzQzOwkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwomIzQzOwkJCWhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCX0KJiM0MzsJCWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKJiM0MzsJCSAgICAgICBpbnQgZGF0YXN5bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwomIzQzOwlpbnQgZXJyb3IgPSAwLCBlcnJvcjI7CiYjNDM7CiYjNDM7CWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAomIzQzOwkJaW5vZGUtJmd0O2lfaW5vLCBzdGFydCwgZW5kKTsKJiM0MzsKJiM0MzsJZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLgomIzQzOwkgKi8KJiM0MzsJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAomIzQzOwkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKJiM0MzsJCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0KJiM0MzsJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7ZXh0X3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJaWYgKCFlcnJvcikKJiM0MzsJCQllcnJvciA9IGVycm9yMjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKJiM0MzsJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWVycm9yMiA9CiYjNDM7CQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoCiYjNDM7CQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJCWlmICghZXJyb3IpCiYjNDM7CQkJCWVycm9yID0gZXJyb3IyOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKSkKJiM0MzsJCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koc2JpLSZndDthbGxvY19maWxlKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQlpZiAoIWVycm9yKQomIzQzOwkJCWVycm9yID0gZXJyb3IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKJiM0MzsJaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7CiYjNDM7CiYjNDM7CWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsICZhbXA7c2JpLSZndDtmbGFncykpCiYjNDM7CQlibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGUKJiM0MzsgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseQomIzQzOyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb24KJiM0MzsgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQkJc3RydWN0IGlvdl9pdGVyICpmcm9tKQomIzQzO3sKJiM0MzsJbG9mZl90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcywgZW5kOwomIzQzOwlzc2l6ZV90IHdyaXR0ZW47CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sCiYjNDM7CQkJCQkgICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkJCSAgICBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CiYjNDM7CWVuZCA9IGlvY2ItJmd0O2tpX3BvcyAmIzQzOyB3cml0dGVuIC0gMTsKJiM0MzsJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmcsCiYjNDM7CQkJCQkgICBvZmZzZXQsIGVuZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZywKJiM0MzsJCQkJIG9mZnNldCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQkgZW5kICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQlzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sCiYjNDM7CQkJICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkgICAmYW1wO2hmc3BsdXNfd3JpdGVfZGlvX29wcywKJiM0MzsJCQkgICAwLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7CiYjNDM7CWVsc2UgaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHsKJiM0MzsJCXNzaXplX3Qgd3JpdHRlbjsKJiM0MzsKJiM0MzsJCXdyaXR0ZW4gPSBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20pOwomIzQzOwkJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJCXJldHVybiB3cml0dGVuOwomIzQzOwkJcmV0ICYjNDM7PSB3cml0dGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlsb2ZmX3QgdG90YWxfY2FwYWNpdHk7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgaXRlcik7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwl0b3RhbF9jYXBhY2l0eSA9IChsb2ZmX3Qpc2JpLSZndDt0b3RhbF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7PSB0b3RhbF9jYXBhY2l0eSkgewomIzQzOwkJcmV0ID0gLUVGQklHOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkgewomIzQzOwkJbG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwkJbG9mZl90IG5ld19zaXplID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKSB7CiYjNDM7CQkJbmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLAomIzQzOwkJCQkJICBIRlNQTFVTX0koaW5vZGUpLSZndDtwaHlzX3NpemUpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBuZXdfc2l6ZSk7CiYjNDM7CQllcnIgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpb2NiLSZndDtraV9wb3MpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpOwomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9IGVsc2UgaWYgKChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkgJmFtcDsmYW1wOwomIzQzOwkJICAgSEZTUExVU19JKGlub2RlKS0mZ3Q7cGh5c19zaXplICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQlpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktJmd0O3BoeXNfc2l6ZSk7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpCiYjNDM7CQlyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpOwomIzQzOwllbHNlIHsKJiM0MzsJCXJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaXRlciwKJiM0MzsJCQkJCQkmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCQkJCU5VTEwsIE5VTEwpOwomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwlpbm9kZV91bmxvY2soaW5vZGUpOwomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCkKJiM0MzsJCXJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpIHsKJiM0MzsJCWZpbGVfYWNjZXNzZWQoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwKJiM0MzsJCQkJICAgJmFtcDtoZnNwbHVzX2lvbWFwX29wcywKJiM0MzsJCQkJICAgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CX0gZWxzZQomIzQzOwkJcmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTsKJiM0MzsKJiM0MzsJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CiYjNDM7CXN3aXRjaCAod2hlbmNlKSB7CiYjNDM7CWNhc2UgU0VFS19IT0xFOgomIzQzOwkJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwkJb2Zmc2V0ID0gaW9tYXBfc2Vla19ob2xlKGlub2RlLCBvZmZzZXQsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzOwkJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTRUVLX0RBVEE6CiYjNDM7CQlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgJmFtcDtoZnNwbHVzX2lvbWFwX29wcyk7CiYjNDM7CQlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGdlbmVyaWNfZmlsZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19tYXhieXRlcyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7CiYjNDM7CS5sbHNlZWsJCT0gaGZzcGx1c19maWxlX2xsc2VlaywKJiM0MzsJLnJlYWRfaXRlcgk9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsCiYjNDM7CS53cml0ZV9pdGVyCT0gaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKJiM0MzsJLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKJiM0MzsJLm9wZW4JCT0gaGZzcGx1c19maWxlX29wZW4sCiYjNDM7CS5yZWxlYXNlCT0gaGZzcGx1c19maWxlX3JlbGVhc2UsCiYjNDM7CS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTE3NSw2ICYjNDM7MTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXJldHVybiBzYi0mZ3Q7c19mc19pbmZvOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQaHlzaWNhbCBieXRlIG9mZnNldCBvZiBhbGxvY2F0aW9uIGJsb2NrICYjMzk7ZGJsb2NrJiMzOTsgb24gdGhlIHZvbHVtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCQkJICB1MzIgZGJsb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiYjNDM7CWxvZmZfdCBwaHlzX2J5dGVzOwomIzQzOwomIzQzOwlwaHlzX2J5dGVzID0gZGJsb2NrOwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlwaHlzX2J5dGVzICYjNDM7PSBzYmktJmd0O2Jsb2Nrb2Zmc2V0OwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeXNfYnl0ZXM7CiYjNDM7fQogCiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHsKIAlhdG9taWNfdCBvcGVuY250OwpAQCAtNDMwLDEyICYjNDM7NDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7CiAKJiM0MzsvKiBmaWxlLmMgKi8KJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MztpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiYjNDM7CQkgICAgICAgaW50IGRhdGFzeW5jKTsKJiM0MzsKIC8qIGV4dGVudHMuYyAqLwogaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLAogCQkJY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsyKTsKIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLAomIzQzOwkJCXUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7CiBpbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsCiAJCSAgICAgIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSk7CiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpOwpAQCAtNDQzLDYgJiM0Mzs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC00NjIsOCAmIzQzOzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCQkgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLAogCQkgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTsKLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKLQkJICAgICAgIGludCBkYXRhc3luYyk7CiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCAxYzU3Yzg3M2YwNWQ2Li4wODczMWVjMGNlY2QzIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xOCwxNSAmIzQzOzE4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwotCi1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKLXsKLQlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7Ci19CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKIAogc3RhdGljIHZvaWQgaGZzcGx1c193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bykKIHsKQEAgLTEyMCw2NyAmIzQzOzExNywxMyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaykKIAlyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTsKIH0KIAotc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCWxvZmZfdCBpc2l6ZTsKLQlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKLQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwotCXNzaXplX3QgcmV0OwotCi0JLyoKLQkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgotCSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KLQkgKi8KLQlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKLQkJbG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlOwotCi0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCS8qCi0JCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQotCQkgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuCi0JCSAqLwotCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7Ci0KLQkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X29mZiA9IGlzaXplOwotCQllbmRfb2ZmID0gKGVuZCAmZ3Q7IDApID8gZW5kIC0gMSA6IGVuZDsKLQotCQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KLQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpOwotCX0KLQotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKLQkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgotCSAqLwotCWlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IHJldCAmbHQ7IDApKSB7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCWlmIChlbmQgJmd0OyBpc2l6ZSkKLQkJCWhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiB9CkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbywKJiM0MzsJLndyaXRlcGFnZXMJPSBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMsCiAJLndyaXRlX2JlZ2luCT0gaGZzcGx1c193cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kCT0gZ2VuZXJpY193cml0ZV9lbmQsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKQEAgLTE5NywxOCAmIzQzOzE0MCw3MCBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHsKIAkucmVsZWFzZV9mb2xpbwk9IGhmc3BsdXNfcmVsZWFzZV9mb2xpbywKIH07CiAKLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0gewomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLAogCS53cml0ZV9iZWdpbgk9IGhmc3BsdXNfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZAk9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5ibWFwCQk9IGhmc3BsdXNfYm1hcCwKLQkuZGlyZWN0X0lPCT0gaGZzcGx1c19kaXJlY3RfSU8sCi0JLndyaXRlcGFnZXMJPSBoZnNwbHVzX3dyaXRlcGFnZXMsCiYjNDM7CS53cml0ZXBhZ2VzCT0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIH07CiAKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhmc3BsdXNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZQk9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjCT0gd2JjLAomIzQzOwkJLm9wcwk9ICZhbXA7aGZzcGx1c193cml0ZWJhY2tfb3BzLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7CS5yZWFkX2ZvbGlvCQk9IGhmc3BsdXNfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZAkJPSBoZnNwbHVzX3JlYWRhaGVhZCwKJiM0MzsJLndyaXRlcGFnZXMJCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5ibWFwCQkJPSBoZnNwbHVzX2FvcF9ibWFwLAomIzQzOwkubWlncmF0ZV9mb2xpbwkJPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUJPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8JPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0MzsJLnJlbGVhc2VfZm9saW8JCT0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuc3dhcF9hY3RpdmF0ZQkJPSBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUsCiYjNDM7fTsKJiM0MzsKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LApAQCAtMjY4LDM1ICYjNDM7MjYzLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKCEoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX0xBUkdFRklMRSkgJmFtcDsmYW1wOyBpX3NpemVfcmVhZChpbm9kZSkgJmd0OyBNQVhfTk9OX0xGUykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewotCQlpbm9kZV9sb2NrKGlub2RlKTsKLQkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKLQkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewotCQkJaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLSZndDtpX2lubywKLQkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwotCQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwotCQl9Ci0JCWlub2RlX3VubG9jayhpbm9kZSk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMzExLDEwICYjNDM7Mjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSAgICBhdHRyLSZndDtpYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiAJCWlmIChhdHRyLSZndDtpYV9zaXplICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewotCQkJZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwKLQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKLQkJCWlmIChlcnJvcikKJiM0MzsJCQlsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS0mZ3Q7aV9zaXplOwomIzQzOwomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci0mZ3Q7aWFfc2l6ZSk7CiYjNDM7CQkJZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7CiAJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCX0KIAkJfQogCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKIAkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKQEAgLTM1Myw4NiAmIzQzOzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCXJldHVybiAwOwogfQogCi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLSZndDtpX3NiKTsKLQlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwotCWludCBlcnJvciA9IDAsIGVycm9yMjsKLQotCWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAotCQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwotCi0JZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWlub2RlX2xvY2soaW5vZGUpOwotCi0JLyoKLQkgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy4KLQkgKi8KLQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQotCS8qCi0JICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCi0JICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAotCQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7Ci0JCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCi0JCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQljbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0KLQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwotCQkJZXJyb3IyID0KLQkJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KAotCQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IGVycm9yMjsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncykpCi0JCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQltdXRleF9sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7Ci0JaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKLQltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKLQotCWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyb3IyOwotCi0JaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKLQkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCi0JaW5vZGVfdW5sb2NrKGlub2RlKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gaGZzcGx1c19zZXRhdHRyLAogCS5nZXRhdHRyCT0gaGZzcGx1c19nZXRhdHRyLApAQCAtNDU0LDE5ICYjNDM7MzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5saXN0eGF0dHIJPSBoZnNwbHVzX2xpc3R4YXR0ciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi0JLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKLQkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCi19OwotCiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXVtb2RlX3QgbW9kZSkKIHsKQEAgLTUxMyw3ICYjNDM7MzkwLDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJc2JpLSZndDtmaWxlX2NvdW50JiM0MzsmIzQzOzsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19hb3BzOwogCQloaXAtJmd0O2NsdW1wX2Jsb2NrcyA9IDE7CiAJfSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkgfHwKIAkJICAgU19JU0ZJRk8oaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtJmd0O2lfbW9kZSkpIHsKQEAgLTY1NCw3ICYjNDM7NTMxLDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWlub2RlX25vaGlnaG1lbShpbm9kZSk7Ci0JCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfYW9wczsKIAkJfSBlbHNlIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5jCkBAIC0wLDAgJiM0MzsxLDE4OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJCQkJIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCQkJIHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzOwomIzQzOwlsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzOwomIzQzOwlsb2ZmX3QgYmxvY2tfc3RhcnQ7CiYjNDM7CWJvb2wgaXNfbmV3OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIW1heV9hbGxvYykgewomIzQzOwkJLyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovCiYjNDM7CQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpICZsdDs9IG9mZnNldCkgewomIzQzOwkJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCQlpb21hcC0mZ3Q7YWRkciA9IElPTUFQX05VTExfQUREUjsKJiM0MzsJCQlpb21hcC0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwkJCWlvbWFwLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBDbGFtcCBsZW5ndGggaWYgdGhlIHJlcXVlc3RlZCByYW5nZSBnb2VzIGJleW9uZCBpX3NpemUgKi8KJiM0MzsJCWlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQkJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gaV9ibG9ja3NpemUoaW5vZGUpOwomIzQzOwomIzQzOwkJCWxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlhYmxvY2sgPSBvZmZzZXQgJmd0OyZndDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJZXJyID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgJmFtcDtkYmxvY2ssCiYjNDM7CQkJCSAmYW1wO21heF9ibG9ja3MsIE5VTEwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWJsb2NrX29mZnNldCA9IG9mZnNldCAmYW1wOyAoc2JpLSZndDthbGxvY19ibGtzeiAtIDEpOwomIzQzOwlhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJbGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGFibG9ja19ieXRlcyAtIGFibG9ja19vZmZzZXQpOwomIzQzOwlibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpOwomIzQzOwlpc19uZXcgPSBtYXlfYWxsb2MgJmFtcDsmYW1wOyBibG9ja19zdGFydCAmZ3Q7PSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsJaWYgKG1heV9hbGxvYyAmYW1wOyZhbXA7ICFpc19uZXcgJmFtcDsmYW1wOyBvZmZzZXQgJmx0OyBoaXAtJmd0O3BoeXNfc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtJmd0O3BoeXNfc2l6ZSAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gc2ItJmd0O3NfYmRldjsKJiM0MzsJaW9tYXAtJmd0O29mZnNldCA9IG9mZnNldDsKJiM0MzsJaW9tYXAtJmd0O2xlbmd0aCA9IGxlbmd0aDsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICYjNDM7IGFibG9ja19vZmZzZXQ7CiYjNDM7CWlvbWFwLSZndDt0eXBlID0gSU9NQVBfTUFQUEVEOwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0MzsKJiM0MzsJaWYgKGlzX25ldykKJiM0MzsJCWlvbWFwLSZndDtmbGFncyB8PSBJT01BUF9GX05FVzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwkJCQlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CQkJCSAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJCQkgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4gPSBoZnNwbHVzX2lvbWFwX2JlZ2luLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpCiYjNDM7ICoKJiM0MzsgKiBBZHZhbmNlIHRoZSBhbGxvY2F0ZWQtYW5kLXplcm9lZCBoaWdoLXdhdGVyIG1hcmsKJiM0MzsgKiAoaGlwLSZndDtwaHlzX3NpemUgLyBoaXAtJmd0O2ZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAomIzQzOwkJCQkgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJbG9mZl90IGVuZDsKJiM0MzsJYm9vbCBkaXJ0aWVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghd3JpdHRlbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllbmQgPSByb3VuZF91cChwb3MgJiM0Mzsgd3JpdHRlbiwgc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsKJiM0MzsJaWYgKGhpcC0mZ3Q7cGh5c19zaXplICZsdDsgZW5kKSB7CiYjNDM7CQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC0mZ3Q7cGh5c19zaXplKTsKJiM0MzsJCWhpcC0mZ3Q7cGh5c19zaXplID0gZW5kOwomIzQzOwkJaGlwLSZndDtmc19ibG9ja3MgPSBlbmQgJmd0OyZndDsgc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CQlkaXJ0aWVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZGlydGllZCkKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luCT0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbiwKJiM0MzsJLmlvbWFwX2VuZAk9IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKCkKJiM0MzsgKgomIzQzOyAqIFplcm8tZXh0ZW5kIHRoZSBiYWNraW5nIHN0b3JlIGZyb20gdGhlIGN1cnJlbnQgcGh5c19zaXplIHVwIHRvICYjMzk7c2l6ZSYjMzk7LgomIzQzOyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuCiYjNDM7ICovCiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlsb2ZmX3Qgc3RhcnQgPSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgJmx0Oz0gc3RhcnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsCiYjNDM7CQkJCSZhbXA7aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFjawomIzQzOyAqCiYjNDM7ICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlCiYjNDM7ICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAob2Zmc2V0ICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJICAgIG9mZnNldCAmZ3Q7PSB3cGMtJmd0O2lvbWFwLm9mZnNldCAmIzQzOyB3cGMtJmd0O2lvbWFwLmxlbmd0aCkgewomIzQzOwkJZXJyID0gX19oZnNwbHVzX2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsCiYjNDM7CQkJCQkgICAgb2Zmc2V0LCBsZW4sIDAsCiYjNDM7CQkJCQkgICAgJmFtcDt3cGMtJmd0O2lvbWFwLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHsKJiM0MzsJLndyaXRlYmFja19yYW5nZQk9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdAk9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHMgPSB7CiYjNDM7CS5lbmRfaW8JCT0gaW9tYXBfZGlvX2VuZF9pbywKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywKJiM0MzsJCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3BhbikKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuaCBiL2ZzL2hmc3BsdXMvaW9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbQomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wczsKJiM0MzsKJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLAomIzQzOwkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfSEZTUExVU19JT01BUF9IICovCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtNTcxLDYgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWdvdG8gb3V0X2Nsb3NlX2F0dHJfdHJlZTsKIAl9CiAJc2JpLSZndDthbGxvY19maWxlID0gaW5vZGU7CiYjNDM7CW1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAKIAkvKiBMb2FkIHRoZSByb290IGRpcmVjdG9yeSAqLwogCXJvb3QgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfUk9PVF9DTklEKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKQEAgLTE3MSwxOCAmIzQzOzE3MSwyMiBAQCBlbnVtIHsKIAlIRlNfWEFUVFJfTkFNRSwKIH07CiAKJiM0MzsjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVAkoMykKJiM0MzsKIHN0cnVjdCBoZnNfZXh0ZW50IHsKIAlfX2JlMTYgYmxvY2s7CiAJX19iZTE2IGNvdW50OwogfTsKLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107CiYjNDM7dHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1tIRlNfRk9SS19FWFRFTlRfQ09VTlRdOwomIzQzOwomIzQzOyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVAkoOCkKIAogLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZXh0ZW50IHsKIAlfX2JlMzIgc3RhcnRfYmxvY2s7CiAJX19iZTMyIGJsb2NrX2NvdW50OwogfSBfX3BhY2tlZDsKLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTsKJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07CiAKIC8qIEluZm9ybWF0aW9uIGZvciBhICYjMzQ7Rm9yayYjMzQ7IGluIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTIuLjUwZmU2MDM2YjAxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTU2MCw2ICYjNDM7NTYwLDI2IEBAIHN0cnVjdCBpb21hcF9kaW9fb3BzIHsKIAlzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIERpcmVjdCBJL08gY29tcGxldGlvbiBoYW5kbGVyCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO2ludCBpb21hcF9kaW9fZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLAomIzQzOwkJICAgICBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChzaXplICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZsdDsgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpOwomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFdhaXQgZm9yIHRoZSBJL08gdG8gY29tcGxldGUgaW4gaW9tYXBfZGlvX3J3IGV2ZW4gaWYgdGhlIGtpb2NiIGlzIG5vdAogICogc3luY2hyb25vdXMuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk1NgoJCQkJCQkJb3V0cHV0OiAyNDYKCQkJCQkJCXRob3VnaHRzOiAxNDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgSEZTJiM0MzsgRmlsZXN5c3RlbSBJL08gUGF0Y2ggU2VyaWVzIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGBoZnNwbHVzYCBmaWxlc3lzdGVtLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHNoaWZ0IGZyb20gYExFR0FDWV9ESVJFQ1RfSU9gIHRvIGBpb21hcGAgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgbmV3IGZpbGVzOiBgZnMvaGZzcGx1cy9maWxlLmNgLCBgZnMvaGZzcGx1cy9pb21hcC5jYCwgYW5kIGBmcy9oZnNwbHVzL2lvbWFwLmhgLCBhbmQgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhbmQgYWRkZWQgYSBgaGZzcGx1c19tYXBfZXh0ZW50YCBmdW5jdGlvbi4gSSBzZWUgdGhleSYjMzk7cmUgYWxzbyB1c2luZyBgbG9ja19wYWdlYCBhbmQgYGZvbGlvX3dhaXRfc3RhYmxlYCBub3cgaW4gdGhlIGJsb2NrIGFsbG9jYXRpb24vZnJlZWluZyByb3V0aW5lcy4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiAgU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBvbGQgZGlyZWN0IGFuZCBidWZmZXJlZCBJTyBwYXRocyB3aXRoIGBpb21hcGAtYmFzZWQgb25lcy4gVGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgYGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIHVzaW5nIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgKHdpdGggYGlvbWFwX2Rpb19yd2AgZm9yIGRpcmVjdCBJL08pLiAgVGhleSBhbHNvIGltcGxlbWVudCBgaGZzcGx1c19pb21hcF9vcHNgLCBhbmQgdGhlIHdyaXRlYmFjay93cml0ZSBJTyBvcGVyYXRpb24gc3RydWN0dXJlcy4gVGhleSYjMzk7cmUgaW1wbGVtZW50aW5nIGBiZWdpbmAgYW5kIGBlbmRgIGZ1bmN0aW9ucyBmb3IgaW9tYXAgYW5kIHdyaXRlIG9wZXJhdGlvbnMsIGFzIHdlbGwgYXMgZnVuY3Rpb25zIGZvciB3cml0ZWJhY2suCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhleSYjMzk7cmUgc3RpY2tpbmcgdG8gc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zOiBgcmVhZF9pdGVyYCwgYHdyaXRlX2l0ZXJgLCBgbGxzZWVrYCwgYGZzeW5jYCwgYG9wZW5gLCBhbmQgYHJlbGVhc2VgLiAgVGhlIGBpb2N0bGAgZnVuY3Rpb24gcmVtYWlucyB1bmNoYW5nZWQgYXQgYGhmc3BsdXNfaW9jdGxgLiBUaGV5JiMzOTt2ZSBtb2RpZmllZCBgaGZzcGx1c19nZXRfYmxvY2tgIHRvIHVzZSBgaGZzcGx1c19tYXBfZXh0ZW50YC4gYGhmc3BsdXNfbWFwX2V4dGVudGAgcmV0dXJucyBgZGJsb2NrYCBhbmQgYG1heF9ibG9ja3NgLiAgU28sIEkgbmVlZCB0byBjaGVjayBob3cgYGRibG9ja2AgYW5kIGBtYXhfYmxvY2tzYCBhcmUgaW5pdGlhbGl6ZWQuCgpBbHJpZ2h0LCBhIGRlZXBlciBkaXZlLiBJIHNlZSB0aGV5JiMzOTtyZSB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAgdG8gemVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgaW4gYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLCB3aGljaCBpcyBncmVhdDsgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSB3YW50IHRvIHNlZS4gIGBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZGAgaXMgYWR2YW5jaW5nIGBoaXAtJmd0O3BoeXNfc2l6ZWAgYW5kIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgIGFyZSB1c2luZyBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAgZm9yIHplcm8tZXh0ZW5zaW9uIGlmIHRoZSB3cml0ZSBleHRlbmRzIHBhc3QgdGhlIGN1cnJlbnQgZmlsZSBzaXplLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBob3cgdGhlIGBpb21hcGAgYWRkcmVzcyBpcyBzZXQgd2l0aGluIGBoZnNwbHVzX2lvbWFwX2JlZ2luYC4gIEl0JiMzOTtzIHNldHRpbmcgYGlvbWFwLSZndDthZGRyYCBiYXNlZCBvbiBgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlc2AgYW5kIGFuIG9mZnNldC4gIENydWNpYWxseSwgaWYgYSBuZXcgYmxvY2sgaXMgYmVpbmcgYWxsb2NhdGVkLCB0aGV5IHNldCBgSU9NQVBfRl9ORVdgLiAgVGhlIGBpb21hcGAgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgemVyb2luZyBvZiB0aGVzZSBgSU9NQVBfRl9ORVdgIGJsb2NrcywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0LgoKU28sIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBzdGFuZGFyZCBWRlMvYGlvbWFwYCBjb252ZXJzaW9ucy4gTm8gY3VzdG9tIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHN5c3RlbSBjYWxscywgbm8gbmV3IG5ldGxpbmsgYXR0cmlidXRlcywgYW5kIG5vIG5ldyBpb2N0bHMuIEkgdGhpbmsgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nIG91dC1vZi1ib3VuZHMgcmVhZHMsIHVzZS1hZnRlci1mcmVlLCBhbmQgb3RoZXIgY29tbW9uIG1lbW9yeSBzYWZldHkgaXNzdWVzLiAgVGhlIEtNU0FOIHRvb2wgaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgaGZzcGx1c19tYXBfZXh0ZW50YCB3b3Jrcy4gSXQgaGFzIGEgY2hlY2sgZm9yIHRoZSBgYWJsb2NrYCBpbmRleCBhbmQgY2FsbHMgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIHRvIGxvY2F0ZSBhIGJsb2NrLiAgSWYgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIGZpbmRzIGEgYmxvY2sgaXQgc2V0cyBgKmRibG9ja2AgYW5kIHJldHVybnMgYSB2YWx1ZSwgb3RoZXJ3aXNlIGAqZGJsb2NrYCBpcyBzZXQgdG8gMC4gVGhlbiwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGRibG9jayBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gdGhlIGlvbWFwLiBUaGUgY2hlY2sgdGhhdCBjYWxscyBgaGZzcGx1c19tYXBfZXh0ZW50YCBjYXRjaGVzIGFueSBlcnJvci4gSXQgdXNlcyBgaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgJmFtcDtkYmxvY2ssICZhbXA7bWF4X2Jsb2NrcywgTlVMTClgLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBwcm9jZXNzIHJldHVybnMgZWFybHkuCgpCYXNlZCBvbiBteSBhbmFseXNpcywgYGlvbWFwX3plcm9fcmFuZ2VgIGlzIHVzZWQsIGFuZCB0aGVyZSBpcyBzYWZlIGhhbmRsaW5nIG9mIGFsbG9jYXRlZCBibG9ja3MuIFRoaXMgcGF0Y2ggdXNlcyBgSQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0gZnJvbSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUuIEl0IGludHJvZHVjZXMgbmV3IGZpbGUgb3BlcmF0aW9ucywgaW9tYXAgY2FsbGJhY2tzLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgbG9naWMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0YW5kYXJkIFZGUyBhbmQgaW9tYXAgQVBJIHVzYWdlLCBzdWNoIGFzIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgaW9tYXBfemVyb19yYW5nZWAuIEZpbGUgZXhwYW5zaW9ucyBhcmUgcHJvcGVybHkgemVyb2VkIHVzaW5nIGBpb21hcF96ZXJvX3JhbmdlYCwgYW5kIG5ld2x5IGFsbG9jYXRlZCBibG9ja3MgYXJlIGZsYWdnZWQgd2l0aCBgSU9NQVBfRl9ORVdgLCB3aGljaCB0aGUgaW9tYXAgY29yZSBoYW5kbGVzIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCBkaXNrIGRhdGEgZXhwb3N1cmUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGlvY3RscywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjA2LjQ1NDgzNzc2OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDA3OTc1OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9jb250X2V4cGFuZFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0gZnJvbSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUuIEl0IGludHJvZHVjZXMgbmV3IGZpbGUgb3BlcmF0aW9ucywgaW9tYXAgY2FsbGJhY2tzLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgbG9naWMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0YW5kYXJkIFZGUyBhbmQgaW9tYXAgQVBJIHVzYWdlLCBzdWNoIGFzIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgaW9tYXBfemVyb19yYW5nZWAuIEZpbGUgZXhwYW5zaW9ucyBhcmUgcHJvcGVybHkgemVyb2VkIHVzaW5nIGBpb21hcF96ZXJvX3JhbmdlYCwgYW5kIG5ld2x5IGFsbG9jYXRlZCBibG9ja3MgYXJlIGZsYWdnZWQgd2l0aCBgSU9NQVBfRl9ORVdgLCB3aGljaCB0aGUgaW9tYXAgY29yZSBoYW5kbGVzIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCBkaXNrIGRhdGEgZXhwb3N1cmUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGlvY3RscywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIEhGUysgZmlsZXN5c3RlbSB0byB1c2UgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTywgcmVwbGFjaW5nIHRoZSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyIGhlYWQgYmFzZWQgcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGlvbWFwIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBzZWVraW5nLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjM6MDYuNDU0ODQyOTk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4OTgxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZTUxMDQ1YzAwNTQzM2E3Y2RhNTBhYTZkMGNlMDk5ZTMxZjE1ZDdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xcbmluZGV4IGNhODQwMWNiNjk1NGQuLmI0NDMyYzY0ZGIzYmUgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9LY29uZmlnXFxuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXFxuQEAgLTUsNyArNSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXFxuIFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiBcXHRzZWxlY3QgTkxTXFxuIFxcdHNlbGVjdCBOTFNfVVRGOFxcbi1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbitcXHRzZWxlY3QgRlNfSU9NQVBcXG4gXFx0aGVscFxcbiBcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxcbiBcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG5pbmRleCBmMmE5YWU2OTdlODExLi4zZGRlYTY5YTljNjk4IDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXFxuQEAgLTUsOCArNSw5IEBAXFxuIFxcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXFxuIFxcbi1oZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBpb2N0bC5vIGV4dGVudHMubyBjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBcXFxcXFxuLVxcdFxcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXFxcXG4raGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gZmlsZS5vIGlvbWFwLm8gaW9jdGwubyBleHRlbnRzLm8gXFxcXFxcbitcXHRcXHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXFxcXG4rXFx0XFx0dW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXFxcXG4gXFx0XFx0YXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vXFxuIFxcbiAjIEtVbml0IHRlc3RzXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXFxuaW5kZXggMWIzYWY4Yzg3Y2FkYi4uNjFjNDljY2E0YTdhMiAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jXFxuKysrIGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xcbkBAIC0zOSw2ICszOSw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRzdGFydCA9IHNpemU7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuK1xcdGxvY2tfcGFnZShwYWdlKTtcXG4rXFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XFxuIFxcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcXG4gXFx0aSA9IG9mZnNldCAlIDMyO1xcbkBAIC03NSw2ICs3Nyw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRcXHRjdXJyKys7XFxuIFxcdFxcdH1cXG4gXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4gXFx0XFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcXG4gXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSBzaXplKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtODQsNiArODcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXHRcXHRsb2NrX3BhZ2UocGFnZSk7XFxuK1xcdFxcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xcbiBcXHRcXHRjdXJyID0gcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0XFx0aWYgKChzaXplIF4gb2Zmc2V0KSAvIFBBR0VfQ0FDSEVfQklUUylcXG4gXFx0XFx0XFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xcbkBAIC05OCw2ICsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0c3RhcnQgPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpO1xcbiBcXHRpZiAoc3RhcnQgXFx1MDAzZT0gc2l6ZSkge1xcbiBcXHRcXHRoZnNfZGJnKFxcXCJiaXRtYXAgZnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0XFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuK1xcdFxcdHN0YXJ0ID0gc2l6ZTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFx0LyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqL1xcbkBAIC0xMjgsNiArMTM2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuIFxcdFxcdH1cXG4gXFx0XFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuIFxcdFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0XFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuIFxcdFxcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XFxuIFxcdFxcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsXFxuIFxcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG5AQCAtMTM1LDYgKzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRcXHRzdGFydCA9IHNpemU7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcdFxcdGxvY2tfcGFnZShwYWdlKTtcXG4rXFx0XFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XFxuIFxcdFxcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdFxcdGN1cnIgPSBwcHRyO1xcbiBcXHRcXHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XFxuQEAgLTE1Miw2ICsxNjMsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0KmN1cnIgPSBjcHVfdG9fYmUzMihuKTtcXG4gXFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuIFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuIFxcdCptYXggPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpIC0gc3RhcnQ7XFxuIFxcdHNiaS1cXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcXG4gXFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XFxuQEAgLTE4NSw2ICsxOTcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcXG4gXFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIHBuciwgTlVMTCk7XFxuIFxcdGlmIChJU19FUlIocGFnZSkpXFxuIFxcdFxcdGdvdG8ga2Fib29tO1xcbitcXHRsb2NrX3BhZ2UocGFnZSk7XFxuK1xcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xcbiBcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XFxuIFxcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcXG5AQCAtMjE2LDkgKzIzMCwxMiBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdFxcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgKytwbnIsIE5VTEwpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbiBcXHRcXHRcXHRnb3RvIGthYm9vbTtcXG4rXFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbitcXHRcXHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4gXFx0XFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0XFx0Y3VyciA9IHBwdHI7XFxuIFxcdFxcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcXG5AQCAtMjMyLDYgKzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxcbiBvdXQ6XFxuIFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRzYmktXFx1MDAzZWZyZWVfYmxvY2tzICs9IGxlbjtcXG4gXFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2JpLVxcdTAwM2VhbGxvY19tdXRleCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcXG5pbmRleCA4MTNlNjhiOGVjZDY1Li44ZjdmNTYwY2VjNjQyIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXFxuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcXG5AQCAtMTUsNiArMTUsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImhmc3BsdXNfZnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhmc3BsdXNfcmF3LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5oXFxcIlxcbiBcXG4gLyogQ29tcGFyZSB0d28gZXh0ZW50cyBrZXlzLCByZXR1cm5zIDAgb24gc2FtZSwgcG9zL25lZyBmb3IgZGlmZmVyZW5jZSAqL1xcbiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXFxuIFxcdGtleS1cXHUwMDNlZXh0LnBhZCA9IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcXG4rLypcXG4rICogaGZzcGx1c19leHRfZmluZF9ibG9jaygpIC0gZmluZCBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJsb2NrXFxuKyAqXFxuKyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJ29mZicgd2l0aGluIGFuIDgtZW50cnlcXG4rICogZXh0ZW50IHJlY29yZCwgYW5kIHRoZSBudW1iZXIgb2YgZnVydGhlciBhbGxvY2F0aW9uIGJsb2Nrc1xcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxcbisgKi9cXG4rc3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmLFxcbitcXHRcXHRcXHRcXHQgdTMyICpkYmxvY2spXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHUzMiBjb3VudDtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBleHQrKywgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQrKywgaSsrKSB7XFxuIFxcdFxcdGNvdW50ID0gYmUzMl90b19jcHUoZXh0LVxcdTAwM2VibG9ja19jb3VudCk7XFxuLVxcdFxcdGlmIChvZmYgXFx1MDAzYyBjb3VudClcXG4tXFx0XFx0XFx0cmV0dXJuIGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlc3RhcnRfYmxvY2spICsgb2ZmO1xcbitcXHRcXHRpZiAob2ZmIFxcdTAwM2MgY291bnQpIHtcXG4rXFx0XFx0XFx0KmRibG9jayA9IGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlc3RhcnRfYmxvY2spICsgb2ZmO1xcbitcXHRcXHRcXHRyZXR1cm4gY291bnQgLSBvZmY7XFxuK1xcdFxcdH1cXG4gXFx0XFx0b2ZmIC09IGNvdW50O1xcbiBcXHR9XFxuIFxcdC8qIHBhbmljPyAqL1xcbitcXHQqZGJsb2NrID0gMDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTY4LDcgKzgwLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9ibG9ja19jb3VudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dClcXG4gXFx0aW50IGk7XFxuIFxcdHUzMiBjb3VudCA9IDA7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgODsgZXh0KyssIGkrKylcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspXFxuIFxcdFxcdGNvdW50ICs9IGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlYmxvY2tfY291bnQpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXFxuIFxcdHJldHVybiByZXM7XFxuIH1cXG4gXFxuLS8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovXFxuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbisvKlxcbisgKiBoZnNwbHVzX21hcF9leHRlbnQoKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBzZXF1ZW5jZSBvZiBhbGxvY2F0aW9uIGJsb2Nrc1xcbisgKlxcbisgKiBMb29rcyB1cCB0aGUgYWxsb2NhdGlvbiBibG9jayBhdCAnYWJsb2NrJyBmb3IgaW5vZGUsIGV4dGVuZGluZyB0aGVcXG4rICogZmlsZSAodmlhIGhmc3BsdXNfZmlsZV9leHRlbmQoKSwgaW4gY2x1bXBfYmxvY2tzLXNpemVkIGNodW5rcykgd2hlblxcbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXFxuKyAqXFxuKyAqIE9uIHN1Y2Nlc3MsICpkYmxvY2sgaXMgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBiYWNraW5nICdhYmxvY2snLFxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXFxuKyAqIGNvbnRpZ3VvdXMgd2l0aCBpdCAoaS5lLiB0aGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgZXh0ZW50IGVudHJ5XFxuKyAqIHRoYXQgY29udGFpbnMgJ2FibG9jaycpLCB3aGljaCBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSB3aG9sZSBmaWxlJ3NcXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXFxuKyAqIGV4dGVudCBlbnRyaWVzLiBJZiBhIG5ldyBleHRlbnQgaGFkIHRvIGJlIGFsbG9jYXRlZCB0byBzYXRpc2Z5IHRoZVxcbisgKiByZXF1ZXN0LCAqYmFsbG9jICh3aGVuIG5vbi1OVUxMKSBpcyBzZXQgdG8gdHJ1ZS5cXG4rICovXFxuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcXG4rXFx0XFx0XFx0dTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKVxcbiB7XFxuLVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4tXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuIFxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuLVxcdGludCByZXMgPSAtRUlPO1xcbi1cXHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1hc2s7XFxuLVxcdHNlY3Rvcl90IHNlY3RvcjtcXG4tXFx0aW50IHdhc19kaXJ0eSA9IDA7XFxuK1xcdGludCB3YXNfZGlydHk7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xcbi1cXHRhYmxvY2sgPSBpYmxvY2sgXFx1MDAzZVxcdTAwM2Ugc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFx0aWYgKGJhbGxvYylcXG4rXFx0XFx0KmJhbGxvYyA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKGlibG9jayBcXHUwMDNlPSBoaXAtXFx1MDAzZWZzX2Jsb2Nrcykge1xcbitcXHRpZiAoYWJsb2NrIFxcdTAwM2U9IGhpcC1cXHUwMDNlYWxsb2NfYmxvY2tzKSB7XFxuIFxcdFxcdGlmICghY3JlYXRlKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0aWYgKGlibG9jayBcXHUwMDNlIGhpcC1cXHUwMDNlZnNfYmxvY2tzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0XFx0aWYgKGFibG9jayBcXHUwMDNlPSBoaXAtXFx1MDAzZWFsbG9jX2Jsb2Nrcykge1xcbi1cXHRcXHRcXHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XFxuLVxcdFxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdFxcdH1cXG4tXFx0fSBlbHNlXFxuLVxcdFxcdGNyZWF0ZSA9IDA7XFxuK1xcdFxcdHJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0aWYgKGJhbGxvYylcXG4rXFx0XFx0XFx0KmJhbGxvYyA9IHRydWU7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChhYmxvY2sgXFx1MDAzYyBoaXAtXFx1MDAzZWZpcnN0X2Jsb2Nrcykge1xcbi1cXHRcXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcXG4tXFx0XFx0Z290byBkb25lO1xcbitcXHRcXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVxcdTAwM2VmaXJzdF9leHRlbnRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFibG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkYmxvY2spO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGlub2RlLVxcdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxcbkBAIC0yNzIsMTEgKzI5Myw0NCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmhpcC1cXHUwMDNlZXh0ZW50c19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4tXFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXFx1MDAzZWNhY2hlZF9leHRlbnRzLFxcbi1cXHRcXHRcXHRcXHRcXHRhYmxvY2sgLSBoaXAtXFx1MDAzZWNhY2hlZF9zdGFydCk7XFxuK1xcdCptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXFx1MDAzZWNhY2hlZF9leHRlbnRzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGFibG9jayAtIGhpcC1cXHUwMDNlY2FjaGVkX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRibG9jayk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2aGlwLVxcdTAwM2VleHRlbnRzX2xvY2spO1xcbiBcXG4tZG9uZTpcXG4rXFx0aWYgKHdhc19kaXJ0eSlcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cXG4raW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrLCBtYXhfYmxvY2tzO1xcbitcXHRzZWN0b3JfdCBzZWN0b3I7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xcbitcXHRhYmxvY2sgPSBpYmxvY2sgXFx1MDAzZVxcdTAwM2Ugc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFxuK1xcdGlmIChpYmxvY2sgXFx1MDAzZT0gaGlwLVxcdTAwM2Vmc19ibG9ja3MpIHtcXG4rXFx0XFx0aWYgKCFjcmVhdGUpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAoaWJsb2NrIFxcdTAwM2UgaGlwLVxcdTAwM2Vmc19ibG9ja3MpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9IGVsc2VcXG4rXFx0XFx0Y3JlYXRlID0gMDtcXG4rXFxuK1xcdHJlcyA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBjcmVhdGUsIFxcdTAwMjZkYmxvY2ssIFxcdTAwMjZtYXhfYmxvY2tzLFxcbitcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4gXFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIChsb25nIGxvbmcpaWJsb2NrLCBkYmxvY2spO1xcbiBcXG5AQCAtMjkwLDkgKzM0NCw4IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuIFxcdFxcdGhpcC1cXHUwMDNlcGh5c19zaXplICs9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4gXFx0XFx0aGlwLVxcdTAwM2Vmc19ibG9ja3MrKztcXG4gXFx0XFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBzYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHR9XFxuLVxcdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxcbiBcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNTUzLDIwICs2MDYsMzIgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWhpcC1cXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwM2UgaGlwLVxcdTAwM2VwaHlzX3NpemUpIHtcXG4tXFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRcXHR2b2lkICpmc2RhdGEgPSBOVUxMO1xcbi1cXHRcXHRsb2ZmX3Qgc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NpemU7XFxuK1xcdFxcdGlmIChTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdFxcdHJlcyA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbitcXHRcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbitcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRcXHRcXHR2b2lkICpmc2RhdGEgPSBOVUxMO1xcbitcXG4rXFx0XFx0XFx0cmVzID0gaGZzcGx1c193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGlub2RlLVxcdTAwM2VpX3NpemUsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmZvbGlvLCBcXHUwMDI2ZnNkYXRhKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0XFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSwgMCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW8sIGZzZGF0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmVzID0gaGZzcGx1c193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBzaXplLCAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZmb2xpbywgXFx1MDAyNmZzZGF0YSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0Zm9saW8sIGZzZGF0YSk7XFxuLVxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH0gZWxzZSBpZiAoaW5vZGUtXFx1MDAzZWlfc2l6ZSA9PSBoaXAtXFx1MDAzZXBoeXNfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2ZpbGUuYyBiL2ZzL2hmc3BsdXMvZmlsZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MjY3ODQ4OGZiMDU0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXFxuQEAgLTAsMCArMSwzMDcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogRmlsZSBvcGVyYXRpb25zOiBvcGVuL3JlbGVhc2UvZnN5bmMgYW5kIGlvbWFwLWJhc2VkIHJlYWQvd3JpdGUvc2Vla1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXFxuK1xcdFxcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcnNyY19pbm9kZTtcXG4rXFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTEFSR0VGSUxFKSBcXHUwMDI2XFx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXFx1MDAzZSBNQVhfTk9OX0xGUylcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZW9wZW5jbnQpO1xcbitcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFxuK1xcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbitcXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuK1xcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KSkge1xcbitcXHRcXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4rXFx0XFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcXG4rXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgU19ERUFEKSB7XFxuK1xcdFxcdFxcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cXHUwMDNlaV9pbm8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEhGU1BMVVNfU0Ioc2IpLVxcdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcXG4rXFx0XFx0XFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4rXFx0XFx0ICAgICAgIGludCBkYXRhc3luYylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cXHUwMDNlc192aGRyO1xcbitcXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XFxuK1xcbitcXHRoZnNfZGJnKFxcXCJpbm9kZS1cXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XFxuK1xcbitcXHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXFxuK1xcdCAqL1xcbitcXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cXHUwMDNlY2F0X3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRlcnJvcjIgPVxcbitcXHRcXHRcXHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cXHUwMDNlZXh0X3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbitcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNiaS1cXHUwMDNlYXR0cl90cmVlKSB7XFxuK1xcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdGVycm9yMiA9XFxuK1xcdFxcdFxcdFxcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzYmktXFx1MDAzZWF0dHJfdHJlZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK1xcdFxcdFxcdGlmICghZXJyb3IpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShzYmktXFx1MDAzZWFsbG9jX2ZpbGUpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cXHUwMDNlYWxsb2NfZmlsZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNiaS1cXHUwMDNldmhfbXV0ZXgpO1xcbitcXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnNiaS1cXHUwMDNldmhfbXV0ZXgpO1xcbitcXG4rXFx0ZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdGVycm9yID0gZXJyb3IyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXFx1MDAyNnNiaS1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldik7XFxuK1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuKy8qXFxuKyAqIGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoKSAtIGZhbGwgYmFjayB0byBidWZmZXJlZCBJL08gZm9yIHRoZVxcbisgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseVxcbisgKiAodW5hbGlnbmVkIHRhaWwsIG9yIG5vIGJsb2NrcyBjb3VsZCBiZSBtYXBwZWQgd2l0aG91dCBhbGxvY2F0aW9uXFxuKyAqIG91dHNpZGUgdGhlIGRpcmVjdCBwYXRoKS5cXG4rICovXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0bG9mZl90IG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcywgZW5kO1xcbitcXHRzc2l6ZV90IHdyaXR0ZW47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcbitcXHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHdyaXR0ZW47XFxuK1xcbitcXHRlbmQgPSBpb2NiLVxcdTAwM2VraV9wb3MgKyB3cml0dGVuIC0gMTtcXG4rXFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgZW5kKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuK1xcdFxcdFxcdFxcdCBlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcbitcXHRyZXR1cm4gd3JpdHRlbjtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4re1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxcbitcXHRcXHRcXHQgICBcXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXFxuK1xcdFxcdFxcdCAgIFxcdTAwMjZoZnNwbHVzX3dyaXRlX2Rpb19vcHMsXFxuK1xcdFxcdFxcdCAgIDAsIE5VTEwsIDApO1xcbitcXHRpZiAocmV0ID09IC1FTk9UQkxLKVxcbitcXHRcXHRyZXQgPSAwO1xcbitcXHRlbHNlIGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XFxuK1xcdFxcdHNzaXplX3Qgd3JpdHRlbjtcXG4rXFxuK1xcdFxcdHdyaXR0ZW4gPSBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20pO1xcbitcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHRcXHRyZXQgKz0gd3JpdHRlbjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGxvZmZfdCB0b3RhbF9jYXBhY2l0eTtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGl0ZXIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cXHUwMDNldG90YWxfYmxvY2tzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAzZT0gdG90YWxfY2FwYWNpdHkpIHtcXG4rXFx0XFx0cmV0ID0gLUVGQklHO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdGxvZmZfdCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4rXFx0XFx0bG9mZl90IG5ld19zaXplID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbitcXG4rXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcXG4rXFx0XFx0XFx0bmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgIEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXBoeXNfc2l6ZSk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X3NpemUpO1xcbitcXHRcXHRlcnIgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpO1xcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXHR9IGVsc2UgaWYgKChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VwaHlzX3NpemUgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VwaHlzX3NpemUpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ESVJFQ1QpXFxuK1xcdFxcdHJldCA9IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgaXRlcik7XFxuK1xcdGVsc2Uge1xcbitcXHRcXHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGl0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCk7XFxuK1xcdH1cXG4rXFxuK3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcXG4rXFx0XFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIGl0ZXIpO1xcbitcXG4rXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgbG9mZl90IGhmc3BsdXNfZmlsZV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFxuK1xcdHN3aXRjaCAod2hlbmNlKSB7XFxuK1xcdGNhc2UgU0VFS19IT0xFOlxcbitcXHRcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdG9mZnNldCA9IGlvbWFwX3NlZWtfaG9sZShpbm9kZSwgb2Zmc2V0LCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRcXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0VFS19EQVRBOlxcbitcXHRcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRcXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBnZW5lcmljX2ZpbGVfbGxzZWVrKGZpbGUsIG9mZnNldCwgd2hlbmNlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvZmZzZXQ7XFxuK1xcbitcXHRyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX21heGJ5dGVzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4rXFx0Lmxsc2Vla1xcdFxcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcXG4rXFx0LnJlYWRfaXRlclxcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcXG4rXFx0LndyaXRlX2l0ZXJcXHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyLFxcbitcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbitcXHQuc3BsaWNlX3JlYWRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuK1xcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuK1xcdC5mc3luY1xcdFxcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxcbitcXHQub3BlblxcdFxcdD0gaGZzcGx1c19maWxlX29wZW4sXFxuK1xcdC5yZWxlYXNlXFx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcXG4rXFx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbmluZGV4IGVjMDRiODJhZDkyNzguLjgxNjZhYmIyMjM5N2IgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbkBAIC0xNzUsNiArMTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4gfVxcbiBcXG4rLypcXG4rICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAnZGJsb2NrJyBvbiB0aGUgdm9sdW1lLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBsb2ZmX3QgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBkYmxvY2spXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuK1xcdGxvZmZfdCBwaHlzX2J5dGVzO1xcbitcXG4rXFx0cGh5c19ieXRlcyA9IGRibG9jaztcXG4rXFx0cGh5c19ieXRlcyBcXHUwMDNjXFx1MDAzYz0gc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFx0cGh5c19ieXRlcyArPSBzYmktXFx1MDAzZWJsb2Nrb2Zmc2V0O1xcbitcXHRwaHlzX2J5dGVzIFxcdTAwM2NcXHUwMDNjPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4rXFxuK1xcdHJldHVybiBwaHlzX2J5dGVzO1xcbit9XFxuIFxcbiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcXG4gXFx0YXRvbWljX3Qgb3BlbmNudDtcXG5AQCAtNDMwLDEyICs0NDYsMTkgQEAgaW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpzcmNfZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3JjX25cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7XFxuIFxcbisvKiBmaWxlLmMgKi9cXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4rXFx0XFx0ICAgICAgIGludCBkYXRhc3luYyk7XFxuK1xcbiAvKiBleHRlbnRzLmMgKi9cXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxcbiBcXHRcXHRcXHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xcbiBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XFxuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcXG4rXFx0XFx0XFx0dTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKTtcXG4gaW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaywgaW50IHR5cGUpO1xcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xcbkBAIC00NDMsNiArNDY2LDcgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIFxcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zO1xcbiBcXG5AQCAtNDYyLDggKzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXFxuIFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcXVlcnlfZmxhZ3MpO1xcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuLVxcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbmluZGV4IDFjNTdjODczZjA1ZDYuLjA4NzMxZWMwY2VjZDMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXFxuQEAgLTE4LDE1ICsxOCwxMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlYXR0ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGF0dHIuaFxcXCJcXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi17XFxuLVxcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcXG4tfVxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4gXFxuIHN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXFxuIHtcXG5AQCAtMTIwLDY3ICsxMTcsMTMgQEAgc3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuIFxcdHJldHVybiByZXMgPyB0cnlfdG9fZnJlZV9idWZmZXJzKGZvbGlvKSA6IGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4rc3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbi1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuLVxcdGxvZmZfdCBpc2l6ZTtcXG4tXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuLVxcdGxvZmZfdCBlbmQgPSBpb2NiLVxcdTAwM2VraV9wb3MgKyBjb3VudDtcXG4tXFx0c3NpemVfdCByZXQ7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLlxcbi1cXHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXFxuLVxcdCAqL1xcbi1cXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXFx1MDAyNlxcdTAwMjYgaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuLVxcdFxcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XFxuLVxcdFxcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcXG4tXFxuLVxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXFxuLVxcdFxcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcXG4tXFxuLVxcdFxcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0c3RhcnRfb2ZmID0gaXNpemU7XFxuLVxcdFxcdGVuZF9vZmYgPSAoZW5kIFxcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xcbi1cXG4tXFx0XFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRcXHRlbmRfcGFnZSA9IGVuZF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFxuLVxcdFxcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKGlvY2IsIGlub2RlLCBpdGVyLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcXG4tXFx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cXG4tXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAzYyAwKSkge1xcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFxuLVxcdFxcdGlmIChlbmQgXFx1MDAzZSBpc2l6ZSlcXG4tXFx0XFx0XFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIH1cXG5AQCAtMTg4LDggKzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcXG4gXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4gXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbi1cXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxcbi1cXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvLFxcbitcXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzLFxcbiBcXHQud3JpdGVfYmVnaW5cXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmRcXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxcbiBcXHQubWlncmF0ZV9mb2xpb1xcdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXFxuQEAgLTE5NywxOCArMTQwLDcwIEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbiBcXHQucmVsZWFzZV9mb2xpb1xcdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxcbiB9O1xcbiBcXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XFxuK3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhmc3BsdXNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHtcXG4gXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4gXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbi1cXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxcbitcXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8sXFxuIFxcdC53cml0ZV9iZWdpblxcdD0gaGZzcGx1c193cml0ZV9iZWdpbixcXG4gXFx0LndyaXRlX2VuZFxcdD0gZ2VuZXJpY193cml0ZV9lbmQsXFxuIFxcdC5ibWFwXFx0XFx0PSBoZnNwbHVzX2JtYXAsXFxuLVxcdC5kaXJlY3RfSU9cXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxcbi1cXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsXFxuIFxcdC5taWdyYXRlX2ZvbGlvXFx0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXFxuK3tcXG4rXFx0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdD0gbWFwcGluZy1cXHUwMDNlaG9zdCxcXG4rXFx0XFx0LndiY1xcdD0gd2JjLFxcbitcXHRcXHQub3BzXFx0PSBcXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4re1xcbitcXHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XFxuK1xcdC5yZWFkX2ZvbGlvXFx0XFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkYWhlYWRcXHRcXHQ9IGhmc3BsdXNfcmVhZGFoZWFkLFxcbitcXHQud3JpdGVwYWdlc1xcdFxcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQuZGlydHlfZm9saW9cXHRcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxcbitcXHQuYm1hcFxcdFxcdFxcdD0gaGZzcGx1c19hb3BfYm1hcCxcXG4rXFx0Lm1pZ3JhdGVfZm9saW9cXHRcXHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcXG4rXFx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZVxcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxcbitcXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXFx0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG4rXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbitcXHQuc3dhcF9hY3RpdmF0ZVxcdFxcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxcbit9O1xcbitcXG4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuIFxcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxcbiBcXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcXG5AQCAtMjY4LDM1ICsyNjMsNiBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZ2V0X3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAtRUlPO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi17XFxuLVxcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbi1cXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuLVxcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0xBUkdFRklMRSkgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2UgTUFYX05PTl9MRlMpXFxuLVxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbi1cXHRhdG9taWNfaW5jKFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLXtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXFxuLVxcdFxcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcnNyY19pbm9kZTtcXG4tXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZW9wZW5jbnQpKSB7XFxuLVxcdFxcdGlub2RlX2xvY2soaW5vZGUpO1xcbi1cXHRcXHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHRcXHRpZiAoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX0RFQUQpIHtcXG4tXFx0XFx0XFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVxcdTAwM2VpX2lubyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgSEZTUExVU19TQihzYiktXFx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xcbi1cXHRcXHRcXHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbiB7XFxuQEAgLTMxMSwxMCArMjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHQgICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4gXFx0XFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xcbiBcXHRcXHRpZiAoYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXFx1MDAzZWlfc2l6ZTtcXG4rXFxuK1xcdFxcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuK1xcdFxcdFxcdGVycm9yID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnJvcikge1xcbitcXHRcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuIFxcdFxcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XFxuQEAgLTM1Myw4NiArMzIzLDYgQEAgaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuLVxcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXFx1MDAzZXNfdmhkcjtcXG4tXFx0aW50IGVycm9yID0gMCwgZXJyb3IyO1xcbi1cXG4tXFx0aGZzX2RiZyhcXFwiaW5vZGUtXFx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxcXG5cXFwiLFxcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xcbi1cXG4tXFx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdHJldHVybiBlcnJvcjtcXG4tXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cXG4tXFx0ICovXFxuLVxcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXFxuLVxcdCAqL1xcbi1cXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVxcdTAwM2VjYXRfdHJlZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGVycm9yMiA9XFxuLVxcdFxcdFxcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVxcdTAwM2VleHRfdHJlZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoc2JpLVxcdTAwM2VhdHRyX3RyZWUpIHtcXG4tXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0XFx0ZXJyb3IyID1cXG4tXFx0XFx0XFx0XFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHNiaS1cXHUwMDNlYXR0cl90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tXFx0XFx0XFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuLVxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpKVxcbi1cXHRcXHRcXHRwcl9lcnIoXFxcInN5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcXFxuXFxcIik7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKHNiaS1cXHUwMDNlYWxsb2NfZmlsZSktXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVxcdTAwM2VhbGxvY19maWxlLVxcdTAwM2VpX21hcHBpbmcpO1xcbi1cXHRcXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4tXFx0fVxcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2c2JpLVxcdTAwM2V2aF9tdXRleCk7XFxuLVxcdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c2JpLVxcdTAwM2V2aF9tdXRleCk7XFxuLVxcbi1cXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuLVxcbi1cXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcXHUwMDI2c2JpLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19iZGV2KTtcXG4tXFxuLVxcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyb3I7XFxuLX1cXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnNldGF0dHJcXHQ9IGhmc3BsdXNfc2V0YXR0cixcXG4gXFx0LmdldGF0dHJcXHQ9IGhmc3BsdXNfZ2V0YXR0cixcXG5AQCAtNDU0LDE5ICszNDQsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5saXN0eGF0dHJcXHQ9IGhmc3BsdXNfbGlzdHhhdHRyLFxcbiB9O1xcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XFxuLVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4tXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4tXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbi1cXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcXG4tXFx0Lm9wZW5cXHRcXHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxcbi1cXHQucmVsZWFzZVxcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXFxuLVxcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXFxuLX07XFxuLVxcbiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG5AQCAtNTEzLDcgKzM5MCw3IEBAIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdHNiaS1cXHUwMDNlZmlsZV9jb3VudCsrO1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcXG4gXFx0XFx0aGlwLVxcdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xcbiBcXHR9IGVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbiBcXHRcXHQgICBTX0lTRklGTyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTU09DSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbkBAIC02NTQsNyArNTMxLDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiBcXHRcXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuIFxcdFxcdFxcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfYW9wcztcXG4rXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX21vZGUsXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWU2ZGZhNjkzNTI2ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmNcXG5AQCAtMCwwICsxLDE4OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBib29sIG1heV9hbGxvYylcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1heF9ibG9ja3M7XFxuK1xcdGxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7XFxuK1xcdGxvZmZfdCBibG9ja19zdGFydDtcXG4rXFx0Ym9vbCBpc19uZXc7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIW1heV9hbGxvYykge1xcbitcXHRcXHQvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi9cXG4rXFx0XFx0aWYgKGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNjPSBvZmZzZXQpIHtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xcbitcXHRcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xcbitcXHRcXHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdFxcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XFxuK1xcbitcXHRcXHRcXHRsZW5ndGggPSByb3VuZF91cChpX3NpemUsIGJsb2Nrc2l6ZSkgLSBvZmZzZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0YWJsb2NrID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIHNiaS1cXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XFxuK1xcbitcXHRlcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCBcXHUwMDI2ZGJsb2NrLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9ibG9ja3MsIE5VTEwpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0YWJsb2NrX29mZnNldCA9IG9mZnNldCBcXHUwMDI2IChzYmktXFx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XFxuK1xcdGFibG9ja19ieXRlcyA9IChsb2ZmX3QpbWF4X2Jsb2NrcyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xcbitcXG4rXFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGFibG9ja19ieXRlcyAtIGFibG9ja19vZmZzZXQpO1xcbitcXHRibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpO1xcbitcXHRpc19uZXcgPSBtYXlfYWxsb2MgXFx1MDAyNlxcdTAwMjYgYmxvY2tfc3RhcnQgXFx1MDAzZT0gaGlwLVxcdTAwM2VwaHlzX3NpemU7XFxuK1xcdGlmIChtYXlfYWxsb2MgXFx1MDAyNlxcdTAwMjYgIWlzX25ldyBcXHUwMDI2XFx1MDAyNiBvZmZzZXQgXFx1MDAzYyBoaXAtXFx1MDAzZXBoeXNfc2l6ZSlcXG4rXFx0XFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC1cXHUwMDNlcGh5c19zaXplIC0gb2Zmc2V0KTtcXG4rXFxuK1xcdGlvbWFwLVxcdTAwM2ViZGV2ID0gc2ItXFx1MDAzZXNfYmRldjtcXG4rXFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4rXFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcXG4rXFx0aW9tYXAtXFx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICsgYWJsb2NrX29mZnNldDtcXG4rXFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XFxuK1xcdGlvbWFwLVxcdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xcbitcXG4rXFx0aWYgKGlzX25ldylcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWZsYWdzIHw9IElPTUFQX0ZfTkVXO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIGlvbWFwLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcXG4re1xcbitcXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBpb21hcCwgdHJ1ZSk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sXFxuK307XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpXFxuKyAqXFxuKyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFya1xcbisgKiAoaGlwLVxcdTAwM2VwaHlzX3NpemUgLyBoaXAtXFx1MDAzZWZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXFxuK1xcdFxcdFxcdFxcdCAgIGxvZmZfdCBsZW5ndGgsIHNzaXplX3Qgd3JpdHRlbixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFx0bG9mZl90IGVuZDtcXG4rXFx0Ym9vbCBkaXJ0aWVkID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXdyaXR0ZW4pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZW5kID0gcm91bmRfdXAocG9zICsgd3JpdHRlbiwgc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4rXFxuK1xcdGlmIChoaXAtXFx1MDAzZXBoeXNfc2l6ZSBcXHUwMDNjIGVuZCkge1xcbitcXHRcXHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC1cXHUwMDNlcGh5c19zaXplKTtcXG4rXFx0XFx0aGlwLVxcdTAwM2VwaHlzX3NpemUgPSBlbmQ7XFxuK1xcdFxcdGhpcC1cXHUwMDNlZnNfYmxvY2tzID0gZW5kIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbitcXHRcXHRkaXJ0aWVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRpcnRpZWQpXFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXG4rXFx0cmV0dXJuIHdyaXR0ZW47XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpblxcdD0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbixcXG4rXFx0LmlvbWFwX2VuZFxcdD0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsXFxuK307XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKClcXG4rICpcXG4rICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJ3NpemUnLlxcbisgKiBVc2VkIGJvdGggYnkgaGZzcGx1c19zZXRhdHRyKCkgYW5kIGJ5IGhmc3BsdXNfZmlsZV90cnVuY2F0ZSgpLlxcbisgKi9cXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0bG9mZl90IHN0YXJ0ID0gaGlwLVxcdTAwM2VwaHlzX3NpemU7XFxuK1xcbitcXHRpZiAoc2l6ZSBcXHUwMDNjPSBzdGFydClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgc3RhcnQsIHNpemUgLSBzdGFydCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLCBOVUxMLCBOVUxMKTtcXG4rfVxcbitcXG4rLypcXG4rICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXFxuKyAqXFxuKyAqIENhbGxlZCBmb3IgZWFjaCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrLiBJZiB0aGUgZm9saW8gZmFsbHMgb3V0c2lkZVxcbisgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBoZnNwbHVzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNjIHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IHx8XFxuK1xcdCAgICBvZmZzZXQgXFx1MDAzZT0gd3BjLVxcdTAwM2Vpb21hcC5vZmZzZXQgKyB3cGMtXFx1MDAzZWlvbWFwLmxlbmd0aCkge1xcbitcXHRcXHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVxcdTAwM2Vpbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG9mZnNldCwgbGVuLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcXG4rXFx0LndyaXRlYmFja19yYW5nZVxcdD0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsXFxuK1xcdC53cml0ZWJhY2tfc3VibWl0XFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxcbit9O1xcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xcbitcXHQuZW5kX2lvXFx0XFx0PSBpb21hcF9kaW9fZW5kX2lvLFxcbit9O1xcbitcXG4raW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxcbit7XFxuK1xcdHJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5oIGIvZnMvaGZzcGx1cy9pb21hcC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2hmc3BsdXMvaW9tYXAuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogaW9tYXAgY2FsbGJhY2sgZGVjbGFyYXRpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfTElOVVhfSEZTUExVU19JT01BUF9IXFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzO1xcbitcXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpO1xcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XFxuK1xcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmNcXG5pbmRleCA1Nzc3ZTMxZGU0NWFjLi40NTljYTZmM2I4MTQ3IDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xcbisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xcbkBAIC01NzEsNiArNTcxLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRcXHRnb3RvIG91dF9jbG9zZV9hdHRyX3RyZWU7XFxuIFxcdH1cXG4gXFx0c2JpLVxcdTAwM2VhbGxvY19maWxlID0gaW5vZGU7XFxuK1xcdG1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuIFxcbiBcXHQvKiBMb2FkIHRoZSByb290IGRpcmVjdG9yeSAqL1xcbiBcXHRyb290ID0gaGZzcGx1c19pZ2V0KHNiLCBIRlNQTFVTX1JPT1RfQ05JRCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcXG5pbmRleCA0NWZiNGM5ZmY5ZjVlLi4xNDE3ZTE5ZDk0YmNlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcXG5AQCAtMTcxLDE4ICsxNzEsMjIgQEAgZW51bSB7XFxuIFxcdEhGU19YQVRUUl9OQU1FLFxcbiB9O1xcbiBcXG4rI2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcXHQoMylcXG4rXFxuIHN0cnVjdCBoZnNfZXh0ZW50IHtcXG4gXFx0X19iZTE2IGJsb2NrO1xcbiBcXHRfX2JlMTYgY291bnQ7XFxuIH07XFxuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XFxuK3R5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbSEZTX0ZPUktfRVhURU5UX0NPVU5UXTtcXG4rXFxuKyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFxcdCg4KVxcbiBcXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xcbiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQge1xcbiBcXHRfX2JlMzIgc3RhcnRfYmxvY2s7XFxuIFxcdF9fYmUzMiBibG9ja19jb3VudDtcXG4gfSBfX3BhY2tlZDtcXG4tdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdO1xcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XFxuIFxcbiAvKiBJbmZvcm1hdGlvbiBmb3IgYSBcXFwiRm9ya1xcXCIgaW4gYSBmaWxlICovXFxuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuaW5kZXggNTZiNDNkNTk0ZTZlMi4uNTBmZTYwMzZiMDFhYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5AQCAtNTYwLDYgKzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XFxuIFxcdHN0cnVjdCBiaW9fc2V0ICpiaW9fc2V0O1xcbiB9O1xcbiBcXG4rLypcXG4rICogRGlyZWN0IEkvTyBjb21wbGV0aW9uIGhhbmRsZXJcXG4rICovXFxuK3N0YXRpYyBpbmxpbmVcXG4raW50IGlvbWFwX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuK1xcdFxcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwMjZcXHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNjIGlvY2ItXFx1MDAzZWtpX3BvcyArIHNpemUpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MgKyBzaXplKTtcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXYWl0IGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIGluIGlvbWFwX2Rpb19ydyBldmVuIGlmIHRoZSBraW9jYiBpcyBub3RcXG4gICogc3luY2hyb25vdXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjA2LjkyOTYxNjc2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3MzM0NTA5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9jb250X2V4cGFuZFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBpb21hcCBpbmZyYXN0cnVjdHVyZSBmb3IgZmlsZSBJL08sIHJlcGxhY2luZyB0aGUgbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlciBoZWFkIGJhc2VkIHBhdGhzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpb21hcCBvcGVyYXRpb25zIGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgc2Vla2luZywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGFuZCBibG9jayBhbGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRlNTEwNDVjMDA1NDMzYTdjZGE1MGFhNmQwY2UwOTllMzFmMTVkN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzoyMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZC4uYjQ0MzJjNjRkYjNiZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXG5AQCAtNSw3ICs1LDcgQEAgY29uZmlnIEhGU1BMVVNfRlNcbiBcdHNlbGVjdCBCVUZGRVJfSEVBRFxuIFx0c2VsZWN0IE5MU1xuIFx0c2VsZWN0IE5MU19VVEY4XG4tXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuK1x0c2VsZWN0IEZTX0lPTUFQXG4gXHRoZWxwXG4gXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuIFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXG4gXG4taGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXFxcbi1cdFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuK1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4rXHRcdHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuIFx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbiBcbiAjIEtVbml0IHRlc3RzXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jXG4rKysgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXG5AQCAtMzksNiArMzksOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbitcdGxvY2tfcGFnZShwYWdlKTtcbitcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0aSA9IG9mZnNldCAlIDMyO1xuQEAgLTc1LDYgKzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VycisrO1xuIFx0XHR9XG4gXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSBzaXplKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTg0LDYgKzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGxvY2tfcGFnZShwYWdlKTtcbitcdFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XG4gXHRcdGN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKVxuIFx0XHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC05OCw2ICsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdHN0YXJ0ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaTtcbiBcdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbiBcdFx0aGZzX2RiZyhcImJpdG1hcCBmdWxsXFxuXCIpO1xuK1x0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqL1xuQEAgLTEyOCw2ICsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0fVxuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUyxcbiBcdFx0XHRcdFx0IE5VTEwpO1xuQEAgLTEzNSw2ICsxNDQsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0xNTIsNiArMTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHQqY3VyciA9IGNwdV90b19iZTMyKG4pO1xuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdCptYXggPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpIC0gc3RhcnQ7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcbiBcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuQEAgLTE4NSw2ICsxOTcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbiBcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0Z290byBrYWJvb207XG4rXHRsb2NrX3BhZ2UocGFnZSk7XG4rXHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcbiBcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMTYsOSArMjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICsrcG5yLCBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0XHRnb3RvIGthYm9vbTtcbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiArMjQ5LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gb3V0OlxuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdHNiaS1cdTAwM2VmcmVlX2Jsb2NrcyArPSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLjhmN2Y1NjBjZWM2NDIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuICNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbisvKlxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xuKyAqXG4rICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAnb2ZmJyB3aXRoaW4gYW4gOC1lbnRyeVxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxuKyAqL1xuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbitcdFx0XHRcdCB1MzIgKmRibG9jaylcbiB7XG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGV4dCsrLCBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspIHtcbiBcdFx0Y291bnQgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuLVx0XHRpZiAob2ZmIFx1MDAzYyBjb3VudClcbi1cdFx0XHRyZXR1cm4gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbitcdFx0XHQqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4rXHRcdH1cbiBcdFx0b2ZmIC09IGNvdW50O1xuIFx0fVxuIFx0LyogcGFuaWM/ICovXG4rXHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQrKywgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKylcbiBcdFx0Y291bnQgKz0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbiBcdHJldHVybiBjb3VudDtcbiB9XG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuKy8qXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcbisgKlxuKyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICdhYmxvY2snIGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4rICpcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXG4rICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXG4rICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4rICovXG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4rXHRpbnQgd2FzX2RpcnR5O1xuK1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdGlmIChiYWxsb2MpXG4rXHRcdCpiYWxsb2MgPSBmYWxzZTtcbiBcbi1cdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4rXHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuK1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGJhbGxvYylcbitcdFx0XHQqYmFsbG9jID0gdHJ1ZTtcbitcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuK1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4rXHRcdFx0XHRcdFx0ICAgICBhYmxvY2ssXG4rXHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSArMjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbi1cdFx0XHRcdFx0YWJsb2NrIC0gaGlwLVx1MDAzZWNhY2hlZF9zdGFydCk7XG4rXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuK1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgZGJsb2NrKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcbi1kb25lOlxuK1x0aWYgKHdhc19kaXJ0eSlcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbitpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuK1x0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbitcdHNlY3Rvcl90IHNlY3RvcjtcbitcdGludCByZXM7XG4rXG4rXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xuK1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4rXG4rXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuK1x0XHRpZiAoIWNyZWF0ZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcdH0gZWxzZVxuK1x0XHRjcmVhdGUgPSAwO1xuK1xuK1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuK1x0XHRcdFx0ICBOVUxMKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4gXHRoZnNfZGJnKFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCIsXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSArMzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcysrO1xuIFx0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdH1cbi1cdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgKzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4rXHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdFx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuK1xuK1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHQgIGlub2RlLVx1MDAzZWlfc2l6ZSwgMCxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NpemUsIDAsIDAsXG4rXHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybjtcbitcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuIFxuLVx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsXG4tXHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLFxuLVx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbi1cdFx0aWYgKHJlcyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKGlub2RlLVx1MDAzZWlfc2l6ZSA9PSBoaXAtXHUwMDNlcGh5c19zaXplKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyNjc4NDg4ZmIwNTRcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5AQCAtMCwwICsxLDMwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4rXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuK1x0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcbitcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuK1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXHUwMDNlb3BlbmNudCkpIHtcbitcdFx0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG4rXHRcdGlmIChpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBTX0RFQUQpIHtcbitcdFx0XHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdCAgIEhGU1BMVVNfU0Ioc2IpLVx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xuK1x0XHRcdGhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTtcbitcdFx0fVxuK1x0XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbitcdFx0ICAgICAgIGludCBkYXRhc3luYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4rXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4rXG4rXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbitcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuK1xuK1x0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHQvKlxuK1x0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXG4rXHQgKi9cbitcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuK1xuK1x0LypcbitcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuK1x0ICovXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvcjIgPVxuK1x0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdGlmICghZXJyb3IpXG4rXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4rXHR9XG4rXG4rXHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4rXHRcdFx0ZXJyb3IyID1cbitcdFx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXG4rXHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdHByX2VycihcInN5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwiKTtcbitcdH1cbitcbitcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKHNiaS1cdTAwM2VhbGxvY19maWxlKS1cdTAwM2VmbGFncykpIHtcbitcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlYWxsb2NfZmlsZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRpZiAoIWVycm9yKVxuK1x0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1x0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1xuK1x0ZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdGVycm9yID0gZXJyb3IyO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXHUwMDI2c2JpLVx1MDAzZWZsYWdzKSlcbitcdFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rLypcbisgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcbisgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseVxuKyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb25cbisgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuK3tcbitcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcywgZW5kO1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0aW50IHJldDtcbitcbitcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4rXG4rXHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMKTtcbitcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gd3JpdHRlbjtcbitcbitcdGVuZCA9IGlvY2ItXHUwMDNla2lfcG9zICsgd3JpdHRlbiAtIDE7XG4rXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHRcdCAgIG9mZnNldCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHQgb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuK1x0XHRcdFx0IGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfZGlvX29wcyxcbitcdFx0XHQgICAwLCBOVUxMLCAwKTtcbitcdGlmIChyZXQgPT0gLUVOT1RCTEspXG4rXHRcdHJldCA9IDA7XG4rXHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbitcdFx0c3NpemVfdCB3cml0dGVuO1xuK1xuK1x0XHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcbitcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHRcdHJldCArPSB3cml0dGVuO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4re1xuK1x0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRsb2ZmX3QgdG90YWxfY2FwYWNpdHk7XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBlcnI7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGl0ZXIpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cdTAwM2V0b3RhbF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XG4rXHRcdHJldCA9IC1FRkJJRztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRlcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZXQgPSBlcnI7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0bG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRsb2ZmX3QgbmV3X3NpemUgPSBpb2NiLVx1MDAzZWtpX3BvcztcbitcbitcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4rXHRcdFx0bmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLFxuK1x0XHRcdFx0XHQgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbitcdFx0fVxuK1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcbitcdFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fSBlbHNlIGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbitcdFx0cmV0ID0gaGZzcGx1c19kaW9fd3JpdGVfaXRlcihpb2NiLCBpdGVyKTtcbitcdGVsc2Uge1xuK1x0XHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGl0ZXIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdFx0TlVMTCwgTlVMTCk7XG4rXHR9XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcbitcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcbitcdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlcixcbitcdFx0XHRcdCAgIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzLFxuK1x0XHRcdFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4rXHR9IGVsc2VcbitcdFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcbitcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1xuK1x0c3dpdGNoICh3aGVuY2UpIHtcbitcdGNhc2UgU0VFS19IT0xFOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfaG9sZShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0VFS19EQVRBOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBnZW5lcmljX2ZpbGVfbGxzZWVrKGZpbGUsIG9mZnNldCwgd2hlbmNlKTtcbitcdH1cbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4rXHQubGxzZWVrXHRcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcbitcdC5yZWFkX2l0ZXJcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyLFxuK1x0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuK1x0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4rXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4rXHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4rXHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuK1x0LnJlbGVhc2VcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXG4rXHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTE3NSw2ICsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbisvKlxuKyAqIFBoeXNpY2FsIGJ5dGUgb2Zmc2V0IG9mIGFsbG9jYXRpb24gYmxvY2sgJ2RibG9jaycgb24gdGhlIHZvbHVtZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4rXG4rXHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdHBoeXNfYnl0ZXMgKz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXG4rXHRyZXR1cm4gcGh5c19ieXRlcztcbit9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzMCwxMiArNDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfb3BlcmF0aW9ucztcbiBcbisvKiBmaWxlLmMgKi9cbitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuK1xuIC8qIGV4dGVudHMuYyAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBcdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xuIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcbitcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpO1xuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbiBcdFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xuQEAgLTQ0Myw2ICs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7XG4gXG5AQCAtNDYyLDggKzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbiBcdFx0ICAgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncyk7XG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKTtcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggMWM1N2M4NzNmMDVkNi4uMDg3MzFlYzBjZWNkMyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTUgKzE4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaGZzcGx1c19mcy5oXCJcbiAjaW5jbHVkZSBcImhmc3BsdXNfcmF3LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4tXG4tc3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuLX1cbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuIFxuIHN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG4ge1xuQEAgLTEyMCw2NyArMTE3LDEzIEBAIHN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuIFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuK3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuLVx0c3NpemVfdCByZXQ7XG4tXG4tXHQvKlxuLVx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbi1cdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbi1cdCAqL1xuLVx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4tXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbi1cbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuLVx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4tXHRcdCAqL1xuLVx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4tXG4tXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4tXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4tXG4tXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4tXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbi1cdH1cbi1cbi1cdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugb2YgZXJyb3IgZXh0ZW5kaW5nIHdyaXRlIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZld1xuLVx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiByZXQgXHUwMDNjIDApKSB7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbi1cdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4tc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4rc3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XG4gfVxuQEAgLTE4OCw4ICsxMzEsOCBAQCBzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbyxcbitcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfYnRyZWVfd3JpdGVwYWdlcyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuQEAgLTE5NywxOCArMTQwLDcwIEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LnJlbGVhc2VfZm9saW9cdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxuIH07XG4gXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XG4rc3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG4tXHQuZGlyZWN0X0lPXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuK1x0LndyaXRlcGFnZXNcdD0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiB9O1xuIFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4re1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGVcdD0gbWFwcGluZy1cdTAwM2Vob3N0LFxuK1x0XHQud2JjXHQ9IHdiYyxcbitcdFx0Lm9wc1x0PSBcdTAwMjZoZnNwbHVzX3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4rc3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYW9wX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuK3tcbitcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuK1x0LnJlYWRfZm9saW9cdFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkXHRcdD0gaGZzcGx1c19yZWFkYWhlYWQsXG4rXHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmJtYXBcdFx0XHQ9IGhmc3BsdXNfYW9wX2JtYXAsXG4rXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGVcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpb1x0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbitcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuc3dhcF9hY3RpdmF0ZVx0XHQ9IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSxcbit9O1xuK1xuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfaGFzaCAgICAgICA9IGhmc3BsdXNfaGFzaF9kZW50cnksXG4gXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcbkBAIC0yNjgsMzUgKzI2Myw2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAtRUlPO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuLVx0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbi1cdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuLVx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbi1cdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuLVx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuLVx0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbi1cdFx0XHRcdFx0ICAgSEZTUExVU19TQihzYiktXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuLVx0XHR9XG4tXHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuQEAgLTMxMSwxMCArMjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4rXHRcdFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuK1xuK1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbitcdFx0XHRlcnJvciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4rXHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiBcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiBcdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbkBAIC0zNTMsODYgKzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi1cdFx0ICAgICAgIGludCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4tXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4tXG4tXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbi1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuLVxuLVx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cbi1cdC8qXG4tXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbi1cdCAqL1xuLVx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXG4tXHQvKlxuLVx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXG4tXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdH1cbi1cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9XG4tXHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlZXh0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlcnJvcjIgPVxuLVx0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbi1cdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4tXHRcdFx0cHJfZXJyKFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxuXCIpO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXG4tXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXG4tXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuLVx0XHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVxuLVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuIFx0LmdldGF0dHJcdD0gaGZzcGx1c19nZXRhdHRyLFxuQEAgLTQ1NCwxOSArMzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxpc3R4YXR0clx0PSBoZnNwbHVzX2xpc3R4YXR0cixcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuLVx0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuLVx0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3Blbixcbi1cdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuLVx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbi19O1xuLVxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuQEAgLTUxMyw3ICszOTAsNyBAQCBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRzYmktXHUwMDNlZmlsZV9jb3VudCsrO1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XG4gXHRcdGhpcC1cdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xuIFx0fSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8XG4gXHRcdCAgIFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuQEAgLTY1NCw3ICs1MzEsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuK1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmMgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbkBAIC0wLDAgKzEsMTg5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0IHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0dTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzO1xuK1x0bG9mZl90IGFibG9ja19vZmZzZXQsIGFibG9ja19ieXRlcztcbitcdGxvZmZfdCBibG9ja19zdGFydDtcbitcdGJvb2wgaXNfbmV3O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghbWF5X2FsbG9jKSB7XG4rXHRcdC8qIENvbXBsZXRlbHkgYmV5b25kIEVPRi4gVHJlYXQgYXMgaG9sZSAqL1xuK1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4rXHRcdFx0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX0hPTEU7XG4rXHRcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4rXHRcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4rXHRcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0XHRsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4rXG4rXHRcdFx0bGVuZ3RoID0gcm91bmRfdXAoaV9zaXplLCBibG9ja3NpemUpIC0gb2Zmc2V0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRhYmxvY2sgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGVyciA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBtYXlfYWxsb2MsIFx1MDAyNmRibG9jayxcbitcdFx0XHRcdCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoc2JpLVx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XG4rXHRhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBhYmxvY2tfYnl0ZXMgLSBhYmxvY2tfb2Zmc2V0KTtcbitcdGJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7XG4rXHRpc19uZXcgPSBtYXlfYWxsb2MgXHUwMDI2XHUwMDI2IGJsb2NrX3N0YXJ0IFx1MDAzZT0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcdGlmIChtYXlfYWxsb2MgXHUwMDI2XHUwMDI2ICFpc19uZXcgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2MgaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbitcdFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC1cdTAwM2VwaHlzX3NpemUgLSBvZmZzZXQpO1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IHNiLVx1MDAzZXNfYmRldjtcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9IG9mZnNldDtcbitcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdGlvbWFwLVx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICsgYWJsb2NrX29mZnNldDtcbitcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xuK1xuK1x0aWYgKGlzX25ldylcbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHRzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuK1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIGlvbWFwLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXG4rXHRcdFx0XHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcbitcdFx0XHRcdCAgICAgaW9tYXAsIHRydWUpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZV9pb21hcF9lbmQoKVxuKyAqXG4rICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXG4rICogKGhpcC1cdTAwM2VwaHlzX3NpemUgLyBoaXAtXHUwMDNlZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS5cbisgKi9cbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4rXHRcdFx0XHQgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4re1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0bG9mZl90IGVuZDtcbitcdGJvb2wgZGlydGllZCA9IGZhbHNlO1xuK1xuK1x0aWYgKCF3cml0dGVuKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVuZCA9IHJvdW5kX3VwKHBvcyArIHdyaXR0ZW4sIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcbitcdGlmIChoaXAtXHUwMDNlcGh5c19zaXplIFx1MDAzYyBlbmQpIHtcbitcdFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBlbmQgLSBoaXAtXHUwMDNlcGh5c19zaXplKTtcbitcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcbitcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyA9IGVuZCBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbitcdFx0ZGlydGllZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoZGlydGllZClcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c19pb21hcF9jb250X2V4cGFuZCgpXG4rICpcbisgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAnc2l6ZScuXG4rICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS5cbisgKi9cbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0bG9mZl90IHN0YXJ0ID0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcbitcdGlmIChzaXplIFx1MDAzYz0gc3RhcnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsXG4rXHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7XG4rfVxuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXG4rICpcbisgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGVcbisgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IG9mZnNldCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbitcdCAgICBvZmZzZXQgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuK1x0XHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLFxuK1x0XHRcdFx0XHQgICAgb2Zmc2V0LCBsZW4sIDAsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcbitcdC53cml0ZWJhY2tfcmFuZ2VcdD0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsXG4rXHQud3JpdGViYWNrX3N1Ym1pdFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuK1x0LmVuZF9pb1x0XHQ9IGlvbWFwX2Rpb19lbmRfaW8sXG4rfTtcbitcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4rXHRcdFx0XHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxuK3tcbitcdHJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5oIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGFjMDdhOWQyNWY4ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcztcbitcbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7XG4raW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKTtcbitcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xuaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xuKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jXG5AQCAtNTcxLDYgKzU3MSw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0Z290byBvdXRfY2xvc2VfYXR0cl90cmVlO1xuIFx0fVxuIFx0c2JpLVx1MDAzZWFsbG9jX2ZpbGUgPSBpbm9kZTtcbitcdG1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qIExvYWQgdGhlIHJvb3QgZGlyZWN0b3J5ICovXG4gXHRyb290ID0gaGZzcGx1c19pZ2V0KHNiLCBIRlNQTFVTX1JPT1RfQ05JRCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuQEAgLTE3MSwxOCArMTcxLDIyIEBAIGVudW0ge1xuIFx0SEZTX1hBVFRSX05BTUUsXG4gfTtcbiBcbisjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVFx0KDMpXG4rXG4gc3RydWN0IGhmc19leHRlbnQge1xuIFx0X19iZTE2IGJsb2NrO1xuIFx0X19iZTE2IGNvdW50O1xuIH07XG4tdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1szXTtcbit0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07XG4rXG4rI2RlZmluZSBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXHQoOClcbiBcbiAvKiBBIHNpbmdsZSBjb250aWd1b3VzIGFyZWEgb2YgYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZXh0ZW50IHtcbiBcdF9fYmUzMiBzdGFydF9ibG9jaztcbiBcdF9fYmUzMiBibG9ja19jb3VudDtcbiB9IF9fcGFja2VkO1xuLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTtcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XG4gXG4gLyogSW5mb3JtYXRpb24gZm9yIGEgXCJGb3JrXCIgaW4gYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZm9ya19yYXcge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMi4uNTBmZTYwMzZiMDFhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNTYwLDYgKzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XG4gXHRzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDtcbiB9O1xuIFxuKy8qXG4rICogRGlyZWN0IEkvTyBjb21wbGV0aW9uIGhhbmRsZXJcbisgKi9cbitzdGF0aWMgaW5saW5lXG4raW50IGlvbWFwX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4rXHRcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHNpemUgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2MgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKTtcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKiBXYWl0IGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIGluIGlvbWFwX2Rpb19ydyBldmVuIGlmIHRoZSBraW9jYiBpcyBub3RcbiAgKiBzeW5jaHJvbm91cy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjA2LjkyOTYxNzc4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA2NTQyNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgaW9tYXAgQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBIRlMrIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBjb21wcmVoZW5zaXZlIG92ZXJoYXVsLiBUaGUgY29yZSBpZGVhIGlzIHRvIG1pZ3JhdGUgdGhlIEhGUysgZmlsZXN5c3RlbSdzIEkvTyBwYXRoIHRvIHV0aWxpemUgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIG9mZmVyIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGFuZCBmbGV4aWJpbGl0eSBhZHZhbnRhZ2VzLiBUaGUgZmFjdCB0aGF0IGl0J3MgcmVwbGFjaW5nIGBMRUdBQ1lfRElSRUNUX0lPYCB3aXRoIGBGU19JT01BUGAgaW4gYEtjb25maWdgIHByZXR0eSBtdWNoIGNvbmZpcm1zIHRoaXMgbWFqb3IgYXJjaGl0ZWN0dXJhbCBzaGlmdC5cblxuVGhpcyBpc24ndCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5jdGlvbmFsIHRyYW5zZm9ybWF0aW9uLiBXZSdyZSB0YWxraW5nIGFib3V0IG5ldyBmaWxlcyAoYGZpbGUuY2AsIGBpb21hcC5jYCkgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBib2FyZC4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGNvcmUgZmlsZXN5c3RlbSBjb21wb25lbnRzOiBgYml0bWFwLmNgIChwYWdlIGxvY2tpbmcgYW5kIHdyaXRlIHN0YWJpbGl0eSksIGBleHRlbnRzLmNgICh3aXRoIHRoZSBuZXcgYGhmc3BsdXNfbWFwX2V4dGVudGAgYW5kIHVwZGF0ZXMgdG8gYmxvY2stcmVsYXRlZCBmdW5jdGlvbnMpLCBgaW5vZGUuY2AgKGludGVncmF0aW5nIGlvbWFwIGZvciBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIHNlcGFyYXRpbmcgYnRyZWUgYW5kIHN5bWxpbmsgYW9wcykuIEFuZCwgb2YgY291cnNlLCB0aGUgYWRkaXRpb24gb2YgYGlvbWFwLmNgIGFuZCBgaW9tYXAuaGAgd2l0aCBhbGwgdGhlIGlvbWFwLXNwZWNpZmljIG9wZXJhdGlvbnMuXG5cblRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZyBhbmQgdGVzdGluZy4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGFyZWFzLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgcmVhbGx5IHNjcnV0aW5pemluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIGZ1bmN0aW9ucyBsaWtlIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYCwgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLCBhbmQgYGhmc3BsdXNfZmlsZV9mc3luY2Agc2luY2UgdGhleSdyZSB0aGUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdGhlIG5ldyBJL08gcGF0aC4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG1hcHBpbmcgKGBoZnNwbHVzX21hcF9leHRlbnRgKSBhbmQgdGhlIGlvbWFwIGNvbnRpbnVhdGlvbiAoYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLCBgX19oZnNwbHVzX2lvbWFwX2JlZ2luYCwgYGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kYCwgYGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlYCkuIFRoZXNlIGFyZSBjcnVjaWFsIGZvciB0aGUgaW9tYXAncyBjb3JyZWN0IG9wZXJhdGlvbi5cblxuSSBzaG91bGQgdmVyaWZ5IHRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBtZXQsIGxpa2UgYENPTkZJR19IRlNQTFVTX0ZTYC5cblxuSSdsbCBydW4gc29tZSBgZ3JlcHBlcmAgc2VhcmNoZXMgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBpbnNpZGUgb2YgYGZzL2hmc3BsdXMvZmlsZS5jYCBhbmQgYGZzL2hmc3BsdXMvaW9tYXAuY2AgdG8gc2VlIGhvdyB0aGUgY2hhbmdlcyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTU5LCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjM6MTcuODM2MTYzNTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTgwNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdCkgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvZmlsZS5jLTE0LVxcbmZzL2hmc3BsdXMvZmlsZS5jOjE1OnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvaGZzcGx1cy9maWxlLmMtMTYte1xcbi0tXFxuZnMvaGZzcGx1cy9maWxlLmMtMjUtXFxuZnMvaGZzcGx1cy9maWxlLmM6MjY6c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNy17XFxuLS1cXG5mcy9oZnNwbHVzL2ZpbGUuYy00NC1cXG5mcy9oZnNwbHVzL2ZpbGUuYzo0NTppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuZnMvaGZzcGx1cy9maWxlLmMtNDYtXFx0XFx0ICAgICAgIGludCBkYXRhc3luYylcXG4tLVxcbmZzL2hmc3BsdXMvZmlsZS5jLTEyNy0gKi9cXG5mcy9oZnNwbHVzL2ZpbGUuYzoxMjg6c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaGZzcGx1cy9maWxlLmMtMTI5LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2hmc3BsdXMvZmlsZS5jLTE1NS1cXG5mcy9oZnNwbHVzL2ZpbGUuYzoxNTY6c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaGZzcGx1cy9maWxlLmMtMTU3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2hmc3BsdXMvZmlsZS5jLTE4MS1cXG5mcy9oZnNwbHVzL2ZpbGUuYzoxODI6c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2hmc3BsdXMvZmlsZS5jLTE4My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNDktXFxuZnMvaGZzcGx1cy9maWxlLmM6MjUwOnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2hmc3BsdXMvZmlsZS5jLTI1MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNzAtXFxuZnMvaGZzcGx1cy9maWxlLmM6MjcxOnN0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyMzoxNy44ODg3NTEyNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjcyMjUxOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgaG93IEhGUysgZGVhbHMgd2l0aCBJL08gbWFwcGluZy4gVGhhdCdzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gaGVhZCBpcyBgZnMvaGZzcGx1cy9pb21hcC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBsaWtlbHkgcmVwb3NpdG9yeSBmb3IgdGhlIGZ1bmN0aW9ucyBoYW5kbGluZyBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIHRyYW5zbGF0aW9uLCBleHRlbnQgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIG1lY2hhbmljcyBvZiBob3cgSEZTKyBhcnJhbmdlcyBkYXRhIG9uIHRoZSBkaXNrLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB0ZXJtcyBvZiBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc4MiwiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjI3LjU2MTAwNjUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjUxMTQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHxzc2l6ZV90fGxvZmZfdHxzdGF0aWMgaW50fHN0YXRpYyBzc2l6ZV90fHN0YXRpYyBsb2ZmX3QpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL2lvbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9pb21hcC5jLTEyLVxcbmZzL2hmc3BsdXMvaW9tYXAuYzoxMzpzdGF0aWMgaW50IF9faGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xNC1cXHRcXHRcXHRcXHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxuZnMvaGZzcGx1cy9pb21hcC5jLTczLVxcbmZzL2hmc3BsdXMvaW9tYXAuYzo3NDpzdGF0aWMgaW50IGhmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcXG5mcy9oZnNwbHVzL2lvbWFwLmMtNzUtXFx0XFx0XFx0XFx0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxuZnMvaGZzcGx1cy9pb21hcC5jLTgyLVxcbmZzL2hmc3BsdXMvaW9tYXAuYzo4MzpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcXG5mcy9oZnNwbHVzL2lvbWFwLmMtODQtXFx0XFx0XFx0XFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmM9OTI9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xMDEtICovXFxuZnMvaGZzcGx1cy9pb21hcC5jOjEwMjpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXFxuZnMvaGZzcGx1cy9pb21hcC5jLTEwMy1cXHRcXHRcXHRcXHQgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sXFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmM9MTI5PWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTM5LSAqL1xcbmZzL2hmc3BsdXMvaW9tYXAuYzoxNDA6aW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuZnMvaGZzcGx1cy9pb21hcC5jLTE0MS17XFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTU3LSAqL1xcbmZzL2hmc3BsdXMvaW9tYXAuYzoxNTg6c3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTU5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmM9MTgxPWNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xODQtXFxuZnMvaGZzcGx1cy9pb21hcC5jOjE4NTppbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuZnMvaGZzcGx1cy9pb21hcC5jLTE4Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyMzoyNy44NzM1MjM0MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg2MzE3NDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gYGZzL2hmc3BsdXMvZXh0ZW50cy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEhGUysgZXh0ZW50IG1hbmFnZW1lbnQgY29kZS4gTGV0J3Mgc2VlLi4uIHRoZSBgZnMvaGZzcGx1cy9leHRlbnRzLmNgIGZpbGUgaXMgcHJvYmFibHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBFeHRlbnRzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgSEZTKyBvcmdhbml6ZXMgZGF0YSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgYWxsb2NhdGluZywgZGVhbGxvY2F0aW5nLCBhbmQgbWFuYWdpbmcgdGhvc2UgYmxvY2tzIHdvdWxkIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIG1hcHBpbmcgbG9naWNhbCBibG9jayBudW1iZXJzIHRvIHBoeXNpY2FsIG9uZXMsIGhhbmRsaW5nIGZyYWdtZW50ZWQgZmlsZXMsIGFuZCBwb3NzaWJseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBiaXRtYXBzIGlmIEhGUysgdXNlcyBvbmUuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSEZTKyBkYXRhIHN0cnVjdHVyZXMgdG8gdW5kZXJzdGFuZCBob3cgZXh0ZW50cyBhcmUgc3RvcmVkIG9uIGRpc2suIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc2MSwiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjQxLjczNjY5OTkxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTA1ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdHx1MzJ8c3RhdGljIHUzMikgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvZXh0ZW50cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvZXh0ZW50cy5jLTIwLS8qIENvbXBhcmUgdHdvIGV4dGVudHMga2V5cywgcmV0dXJucyAwIG9uIHNhbWUsIHBvcy9uZWcgZm9yIGRpZmZlcmVuY2UgKi9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMTppbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjItXFx0XFx0XFx0Y29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsyKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDI9c3RhdGljIHZvaWQgaGZzcGx1c19leHRfYnVpbGRfa2V5KGhmc3BsdXNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTgtICovXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTk6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwLVxcdFxcdFxcdFxcdCB1MzIgKmRibG9jaylcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTc3LVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjc4OnN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNzkte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODctXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6ODg6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODkte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtOTgtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6OTk6c3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTEwMC1cXHRcXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDItXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC17XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNTgtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTU5OmludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNjAte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTkxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIxOS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMjA6c3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLXtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI1Mi0gKi9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyNTM6aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI1NC1cXHRcXHRcXHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDctLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDg6aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDktXFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zNTI9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTM2My1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozNjQ6c3RhdGljIGludCBoZnNwbHVzX2FkZF9leHRlbnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHRlbnQsIHUzMiBvZmZzZXQsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzY1LVxcdFxcdFxcdCAgICAgIHUzMiBhbGxvY19ibG9jaywgdTMyIGJsb2NrX2NvdW50KVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzkxLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjM5MjpzdGF0aWMgaW50IGhmc3BsdXNfZnJlZV9leHRlbnRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzkzLVxcdFxcdFxcdFxcdHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0ZW50LFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDQ1LVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQ0NjppbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDQ3LVxcdFxcdHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSlcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ5MC1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0OTE6aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ5Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjQxLjc4ODgxMDc2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTk2ODQxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIEhGUysgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZywgSSBzaG91bGQgc3RhcnQgd2l0aCB0aGVzZTogYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYCwgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLCBgaGZzcGx1c19tYXBfZXh0ZW50YCwgYW5kIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgYnVpbGRpbmcgYmxvY2tzIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgSS9PIGFuZCBleHRlbnQgbWFwcGluZyB3aXRoaW4gdGhlIEhGUysgY29udGV4dC5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGdsYW5jZSBhdCBgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlYC4gSXQncyBub24tc3RhdGljLCBzbyBpdCdzIHByb2JhYmx5IHdvcnRoIGEgbG9vaywgdGhvdWdoIEknbGwgbmVlZCB0byBwcmlvcml0aXplLiBJJ2xsIGFsc28gY2hlY2sgb3V0IGBoZnNwbHVzX2dldF9ibG9ja2Agc2luY2UgaXQgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIE9uIHRoZSBvdGhlciBoYW5kLCBgaGZzcGx1c19leHRfZmluZF9ibG9ja2Agd2FzIGFsc28gdXBkYXRlZCBidXQgaXQncyBzdGF0aWMsIHNvIGl0IG1heSBub3QgYmUgYXMgY3JpdGljYWwgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgdGhpcyBsYXRlci5cblxuRmluYWxseSwgSSdsbCBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgYGZzL2hmc3BsdXMvS2NvbmZpZ2AgZmlsZS4gVGhhdCB3aWxsIHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4gSSBjYW4ndCBnZXQgdGhlIGZ1bGwgcGljdHVyZSB3aXRob3V0IHRoYXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyOTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjM6NDkuNTA4NDk3MzE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU1BMVVNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5MU19VVEY4XFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XFxuICAxMTpcXHRcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBUaGlzIGZpbGUgc3lzdGVtIGlzIG9mdGVuIGNhbGxlZCBIRlMrIGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXFxuICAxNDpcXHRcXHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcXG4gIDE1OlxcdFxcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxcbiAgMTY6XFx0XFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBIRlMrIGZpbGVzeXN0ZW1cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcXHUwMDI2XFx1MDAyNiBLVU5JVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyMzo0OS41MDg1NTc5OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ2NzE0ODgzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhGUysgSS9PIE9wZXJhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBnaXZlbiB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZywgSSBuZWVkIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcgYWZ0ZXIgdGhpcyBIRlMrIGlvbWFwIGNvbnZlcnNpb24uIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIGVudHJ5IHBvaW50cyBmb3IgZmlsZSBJL08gb3BlcmF0aW9ucyBhbmQgcmVsYXRlZCBleHRlbnQvYmxvY2sgbWFuYWdlbWVudC5cblxuRmlyc3QsIEkgcmV2aWV3ZWQgdGhlIGNhbmRpZGF0ZSBmdW5jdGlvbnM6IGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJgLCBgaGZzcGx1c19maWxlX3JlYWRfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfbGxzZWVrYCwgYGhmc3BsdXNfbWFwX2V4dGVudGAsIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYCwgYW5kIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgc2luY2UgaXQncyBhc3NpZ25lZCB0byBgaGZzcGx1c19maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAgYW5kIHJlcHJlc2VudHMgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9uIGV4cGxpY2l0bHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuXG5cblRoZXJlZm9yZSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGNhbmRpZGF0ZXMuIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGVtcHRpbmcsIGJ1dCBzdGF0aWMsIGFuZCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucy4gVGh1cywgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLCBhbmQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhcmUgZGVmaW5pdGVseSBpbiBzY29wZS5cblxuSSBtYWRlIHN1cmUgdG8gcmUtY2hlY2sgYWxsIHRoZSBjb2RlLiBJIHZlcmlmaWVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgbm9uLXN0YXRpYywgYnkgbG9va2luZyB0aHJvdWdoIGBmcy9oZnNwbHVzL2ZpbGUuY2AsIGBmcy9oZnNwbHVzL2lvbWFwLmNgLCBhbmQgYGZzL2hmc3BsdXMvZXh0ZW50cy5jYC4gSSBjb25maXJtZWQgdGhhdCB0aGUgZGVmaW5pdGlvbnMgb2YgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLCBhbmQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhcmUgZXhhY3RseSBhcyBJIGV4cGVjdC5cblxuQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uLCB0aGlzIHBhdGNoIHJlcHJlc2VudHMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IHdpdGggaW9tYXAsIHdoaWNoIHRvdWNoZXMgb24gdGhlIGNvcmUgZmlsZSBzeXN0ZW0sIGJsb2NrIGFsbG9jYXRpb24sIGV4dGVudCBtYXBwaW5nLCBhbmQgSS9PIGhhbmRsaW5nLCBhbmQgdGhlcmVmb3JlLCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBleGNlbGxlbnQgZnV6emluZyB0YXJnZXRzIHRvIGNvdmVyIGtleSBlbnRyeXBvaW50cyBmb3IgZmlsZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDExMiwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjQ6MDQuMTgwMDQ5NTk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNzMxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9jb250X2V4cGFuZFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBpb21hcCBpbmZyYXN0cnVjdHVyZSBmb3IgZmlsZSBJL08sIHJlcGxhY2luZyB0aGUgbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlciBoZWFkIGJhc2VkIHBhdGhzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpb21hcCBvcGVyYXRpb25zIGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgc2Vla2luZywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGFuZCBibG9jayBhbGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfZmlsZV9mc3luY1wiLFxuICAgIFwiaGZzcGx1c19tYXBfZXh0ZW50XCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kXCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVcIixcbiAgICBcImhmc3BsdXNfZ2V0X2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIEhGUysgZmlsZXN5c3RlbSB0byB1c2UgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTywgcmVwbGFjaW5nIHRoZSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyIGhlYWQgYmFzZWQgcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGlvbWFwIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBzZWVraW5nLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjQ6MDQuMjY0MTMwNTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTk4NjcxODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjQ6MDQuMjY0Njk3NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjA1OTgxMDExMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRlNTEwNDVjMDA1NDMzYTdjZGE1MGFhNmQwY2UwOTllMzFmMTVkN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzoyMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZC4uYjQ0MzJjNjRkYjNiZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXG5AQCAtNSw3ICs1LDcgQEAgY29uZmlnIEhGU1BMVVNfRlNcbiBcdHNlbGVjdCBCVUZGRVJfSEVBRFxuIFx0c2VsZWN0IE5MU1xuIFx0c2VsZWN0IE5MU19VVEY4XG4tXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuK1x0c2VsZWN0IEZTX0lPTUFQXG4gXHRoZWxwXG4gXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuIFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXG4gXG4taGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXFxcbi1cdFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuK1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4rXHRcdHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuIFx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbiBcbiAjIEtVbml0IHRlc3RzXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jXG4rKysgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXG5AQCAtMzksNiArMzksOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbitcdGxvY2tfcGFnZShwYWdlKTtcbitcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0aSA9IG9mZnNldCAlIDMyO1xuQEAgLTc1LDYgKzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VycisrO1xuIFx0XHR9XG4gXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSBzaXplKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTg0LDYgKzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGxvY2tfcGFnZShwYWdlKTtcbitcdFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XG4gXHRcdGN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKVxuIFx0XHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC05OCw2ICsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdHN0YXJ0ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaTtcbiBcdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbiBcdFx0aGZzX2RiZyhcImJpdG1hcCBmdWxsXFxuXCIpO1xuK1x0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqL1xuQEAgLTEyOCw2ICsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0fVxuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUyxcbiBcdFx0XHRcdFx0IE5VTEwpO1xuQEAgLTEzNSw2ICsxNDQsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0xNTIsNiArMTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHQqY3VyciA9IGNwdV90b19iZTMyKG4pO1xuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdCptYXggPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpIC0gc3RhcnQ7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcbiBcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuQEAgLTE4NSw2ICsxOTcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbiBcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0Z290byBrYWJvb207XG4rXHRsb2NrX3BhZ2UocGFnZSk7XG4rXHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcbiBcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMTYsOSArMjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICsrcG5yLCBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0XHRnb3RvIGthYm9vbTtcbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiArMjQ5LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gb3V0OlxuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdHNiaS1cdTAwM2VmcmVlX2Jsb2NrcyArPSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLjhmN2Y1NjBjZWM2NDIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuICNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbisvKlxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xuKyAqXG4rICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAnb2ZmJyB3aXRoaW4gYW4gOC1lbnRyeVxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxuKyAqL1xuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbitcdFx0XHRcdCB1MzIgKmRibG9jaylcbiB7XG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGV4dCsrLCBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspIHtcbiBcdFx0Y291bnQgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuLVx0XHRpZiAob2ZmIFx1MDAzYyBjb3VudClcbi1cdFx0XHRyZXR1cm4gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbitcdFx0XHQqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4rXHRcdH1cbiBcdFx0b2ZmIC09IGNvdW50O1xuIFx0fVxuIFx0LyogcGFuaWM/ICovXG4rXHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQrKywgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKylcbiBcdFx0Y291bnQgKz0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbiBcdHJldHVybiBjb3VudDtcbiB9XG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuKy8qXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcbisgKlxuKyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICdhYmxvY2snIGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4rICpcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXG4rICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXG4rICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4rICovXG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4rXHRpbnQgd2FzX2RpcnR5O1xuK1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdGlmIChiYWxsb2MpXG4rXHRcdCpiYWxsb2MgPSBmYWxzZTtcbiBcbi1cdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4rXHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuK1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGJhbGxvYylcbitcdFx0XHQqYmFsbG9jID0gdHJ1ZTtcbitcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuK1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4rXHRcdFx0XHRcdFx0ICAgICBhYmxvY2ssXG4rXHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSArMjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbi1cdFx0XHRcdFx0YWJsb2NrIC0gaGlwLVx1MDAzZWNhY2hlZF9zdGFydCk7XG4rXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuK1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgZGJsb2NrKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcbi1kb25lOlxuK1x0aWYgKHdhc19kaXJ0eSlcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbitpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuK1x0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbitcdHNlY3Rvcl90IHNlY3RvcjtcbitcdGludCByZXM7XG4rXG4rXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xuK1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4rXG4rXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuK1x0XHRpZiAoIWNyZWF0ZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcdH0gZWxzZVxuK1x0XHRjcmVhdGUgPSAwO1xuK1xuK1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuK1x0XHRcdFx0ICBOVUxMKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4gXHRoZnNfZGJnKFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCIsXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSArMzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcysrO1xuIFx0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdH1cbi1cdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgKzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4rXHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdFx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuK1xuK1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHQgIGlub2RlLVx1MDAzZWlfc2l6ZSwgMCxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NpemUsIDAsIDAsXG4rXHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybjtcbitcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuIFxuLVx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsXG4tXHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLFxuLVx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbi1cdFx0aWYgKHJlcyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKGlub2RlLVx1MDAzZWlfc2l6ZSA9PSBoaXAtXHUwMDNlcGh5c19zaXplKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyNjc4NDg4ZmIwNTRcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5AQCAtMCwwICsxLDMwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4rXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuK1x0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcbitcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuK1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXHUwMDNlb3BlbmNudCkpIHtcbitcdFx0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG4rXHRcdGlmIChpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBTX0RFQUQpIHtcbitcdFx0XHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdCAgIEhGU1BMVVNfU0Ioc2IpLVx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xuK1x0XHRcdGhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTtcbitcdFx0fVxuK1x0XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbitcdFx0ICAgICAgIGludCBkYXRhc3luYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4rXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4rXG4rXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbitcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuK1xuK1x0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHQvKlxuK1x0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXG4rXHQgKi9cbitcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuK1xuK1x0LypcbitcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuK1x0ICovXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvcjIgPVxuK1x0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdGlmICghZXJyb3IpXG4rXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4rXHR9XG4rXG4rXHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4rXHRcdFx0ZXJyb3IyID1cbitcdFx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXG4rXHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdHByX2VycihcInN5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwiKTtcbitcdH1cbitcbitcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKHNiaS1cdTAwM2VhbGxvY19maWxlKS1cdTAwM2VmbGFncykpIHtcbitcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlYWxsb2NfZmlsZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRpZiAoIWVycm9yKVxuK1x0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1x0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1xuK1x0ZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdGVycm9yID0gZXJyb3IyO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXHUwMDI2c2JpLVx1MDAzZWZsYWdzKSlcbitcdFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rLypcbisgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcbisgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseVxuKyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb25cbisgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuK3tcbitcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcywgZW5kO1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0aW50IHJldDtcbitcbitcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4rXG4rXHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMKTtcbitcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gd3JpdHRlbjtcbitcbitcdGVuZCA9IGlvY2ItXHUwMDNla2lfcG9zICsgd3JpdHRlbiAtIDE7XG4rXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHRcdCAgIG9mZnNldCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHQgb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuK1x0XHRcdFx0IGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfZGlvX29wcyxcbitcdFx0XHQgICAwLCBOVUxMLCAwKTtcbitcdGlmIChyZXQgPT0gLUVOT1RCTEspXG4rXHRcdHJldCA9IDA7XG4rXHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbitcdFx0c3NpemVfdCB3cml0dGVuO1xuK1xuK1x0XHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcbitcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHRcdHJldCArPSB3cml0dGVuO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4re1xuK1x0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRsb2ZmX3QgdG90YWxfY2FwYWNpdHk7XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBlcnI7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGl0ZXIpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cdTAwM2V0b3RhbF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XG4rXHRcdHJldCA9IC1FRkJJRztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRlcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZXQgPSBlcnI7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0bG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRsb2ZmX3QgbmV3X3NpemUgPSBpb2NiLVx1MDAzZWtpX3BvcztcbitcbitcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4rXHRcdFx0bmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLFxuK1x0XHRcdFx0XHQgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbitcdFx0fVxuK1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcbitcdFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fSBlbHNlIGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbitcdFx0cmV0ID0gaGZzcGx1c19kaW9fd3JpdGVfaXRlcihpb2NiLCBpdGVyKTtcbitcdGVsc2Uge1xuK1x0XHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGl0ZXIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdFx0TlVMTCwgTlVMTCk7XG4rXHR9XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcbitcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcbitcdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlcixcbitcdFx0XHRcdCAgIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzLFxuK1x0XHRcdFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4rXHR9IGVsc2VcbitcdFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcbitcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1xuK1x0c3dpdGNoICh3aGVuY2UpIHtcbitcdGNhc2UgU0VFS19IT0xFOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfaG9sZShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0VFS19EQVRBOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBnZW5lcmljX2ZpbGVfbGxzZWVrKGZpbGUsIG9mZnNldCwgd2hlbmNlKTtcbitcdH1cbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4rXHQubGxzZWVrXHRcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcbitcdC5yZWFkX2l0ZXJcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyLFxuK1x0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuK1x0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4rXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4rXHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4rXHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuK1x0LnJlbGVhc2VcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXG4rXHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTE3NSw2ICsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbisvKlxuKyAqIFBoeXNpY2FsIGJ5dGUgb2Zmc2V0IG9mIGFsbG9jYXRpb24gYmxvY2sgJ2RibG9jaycgb24gdGhlIHZvbHVtZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4rXG4rXHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdHBoeXNfYnl0ZXMgKz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXG4rXHRyZXR1cm4gcGh5c19ieXRlcztcbit9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzMCwxMiArNDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfb3BlcmF0aW9ucztcbiBcbisvKiBmaWxlLmMgKi9cbitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuK1xuIC8qIGV4dGVudHMuYyAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBcdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xuIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcbitcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpO1xuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbiBcdFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xuQEAgLTQ0Myw2ICs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7XG4gXG5AQCAtNDYyLDggKzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbiBcdFx0ICAgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncyk7XG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKTtcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggMWM1N2M4NzNmMDVkNi4uMDg3MzFlYzBjZWNkMyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTUgKzE4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaGZzcGx1c19mcy5oXCJcbiAjaW5jbHVkZSBcImhmc3BsdXNfcmF3LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4tXG4tc3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuLX1cbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuIFxuIHN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG4ge1xuQEAgLTEyMCw2NyArMTE3LDEzIEBAIHN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuIFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuK3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuLVx0c3NpemVfdCByZXQ7XG4tXG4tXHQvKlxuLVx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbi1cdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbi1cdCAqL1xuLVx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4tXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbi1cbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuLVx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4tXHRcdCAqL1xuLVx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4tXG4tXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4tXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4tXG4tXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4tXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbi1cdH1cbi1cbi1cdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugb2YgZXJyb3IgZXh0ZW5kaW5nIHdyaXRlIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZld1xuLVx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiByZXQgXHUwMDNjIDApKSB7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbi1cdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4tc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4rc3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XG4gfVxuQEAgLTE4OCw4ICsxMzEsOCBAQCBzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbyxcbitcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfYnRyZWVfd3JpdGVwYWdlcyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuQEAgLTE5NywxOCArMTQwLDcwIEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LnJlbGVhc2VfZm9saW9cdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxuIH07XG4gXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XG4rc3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG4tXHQuZGlyZWN0X0lPXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuK1x0LndyaXRlcGFnZXNcdD0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiB9O1xuIFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4re1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGVcdD0gbWFwcGluZy1cdTAwM2Vob3N0LFxuK1x0XHQud2JjXHQ9IHdiYyxcbitcdFx0Lm9wc1x0PSBcdTAwMjZoZnNwbHVzX3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4rc3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYW9wX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuK3tcbitcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuK1x0LnJlYWRfZm9saW9cdFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkXHRcdD0gaGZzcGx1c19yZWFkYWhlYWQsXG4rXHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmJtYXBcdFx0XHQ9IGhmc3BsdXNfYW9wX2JtYXAsXG4rXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGVcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpb1x0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbitcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuc3dhcF9hY3RpdmF0ZVx0XHQ9IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSxcbit9O1xuK1xuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfaGFzaCAgICAgICA9IGhmc3BsdXNfaGFzaF9kZW50cnksXG4gXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcbkBAIC0yNjgsMzUgKzI2Myw2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAtRUlPO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuLVx0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbi1cdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuLVx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbi1cdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuLVx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuLVx0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbi1cdFx0XHRcdFx0ICAgSEZTUExVU19TQihzYiktXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuLVx0XHR9XG4tXHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuQEAgLTMxMSwxMCArMjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4rXHRcdFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuK1xuK1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbitcdFx0XHRlcnJvciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4rXHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiBcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiBcdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbkBAIC0zNTMsODYgKzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi1cdFx0ICAgICAgIGludCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4tXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4tXG4tXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbi1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuLVxuLVx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cbi1cdC8qXG4tXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbi1cdCAqL1xuLVx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXG4tXHQvKlxuLVx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXG4tXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdH1cbi1cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9XG4tXHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlZXh0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlcnJvcjIgPVxuLVx0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbi1cdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4tXHRcdFx0cHJfZXJyKFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxuXCIpO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXG4tXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXG4tXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuLVx0XHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVxuLVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuIFx0LmdldGF0dHJcdD0gaGZzcGx1c19nZXRhdHRyLFxuQEAgLTQ1NCwxOSArMzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxpc3R4YXR0clx0PSBoZnNwbHVzX2xpc3R4YXR0cixcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuLVx0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuLVx0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3Blbixcbi1cdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuLVx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbi19O1xuLVxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuQEAgLTUxMyw3ICszOTAsNyBAQCBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRzYmktXHUwMDNlZmlsZV9jb3VudCsrO1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XG4gXHRcdGhpcC1cdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xuIFx0fSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8XG4gXHRcdCAgIFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuQEAgLTY1NCw3ICs1MzEsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuK1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmMgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbkBAIC0wLDAgKzEsMTg5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0IHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0dTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzO1xuK1x0bG9mZl90IGFibG9ja19vZmZzZXQsIGFibG9ja19ieXRlcztcbitcdGxvZmZfdCBibG9ja19zdGFydDtcbitcdGJvb2wgaXNfbmV3O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghbWF5X2FsbG9jKSB7XG4rXHRcdC8qIENvbXBsZXRlbHkgYmV5b25kIEVPRi4gVHJlYXQgYXMgaG9sZSAqL1xuK1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4rXHRcdFx0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX0hPTEU7XG4rXHRcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4rXHRcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4rXHRcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0XHRsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4rXG4rXHRcdFx0bGVuZ3RoID0gcm91bmRfdXAoaV9zaXplLCBibG9ja3NpemUpIC0gb2Zmc2V0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRhYmxvY2sgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGVyciA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBtYXlfYWxsb2MsIFx1MDAyNmRibG9jayxcbitcdFx0XHRcdCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoc2JpLVx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XG4rXHRhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBhYmxvY2tfYnl0ZXMgLSBhYmxvY2tfb2Zmc2V0KTtcbitcdGJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7XG4rXHRpc19uZXcgPSBtYXlfYWxsb2MgXHUwMDI2XHUwMDI2IGJsb2NrX3N0YXJ0IFx1MDAzZT0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcdGlmIChtYXlfYWxsb2MgXHUwMDI2XHUwMDI2ICFpc19uZXcgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2MgaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbitcdFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC1cdTAwM2VwaHlzX3NpemUgLSBvZmZzZXQpO1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IHNiLVx1MDAzZXNfYmRldjtcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9IG9mZnNldDtcbitcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdGlvbWFwLVx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICsgYWJsb2NrX29mZnNldDtcbitcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xuK1xuK1x0aWYgKGlzX25ldylcbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHRzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuK1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIGlvbWFwLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXG4rXHRcdFx0XHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcbitcdFx0XHRcdCAgICAgaW9tYXAsIHRydWUpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZV9pb21hcF9lbmQoKVxuKyAqXG4rICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXG4rICogKGhpcC1cdTAwM2VwaHlzX3NpemUgLyBoaXAtXHUwMDNlZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS5cbisgKi9cbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4rXHRcdFx0XHQgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4re1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0bG9mZl90IGVuZDtcbitcdGJvb2wgZGlydGllZCA9IGZhbHNlO1xuK1xuK1x0aWYgKCF3cml0dGVuKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVuZCA9IHJvdW5kX3VwKHBvcyArIHdyaXR0ZW4sIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcbitcdGlmIChoaXAtXHUwMDNlcGh5c19zaXplIFx1MDAzYyBlbmQpIHtcbitcdFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBlbmQgLSBoaXAtXHUwMDNlcGh5c19zaXplKTtcbitcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcbitcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyA9IGVuZCBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbitcdFx0ZGlydGllZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoZGlydGllZClcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c19pb21hcF9jb250X2V4cGFuZCgpXG4rICpcbisgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAnc2l6ZScuXG4rICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS5cbisgKi9cbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0bG9mZl90IHN0YXJ0ID0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcbitcdGlmIChzaXplIFx1MDAzYz0gc3RhcnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsXG4rXHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7XG4rfVxuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXG4rICpcbisgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGVcbisgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IG9mZnNldCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbitcdCAgICBvZmZzZXQgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuK1x0XHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLFxuK1x0XHRcdFx0XHQgICAgb2Zmc2V0LCBsZW4sIDAsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcbitcdC53cml0ZWJhY2tfcmFuZ2VcdD0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsXG4rXHQud3JpdGViYWNrX3N1Ym1pdFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuK1x0LmVuZF9pb1x0XHQ9IGlvbWFwX2Rpb19lbmRfaW8sXG4rfTtcbitcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4rXHRcdFx0XHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxuK3tcbitcdHJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5oIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGFjMDdhOWQyNWY4ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcztcbitcbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7XG4raW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKTtcbitcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xuaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xuKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jXG5AQCAtNTcxLDYgKzU3MSw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0Z290byBvdXRfY2xvc2VfYXR0cl90cmVlO1xuIFx0fVxuIFx0c2JpLVx1MDAzZWFsbG9jX2ZpbGUgPSBpbm9kZTtcbitcdG1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qIExvYWQgdGhlIHJvb3QgZGlyZWN0b3J5ICovXG4gXHRyb290ID0gaGZzcGx1c19pZ2V0KHNiLCBIRlNQTFVTX1JPT1RfQ05JRCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuQEAgLTE3MSwxOCArMTcxLDIyIEBAIGVudW0ge1xuIFx0SEZTX1hBVFRSX05BTUUsXG4gfTtcbiBcbisjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVFx0KDMpXG4rXG4gc3RydWN0IGhmc19leHRlbnQge1xuIFx0X19iZTE2IGJsb2NrO1xuIFx0X19iZTE2IGNvdW50O1xuIH07XG4tdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1szXTtcbit0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07XG4rXG4rI2RlZmluZSBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXHQoOClcbiBcbiAvKiBBIHNpbmdsZSBjb250aWd1b3VzIGFyZWEgb2YgYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZXh0ZW50IHtcbiBcdF9fYmUzMiBzdGFydF9ibG9jaztcbiBcdF9fYmUzMiBibG9ja19jb3VudDtcbiB9IF9fcGFja2VkO1xuLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTtcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XG4gXG4gLyogSW5mb3JtYXRpb24gZm9yIGEgXCJGb3JrXCIgaW4gYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZm9ya19yYXcge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMi4uNTBmZTYwMzZiMDFhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNTYwLDYgKzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XG4gXHRzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDtcbiB9O1xuIFxuKy8qXG4rICogRGlyZWN0IEkvTyBjb21wbGV0aW9uIGhhbmRsZXJcbisgKi9cbitzdGF0aWMgaW5saW5lXG4raW50IGlvbWFwX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4rXHRcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHNpemUgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2MgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKTtcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKiBXYWl0IGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIGluIGlvbWFwX2Rpb19ydyBldmVuIGlmIHRoZSBraW9jYiBpcyBub3RcbiAgKiBzeW5jaHJvbm91cy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjI0OjA0LjI2NDcwMDQ0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDU5ODA4MDE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEhGUysgRmlsZXN5c3RlbSBJL08gUGF0Y2ggU2VyaWVzIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0J3MgcmVmYWN0b3JpbmcgdGhlIGBoZnNwbHVzYCBmaWxlc3lzdGVtLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHNoaWZ0IGZyb20gYExFR0FDWV9ESVJFQ1RfSU9gIHRvIGBpb21hcGAgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMuIFRoZXkndmUgaW50cm9kdWNlZCBuZXcgZmlsZXM6IGBmcy9oZnNwbHVzL2ZpbGUuY2AsIGBmcy9oZnNwbHVzL2lvbWFwLmNgLCBhbmQgYGZzL2hmc3BsdXMvaW9tYXAuaGAsIGFuZCB0aGV5J3ZlIG1vZGlmaWVkIGBoZnNwbHVzX2dldF9ibG9ja2AgYW5kIGFkZGVkIGEgYGhmc3BsdXNfbWFwX2V4dGVudGAgZnVuY3Rpb24uIEkgc2VlIHRoZXkncmUgYWxzbyB1c2luZyBgbG9ja19wYWdlYCBhbmQgYGZvbGlvX3dhaXRfc3RhYmxlYCBub3cgaW4gdGhlIGJsb2NrIGFsbG9jYXRpb24vZnJlZWluZyByb3V0aW5lcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuICBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlcGxhY2luZyB0aGUgb2xkIGRpcmVjdCBhbmQgYnVmZmVyZWQgSU8gcGF0aHMgd2l0aCBgaW9tYXBgLWJhc2VkIG9uZXMuIFRoZXkndmUgdXBkYXRlZCB0aGUgYGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIHVzaW5nIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgKHdpdGggYGlvbWFwX2Rpb19yd2AgZm9yIGRpcmVjdCBJL08pLiAgVGhleSBhbHNvIGltcGxlbWVudCBgaGZzcGx1c19pb21hcF9vcHNgLCBhbmQgdGhlIHdyaXRlYmFjay93cml0ZSBJTyBvcGVyYXRpb24gc3RydWN0dXJlcy4gVGhleSdyZSBpbXBsZW1lbnRpbmcgYGJlZ2luYCBhbmQgYGVuZGAgZnVuY3Rpb25zIGZvciBpb21hcCBhbmQgd3JpdGUgb3BlcmF0aW9ucywgYXMgd2VsbCBhcyBmdW5jdGlvbnMgZm9yIHdyaXRlYmFjay5cblxuVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXkncmUgc3RpY2tpbmcgdG8gc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zOiBgcmVhZF9pdGVyYCwgYHdyaXRlX2l0ZXJgLCBgbGxzZWVrYCwgYGZzeW5jYCwgYG9wZW5gLCBhbmQgYHJlbGVhc2VgLiAgVGhlIGBpb2N0bGAgZnVuY3Rpb24gcmVtYWlucyB1bmNoYW5nZWQgYXQgYGhmc3BsdXNfaW9jdGxgLiBUaGV5J3ZlIG1vZGlmaWVkIGBoZnNwbHVzX2dldF9ibG9ja2AgdG8gdXNlIGBoZnNwbHVzX21hcF9leHRlbnRgLiBgaGZzcGx1c19tYXBfZXh0ZW50YCByZXR1cm5zIGBkYmxvY2tgIGFuZCBgbWF4X2Jsb2Nrc2AuICBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZGJsb2NrYCBhbmQgYG1heF9ibG9ja3NgIGFyZSBpbml0aWFsaXplZC5cblxuQWxyaWdodCwgYSBkZWVwZXIgZGl2ZS4gSSBzZWUgdGhleSdyZSB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAgdG8gemVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgaW4gYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLCB3aGljaCBpcyBncmVhdDsgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIHdhbnQgdG8gc2VlLiAgYGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kYCBpcyBhZHZhbmNpbmcgYGhpcC1cdTAwM2VwaHlzX3NpemVgIGFuZCBgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJgIGFuZCBgaGZzcGx1c19maWxlX3RydW5jYXRlYCBhcmUgdXNpbmcgYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgIGZvciB6ZXJvLWV4dGVuc2lvbiBpZiB0aGUgd3JpdGUgZXh0ZW5kcyBwYXN0IHRoZSBjdXJyZW50IGZpbGUgc2l6ZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGhvdyB0aGUgYGlvbWFwYCBhZGRyZXNzIGlzIHNldCB3aXRoaW4gYGhmc3BsdXNfaW9tYXBfYmVnaW5gLiAgSXQncyBzZXR0aW5nIGBpb21hcC1cdTAwM2VhZGRyYCBiYXNlZCBvbiBgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlc2AgYW5kIGFuIG9mZnNldC4gIENydWNpYWxseSwgaWYgYSBuZXcgYmxvY2sgaXMgYmVpbmcgYWxsb2NhdGVkLCB0aGV5IHNldCBgSU9NQVBfRl9ORVdgLiAgVGhlIGBpb21hcGAgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgemVyb2luZyBvZiB0aGVzZSBgSU9NQVBfRl9ORVdgIGJsb2NrcywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0LlxuXG5TbywgdGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHN0YW5kYXJkIFZGUy9gaW9tYXBgIGNvbnZlcnNpb25zLiBObyBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgc3lzdGVtIGNhbGxzLCBubyBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLCBhbmQgbm8gbmV3IGlvY3Rscy4gSSB0aGluayBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgb3V0LW9mLWJvdW5kcyByZWFkcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBvdGhlciBjb21tb24gbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBUaGUgS01TQU4gdG9vbCBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGhvdyBgaGZzcGx1c19tYXBfZXh0ZW50YCB3b3Jrcy4gSXQgaGFzIGEgY2hlY2sgZm9yIHRoZSBgYWJsb2NrYCBpbmRleCBhbmQgY2FsbHMgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIHRvIGxvY2F0ZSBhIGJsb2NrLiAgSWYgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIGZpbmRzIGEgYmxvY2sgaXQgc2V0cyBgKmRibG9ja2AgYW5kIHJldHVybnMgYSB2YWx1ZSwgb3RoZXJ3aXNlIGAqZGJsb2NrYCBpcyBzZXQgdG8gMC4gVGhlbiwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGRibG9jayBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gdGhlIGlvbWFwLiBUaGUgY2hlY2sgdGhhdCBjYWxscyBgaGZzcGx1c19tYXBfZXh0ZW50YCBjYXRjaGVzIGFueSBlcnJvci4gSXQgdXNlcyBgaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKWAuIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHByb2Nlc3MgcmV0dXJucyBlYXJseS5cblxuQmFzZWQgb24gbXkgYW5hbHlzaXMsIGBpb21hcF96ZXJvX3JhbmdlYCBpcyB1c2VkLCBhbmQgdGhlcmUgaXMgc2FmZSBoYW5kbGluZyBvZiBhbGxvY2F0ZWQgYmxvY2tzLiBUaGlzIHBhdGNoIHVzZXMgYElcblxuIiwiSW5wdXRUb2tlbnMiOjE4OTU2LCJPdXRwdXRUb2tlbnMiOjI0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyNDoyNC44NjI3ODI4NDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrlrxw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 23:08:28 +0000 UTC FinishedAt: 2026-08-26 23:24:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "5870ce43c013ad564b3b83bae330b160e056df67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "21631741-87b3-4cdc-90a9-ac84e2b3d36c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_file_fsync", "hfsplus_map_extent", "hfsplus_iomap_cont_expand", "hfsplus_iomap_swap_activate", "hfsplus_get_block" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19tYXBfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZ2V0X2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0gZnJvbSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUuIEl0IGludHJvZHVjZXMgbmV3IGZpbGUgb3BlcmF0aW9ucywgaW9tYXAgY2FsbGJhY2tzLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgbG9naWMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0YW5kYXJkIFZGUyBhbmQgaW9tYXAgQVBJIHVzYWdlLCBzdWNoIGFzIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgaW9tYXBfemVyb19yYW5nZWAuIEZpbGUgZXhwYW5zaW9ucyBhcmUgcHJvcGVybHkgemVyb2VkIHVzaW5nIGBpb21hcF96ZXJvX3JhbmdlYCwgYW5kIG5ld2x5IGFsbG9jYXRlZCBibG9ja3MgYXJlIGZsYWdnZWQgd2l0aCBgSU9NQVBfRl9ORVdgLCB3aGljaCB0aGUgaW9tYXAgY29yZSBoYW5kbGVzIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCBkaXNrIGRhdGEgZXhwb3N1cmUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGlvY3RscywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PLCByZXBsYWNpbmcgdGhlIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXIgaGVhZCBiYXNlZCBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaW9tYXAgb3BlcmF0aW9ucyBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIHNlZWtpbmcsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGU1MTA0NWMwMDU0MzNhN2NkYTUwYWE2ZDBjZTA5OWUzMWYxNWQ3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZC4uYjQ0MzJjNjRkYjNiZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9LY29uZmlnXG5AQCAtNSw3ICYjNDM7NSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXG4gXHRzZWxlY3QgQlVGRkVSX0hFQURcbiBcdHNlbGVjdCBOTFNcbiBcdHNlbGVjdCBOTFNfVVRGOFxuLVx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiYjNDM7XHRzZWxlY3QgRlNfSU9NQVBcbiBcdGhlbHBcbiBcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XG4gXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL01ha2VmaWxlIGIvZnMvaGZzcGx1cy9NYWtlZmlsZVxuaW5kZXggZjJhOWFlNjk3ZTgxMS4uM2RkZWE2OWE5YzY5OCAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbkBAIC01LDggJiM0Mzs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgJiM0Mzs9IGhmc3BsdXMub1xuIFxuLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG4tXHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4mIzQzO2hmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGZpbGUubyBpb21hcC5vIGlvY3RsLm8gZXh0ZW50cy5vIFxcXG4mIzQzO1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4mIzQzO1x0XHR1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbiBcdFx0YXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vXG4gXG4gIyBLVW5pdCB0ZXN0c1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXG5pbmRleCAxYjNhZjhjODdjYWRiLi42MWM0OWNjYTRhN2EyIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9iaXRtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xuQEAgLTM5LDYgJiM0MzszOSw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuJiM0MztcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciAmIzQzOyAob2Zmc2V0IFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XG4gXHRpID0gb2Zmc2V0ICUgMzI7XG5AQCAtNzUsNiAmIzQzOzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VyciYjNDM7JiM0Mzs7XG4gXHRcdH1cbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTO1xuIFx0XHRpZiAob2Zmc2V0IFx1MDAzZT0gc2l6ZSlcbiBcdFx0XHRicmVhaztcbkBAIC04NCw2ICYjNDM7ODcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0XHRjdXJyID0gcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0aWYgKChzaXplIF4gb2Zmc2V0KSAvIFBBR0VfQ0FDSEVfQklUUylcbiBcdFx0XHRlbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTk4LDYgJiM0MzsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdHN0YXJ0ID0gb2Zmc2V0ICYjNDM7IChjdXJyIC0gcHB0cikgKiAzMiAmIzQzOyBpO1xuIFx0aWYgKHN0YXJ0IFx1MDAzZT0gc2l6ZSkge1xuIFx0XHRoZnNfZGJnKFwmIzM0O2JpdG1hcCBmdWxsXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbiYjNDM7XHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuJiM0MztcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcdC8qIGRvIGFueSBwYXJ0aWFsIHUzMiBhdCB0aGUgc3RhcnQgKi9cbkBAIC0xMjgsNiAmIzQzOzEzNiw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHR9XG4gXHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0b2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsXG4gXHRcdFx0XHRcdCBOVUxMKTtcbkBAIC0xMzUsNiAmIzQzOzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxuIFx0XHRcdHN0YXJ0ID0gc2l6ZTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuJiM0MztcdFx0bG9ja19wYWdlKHBhZ2UpO1xuJiM0MztcdFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XG4gXHRcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRcdGN1cnIgPSBwcHRyO1xuIFx0XHRlbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTE1Miw2ICYjNDM7MTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHQqY3VyciA9IGNwdV90b19iZTMyKG4pO1xuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4mIzQzO1x0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHQqbWF4ID0gb2Zmc2V0ICYjNDM7IChjdXJyIC0gcHB0cikgKiAzMiAmIzQzOyBpIC0gc3RhcnQ7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcbiBcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuQEAgLTE4NSw2ICYjNDM7MTk3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgcG5yLCBOVUxMKTtcbiBcdGlmIChJU19FUlIocGFnZSkpXG4gXHRcdGdvdG8ga2Fib29tO1xuJiM0MztcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciAmIzQzOyAob2Zmc2V0IFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XG4gXHRlbmQgPSBwcHRyICYjNDM7IFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xuQEAgLTIxNiw5ICYjNDM7MjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCAmIzQzOyYjNDM7cG5yLCBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0XHRnb3RvIGthYm9vbTtcbiYjNDM7XHRcdGxvY2tfcGFnZShwYWdlKTtcbiYjNDM7XHRcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0XHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRjdXJyID0gcHB0cjtcbiBcdFx0ZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiAmIzQzOzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIG91dDpcbiBcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuIFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuJiM0MztcdHVubG9ja19wYWdlKHBhZ2UpO1xuIFx0c2JpLVx1MDAzZWZyZWVfYmxvY2tzICYjNDM7PSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLjhmN2Y1NjBjZWM2NDIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfcmF3LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW9tYXAuaFwmIzM0O1xuIFxuIC8qIENvbXBhcmUgdHdvIGV4dGVudHMga2V5cywgcmV0dXJucyAwIG9uIHNhbWUsIHBvcy9uZWcgZm9yIGRpZmZlcmVuY2UgKi9cbiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXG5AQCAtNDgsMTggJiM0Mzs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbiYjNDM7LypcbiYjNDM7ICogaGZzcGx1c19leHRfZmluZF9ibG9jaygpIC0gZmluZCBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJsb2NrXG4mIzQzOyAqXG4mIzQzOyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJiMzOTtvZmYmIzM5OyB3aXRoaW4gYW4gOC1lbnRyeVxuJiM0MzsgKiBleHRlbnQgcmVjb3JkLCBhbmQgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzXG4mIzQzOyAqIHRoYXQgYXJlIGNvbnRpZ3VvdXMgd2l0aCBpdCBpbiB0aGUgc2FtZSBleHRlbnQgZW50cnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYsXG4mIzQzO1x0XHRcdFx0IHUzMiAqZGJsb2NrKVxuIHtcbiBcdGludCBpO1xuIFx0dTMyIGNvdW50O1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykge1xuIFx0XHRjb3VudCA9IGJlMzJfdG9fY3B1KGV4dC1cdTAwM2VibG9ja19jb3VudCk7XG4tXHRcdGlmIChvZmYgXHUwMDNjIGNvdW50KVxuLVx0XHRcdHJldHVybiBiZTMyX3RvX2NwdShleHQtXHUwMDNlc3RhcnRfYmxvY2spICYjNDM7IG9mZjtcbiYjNDM7XHRcdGlmIChvZmYgXHUwMDNjIGNvdW50KSB7XG4mIzQzO1x0XHRcdCpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlc3RhcnRfYmxvY2spICYjNDM7IG9mZjtcbiYjNDM7XHRcdFx0cmV0dXJuIGNvdW50IC0gb2ZmO1xuJiM0MztcdFx0fVxuIFx0XHRvZmYgLT0gY291bnQ7XG4gXHR9XG4gXHQvKiBwYW5pYz8gKi9cbiYjNDM7XHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICYjNDM7ODAsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZXh0X2Jsb2NrX2NvdW50KHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0KVxuIFx0aW50IGk7XG4gXHR1MzIgY291bnQgPSAwO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgODsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspXG4gXHRcdGNvdW50ICYjNDM7PSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuIFx0cmV0dXJuIGNvdW50O1xuIH1cbkBAIC0yMjMsMzcgJiM0MzsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX21hcF9leHRlbnQoKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBzZXF1ZW5jZSBvZiBhbGxvY2F0aW9uIGJsb2Nrc1xuJiM0MzsgKlxuJiM0MzsgKiBMb29rcyB1cCB0aGUgYWxsb2NhdGlvbiBibG9jayBhdCAmIzM5O2FibG9jayYjMzk7IGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuJiM0MzsgKiBmaWxlICh2aWEgaGZzcGx1c19maWxlX2V4dGVuZCgpLCBpbiBjbHVtcF9ibG9ja3Mtc2l6ZWQgY2h1bmtzKSB3aGVuXG4mIzQzOyAqICYjMzk7Y3JlYXRlJiMzOTsgaXMgc2V0IGFuZCAmIzM5O2FibG9jayYjMzk7IGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4mIzQzOyAqXG4mIzQzOyAqIE9uIHN1Y2Nlc3MsICpkYmxvY2sgaXMgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBiYWNraW5nICYjMzk7YWJsb2NrJiMzOTssXG4mIzQzOyAqIGFuZCAqbWF4X2Jsb2NrcyBpcyB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MgdGhhdCBhcmVcbiYjNDM7ICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbiYjNDM7ICogdGhhdCBjb250YWlucyAmIzM5O2FibG9jayYjMzk7KSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSYjMzk7c1xuJiM0MzsgKiByZW1haW5pbmcgYWxsb2NhdGlvbiB3aGVuIHRoZSBmb3JrIGlzIGZyYWdtZW50ZWQgYWNyb3NzIHNldmVyYWxcbiYjNDM7ICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4mIzQzOyAqIHJlcXVlc3QsICpiYWxsb2MgKHdoZW4gbm9uLU5VTEwpIGlzIHNldCB0byB0cnVlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuJiM0MztcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpXG4ge1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiBcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4tXHRpbnQgcmVzID0gLUVJTztcbi1cdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaztcbi1cdHNlY3Rvcl90IHNlY3Rvcjtcbi1cdGludCB3YXNfZGlydHkgPSAwO1xuJiM0MztcdGludCB3YXNfZGlydHk7XG4mIzQzO1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbiYjNDM7XHRpZiAoYmFsbG9jKVxuJiM0MztcdFx0KmJhbGxvYyA9IGZhbHNlO1xuIFxuLVx0aWYgKGlibG9jayBcdTAwM2U9IGhpcC1cdTAwM2Vmc19ibG9ja3MpIHtcbiYjNDM7XHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuJiM0MztcdFx0cmVzID0gaGZzcGx1c19maWxlX2V4dGVuZChpbm9kZSwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGlmIChiYWxsb2MpXG4mIzQzO1x0XHRcdCpiYWxsb2MgPSB0cnVlO1xuJiM0MztcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuJiM0MztcdFx0Km1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VmaXJzdF9leHRlbnRzLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIGFibG9jayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4gXHRpZiAoaW5vZGUtXHUwMDNlaV9pbm8gPT0gSEZTUExVU19FWFRfQ05JRClcbkBAIC0yNzIsMTEgJiM0MzsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhpcC1cdTAwM2VleHRlbnRzX2xvY2spO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbi1cdGRibG9jayA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuLVx0XHRcdFx0XHRhYmxvY2sgLSBoaXAtXHUwMDNlY2FjaGVkX3N0YXJ0KTtcbiYjNDM7XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuJiM0MztcdFx0XHRcdFx0ICAgICBhYmxvY2sgLSBoaXAtXHUwMDNlY2FjaGVkX3N0YXJ0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmhpcC1cdTAwM2VleHRlbnRzX2xvY2spO1xuIFxuLWRvbmU6XG4mIzQzO1x0aWYgKHdhc19kaXJ0eSlcbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbiYjNDM7aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiYjNDM7XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbiYjNDM7XHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1hc2ssIG1heF9ibG9ja3M7XG4mIzQzO1x0c2VjdG9yX3Qgc2VjdG9yO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4mIzQzO1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4mIzQzO1xuJiM0MztcdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4mIzQzO1x0XHRpZiAoIWNyZWF0ZSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRpZiAoaWJsb2NrIFx1MDAzZSBoaXAtXHUwMDNlZnNfYmxvY2tzKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHR9IGVsc2VcbiYjNDM7XHRcdGNyZWF0ZSA9IDA7XG4mIzQzO1xuJiM0MztcdHJlcyA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBjcmVhdGUsIFx1MDAyNmRibG9jaywgXHUwMDI2bWF4X2Jsb2NrcyxcbiYjNDM7XHRcdFx0XHQgIE5VTEwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiBcdGhmc19kYmcoXCYjMzQ7aW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCYjMzQ7LFxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZylpYmxvY2ssIGRibG9jayk7XG4gXG5AQCAtMjkwLDkgJiM0MzszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuIFx0XHRoaXAtXHUwMDNlcGh5c19zaXplICYjNDM7PSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyYjNDM7JiM0Mzs7XG4gXHRcdGlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuLVx0fVxuLVx0aWYgKGNyZWF0ZSB8fCB3YXNfZGlydHkpXG4gXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgJiM0Mzs2MDYsMzIgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIChsb25nIGxvbmcpaGlwLVx1MDAzZXBoeXNfc2l6ZSwgaW5vZGUtXHUwMDNlaV9zaXplKTtcbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX3NpemUgXHUwMDNlIGhpcC1cdTAwM2VwaHlzX3NpemUpIHtcbi1cdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRcdHZvaWQgKmZzZGF0YSA9IE5VTEw7XG4tXHRcdGxvZmZfdCBzaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuJiM0MztcdFx0aWYgKFNfSVNSRUcoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1x0XHRcdHZvaWQgKmZzZGF0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0XHRcdCAgaW5vZGUtXHUwMDNlaV9zaXplLCAwLFxuJiM0MztcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuJiM0MztcdFx0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2l6ZSwgMCwgMCxcbiYjNDM7XHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4mIzQzO1x0XHRcdGlmIChyZXMgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCxcbi1cdFx0XHRcdFx0ICBcdTAwMjZmb2xpbywgXHUwMDI2ZnNkYXRhKTtcbi1cdFx0aWYgKHJlcylcbi1cdFx0XHRyZXR1cm47XG4tXHRcdHJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsXG4tXHRcdFx0XHRcdGZvbGlvLCBmc2RhdGEpO1xuLVx0XHRpZiAocmVzIFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSBpZiAoaW5vZGUtXHUwMDNlaV9zaXplID09IGhpcC1cdTAwM2VwaHlzX3NpemUpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2ZpbGUuYyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODI2Nzg0ODhmYjA1NFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9maWxlLmNcbkBAIC0wLDAgJiM0MzsxLDMwNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MzsvKlxuJiM0MzsgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91aW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbiYjNDM7XHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuJiM0MztcdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuJiM0MztcdFx0cmV0dXJuIC1FT1ZFUkZMT1c7XG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuJiM0MztcdGZpbGUtXHUwMDNlZl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4mIzQzO1xuJiM0MztcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuJiM0MztcdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4mIzQzO1x0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuJiM0MztcdFx0aW5vZGVfbG9jayhpbm9kZSk7XG4mIzQzO1x0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuJiM0MztcdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuJiM0MztcdFx0XHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXHUwMDNlaV9pbm8sXG4mIzQzO1x0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbiYjNDM7XHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbiYjNDM7XHRcdCAgICAgICBpbnQgZGF0YXN5bmMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXHUwMDNlc192aGRyO1xuJiM0MztcdGludCBlcnJvciA9IDAsIGVycm9yMjtcbiYjNDM7XG4mIzQzO1x0aGZzX2RiZyhcJiMzNDtpbm9kZS1cdTAwM2VpX2lubyAlbGx1LCBzdGFydCAlbGx1LCBlbmQgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdGlub2RlLVx1MDAzZWlfaW5vLCBzdGFydCwgZW5kKTtcbiYjNDM7XG4mIzQzO1x0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuJiM0MztcdGlmIChlcnJvcilcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbmQgZXhwbGljaXRseSB3cml0ZSBvdXQgdGhlIGJ0cmVlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4mIzQzO1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4mIzQzO1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRlcnJvcjIgPVxuJiM0MztcdFx0XHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VleHRfdHJlZS1cdTAwM2Vpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuJiM0MztcdFx0aWYgKCFlcnJvcilcbiYjNDM7XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuJiM0MztcdFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcbiYjNDM7XHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRcdGVycm9yMiA9XG4mIzQzO1x0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbiYjNDM7XHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0XHRcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4mIzQzO1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKHNiaS1cdTAwM2VhbGxvY19maWxlKS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4mIzQzO1x0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4mIzQzO1x0XHRpZiAoIWVycm9yKVxuJiM0MztcdFx0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2c2JpLVx1MDAzZXZoX211dGV4KTtcbiYjNDM7XHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdGlmICghZXJyb3IpXG4mIzQzO1x0XHRlcnJvciA9IGVycm9yMjtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXHUwMDI2c2JpLVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBlcnJvcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZSgpIC0gZmFsbCBiYWNrIHRvIGJ1ZmZlcmVkIEkvTyBmb3IgdGhlXG4mIzQzOyAqIHRhaWwgb2YgYSB3cml0ZSB0aGF0IGlvbWFwX2Rpb19ydygpIGNvdWxkIG5vdCBwZXJmb3JtIGRpcmVjdGx5XG4mIzQzOyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb25cbiYjNDM7ICogb3V0c2lkZSB0aGUgZGlyZWN0IHBhdGgpLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiYjNDM7e1xuJiM0MztcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcywgZW5kO1xuJiM0MztcdHNzaXplX3Qgd3JpdHRlbjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNj0gfklPQ0JfRElSRUNUO1xuJiM0MztcbiYjNDM7XHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdFx0ICAgIE5VTEwsIE5VTEwpO1xuJiM0MztcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdGVuZCA9IGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IHdyaXR0ZW4gLSAxO1xuJiM0MztcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHRcdCAgIG9mZnNldCwgZW5kKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIC1FSU87XG4mIzQzO1xuJiM0MztcdGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLFxuJiM0MztcdFx0XHRcdCBvZmZzZXQgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4mIzQzO1x0XHRcdFx0IGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB3cml0dGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiYjNDM7e1xuJiM0MztcdHNzaXplX3QgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgZnJvbSxcbiYjNDM7XHRcdFx0ICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4mIzQzO1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfZGlvX29wcyxcbiYjNDM7XHRcdFx0ICAgMCwgTlVMTCwgMCk7XG4mIzQzO1x0aWYgKHJldCA9PSAtRU5PVEJMSylcbiYjNDM7XHRcdHJldCA9IDA7XG4mIzQzO1x0ZWxzZSBpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XG4mIzQzO1x0XHRzc2l6ZV90IHdyaXR0ZW47XG4mIzQzO1xuJiM0MztcdFx0d3JpdHRlbiA9IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoaW9jYiwgZnJvbSk7XG4mIzQzO1x0XHRpZiAod3JpdHRlbiBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHdyaXR0ZW47XG4mIzQzO1x0XHRyZXQgJiM0Mzs9IHdyaXR0ZW47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdGxvZmZfdCB0b3RhbF9jYXBhY2l0eTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpbm9kZV9sb2NrKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgaXRlcik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4mIzQzO1x0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cdTAwM2V0b3RhbF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlPSB0b3RhbF9jYXBhY2l0eSkge1xuJiM0MztcdFx0cmV0ID0gLUVGQklHO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiYjNDM7XHRcdGxvZmZfdCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiYjNDM7XHRcdGxvZmZfdCBuZXdfc2l6ZSA9IGlvY2ItXHUwMDNla2lfcG9zO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkge1xuJiM0MztcdFx0XHRuZXdfc2l6ZSA9IG1heF90KGxvZmZfdCwgbmV3X3NpemUsXG4mIzQzO1x0XHRcdFx0XHQgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcbiYjNDM7XHRcdGVyciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4mIzQzO1x0XHRcdHJldCA9IGVycjtcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbiYjNDM7XHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKVxuJiM0MztcdFx0cmV0ID0gaGZzcGx1c19kaW9fd3JpdGVfaXRlcihpb2NiLCBpdGVyKTtcbiYjNDM7XHRlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaXRlcixcbiYjNDM7XHRcdFx0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4mIzQzO1x0XHRcdFx0XHRcdE5VTEwsIE5VTEwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3VubG9jazpcbiYjNDM7XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY193cml0ZV9zeW5jKGlvY2IsIHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzc2l6ZV90IHJldDtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcbiYjNDM7XHRcdGZpbGVfYWNjZXNzZWQoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBpdGVyLFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzLFxuJiM0MztcdFx0XHRcdCAgIE5VTEwsIDAsIE5VTEwsIDApO1xuJiM0MztcdH0gZWxzZVxuJiM0MztcdFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcbiYjNDM7XG4mIzQzO1x0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHdoZW5jZSkge1xuJiM0MztcdGNhc2UgU0VFS19IT0xFOlxuJiM0MztcdFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdFx0b2Zmc2V0ID0gaW9tYXBfc2Vla19ob2xlKGlub2RlLCBvZmZzZXQsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbiYjNDM7XHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTRUVLX0RBVEE6XG4mIzQzO1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIGdlbmVyaWNfZmlsZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvZmZzZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2ZnNfc2V0cG9zKGZpbGUsIG9mZnNldCwgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX21heGJ5dGVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiYjNDM7XHQubGxzZWVrXHRcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcbiYjNDM7XHQucmVhZF9pdGVyXHQ9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsXG4mIzQzO1x0LndyaXRlX2l0ZXJcdD0gaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIsXG4mIzQzO1x0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuJiM0MztcdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuJiM0MztcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiYjNDM7XHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4mIzQzO1x0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3BlbixcbiYjNDM7XHQucmVsZWFzZVx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcbiYjNDM7XHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbmluZGV4IGVjMDRiODJhZDkyNzguLjgxNjZhYmIyMjM5N2IgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcbkBAIC0xNzUsNiAmIzQzOzE3NSwyMiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKkhGU1BMVVNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdHJldHVybiBzYi1cdTAwM2VzX2ZzX2luZm87XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBQaHlzaWNhbCBieXRlIG9mZnNldCBvZiBhbGxvY2F0aW9uIGJsb2NrICYjMzk7ZGJsb2NrJiMzOTsgb24gdGhlIHZvbHVtZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgbG9mZl90IGhmc3BsdXNfYWJsb2NrX3RvX3BoeXNfYnl0ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4mIzQzO1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4mIzQzO1xuJiM0MztcdHBoeXNfYnl0ZXMgPSBkYmxvY2s7XG4mIzQzO1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbiYjNDM7XHRwaHlzX2J5dGVzICYjNDM7PSBzYmktXHUwMDNlYmxvY2tvZmZzZXQ7XG4mIzQzO1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlzX2J5dGVzO1xuJiM0Mzt9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzMCwxMiAmIzQzOzQ0NiwxOSBAQCBpbnQgaGZzcGx1c19yZW5hbWVfY2F0KHUzMiBjbmlkLCBzdHJ1Y3QgaW5vZGUgKnNyY19kaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpzcmNfblxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7XG4gXG4mIzQzOy8qIGZpbGUuYyAqL1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbiYjNDM7aW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuJiM0MztcdFx0ICAgICAgIGludCBkYXRhc3luYyk7XG4mIzQzO1xuIC8qIGV4dGVudHMuYyAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBcdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xuIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xuJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsXG4mIzQzO1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7XG4gaW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxuIFx0XHQgICAgICBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaywgaW50IHR5cGUpO1xuIGludCBoZnNwbHVzX2ZpbGVfZXh0ZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgemVyb291dCk7XG5AQCAtNDQzLDYgJiM0Mzs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zO1xuIFxuQEAgLTQ2Miw4ICYjNDM7NDg2LDYgQEAgaW50IGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0XHQgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLFxuIFx0XHQgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTtcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4tXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG4gaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5pbmRleCAxYzU3Yzg3M2YwNWQ2Li4wODczMWVjMGNlY2QzIDEwMDY0NFxuLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lub2RlLmNcbkBAIC0xOCwxNSAmIzQzOzE4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX2ZzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7eGF0dHIuaFwmIzM0O1xuLVxuLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLXtcbi1cdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbi19XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiBcbiBzdGF0aWMgdm9pZCBoZnNwbHVzX3dyaXRlX2ZhaWxlZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHRvKVxuIHtcbkBAIC0xMjAsNjcgJiM0MzsxMTcsMTMgQEAgc3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXG4gXHRyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTtcbiB9XG4gXG4tc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbi1cdHNzaXplX3QgcmV0O1xuLVxuLVx0Lypcbi1cdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXG4tXHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4tXHQgKi9cbi1cdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuLVx0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuLVx0XHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XG4tXG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbi1cdFx0ICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLlxuLVx0XHQgKi9cbi1cdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuLVxuLVx0XHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdHJldHVybiByZXQ7XG4tXG4tXHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuLVx0XHRlbmRfb2ZmID0gKGVuZCBcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xuLVxuLVx0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbi1cdFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVxuLVx0XHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XG4tXHR9XG4tXG4tXHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbi1cbi1cdC8qXG4tXHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcbi1cdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4tXHQgKi9cbi1cdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuLVx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbi1cbi1cdFx0aWYgKGVuZCBcdTAwM2UgaXNpemUpXG4tXHRcdFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcbi1cdH1cbi1cbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi1cdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIHtcbiBcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuIH1cbkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuIFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuLVx0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuJiM0MztcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbyxcbiYjNDM7XHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMsXG4gXHQud3JpdGVfYmVnaW5cdD0gaGZzcGx1c193cml0ZV9iZWdpbixcbiBcdC53cml0ZV9lbmRcdD0gZ2VuZXJpY193cml0ZV9lbmQsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbkBAIC0xOTcsMTggJiM0MzsxNDAsNzAgQEAgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XG4gXHQucmVsZWFzZV9mb2xpb1x0PSBoZnNwbHVzX3JlbGVhc2VfZm9saW8sXG4gfTtcbiBcbi1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzID0ge1xuIFx0LmRpcnR5X2ZvbGlvXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxuIFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxuLVx0LnJlYWRfZm9saW9cdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG4tXHQuZGlyZWN0X0lPXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuJiM0MztcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfc3ltbGlua193cml0ZXBhZ2VzLFxuIFx0Lm1pZ3JhdGVfZm9saW9cdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRpb21hcF9iaW9fcmVhZF9mb2xpbyhmb2xpbywgXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBoZnNwbHVzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhYylcbiYjNDM7e1xuJiM0MztcdGlvbWFwX2Jpb19yZWFkYWhlYWQocmFjLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHtcbiYjNDM7XHRcdC5pbm9kZVx0PSBtYXBwaW5nLVx1MDAzZWhvc3QsXG4mIzQzO1x0XHQud2JjXHQ9IHdiYyxcbiYjNDM7XHRcdC5vcHNcdD0gXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF93cml0ZXBhZ2VzKFx1MDAyNndwYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuJiM0MztcdC5yZWFkX2ZvbGlvXHRcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxuJiM0MztcdC5yZWFkYWhlYWRcdFx0PSBoZnNwbHVzX3JlYWRhaGVhZCxcbiYjNDM7XHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbiYjNDM7XHQuZGlydHlfZm9saW9cdFx0PSBpb21hcF9kaXJ0eV9mb2xpbyxcbiYjNDM7XHQuYm1hcFx0XHRcdD0gaGZzcGx1c19hb3BfYm1hcCxcbiYjNDM7XHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbiYjNDM7XHQuaXNfcGFydGlhbGx5X3VwdG9kYXRlXHQ9IGlvbWFwX2lzX3BhcnRpYWxseV91cHRvZGF0ZSxcbiYjNDM7XHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXHQ9IGdlbmVyaWNfZXJyb3JfcmVtb3ZlX2ZvbGlvLFxuJiM0MztcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbiYjNDM7XHQuaW52YWxpZGF0ZV9mb2xpb1x0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxuJiM0MztcdC5zd2FwX2FjdGl2YXRlXHRcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxuJiM0Mzt9O1xuJiM0MztcbiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHtcbiBcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxuIFx0LmRfY29tcGFyZSAgICA9IGhmc3BsdXNfY29tcGFyZV9kZW50cnksXG5AQCAtMjY4LDM1ICYjNDM7MjYzLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIC1FSU87XG4gfVxuIFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4tXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuLVx0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4te1xuLVx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVx1MDAzZWlfc2I7XG4tXG4tXHRpZiAoSEZTUExVU19JU19SU1JDKGlub2RlKSlcbi1cdFx0aW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXJzcmNfaW5vZGU7XG4tXHRpZiAoYXRvbWljX2RlY19hbmRfdGVzdChcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpKSB7XG4tXHRcdGlub2RlX2xvY2soaW5vZGUpO1xuLVx0XHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xuLVx0XHRpZiAoaW5vZGUtXHUwMDNlaV9mbGFncyBcdTAwMjYgU19ERUFEKSB7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVx1MDAzZWlfaW5vLFxuLVx0XHRcdFx0XHQgICBIRlNQTFVTX1NCKHNiKS1cdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcbi1cdFx0XHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XG4tXHRcdH1cbi1cdFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cilcbiB7XG5AQCAtMzExLDEwICYjNDM7Mjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRcdGxvZmZfdCBvbGRfc2l6ZSA9IGlub2RlLVx1MDAzZWlfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiYjNDM7XHRcdFx0ZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBhdHRyLVx1MDAzZWlhX3NpemUpO1xuJiM0MztcdFx0XHRpZiAoZXJyb3IpIHtcbiYjNDM7XHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiBcdFx0XHRcdHJldHVybiBlcnJvcjtcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHRcdHRydW5jYXRlX3NldHNpemUoaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4gXHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG5AQCAtMzUzLDg2ICYjNDM7MzIzLDYgQEAgaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKVxuLXtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuLVx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyID0gc2JpLVx1MDAzZXNfdmhkcjtcbi1cdGludCBlcnJvciA9IDAsIGVycm9yMjtcbi1cbi1cdGhmc19kYmcoXCYjMzQ7aW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cJiMzNDssXG4tXHRcdGlub2RlLVx1MDAzZWlfaW5vLCBzdGFydCwgZW5kKTtcbi1cbi1cdGVycm9yID0gZmlsZV93cml0ZV9hbmRfd2FpdF9yYW5nZShmaWxlLCBzdGFydCwgZW5kKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0cmV0dXJuIGVycm9yO1xuLVx0aW5vZGVfbG9jayhpbm9kZSk7XG4tXG4tXHQvKlxuLVx0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXG4tXHQgKi9cbi1cdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuLVxuLVx0Lypcbi1cdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuLVx0ICovXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHR9XG4tXG4tXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4tXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPVxuLVx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuLVx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuLVx0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdFx0ZXJyb3IyID1cbi1cdFx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXG4tXHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRcdGVycm9yID0gZXJyb3IyO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpKVxuLVx0XHRcdHByX2VycihcJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXG5cJiMzNDspO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXG4tXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXG4tXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuLVx0XHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVxuLVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuIFx0LmdldGF0dHJcdD0gaGZzcGx1c19nZXRhdHRyLFxuQEAgLTQ1NCwxOSAmIzQzOzM0NCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbiBcdC5saXN0eGF0dHJcdD0gaGZzcGx1c19saXN0eGF0dHIsXG4gfTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbi1cdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuLVx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuLVx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4tXHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4tXHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbi1cdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbi1cdC5mc3luY1x0XHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcbi1cdC5vcGVuXHRcdD0gaGZzcGx1c19maWxlX29wZW4sXG4tXHQucmVsZWFzZVx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcbi1cdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXG4tfTtcbi1cbiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIHtcbkBAIC01MTMsNyAmIzQzOzM5MCw3IEBAIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdHNiaS1cdTAwM2VmaWxlX2NvdW50JiM0MzsmIzQzOztcbiBcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuLVx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4mIzQzO1x0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBcdFx0aGlwLVx1MDAzZWNsdW1wX2Jsb2NrcyA9IDE7XG4gXHR9IGVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbiBcdFx0ICAgU19JU0ZJRk8oaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTU09DSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG5AQCAtNjU0LDcgJiM0Mzs1MzEsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuJiM0MztcdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdFx0aW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS1cdTAwM2VpX21vZGUsXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5jIGIvZnMvaGZzcGx1cy9pb21hcC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWU2ZGZhNjkzNTI2ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5jXG5AQCAtMCwwICYjNDM7MSwxODkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogaW9tYXAgY2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2hmc3BsdXNfZnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtoZnNwbHVzX3Jhdy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2lvbWFwLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0IGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGlvbWFwICppb21hcCwgYm9vbCBtYXlfYWxsb2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHUzMiBhYmxvY2ssIGRibG9jaywgbWF4X2Jsb2NrcztcbiYjNDM7XHRsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzO1xuJiM0MztcdGxvZmZfdCBibG9ja19zdGFydDtcbiYjNDM7XHRib29sIGlzX25ldztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoIW1heV9hbGxvYykge1xuJiM0MztcdFx0LyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovXG4mIzQzO1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VhZGRyID0gSU9NQVBfTlVMTF9BRERSO1xuJiM0MztcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4mIzQzO1x0XHRcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogQ2xhbXAgbGVuZ3RoIGlmIHRoZSByZXF1ZXN0ZWQgcmFuZ2UgZ29lcyBiZXlvbmQgaV9zaXplICovXG4mIzQzO1x0XHRpZiAob2Zmc2V0ICYjNDM7IGxlbmd0aCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdFx0XHRsZW5ndGggPSByb3VuZF91cChpX3NpemUsIGJsb2Nrc2l6ZSkgLSBvZmZzZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhYmxvY2sgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgXHUwMDI2ZGJsb2NrLFxuJiM0MztcdFx0XHRcdCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0YWJsb2NrX29mZnNldCA9IG9mZnNldCBcdTAwMjYgKHNiaS1cdTAwM2VhbGxvY19ibGtzeiAtIDEpO1xuJiM0MztcdGFibG9ja19ieXRlcyA9IChsb2ZmX3QpbWF4X2Jsb2NrcyBcdTAwM2NcdTAwM2Mgc2JpLVx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xuJiM0MztcbiYjNDM7XHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgYWJsb2NrX2J5dGVzIC0gYWJsb2NrX29mZnNldCk7XG4mIzQzO1x0YmxvY2tfc3RhcnQgPSByb3VuZF9kb3duKG9mZnNldCwgaV9ibG9ja3NpemUoaW5vZGUpKTtcbiYjNDM7XHRpc19uZXcgPSBtYXlfYWxsb2MgXHUwMDI2XHUwMDI2IGJsb2NrX3N0YXJ0IFx1MDAzZT0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbiYjNDM7XHRpZiAobWF5X2FsbG9jIFx1MDAyNlx1MDAyNiAhaXNfbmV3IFx1MDAyNlx1MDAyNiBvZmZzZXQgXHUwMDNjIGhpcC1cdTAwM2VwaHlzX3NpemUpXG4mIzQzO1x0XHRsZW5ndGggPSBtaW5fdChsb2ZmX3QsIGxlbmd0aCwgaGlwLVx1MDAzZXBoeXNfc2l6ZSAtIG9mZnNldCk7XG4mIzQzO1xuJiM0MztcdGlvbWFwLVx1MDAzZWJkZXYgPSBzYi1cdTAwM2VzX2JkZXY7XG4mIzQzO1x0aW9tYXAtXHUwMDNlb2Zmc2V0ID0gb2Zmc2V0O1xuJiM0MztcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbiYjNDM7XHRpb21hcC1cdTAwM2VhZGRyID0gaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzYiwgZGJsb2NrKSAmIzQzOyBhYmxvY2tfb2Zmc2V0O1xuJiM0MztcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4mIzQzO1x0aW9tYXAtXHUwMDNlZmxhZ3MgPSBJT01BUF9GX01FUkdFRDtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX25ldylcbiYjNDM7XHRcdGlvbWFwLVx1MDAzZWZsYWdzIHw9IElPTUFQX0ZfTkVXO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSxcbiYjNDM7XHRcdFx0XHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgIGlvbWFwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuJiM0MztcdFx0XHRcdCAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGlvbWFwICppb21hcCwgc3RydWN0IGlvbWFwICpzcmNtYXApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuJiM0MztcdFx0XHRcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgaW9tYXAsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0ge1xuJiM0MztcdC5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpXG4mIzQzOyAqXG4mIzQzOyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFya1xuJiM0MzsgKiAoaGlwLVx1MDAzZXBoeXNfc2l6ZSAvIGhpcC1cdTAwM2Vmc19ibG9ja3MpIHRvIGNvdmVyIHRoZSBuZXdseSB3cml0dGVuIHJhbmdlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLFxuJiM0MztcdFx0XHRcdCAgIGxvZmZfdCBsZW5ndGgsIHNzaXplX3Qgd3JpdHRlbixcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuJiM0MztcdGxvZmZfdCBlbmQ7XG4mIzQzO1x0Ym9vbCBkaXJ0aWVkID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICghd3JpdHRlbilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRlbmQgPSByb3VuZF91cChwb3MgJiM0Mzsgd3JpdHRlbiwgc2ItXHUwMDNlc19ibG9ja3NpemUpO1xuJiM0MztcbiYjNDM7XHRpZiAoaGlwLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2MgZW5kKSB7XG4mIzQzO1x0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC1cdTAwM2VwaHlzX3NpemUpO1xuJiM0MztcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcbiYjNDM7XHRcdGhpcC1cdTAwM2Vmc19ibG9ja3MgPSBlbmQgXHUwMDNlXHUwMDNlIHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4mIzQzO1x0XHRkaXJ0aWVkID0gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChkaXJ0aWVkKVxuJiM0MztcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB3cml0dGVuO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzID0ge1xuJiM0MztcdC5pb21hcF9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxuJiM0MztcdC5pb21hcF9lbmRcdD0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKClcbiYjNDM7ICpcbiYjNDM7ICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJiMzOTtzaXplJiMzOTsuXG4mIzQzOyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuXG4mIzQzOyAqL1xuJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4mIzQzO1x0bG9mZl90IHN0YXJ0ID0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgXHUwMDNjPSBzdGFydClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgc3RhcnQsIHNpemUgLSBzdGFydCwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFja1xuJiM0MzsgKlxuJiM0MzsgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGVcbiYjNDM7ICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGlmIChvZmZzZXQgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbiYjNDM7XHQgICAgb2Zmc2V0IFx1MDAzZT0gd3BjLVx1MDAzZWlvbWFwLm9mZnNldCAmIzQzOyB3cGMtXHUwMDNlaW9tYXAubGVuZ3RoKSB7XG4mIzQzO1x0XHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLFxuJiM0MztcdFx0XHRcdFx0ICAgIG9mZnNldCwgbGVuLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgIFx1MDAyNndwYy1cdTAwM2Vpb21hcCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycilcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBpb21hcF9hZGRfdG9faW9lbmQod3BjLCBmb2xpbywgb2Zmc2V0LCBlbmRfcG9zLCBsZW4pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHMgPSB7XG4mIzQzO1x0LndyaXRlYmFja19yYW5nZVx0PSBoZnNwbHVzX3dyaXRlYmFja19yYW5nZSxcbiYjNDM7XHQud3JpdGViYWNrX3N1Ym1pdFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuJiM0MztcdC5lbmRfaW9cdFx0PSBpb21hcF9kaW9fZW5kX2lvLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaW9tYXBfc3dhcGZpbGVfYWN0aXZhdGUoc2lzLCBmaWxlLCBzcGFuLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmggYi9mcy9oZnNwbHVzL2lvbWFwLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lvbWFwLmhcbkBAIC0wLDAgJiM0MzsxLDE4IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuJiM0MzsjZGVmaW5lIF9MSU5VWF9IRlNQTFVTX0lPTUFQX0hcbiYjNDM7XG4mIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcztcbiYjNDM7XG4mIzQzO2ludCBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTtcbiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xuaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9zdXBlci5jXG5AQCAtNTcxLDYgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRcdGdvdG8gb3V0X2Nsb3NlX2F0dHJfdHJlZTtcbiBcdH1cbiBcdHNiaS1cdTAwM2VhbGxvY19maWxlID0gaW5vZGU7XG4mIzQzO1x0bWFwcGluZ19zZXRfc3RhYmxlX3dyaXRlcyhpbm9kZS1cdTAwM2VpX21hcHBpbmcpO1xuIFxuIFx0LyogTG9hZCB0aGUgcm9vdCBkaXJlY3RvcnkgKi9cbiBcdHJvb3QgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfUk9PVF9DTklEKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5pbmRleCA0NWZiNGM5ZmY5ZjVlLi4xNDE3ZTE5ZDk0YmNlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG5AQCAtMTcxLDE4ICYjNDM7MTcxLDIyIEBAIGVudW0ge1xuIFx0SEZTX1hBVFRSX05BTUUsXG4gfTtcbiBcbiYjNDM7I2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcdCgzKVxuJiM0MztcbiBzdHJ1Y3QgaGZzX2V4dGVudCB7XG4gXHRfX2JlMTYgYmxvY2s7XG4gXHRfX2JlMTYgY291bnQ7XG4gfTtcbi10eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjWzNdO1xuJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlRcdCg4KVxuIFxuIC8qIEEgc2luZ2xlIGNvbnRpZ3VvdXMgYXJlYSBvZiBhIGZpbGUgKi9cbiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQge1xuIFx0X19iZTMyIHN0YXJ0X2Jsb2NrO1xuIFx0X19iZTMyIGJsb2NrX2NvdW50O1xuIH0gX19wYWNrZWQ7XG4tdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdO1xuJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XG4gXG4gLyogSW5mb3JtYXRpb24gZm9yIGEgXCYjMzQ7Rm9ya1wmIzM0OyBpbiBhIGZpbGUgKi9cbiBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5pbmRleCA1NmI0M2Q1OTRlNmUyLi41MGZlNjAzNmIwMWFjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pb21hcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcbkBAIC01NjAsNiAmIzQzOzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XG4gXHRzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBEaXJlY3QgSS9PIGNvbXBsZXRpb24gaGFuZGxlclxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZVxuJiM0MztpbnQgaW9tYXBfZGlvX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbiYjNDM7XHRcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcbiYjNDM7XHRpZiAoZXJyb3IpXG4mIzQzO1x0XHRyZXR1cm4gZXJyb3I7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNjIGlvY2ItXHUwMDNla2lfcG9zICYjNDM7IHNpemUpIHtcbiYjNDM7XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgJiM0Mzsgc2l6ZSk7XG4mIzQzO1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogV2FpdCBmb3IgdGhlIEkvTyB0byBjb21wbGV0ZSBpbiBpb21hcF9kaW9fcncgZXZlbiBpZiB0aGUga2lvY2IgaXMgbm90XG4gICogc3luY2hyb25vdXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19tYXBfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZ2V0X2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PLCByZXBsYWNpbmcgdGhlIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXIgaGVhZCBiYXNlZCBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaW9tYXAgb3BlcmF0aW9ucyBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIHNlZWtpbmcsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGU1MTA0NWMwMDU0MzNhN2NkYTUwYWE2ZDBjZTA5OWUzMWYxNWQ3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9LY29uZmlnIGIvZnMvaGZzcGx1cy9LY29uZmlnCmluZGV4IGNhODQwMWNiNjk1NGQuLmI0NDMyYzY0ZGIzYmUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWcKQEAgLTUsNyAmIzQzOzUsNyBAQCBjb25maWcgSEZTUExVU19GUwogCXNlbGVjdCBCVUZGRVJfSEVBRAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgTkxTX1VURjgKLQlzZWxlY3QgTEVHQUNZX0RJUkVDVF9JTwomIzQzOwlzZWxlY3QgRlNfSU9NQVAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXQKIAkgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlCmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9NYWtlZmlsZQpAQCAtNSw4ICYjNDM7NSw5IEBACiAKIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSAmIzQzOz0gaGZzcGx1cy5vCiAKLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFwKLQkJYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXAomIzQzO2hmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGZpbGUubyBpb21hcC5vIGlvY3RsLm8gZXh0ZW50cy5vIFwKJiM0MzsJCWNhdGFsb2cubyBkaXIubyBidHJlZS5vIGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gXAomIzQzOwkJdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFwKIAkJYXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vCiAKICMgS1VuaXQgdGVzdHMKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jCmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuYwpAQCAtMzksNiAmIzQzOzM5LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCXN0YXJ0ID0gc2l6ZTsKIAkJZ290byBvdXQ7CiAJfQomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJaSA9IG9mZnNldCAlIDMyOwpAQCAtNzUsNiAmIzQzOzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQljdXJyJiM0MzsmIzQzOzsKIAkJfQogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJb2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7CiAJCWlmIChvZmZzZXQgJmd0Oz0gc2l6ZSkKIAkJCWJyZWFrOwpAQCAtODQsNiAmIzQzOzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQlzdGFydCA9IHNpemU7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJZm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7CiAJCWN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQlpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKQogCQkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTk4LDYgJiM0MzsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAlzdGFydCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaTsKIAlpZiAoc3RhcnQgJmd0Oz0gc2l6ZSkgewogCQloZnNfZGJnKCYjMzQ7Yml0bWFwIGZ1bGxcbiYjMzQ7KTsKJiM0MzsJCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJCXVubG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJc3RhcnQgPSBzaXplOwogCQlnb3RvIG91dDsKIAl9CiAJLyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqLwpAQCAtMTI4LDYgJiM0MzsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkJfQogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCW9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTOwogCQlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLAogCQkJCQkgTlVMTCk7CkBAIC0xMzUsNiAmIzQzOzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLAogCQkJc3RhcnQgPSBzaXplOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsJCWxvY2tfcGFnZShwYWdlKTsKJiM0MzsJCWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCQlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0cjsKIAkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTE1Miw2ICYjNDM7MTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJKmN1cnIgPSBjcHVfdG9fYmUzMihuKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CXVubG9ja19wYWdlKHBhZ2UpOwogCSptYXggPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGkgLSBzdGFydDsKIAlzYmktJmd0O2ZyZWVfYmxvY2tzIC09ICptYXg7CiAJaGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7CkBAIC0xODUsNiAmIzQzOzE5Nyw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpOwogCWlmIChJU19FUlIocGFnZSkpCiAJCWdvdG8ga2Fib29tOwomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTIxNiw5ICYjNDM7MjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCQkJYnJlYWs7CiAJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICYjNDM7JiM0MztwbnIsIE5VTEwpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKQogCQkJZ290byBrYWJvb207CiYjNDM7CQlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CQlmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTsKIAkJcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKIAkJY3VyciA9IHBwdHI7CiAJCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0yMzIsNiAmIzQzOzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogb3V0OgogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJdW5sb2NrX3BhZ2UocGFnZSk7CiAJc2JpLSZndDtmcmVlX2Jsb2NrcyAmIzQzOz0gbGVuOwogCWhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpOwogCW11dGV4X3VubG9jaygmYW1wO3NiaS0mZ3Q7YWxsb2NfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwppbmRleCA4MTNlNjhiOGVjZDY1Li44ZjdmNTYwY2VjNjQyIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX3Jhdy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmgmIzM0OwogCiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovCiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsCkBAIC00OCwxOCAmIzQzOzQ5LDI5IEBAIHN0YXRpYyB2b2lkIGhmc3BsdXNfZXh0X2J1aWxkX2tleShoZnNwbHVzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCwKIAlrZXktJmd0O2V4dC5wYWQgPSAwOwogfQogCi1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYpCiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKCkgLSBmaW5kIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYmxvY2sKJiM0MzsgKgomIzQzOyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJiMzOTtvZmYmIzM5OyB3aXRoaW4gYW4gOC1lbnRyeQomIzQzOyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZiwKJiM0MzsJCQkJIHUzMiAqZGJsb2NrKQogewogCWludCBpOwogCXUzMiBjb3VudDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKIAkJY291bnQgPSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKLQkJaWYgKG9mZiAmbHQ7IGNvdW50KQotCQkJcmV0dXJuIGJlMzJfdG9fY3B1KGV4dC0mZ3Q7c3RhcnRfYmxvY2spICYjNDM7IG9mZjsKJiM0MzsJCWlmIChvZmYgJmx0OyBjb3VudCkgewomIzQzOwkJCSpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtJmd0O3N0YXJ0X2Jsb2NrKSAmIzQzOyBvZmY7CiYjNDM7CQkJcmV0dXJuIGNvdW50IC0gb2ZmOwomIzQzOwkJfQogCQlvZmYgLT0gY291bnQ7CiAJfQogCS8qIHBhbmljPyAqLwomIzQzOwkqZGJsb2NrID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjgsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9ibG9ja19jb3VudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCkKIAlpbnQgaTsKIAl1MzIgY291bnQgPSAwOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IDg7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspCiAJCWNvdW50ICYjNDM7PSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yMjMsMzcgJiM0MzsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spCiAJcmV0dXJuIHJlczsKIH0KIAotLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi8KLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCi0JCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKgomIzQzOyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICYjMzk7YWJsb2NrJiMzOTsgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlCiYjNDM7ICogZmlsZSAodmlhIGhmc3BsdXNfZmlsZV9leHRlbmQoKSwgaW4gY2x1bXBfYmxvY2tzLXNpemVkIGNodW5rcykgd2hlbgomIzQzOyAqICYjMzk7Y3JlYXRlJiMzOTsgaXMgc2V0IGFuZCAmIzM5O2FibG9jayYjMzk7IGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAmIzM5O2FibG9jayYjMzk7LAomIzQzOyAqIGFuZCAqbWF4X2Jsb2NrcyBpcyB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MgdGhhdCBhcmUKJiM0MzsgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeQomIzQzOyAqIHRoYXQgY29udGFpbnMgJiMzOTthYmxvY2smIzM5OyksIHdoaWNoIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIHdob2xlIGZpbGUmIzM5O3MKJiM0MzsgKiByZW1haW5pbmcgYWxsb2NhdGlvbiB3aGVuIHRoZSBmb3JrIGlzIGZyYWdtZW50ZWQgYWNyb3NzIHNldmVyYWwKJiM0MzsgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGUKJiM0MzsgKiByZXF1ZXN0LCAqYmFsbG9jICh3aGVuIG5vbi1OVUxMKSBpcyBzZXQgdG8gdHJ1ZS4KJiM0MzsgKi8KJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsCiYjNDM7CQkJdTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKIAlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCWludCByZXMgPSAtRUlPOwotCXUzMiBhYmxvY2ssIGRibG9jaywgbWFzazsKLQlzZWN0b3JfdCBzZWN0b3I7Ci0JaW50IHdhc19kaXJ0eSA9IDA7CiYjNDM7CWludCB3YXNfZGlydHk7CiYjNDM7CWludCByZXM7CiAKLQkvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqLwotCWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlpZiAoYmFsbG9jKQomIzQzOwkJKmJhbGxvYyA9IGZhbHNlOwogCi0JaWYgKGlibG9jayAmZ3Q7PSBoaXAtJmd0O2ZzX2Jsb2NrcykgewomIzQzOwlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7CiAJCWlmICghY3JlYXRlKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKIAkJCXJldHVybiAtRUlPOwotCQlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7Ci0JCQlyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7Ci0JCQlpZiAocmVzKQotCQkJCXJldHVybiByZXM7Ci0JCX0KLQl9IGVsc2UKLQkJY3JlYXRlID0gMDsKJiM0MzsJCXJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCWlmIChiYWxsb2MpCiYjNDM7CQkJKmJhbGxvYyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChhYmxvY2sgJmx0OyBoaXAtJmd0O2ZpcnN0X2Jsb2NrcykgewotCQlkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywgYWJsb2NrKTsKLQkJZ290byBkb25lOwomIzQzOwkJKm1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywKJiM0MzsJCQkJCQkgICAgIGFibG9jaywKJiM0MzsJCQkJCQkgICAgIGRibG9jayk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IEhGU1BMVVNfRVhUX0NOSUQpCkBAIC0yNzIsMTEgJiM0MzsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7aGlwLSZndDtleHRlbnRzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAotCQkJCQlhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCk7CiYjNDM7CSptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAomIzQzOwkJCQkJICAgICBhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCwKJiM0MzsJCQkJCSAgICAgZGJsb2NrKTsKIAltdXRleF91bmxvY2soJmFtcDtoaXAtJmd0O2V4dGVudHNfbG9jayk7CiAKLWRvbmU6CiYjNDM7CWlmICh3YXNfZGlydHkpCiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovCiYjNDM7aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKJiM0MzsJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXNrLCBtYXhfYmxvY2tzOwomIzQzOwlzZWN0b3JfdCBzZWN0b3I7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovCiYjNDM7CWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwomIzQzOwlpZiAoaWJsb2NrICZndDs9IGhpcC0mZ3Q7ZnNfYmxvY2tzKSB7CiYjNDM7CQlpZiAoIWNyZWF0ZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsJfSBlbHNlCiYjNDM7CQljcmVhdGUgPSAwOwomIzQzOwomIzQzOwlyZXMgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgY3JlYXRlLCAmYW1wO2RibG9jaywgJmFtcDttYXhfYmxvY2tzLAomIzQzOwkJCQkgIE5VTEwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKIAloZnNfZGJnKCYjMzQ7aW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XG4mIzM0OywKIAkJaW5vZGUtJmd0O2lfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTsKIApAQCAtMjkwLDkgJiM0MzszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQloaXAtJmd0O3BoeXNfc2l6ZSAmIzQzOz0gc2ItJmd0O3NfYmxvY2tzaXplOwogCQloaXAtJmd0O2ZzX2Jsb2NrcyYjNDM7JiM0Mzs7CiAJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItJmd0O3NfYmxvY2tzaXplKTsKLQl9Ci0JaWYgKGNyZWF0ZSB8fCB3YXNfZGlydHkpCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1MywyMCAmIzQzOzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlpbm9kZS0mZ3Q7aV9pbm8sIChsb25nIGxvbmcpaGlwLSZndDtwaHlzX3NpemUsIGlub2RlLSZndDtpX3NpemUpOwogCiAJaWYgKGlub2RlLSZndDtpX3NpemUgJmd0OyBoaXAtJmd0O3BoeXNfc2l6ZSkgewotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXZvaWQgKmZzZGF0YSA9IE5VTEw7Ci0JCWxvZmZfdCBzaXplID0gaW5vZGUtJmd0O2lfc2l6ZTsKJiM0MzsJCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJcmVzID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJCQl2b2lkICpmc2RhdGEgPSBOVUxMOwomIzQzOwomIzQzOwkJCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywKJiM0MzsJCQkJCQkgIGlub2RlLSZndDtpX3NpemUsIDAsCiYjNDM7CQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsCiYjNDM7CQkJCQkJaW5vZGUtJmd0O2lfc2l6ZSwgMCwgMCwKJiM0MzsJCQkJCQlmb2xpbywgZnNkYXRhKTsKJiM0MzsJCQlpZiAocmVzICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQogCi0JCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwKLQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm47Ci0JCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsCi0JCQkJCWZvbGlvLCBmc2RhdGEpOwotCQlpZiAocmVzICZsdDsgMCkKLQkJCXJldHVybjsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKGlub2RlLSZndDtpX3NpemUgPT0gaGlwLSZndDtwaHlzX3NpemUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZmlsZS5jIGIvZnMvaGZzcGx1cy9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODI2Nzg0ODhmYjA1NAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jCkBAIC0wLDAgJiM0MzsxLDMwNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQomIzQzOwkJaW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLSZndDtyc3JjX2lub2RlOwomIzQzOwlpZiAoIShmaWxlLSZndDtmX2ZsYWdzICZhbXA7IE9fTEFSR0VGSUxFKSAmYW1wOyZhbXA7IGlfc2l6ZV9yZWFkKGlub2RlKSAmZ3Q7IE1BWF9OT05fTEZTKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KTsKJiM0MzsJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsKJiM0MzsJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiYjNDM7CQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7SEZTUExVU19JKGlub2RlKS0mZ3Q7b3BlbmNudCkpIHsKJiM0MzsJCWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKJiM0MzsJCWlmIChpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOyBTX0RFQUQpIHsKJiM0MzsJCQloZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtJmd0O2lfaW5vLAomIzQzOwkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwomIzQzOwkJCWhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCX0KJiM0MzsJCWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKJiM0MzsJCSAgICAgICBpbnQgZGF0YXN5bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwomIzQzOwlpbnQgZXJyb3IgPSAwLCBlcnJvcjI7CiYjNDM7CiYjNDM7CWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAomIzQzOwkJaW5vZGUtJmd0O2lfaW5vLCBzdGFydCwgZW5kKTsKJiM0MzsKJiM0MzsJZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLgomIzQzOwkgKi8KJiM0MzsJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAomIzQzOwkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKJiM0MzsJCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0KJiM0MzsJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7ZXh0X3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJaWYgKCFlcnJvcikKJiM0MzsJCQllcnJvciA9IGVycm9yMjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKJiM0MzsJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWVycm9yMiA9CiYjNDM7CQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoCiYjNDM7CQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJCWlmICghZXJyb3IpCiYjNDM7CQkJCWVycm9yID0gZXJyb3IyOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKSkKJiM0MzsJCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koc2JpLSZndDthbGxvY19maWxlKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQlpZiAoIWVycm9yKQomIzQzOwkJCWVycm9yID0gZXJyb3IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKJiM0MzsJaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7CiYjNDM7CiYjNDM7CWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsICZhbXA7c2JpLSZndDtmbGFncykpCiYjNDM7CQlibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGUKJiM0MzsgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseQomIzQzOyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb24KJiM0MzsgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQkJc3RydWN0IGlvdl9pdGVyICpmcm9tKQomIzQzO3sKJiM0MzsJbG9mZl90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcywgZW5kOwomIzQzOwlzc2l6ZV90IHdyaXR0ZW47CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sCiYjNDM7CQkJCQkgICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkJCSAgICBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CiYjNDM7CWVuZCA9IGlvY2ItJmd0O2tpX3BvcyAmIzQzOyB3cml0dGVuIC0gMTsKJiM0MzsJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmcsCiYjNDM7CQkJCQkgICBvZmZzZXQsIGVuZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZywKJiM0MzsJCQkJIG9mZnNldCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQkgZW5kICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQlzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sCiYjNDM7CQkJICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkgICAmYW1wO2hmc3BsdXNfd3JpdGVfZGlvX29wcywKJiM0MzsJCQkgICAwLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7CiYjNDM7CWVsc2UgaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHsKJiM0MzsJCXNzaXplX3Qgd3JpdHRlbjsKJiM0MzsKJiM0MzsJCXdyaXR0ZW4gPSBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20pOwomIzQzOwkJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJCXJldHVybiB3cml0dGVuOwomIzQzOwkJcmV0ICYjNDM7PSB3cml0dGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlsb2ZmX3QgdG90YWxfY2FwYWNpdHk7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgaXRlcik7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwl0b3RhbF9jYXBhY2l0eSA9IChsb2ZmX3Qpc2JpLSZndDt0b3RhbF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7PSB0b3RhbF9jYXBhY2l0eSkgewomIzQzOwkJcmV0ID0gLUVGQklHOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkgewomIzQzOwkJbG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwkJbG9mZl90IG5ld19zaXplID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKSB7CiYjNDM7CQkJbmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLAomIzQzOwkJCQkJICBIRlNQTFVTX0koaW5vZGUpLSZndDtwaHlzX3NpemUpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBuZXdfc2l6ZSk7CiYjNDM7CQllcnIgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpb2NiLSZndDtraV9wb3MpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpOwomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9IGVsc2UgaWYgKChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkgJmFtcDsmYW1wOwomIzQzOwkJICAgSEZTUExVU19JKGlub2RlKS0mZ3Q7cGh5c19zaXplICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQlpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktJmd0O3BoeXNfc2l6ZSk7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpCiYjNDM7CQlyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpOwomIzQzOwllbHNlIHsKJiM0MzsJCXJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaXRlciwKJiM0MzsJCQkJCQkmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCQkJCU5VTEwsIE5VTEwpOwomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwlpbm9kZV91bmxvY2soaW5vZGUpOwomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCkKJiM0MzsJCXJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpIHsKJiM0MzsJCWZpbGVfYWNjZXNzZWQoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwKJiM0MzsJCQkJICAgJmFtcDtoZnNwbHVzX2lvbWFwX29wcywKJiM0MzsJCQkJICAgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CX0gZWxzZQomIzQzOwkJcmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTsKJiM0MzsKJiM0MzsJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CiYjNDM7CXN3aXRjaCAod2hlbmNlKSB7CiYjNDM7CWNhc2UgU0VFS19IT0xFOgomIzQzOwkJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwkJb2Zmc2V0ID0gaW9tYXBfc2Vla19ob2xlKGlub2RlLCBvZmZzZXQsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzOwkJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTRUVLX0RBVEE6CiYjNDM7CQlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgJmFtcDtoZnNwbHVzX2lvbWFwX29wcyk7CiYjNDM7CQlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGdlbmVyaWNfZmlsZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19tYXhieXRlcyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7CiYjNDM7CS5sbHNlZWsJCT0gaGZzcGx1c19maWxlX2xsc2VlaywKJiM0MzsJLnJlYWRfaXRlcgk9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsCiYjNDM7CS53cml0ZV9pdGVyCT0gaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKJiM0MzsJLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKJiM0MzsJLm9wZW4JCT0gaGZzcGx1c19maWxlX29wZW4sCiYjNDM7CS5yZWxlYXNlCT0gaGZzcGx1c19maWxlX3JlbGVhc2UsCiYjNDM7CS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTE3NSw2ICYjNDM7MTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXJldHVybiBzYi0mZ3Q7c19mc19pbmZvOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQaHlzaWNhbCBieXRlIG9mZnNldCBvZiBhbGxvY2F0aW9uIGJsb2NrICYjMzk7ZGJsb2NrJiMzOTsgb24gdGhlIHZvbHVtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCQkJICB1MzIgZGJsb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiYjNDM7CWxvZmZfdCBwaHlzX2J5dGVzOwomIzQzOwomIzQzOwlwaHlzX2J5dGVzID0gZGJsb2NrOwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlwaHlzX2J5dGVzICYjNDM7PSBzYmktJmd0O2Jsb2Nrb2Zmc2V0OwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeXNfYnl0ZXM7CiYjNDM7fQogCiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHsKIAlhdG9taWNfdCBvcGVuY250OwpAQCAtNDMwLDEyICYjNDM7NDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7CiAKJiM0MzsvKiBmaWxlLmMgKi8KJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MztpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiYjNDM7CQkgICAgICAgaW50IGRhdGFzeW5jKTsKJiM0MzsKIC8qIGV4dGVudHMuYyAqLwogaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLAogCQkJY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsyKTsKIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLAomIzQzOwkJCXUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7CiBpbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsCiAJCSAgICAgIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSk7CiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpOwpAQCAtNDQzLDYgJiM0Mzs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC00NjIsOCAmIzQzOzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCQkgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLAogCQkgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTsKLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKLQkJICAgICAgIGludCBkYXRhc3luYyk7CiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCAxYzU3Yzg3M2YwNWQ2Li4wODczMWVjMGNlY2QzIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xOCwxNSAmIzQzOzE4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwotCi1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKLXsKLQlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7Ci19CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKIAogc3RhdGljIHZvaWQgaGZzcGx1c193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bykKIHsKQEAgLTEyMCw2NyAmIzQzOzExNywxMyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaykKIAlyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTsKIH0KIAotc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCWxvZmZfdCBpc2l6ZTsKLQlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKLQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwotCXNzaXplX3QgcmV0OwotCi0JLyoKLQkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgotCSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KLQkgKi8KLQlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKLQkJbG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlOwotCi0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCS8qCi0JCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQotCQkgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuCi0JCSAqLwotCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7Ci0KLQkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X29mZiA9IGlzaXplOwotCQllbmRfb2ZmID0gKGVuZCAmZ3Q7IDApID8gZW5kIC0gMSA6IGVuZDsKLQotCQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KLQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpOwotCX0KLQotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKLQkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgotCSAqLwotCWlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IHJldCAmbHQ7IDApKSB7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCWlmIChlbmQgJmd0OyBpc2l6ZSkKLQkJCWhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiB9CkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbywKJiM0MzsJLndyaXRlcGFnZXMJPSBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMsCiAJLndyaXRlX2JlZ2luCT0gaGZzcGx1c193cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kCT0gZ2VuZXJpY193cml0ZV9lbmQsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKQEAgLTE5NywxOCAmIzQzOzE0MCw3MCBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHsKIAkucmVsZWFzZV9mb2xpbwk9IGhmc3BsdXNfcmVsZWFzZV9mb2xpbywKIH07CiAKLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0gewomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLAogCS53cml0ZV9iZWdpbgk9IGhmc3BsdXNfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZAk9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5ibWFwCQk9IGhmc3BsdXNfYm1hcCwKLQkuZGlyZWN0X0lPCT0gaGZzcGx1c19kaXJlY3RfSU8sCi0JLndyaXRlcGFnZXMJPSBoZnNwbHVzX3dyaXRlcGFnZXMsCiYjNDM7CS53cml0ZXBhZ2VzCT0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIH07CiAKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhmc3BsdXNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZQk9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjCT0gd2JjLAomIzQzOwkJLm9wcwk9ICZhbXA7aGZzcGx1c193cml0ZWJhY2tfb3BzLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7CS5yZWFkX2ZvbGlvCQk9IGhmc3BsdXNfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZAkJPSBoZnNwbHVzX3JlYWRhaGVhZCwKJiM0MzsJLndyaXRlcGFnZXMJCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5ibWFwCQkJPSBoZnNwbHVzX2FvcF9ibWFwLAomIzQzOwkubWlncmF0ZV9mb2xpbwkJPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUJPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8JPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0MzsJLnJlbGVhc2VfZm9saW8JCT0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuc3dhcF9hY3RpdmF0ZQkJPSBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUsCiYjNDM7fTsKJiM0MzsKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LApAQCAtMjY4LDM1ICYjNDM7MjYzLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKCEoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX0xBUkdFRklMRSkgJmFtcDsmYW1wOyBpX3NpemVfcmVhZChpbm9kZSkgJmd0OyBNQVhfTk9OX0xGUykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewotCQlpbm9kZV9sb2NrKGlub2RlKTsKLQkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKLQkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewotCQkJaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLSZndDtpX2lubywKLQkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwotCQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwotCQl9Ci0JCWlub2RlX3VubG9jayhpbm9kZSk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMzExLDEwICYjNDM7Mjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSAgICBhdHRyLSZndDtpYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiAJCWlmIChhdHRyLSZndDtpYV9zaXplICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewotCQkJZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwKLQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKLQkJCWlmIChlcnJvcikKJiM0MzsJCQlsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS0mZ3Q7aV9zaXplOwomIzQzOwomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci0mZ3Q7aWFfc2l6ZSk7CiYjNDM7CQkJZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7CiAJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCX0KIAkJfQogCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKIAkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKQEAgLTM1Myw4NiAmIzQzOzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCXJldHVybiAwOwogfQogCi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLSZndDtpX3NiKTsKLQlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwotCWludCBlcnJvciA9IDAsIGVycm9yMjsKLQotCWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAotCQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwotCi0JZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWlub2RlX2xvY2soaW5vZGUpOwotCi0JLyoKLQkgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy4KLQkgKi8KLQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQotCS8qCi0JICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCi0JICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAotCQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7Ci0JCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCi0JCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQljbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0KLQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwotCQkJZXJyb3IyID0KLQkJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KAotCQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IGVycm9yMjsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncykpCi0JCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQltdXRleF9sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7Ci0JaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKLQltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKLQotCWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyb3IyOwotCi0JaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKLQkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCi0JaW5vZGVfdW5sb2NrKGlub2RlKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gaGZzcGx1c19zZXRhdHRyLAogCS5nZXRhdHRyCT0gaGZzcGx1c19nZXRhdHRyLApAQCAtNDU0LDE5ICYjNDM7MzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5saXN0eGF0dHIJPSBoZnNwbHVzX2xpc3R4YXR0ciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi0JLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKLQkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCi19OwotCiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXVtb2RlX3QgbW9kZSkKIHsKQEAgLTUxMyw3ICYjNDM7MzkwLDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJc2JpLSZndDtmaWxlX2NvdW50JiM0MzsmIzQzOzsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19hb3BzOwogCQloaXAtJmd0O2NsdW1wX2Jsb2NrcyA9IDE7CiAJfSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkgfHwKIAkJICAgU19JU0ZJRk8oaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtJmd0O2lfbW9kZSkpIHsKQEAgLTY1NCw3ICYjNDM7NTMxLDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWlub2RlX25vaGlnaG1lbShpbm9kZSk7Ci0JCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfYW9wczsKIAkJfSBlbHNlIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5jCkBAIC0wLDAgJiM0MzsxLDE4OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJCQkJIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCQkJIHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzOwomIzQzOwlsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzOwomIzQzOwlsb2ZmX3QgYmxvY2tfc3RhcnQ7CiYjNDM7CWJvb2wgaXNfbmV3OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIW1heV9hbGxvYykgewomIzQzOwkJLyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovCiYjNDM7CQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpICZsdDs9IG9mZnNldCkgewomIzQzOwkJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCQlpb21hcC0mZ3Q7YWRkciA9IElPTUFQX05VTExfQUREUjsKJiM0MzsJCQlpb21hcC0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwkJCWlvbWFwLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBDbGFtcCBsZW5ndGggaWYgdGhlIHJlcXVlc3RlZCByYW5nZSBnb2VzIGJleW9uZCBpX3NpemUgKi8KJiM0MzsJCWlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQkJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gaV9ibG9ja3NpemUoaW5vZGUpOwomIzQzOwomIzQzOwkJCWxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlhYmxvY2sgPSBvZmZzZXQgJmd0OyZndDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJZXJyID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgJmFtcDtkYmxvY2ssCiYjNDM7CQkJCSAmYW1wO21heF9ibG9ja3MsIE5VTEwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWJsb2NrX29mZnNldCA9IG9mZnNldCAmYW1wOyAoc2JpLSZndDthbGxvY19ibGtzeiAtIDEpOwomIzQzOwlhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJbGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGFibG9ja19ieXRlcyAtIGFibG9ja19vZmZzZXQpOwomIzQzOwlibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpOwomIzQzOwlpc19uZXcgPSBtYXlfYWxsb2MgJmFtcDsmYW1wOyBibG9ja19zdGFydCAmZ3Q7PSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsJaWYgKG1heV9hbGxvYyAmYW1wOyZhbXA7ICFpc19uZXcgJmFtcDsmYW1wOyBvZmZzZXQgJmx0OyBoaXAtJmd0O3BoeXNfc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtJmd0O3BoeXNfc2l6ZSAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gc2ItJmd0O3NfYmRldjsKJiM0MzsJaW9tYXAtJmd0O29mZnNldCA9IG9mZnNldDsKJiM0MzsJaW9tYXAtJmd0O2xlbmd0aCA9IGxlbmd0aDsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICYjNDM7IGFibG9ja19vZmZzZXQ7CiYjNDM7CWlvbWFwLSZndDt0eXBlID0gSU9NQVBfTUFQUEVEOwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0MzsKJiM0MzsJaWYgKGlzX25ldykKJiM0MzsJCWlvbWFwLSZndDtmbGFncyB8PSBJT01BUF9GX05FVzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwkJCQlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CQkJCSAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJCQkgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4gPSBoZnNwbHVzX2lvbWFwX2JlZ2luLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpCiYjNDM7ICoKJiM0MzsgKiBBZHZhbmNlIHRoZSBhbGxvY2F0ZWQtYW5kLXplcm9lZCBoaWdoLXdhdGVyIG1hcmsKJiM0MzsgKiAoaGlwLSZndDtwaHlzX3NpemUgLyBoaXAtJmd0O2ZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAomIzQzOwkJCQkgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJbG9mZl90IGVuZDsKJiM0MzsJYm9vbCBkaXJ0aWVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghd3JpdHRlbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllbmQgPSByb3VuZF91cChwb3MgJiM0Mzsgd3JpdHRlbiwgc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsKJiM0MzsJaWYgKGhpcC0mZ3Q7cGh5c19zaXplICZsdDsgZW5kKSB7CiYjNDM7CQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC0mZ3Q7cGh5c19zaXplKTsKJiM0MzsJCWhpcC0mZ3Q7cGh5c19zaXplID0gZW5kOwomIzQzOwkJaGlwLSZndDtmc19ibG9ja3MgPSBlbmQgJmd0OyZndDsgc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CQlkaXJ0aWVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZGlydGllZCkKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luCT0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbiwKJiM0MzsJLmlvbWFwX2VuZAk9IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKCkKJiM0MzsgKgomIzQzOyAqIFplcm8tZXh0ZW5kIHRoZSBiYWNraW5nIHN0b3JlIGZyb20gdGhlIGN1cnJlbnQgcGh5c19zaXplIHVwIHRvICYjMzk7c2l6ZSYjMzk7LgomIzQzOyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuCiYjNDM7ICovCiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlsb2ZmX3Qgc3RhcnQgPSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgJmx0Oz0gc3RhcnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsCiYjNDM7CQkJCSZhbXA7aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFjawomIzQzOyAqCiYjNDM7ICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlCiYjNDM7ICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAob2Zmc2V0ICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJICAgIG9mZnNldCAmZ3Q7PSB3cGMtJmd0O2lvbWFwLm9mZnNldCAmIzQzOyB3cGMtJmd0O2lvbWFwLmxlbmd0aCkgewomIzQzOwkJZXJyID0gX19oZnNwbHVzX2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsCiYjNDM7CQkJCQkgICAgb2Zmc2V0LCBsZW4sIDAsCiYjNDM7CQkJCQkgICAgJmFtcDt3cGMtJmd0O2lvbWFwLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHsKJiM0MzsJLndyaXRlYmFja19yYW5nZQk9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdAk9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHMgPSB7CiYjNDM7CS5lbmRfaW8JCT0gaW9tYXBfZGlvX2VuZF9pbywKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywKJiM0MzsJCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3BhbikKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuaCBiL2ZzL2hmc3BsdXMvaW9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbQomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wczsKJiM0MzsKJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLAomIzQzOwkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfSEZTUExVU19JT01BUF9IICovCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtNTcxLDYgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWdvdG8gb3V0X2Nsb3NlX2F0dHJfdHJlZTsKIAl9CiAJc2JpLSZndDthbGxvY19maWxlID0gaW5vZGU7CiYjNDM7CW1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAKIAkvKiBMb2FkIHRoZSByb290IGRpcmVjdG9yeSAqLwogCXJvb3QgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfUk9PVF9DTklEKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKQEAgLTE3MSwxOCAmIzQzOzE3MSwyMiBAQCBlbnVtIHsKIAlIRlNfWEFUVFJfTkFNRSwKIH07CiAKJiM0MzsjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVAkoMykKJiM0MzsKIHN0cnVjdCBoZnNfZXh0ZW50IHsKIAlfX2JlMTYgYmxvY2s7CiAJX19iZTE2IGNvdW50OwogfTsKLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107CiYjNDM7dHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1tIRlNfRk9SS19FWFRFTlRfQ09VTlRdOwomIzQzOwomIzQzOyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVAkoOCkKIAogLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZXh0ZW50IHsKIAlfX2JlMzIgc3RhcnRfYmxvY2s7CiAJX19iZTMyIGJsb2NrX2NvdW50OwogfSBfX3BhY2tlZDsKLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTsKJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07CiAKIC8qIEluZm9ybWF0aW9uIGZvciBhICYjMzQ7Rm9yayYjMzQ7IGluIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTIuLjUwZmU2MDM2YjAxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTU2MCw2ICYjNDM7NTYwLDI2IEBAIHN0cnVjdCBpb21hcF9kaW9fb3BzIHsKIAlzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIERpcmVjdCBJL08gY29tcGxldGlvbiBoYW5kbGVyCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO2ludCBpb21hcF9kaW9fZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLAomIzQzOwkJICAgICBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChzaXplICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZsdDsgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpOwomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFdhaXQgZm9yIHRoZSBJL08gdG8gY29tcGxldGUgaW4gaW9tYXBfZGlvX3J3IGV2ZW4gaWYgdGhlIGtpb2NiIGlzIG5vdAogICogc3luY2hyb25vdXMuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTU5CgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUyYjNDM7IGlvbWFwIENvbnZlcnNpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBIRlMmIzQzOyBwYXRjaCwgYW5kIGl0IGxvb2tzIGxpa2UgYSBmYWlybHkgY29tcHJlaGVuc2l2ZSBvdmVyaGF1bC4gVGhlIGNvcmUgaWRlYSBpcyB0byBtaWdyYXRlIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtJiMzOTtzIEkvTyBwYXRoIHRvIHV0aWxpemUgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIG9mZmVyIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGFuZCBmbGV4aWJpbGl0eSBhZHZhbnRhZ2VzLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlcGxhY2luZyBgTEVHQUNZX0RJUkVDVF9JT2Agd2l0aCBgRlNfSU9NQVBgIGluIGBLY29uZmlnYCBwcmV0dHkgbXVjaCBjb25maXJtcyB0aGlzIG1ham9yIGFyY2hpdGVjdHVyYWwgc2hpZnQuCgpUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5jdGlvbmFsIHRyYW5zZm9ybWF0aW9uLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBuZXcgZmlsZXMgKGBmaWxlLmNgLCBgaW9tYXAuY2ApIGFuZCBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgYm9hcmQuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSBjb3JlIGZpbGVzeXN0ZW0gY29tcG9uZW50czogYGJpdG1hcC5jYCAocGFnZSBsb2NraW5nIGFuZCB3cml0ZSBzdGFiaWxpdHkpLCBgZXh0ZW50cy5jYCAod2l0aCB0aGUgbmV3IGBoZnNwbHVzX21hcF9leHRlbnRgIGFuZCB1cGRhdGVzIHRvIGJsb2NrLXJlbGF0ZWQgZnVuY3Rpb25zKSwgYGlub2RlLmNgIChpbnRlZ3JhdGluZyBpb21hcCBmb3IgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLCBzZXBhcmF0aW5nIGJ0cmVlIGFuZCBzeW1saW5rIGFvcHMpLiBBbmQsIG9mIGNvdXJzZSwgdGhlIGFkZGl0aW9uIG9mIGBpb21hcC5jYCBhbmQgYGlvbWFwLmhgIHdpdGggYWxsIHRoZSBpb21hcC1zcGVjaWZpYyBvcGVyYXRpb25zLgoKVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIHNvbWUgc2VyaW91cyBmdXp6aW5nIGFuZCB0ZXN0aW5nLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcywgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBrZXkgYXJlYXMuIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgcmVhbGx5IHNjcnV0aW5pemluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIGZ1bmN0aW9ucyBsaWtlIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYCwgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLCBhbmQgYGhmc3BsdXNfZmlsZV9mc3luY2Agc2luY2UgdGhleSYjMzk7cmUgdGhlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXcgSS9PIHBhdGguIEkmIzM5O2xsIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIHRoZSBleHRlbnQgbWFwcGluZyAoYGhmc3BsdXNfbWFwX2V4dGVudGApIGFuZCB0aGUgaW9tYXAgY29udGludWF0aW9uIChgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBfX2hmc3BsdXNfaW9tYXBfYmVnaW5gLCBgaGZzcGx1c193cml0ZV9pb21hcF9lbmRgLCBgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2VgKS4gVGhlc2UgYXJlIGNydWNpYWwgZm9yIHRoZSBpb21hcCYjMzk7cyBjb3JyZWN0IG9wZXJhdGlvbi4KCkkgc2hvdWxkIHZlcmlmeSB0aGUgcmVxdWlyZWQgY29uZmlncyBhcmUgbWV0LCBsaWtlIGBDT05GSUdfSEZTUExVU19GU2AuCgpJJiMzOTtsbCBydW4gc29tZSBgZ3JlcHBlcmAgc2VhcmNoZXMgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBpbnNpZGUgb2YgYGZzL2hmc3BsdXMvZmlsZS5jYCBhbmQgYGZzL2hmc3BsdXMvaW9tYXAuY2AgdG8gc2VlIGhvdyB0aGUgY2hhbmdlcyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihpbnR8c3NpemVfdHxsb2ZmX3R8c3RhdGljIGludHxzdGF0aWMgc3NpemVfdHxzdGF0aWMgbG9mZl90KSBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvZmlsZS5jLTE0LVxuZnMvaGZzcGx1cy9maWxlLmM6MTU6c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL2hmc3BsdXMvZmlsZS5jLTE2LXtcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNS1cbmZzL2hmc3BsdXMvZmlsZS5jOjI2OnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNy17XG4tLVxuZnMvaGZzcGx1cy9maWxlLmMtNDQtXG5mcy9oZnNwbHVzL2ZpbGUuYzo0NTppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5mcy9oZnNwbHVzL2ZpbGUuYy00Ni1cdFx0ICAgICAgIGludCBkYXRhc3luYylcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0xMjctICovXG5mcy9oZnNwbHVzL2ZpbGUuYzoxMjg6c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2ZpbGUuYy0xMjktXHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2hmc3BsdXMvZmlsZS5jLTE1NS1cbmZzL2hmc3BsdXMvZmlsZS5jOjE1NjpzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYixcbmZzL2hmc3BsdXMvZmlsZS5jLTE1Ny1cdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL2hmc3BsdXMvZmlsZS5jLTE4MS1cbmZzL2hmc3BsdXMvZmlsZS5jOjE4MjpzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2ZpbGUuYy0xODMtXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNDktXG5mcy9oZnNwbHVzL2ZpbGUuYzoyNTA6c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNTEtXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbi0tXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNzAtXG5mcy9oZnNwbHVzL2ZpbGUuYzoyNzE6c3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuZnMvaGZzcGx1cy9maWxlLmMtMjcyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDc4MgoJCQkJCQkJb3V0cHV0OiA2OQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBhY2NvdW50LCBhc3N1bWluZyBJJiMzOTttIHRoZSBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIG9mIGhvdyBIRlMmIzQzOyBkZWFscyB3aXRoIEkvTyBtYXBwaW5nLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGhlYWQgaXMgYGZzL2hmc3BsdXMvaW9tYXAuY2AuIFRoYXQgZmlsZSBpcyB0aGUgbGlrZWx5IHJlcG9zaXRvcnkgZm9yIHRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayB0cmFuc2xhdGlvbiwgZXh0ZW50IG1hbmFnZW1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBtZWNoYW5pY3Mgb2YgaG93IEhGUyYjNDM7IGFycmFuZ2VzIGRhdGEgb24gdGhlIGRpc2suIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgc28gdG8gc3BlYWssIGluIHRlcm1zIG9mIGZpbGUgc3lzdGVtIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UuIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdCkgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2lvbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pb21hcC5jLTEyLVxuZnMvaGZzcGx1cy9pb21hcC5jOjEzOnN0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTQtXHRcdFx0XHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYy03My1cbmZzL2hmc3BsdXMvaW9tYXAuYzo3NDpzdGF0aWMgaW50IGhmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcbmZzL2hmc3BsdXMvaW9tYXAuYy03NS1cdFx0XHRcdGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmMtODItXG5mcy9oZnNwbHVzL2lvbWFwLmM6ODM6c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9oZnNwbHVzL2lvbWFwLmMtODQtXHRcdFx0XHQgICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmM9OTI9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTAxLSAqL1xuZnMvaGZzcGx1cy9pb21hcC5jOjEwMjpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTAzLVx0XHRcdFx0ICAgbG9mZl90IGxlbmd0aCwgc3NpemVfdCB3cml0dGVuLFxuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYz0xMjk9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTM5LSAqL1xuZnMvaGZzcGx1cy9pb21hcC5jOjE0MDppbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbmZzL2hmc3BsdXMvaW9tYXAuYy0xNDEte1xuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYy0xNTctICovXG5mcy9oZnNwbHVzL2lvbWFwLmM6MTU4OnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTU5LVx0XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LFxuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYz0xODE9Y29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuLS1cbmZzL2hmc3BsdXMvaW9tYXAuYy0xODQtXG5mcy9oZnNwbHVzL2lvbWFwLmM6MTg1OmludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xODYtXHRcdFx0XHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzYxCgkJCQkJCQlvdXRwdXQ6IDc3CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYGZzL2hmc3BsdXMvZXh0ZW50cy5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBIRlMmIzQzOyBleHRlbnQgbWFuYWdlbWVudCBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBgZnMvaGZzcGx1cy9leHRlbnRzLmNgIGZpbGUgaXMgcHJvYmFibHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBFeHRlbnRzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgSEZTJiM0Mzsgb3JnYW5pemVzIGRhdGEsIHNvIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIGFsbG9jYXRpbmcsIGRlYWxsb2NhdGluZywgYW5kIG1hbmFnaW5nIHRob3NlIGJsb2NrcyB3b3VsZCByZXNpZGUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhpbmdzIGxpa2UgbWFwcGluZyBsb2dpY2FsIGJsb2NrIG51bWJlcnMgdG8gcGh5c2ljYWwgb25lcywgaGFuZGxpbmcgZnJhZ21lbnRlZCBmaWxlcywgYW5kIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGJpdG1hcHMgaWYgSEZTJiM0MzsgdXNlcyBvbmUuIEkmIzM5O2xsIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIEhGUyYjNDM7IGRhdGEgc3RydWN0dXJlcyB0byB1bmRlcnN0YW5kIGhvdyBleHRlbnRzIGFyZSBzdG9yZWQgb24gZGlzay4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdHx1MzJ8c3RhdGljIHUzMikgW2EtekEtWjAtOV9dJiM0MztcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2V4dGVudHMuYy0yMC0vKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMTppbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yMi1cdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDI9c3RhdGljIHZvaWQgaGZzcGx1c19leHRfYnVpbGRfa2V5KGhmc3BsdXNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTU4LSAqL1xuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTk6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNjAtXHRcdFx0XHQgdTMyICpkYmxvY2spXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNzctXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo3ODpzdGF0aWMgaW50IGhmc3BsdXNfZXh0X2Jsb2NrX2NvdW50KHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0KVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNzkte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTg3LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6ODg6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy04OS17XG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtOTgtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo5OTpzdGF0aWMgaW50IF9faGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xMDAtXHRcdHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDItXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoxNDM6c3RhdGljIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnRfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDQte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE1OC1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjE1OTppbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNjAte1xuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jPTE5MT1zdGF0aWMgaW5saW5lIGludCBfX2hmc3BsdXNfZXh0X2NhY2hlX2V4dGVudChzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQsXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjE5LVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MjIwOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfcmVhZF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGJsb2NrKVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLXtcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0yNTItICovXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyNTM6aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjU0LVx0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDctLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjMwODppbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzA5LVx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zNTI9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zNjMtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozNjQ6c3RhdGljIGludCBoZnNwbHVzX2FkZF9leHRlbnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHRlbnQsIHUzMiBvZmZzZXQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zNjUtXHRcdFx0ICAgICAgdTMyIGFsbG9jX2Jsb2NrLCB1MzIgYmxvY2tfY291bnQpXG4tLVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzkxLVxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MzkyOnN0YXRpYyBpbnQgaGZzcGx1c19mcmVlX2V4dGVudHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTM5My1cdFx0XHRcdHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0ZW50LFxuLS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ0NS1cbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQ0NjppbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00NDctXHRcdHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSlcbi0tXG5mcy9oZnNwbHVzL2V4dGVudHMuYy00OTAtXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0OTE6aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDkyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzI5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIEhGUyYjNDM7IGZpbGUgc3lzdGVtIGZ1bmN0aW9ucyBmb3IgdGhpcyBpbnZlc3RpZ2F0aW9uLiBCYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBJIHNob3VsZCBzdGFydCB3aXRoIHRoZXNlOiBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJgLCBgaGZzcGx1c19maWxlX2xsc2Vla2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBhbmQgYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLiBUaG9zZSBzZWVtIGxpa2UgdGhlIGtleSBidWlsZGluZyBibG9ja3MgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBJL08gYW5kIGV4dGVudCBtYXBwaW5nIHdpdGhpbiB0aGUgSEZTJiM0MzsgY29udGV4dC4KCk5vdywgbGV0IG1lIGp1c3QgcXVpY2tseSBnbGFuY2UgYXQgYGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZWAuIEl0JiMzOTtzIG5vbi1zdGF0aWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IHdvcnRoIGEgbG9vaywgdGhvdWdoIEkmIzM5O2xsIG5lZWQgdG8gcHJpb3JpdGl6ZS4gSSYjMzk7bGwgYWxzbyBjaGVjayBvdXQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBzaW5jZSBpdCBoYXMgYmVlbiB1cGRhdGVkLCBhbmQgdGhhdCBjb3VsZCBiZSBpbnRlcmVzdGluZy4gT24gdGhlIG90aGVyIGhhbmQsIGBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrYCB3YXMgYWxzbyB1cGRhdGVkIGJ1dCBpdCYjMzk7cyBzdGF0aWMsIHNvIGl0IG1heSBub3QgYmUgYXMgY3JpdGljYWwgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIHRoaXMgbGF0ZXIuCgpGaW5hbGx5LCBJJiMzOTtsbCBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgYGZzL2hmc3BsdXMvS2NvbmZpZ2AgZmlsZS4gVGhhdCB3aWxsIHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4gSSBjYW4mIzM5O3QgZ2V0IHRoZSBmdWxsIHBpY3R1cmUgd2l0aG91dCB0aGF0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEhGU1BMVVNfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0FwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBOTFNcbiAgIDc6XHRcdHNlbGVjdCBOTFNfVVRGOFxuICAgODpcdFx0c2VsZWN0IEZTX0lPTUFQXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuICAxMTpcdFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUyYjNDM7IGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXG4gIDE0Olx0XHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcbiAgMTU6XHRcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxuICAxNjpcdFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDIwOlx0XHRkZXBlbmRzIG9uIEhGU1BMVVNfRlMgXHUwMDI2XHUwMDI2IEtVTklUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTEyCgkJCQkJCQlvdXRwdXQ6IDE3MwoJCQkJCQkJdGhvdWdodHM6IDEwMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhGUyYjNDM7IEkvTyBPcGVyYXRpb25zIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGdpdmVuIHRoZSBgSEZTUExVU19GU2AgY29uZmlnLCBJIG5lZWQgdG8gaWRlbnRpZnkga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZyBhZnRlciB0aGlzIEhGUyYjNDM7IGlvbWFwIGNvbnZlcnNpb24uIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIGVudHJ5IHBvaW50cyBmb3IgZmlsZSBJL08gb3BlcmF0aW9ucyBhbmQgcmVsYXRlZCBleHRlbnQvYmxvY2sgbWFuYWdlbWVudC4KCkZpcnN0LCBJIHJldmlld2VkIHRoZSBjYW5kaWRhdGUgZnVuY3Rpb25zOiBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCwgYGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXJgLCBgaGZzcGx1c19maWxlX2xsc2Vla2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGFuZCBgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAgZXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBzaW5jZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBgaGZzcGx1c19maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAgYW5kIHJlcHJlc2VudHMgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9uIGV4cGxpY2l0bHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuCgpUaGVyZWZvcmUsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG5vbi1zdGF0aWMgY2FuZGlkYXRlcy4gYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCBpcyB0ZW1wdGluZywgYnV0IHN0YXRpYywgYW5kIEkgbmVlZCB0byBwcmlvcml0aXplIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLiBUaHVzLCBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfbWFwX2V4dGVudGAsIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYCwgYGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZWAsIGFuZCBgaGZzcGx1c19nZXRfYmxvY2tgIGFyZSBkZWZpbml0ZWx5IGluIHNjb3BlLgoKSSBtYWRlIHN1cmUgdG8gcmUtY2hlY2sgYWxsIHRoZSBjb2RlLiBJIHZlcmlmaWVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgbm9uLXN0YXRpYywgYnkgbG9va2luZyB0aHJvdWdoIGBmcy9oZnNwbHVzL2ZpbGUuY2AsIGBmcy9oZnNwbHVzL2lvbWFwLmNgLCBhbmQgYGZzL2hmc3BsdXMvZXh0ZW50cy5jYC4gSSBjb25maXJtZWQgdGhhdCB0aGUgZGVmaW5pdGlvbnMgb2YgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLCBhbmQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhcmUgZXhhY3RseSBhcyBJIGV4cGVjdC4KCkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiwgdGhpcyBwYXRjaCByZXByZXNlbnRzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdCB3aXRoIGlvbWFwLCB3aGljaCB0b3VjaGVzIG9uIHRoZSBjb3JlIGZpbGUgc3lzdGVtLCBibG9jayBhbGxvY2F0aW9uLCBleHRlbnQgbWFwcGluZywgYW5kIEkvTyBoYW5kbGluZywgYW5kIHRoZXJlZm9yZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbGwgZXhjZWxsZW50IGZ1enppbmcgdGFyZ2V0cyB0byBjb3ZlciBrZXkgZW50cnlwb2ludHMgZm9yIGZpbGUgb3BlcmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2ZpbGVfZnN5bmMmIzM0OywKICAgICYjMzQ7aGZzcGx1c19tYXBfZXh0ZW50JiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfY29udF9leHBhbmQmIzM0OywKICAgICYjMzQ7aGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfZ2V0X2Jsb2NrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtIHRvIHVzZSB0aGUgaW9tYXAgaW5mcmFzdHJ1Y3R1cmUgZm9yIGZpbGUgSS9PLCByZXBsYWNpbmcgdGhlIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXIgaGVhZCBiYXNlZCBwYXRocy4gSXQgaW50cm9kdWNlcyBuZXcgaW9tYXAgb3BlcmF0aW9ucyBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIHNlZWtpbmcsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBhbmQgYmxvY2sgYWxsb2NhdGlvbiBsb2dpYy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIRlNQTFVTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aGZzcGx1c19maWxlX2ZzeW5jJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfbWFwX2V4dGVudCYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kJiMzNDssCiAgICAmIzM0O2hmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSYjMzQ7LAogICAgJiMzNDtoZnNwbHVzX2dldF9ibG9jayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSB0byB1c2UgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTywgcmVwbGFjaW5nIHRoZSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyIGhlYWQgYmFzZWQgcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGlvbWFwIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBzZWVraW5nLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29udmVydHMgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbSBmcm9tIGxlZ2FjeSBkaXJlY3QgSS9PIGFuZCBidWZmZXJlZCBJL08gdG8gdGhlIG1vZGVybiBpb21hcCBpbmZyYXN0cnVjdHVyZS4gSXQgaW50cm9kdWNlcyBuZXcgZmlsZSBvcGVyYXRpb25zLCBpb21hcCBjYWxsYmFja3MsIGFuZCBtb2RpZmllcyBleHRlbnQgbWFwcGluZyBsb2dpYy4gVGhlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgc3RhbmRhcmQgVkZTIGFuZCBpb21hcCBBUEkgdXNhZ2UsIHN1Y2ggYXMgYGlvbWFwX2Rpb19yd2AsIGBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlYCwgYW5kIGBpb21hcF96ZXJvX3JhbmdlYC4gRmlsZSBleHBhbnNpb25zIGFyZSBwcm9wZXJseSB6ZXJvZWQgdXNpbmcgYGlvbWFwX3plcm9fcmFuZ2VgLCBhbmQgbmV3bHkgYWxsb2NhdGVkIGJsb2NrcyBhcmUgZmxhZ2dlZCB3aXRoIGBJT01BUF9GX05FV2AsIHdoaWNoIHRoZSBpb21hcCBjb3JlIGhhbmRsZXMgdG8gcHJldmVudCB1bmluaXRpYWxpemVkIGRpc2sgZGF0YSBleHBvc3VyZS4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgaW9jdGxzLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgaW50cm9kdWNlZCB0aGF0IGNvdWxkIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IHNhbml0aXplcnMuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGU1MTA0NWMwMDU0MzNhN2NkYTUwYWE2ZDBjZTA5OWUzMWYxNWQ3ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9LY29uZmlnIGIvZnMvaGZzcGx1cy9LY29uZmlnCmluZGV4IGNhODQwMWNiNjk1NGQuLmI0NDMyYzY0ZGIzYmUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL0tjb25maWcKQEAgLTUsNyAmIzQzOzUsNyBAQCBjb25maWcgSEZTUExVU19GUwogCXNlbGVjdCBCVUZGRVJfSEVBRAogCXNlbGVjdCBOTFMKIAlzZWxlY3QgTkxTX1VURjgKLQlzZWxlY3QgTEVHQUNZX0RJUkVDVF9JTwomIzQzOwlzZWxlY3QgRlNfSU9NQVAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBleHRlbmRlZCBmb3JtYXQKIAkgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy4KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUgYi9mcy9oZnNwbHVzL01ha2VmaWxlCmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9NYWtlZmlsZQpAQCAtNSw4ICYjNDM7NSw5IEBACiAKIG9iai0kKENPTkZJR19IRlNQTFVTX0ZTKSAmIzQzOz0gaGZzcGx1cy5vCiAKLWhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFwKLQkJYm5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXAomIzQzO2hmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGZpbGUubyBpb21hcC5vIGlvY3RsLm8gZXh0ZW50cy5vIFwKJiM0MzsJCWNhdGFsb2cubyBkaXIubyBidHJlZS5vIGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gXAomIzQzOwkJdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFwKIAkJYXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vCiAKICMgS1VuaXQgdGVzdHMKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jCmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYml0bWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9iaXRtYXAuYwpAQCAtMzksNiAmIzQzOzM5LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCXN0YXJ0ID0gc2l6ZTsKIAkJZ290byBvdXQ7CiAJfQomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJaSA9IG9mZnNldCAlIDMyOwpAQCAtNzUsNiAmIzQzOzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQljdXJyJiM0MzsmIzQzOzsKIAkJfQogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJb2Zmc2V0ICYjNDM7PSBQQUdFX0NBQ0hFX0JJVFM7CiAJCWlmIChvZmZzZXQgJmd0Oz0gc2l6ZSkKIAkJCWJyZWFrOwpAQCAtODQsNiAmIzQzOzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJCQlzdGFydCA9IHNpemU7CiAJCQlnb3RvIG91dDsKIAkJfQomIzQzOwkJbG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJZm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7CiAJCWN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQlpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKQogCQkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTk4LDYgJiM0MzsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAlzdGFydCA9IG9mZnNldCAmIzQzOyAoY3VyciAtIHBwdHIpICogMzIgJiM0MzsgaTsKIAlpZiAoc3RhcnQgJmd0Oz0gc2l6ZSkgewogCQloZnNfZGJnKCYjMzQ7Yml0bWFwIGZ1bGxcbiYjMzQ7KTsKJiM0MzsJCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJCXVubG9ja19wYWdlKHBhZ2UpOwomIzQzOwkJc3RhcnQgPSBzaXplOwogCQlnb3RvIG91dDsKIAl9CiAJLyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqLwpAQCAtMTI4LDYgJiM0MzsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSwKIAkJfQogCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAkJa3VubWFwX2xvY2FsKHBwdHIpOwomIzQzOwkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCW9mZnNldCAmIzQzOz0gUEFHRV9DQUNIRV9CSVRTOwogCQlwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgb2Zmc2V0IC8gUEFHRV9DQUNIRV9CSVRTLAogCQkJCQkgTlVMTCk7CkBAIC0xMzUsNiAmIzQzOzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLAogCQkJc3RhcnQgPSBzaXplOwogCQkJZ290byBvdXQ7CiAJCX0KJiM0MzsJCWxvY2tfcGFnZShwYWdlKTsKJiM0MzsJCWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCQlwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpOwogCQljdXJyID0gcHB0cjsKIAkJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTE1Miw2ICYjNDM7MTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsCiAJKmN1cnIgPSBjcHVfdG9fYmUzMihuKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKIAlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CXVubG9ja19wYWdlKHBhZ2UpOwogCSptYXggPSBvZmZzZXQgJiM0MzsgKGN1cnIgLSBwcHRyKSAqIDMyICYjNDM7IGkgLSBzdGFydDsKIAlzYmktJmd0O2ZyZWVfYmxvY2tzIC09ICptYXg7CiAJaGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7CkBAIC0xODUsNiAmIzQzOzE5Nyw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpOwogCWlmIChJU19FUlIocGFnZSkpCiAJCWdvdG8ga2Fib29tOwomIzQzOwlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CWZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpOwogCXBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7CiAJY3VyciA9IHBwdHIgJiM0MzsgKG9mZnNldCAmYW1wOyAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7CiAJZW5kID0gcHB0ciAmIzQzOyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjsKQEAgLTIxNiw5ICYjNDM7MjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogCQkJYnJlYWs7CiAJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCQlrdW5tYXBfbG9jYWwocHB0cik7CiYjNDM7CQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICYjNDM7JiM0MztwbnIsIE5VTEwpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKQogCQkJZ290byBrYWJvb207CiYjNDM7CQlsb2NrX3BhZ2UocGFnZSk7CiYjNDM7CQlmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTsKIAkJcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTsKIAkJY3VyciA9IHBwdHI7CiAJCWVuZCA9IHBwdHIgJiM0MzsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7CkBAIC0yMzIsNiAmIzQzOzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KQogb3V0OgogCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwogCWt1bm1hcF9sb2NhbChwcHRyKTsKJiM0MzsJdW5sb2NrX3BhZ2UocGFnZSk7CiAJc2JpLSZndDtmcmVlX2Jsb2NrcyAmIzQzOz0gbGVuOwogCWhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpOwogCW11dGV4X3VubG9jaygmYW1wO3NiaS0mZ3Q7YWxsb2NfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9leHRlbnRzLmMgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwppbmRleCA4MTNlNjhiOGVjZDY1Li44ZjdmNTYwY2VjNjQyIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2V4dGVudHMuYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKIAogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX2ZzLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtoZnNwbHVzX3Jhdy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2lvbWFwLmgmIzM0OwogCiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovCiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsCkBAIC00OCwxOCAmIzQzOzQ5LDI5IEBAIHN0YXRpYyB2b2lkIGhmc3BsdXNfZXh0X2J1aWxkX2tleShoZnNwbHVzX2J0cmVlX2tleSAqa2V5LCB1MzIgY25pZCwKIAlrZXktJmd0O2V4dC5wYWQgPSAwOwogfQogCi1zdGF0aWMgdTMyIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQsIHUzMiBvZmYpCiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKCkgLSBmaW5kIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYmxvY2sKJiM0MzsgKgomIzQzOyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJiMzOTtvZmYmIzM5OyB3aXRoaW4gYW4gOC1lbnRyeQomIzQzOyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZiwKJiM0MzsJCQkJIHUzMiAqZGJsb2NrKQogewogCWludCBpOwogCXUzMiBjb3VudDsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyA4OyBleHQmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHsKIAkJY291bnQgPSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKLQkJaWYgKG9mZiAmbHQ7IGNvdW50KQotCQkJcmV0dXJuIGJlMzJfdG9fY3B1KGV4dC0mZ3Q7c3RhcnRfYmxvY2spICYjNDM7IG9mZjsKJiM0MzsJCWlmIChvZmYgJmx0OyBjb3VudCkgewomIzQzOwkJCSpkYmxvY2sgPSBiZTMyX3RvX2NwdShleHQtJmd0O3N0YXJ0X2Jsb2NrKSAmIzQzOyBvZmY7CiYjNDM7CQkJcmV0dXJuIGNvdW50IC0gb2ZmOwomIzQzOwkJfQogCQlvZmYgLT0gY291bnQ7CiAJfQogCS8qIHBhbmljPyAqLwomIzQzOwkqZGJsb2NrID0gMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjgsNyAmIzQzOzgwLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9ibG9ja19jb3VudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCkKIAlpbnQgaTsKIAl1MzIgY291bnQgPSAwOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IDg7IGV4dCYjNDM7JiM0MzssIGkmIzQzOyYjNDM7KQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0JiM0MzsmIzQzOywgaSYjNDM7JiM0MzspCiAJCWNvdW50ICYjNDM7PSBiZTMyX3RvX2NwdShleHQtJmd0O2Jsb2NrX2NvdW50KTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yMjMsMzcgJiM0MzsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spCiAJcmV0dXJuIHJlczsKIH0KIAotLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi8KLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCi0JCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzOy8qCiYjNDM7ICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3MKJiM0MzsgKgomIzQzOyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICYjMzk7YWJsb2NrJiMzOTsgZm9yIGlub2RlLCBleHRlbmRpbmcgdGhlCiYjNDM7ICogZmlsZSAodmlhIGhmc3BsdXNfZmlsZV9leHRlbmQoKSwgaW4gY2x1bXBfYmxvY2tzLXNpemVkIGNodW5rcykgd2hlbgomIzQzOyAqICYjMzk7Y3JlYXRlJiMzOTsgaXMgc2V0IGFuZCAmIzM5O2FibG9jayYjMzk7IGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uCiYjNDM7ICoKJiM0MzsgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAmIzM5O2FibG9jayYjMzk7LAomIzQzOyAqIGFuZCAqbWF4X2Jsb2NrcyBpcyB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3MgdGhhdCBhcmUKJiM0MzsgKiBjb250aWd1b3VzIHdpdGggaXQgKGkuZS4gdGhlIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIGV4dGVudCBlbnRyeQomIzQzOyAqIHRoYXQgY29udGFpbnMgJiMzOTthYmxvY2smIzM5OyksIHdoaWNoIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIHdob2xlIGZpbGUmIzM5O3MKJiM0MzsgKiByZW1haW5pbmcgYWxsb2NhdGlvbiB3aGVuIHRoZSBmb3JrIGlzIGZyYWdtZW50ZWQgYWNyb3NzIHNldmVyYWwKJiM0MzsgKiBleHRlbnQgZW50cmllcy4gSWYgYSBuZXcgZXh0ZW50IGhhZCB0byBiZSBhbGxvY2F0ZWQgdG8gc2F0aXNmeSB0aGUKJiM0MzsgKiByZXF1ZXN0LCAqYmFsbG9jICh3aGVuIG5vbi1OVUxMKSBpcyBzZXQgdG8gdHJ1ZS4KJiM0MzsgKi8KJiM0MztpbnQgaGZzcGx1c19tYXBfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBhYmxvY2ssIGludCBjcmVhdGUsCiYjNDM7CQkJdTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKIAlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCWludCByZXMgPSAtRUlPOwotCXUzMiBhYmxvY2ssIGRibG9jaywgbWFzazsKLQlzZWN0b3JfdCBzZWN0b3I7Ci0JaW50IHdhc19kaXJ0eSA9IDA7CiYjNDM7CWludCB3YXNfZGlydHk7CiYjNDM7CWludCByZXM7CiAKLQkvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqLwotCWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlpZiAoYmFsbG9jKQomIzQzOwkJKmJhbGxvYyA9IGZhbHNlOwogCi0JaWYgKGlibG9jayAmZ3Q7PSBoaXAtJmd0O2ZzX2Jsb2NrcykgewomIzQzOwlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7CiAJCWlmICghY3JlYXRlKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKIAkJCXJldHVybiAtRUlPOwotCQlpZiAoYWJsb2NrICZndDs9IGhpcC0mZ3Q7YWxsb2NfYmxvY2tzKSB7Ci0JCQlyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7Ci0JCQlpZiAocmVzKQotCQkJCXJldHVybiByZXM7Ci0JCX0KLQl9IGVsc2UKLQkJY3JlYXRlID0gMDsKJiM0MzsJCXJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCWlmIChiYWxsb2MpCiYjNDM7CQkJKmJhbGxvYyA9IHRydWU7CiYjNDM7CX0KIAogCWlmIChhYmxvY2sgJmx0OyBoaXAtJmd0O2ZpcnN0X2Jsb2NrcykgewotCQlkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywgYWJsb2NrKTsKLQkJZ290byBkb25lOwomIzQzOwkJKm1heF9ibG9ja3MgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC0mZ3Q7Zmlyc3RfZXh0ZW50cywKJiM0MzsJCQkJCQkgICAgIGFibG9jaywKJiM0MzsJCQkJCQkgICAgIGRibG9jayk7CiYjNDM7CQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaW5vZGUtJmd0O2lfaW5vID09IEhGU1BMVVNfRVhUX0NOSUQpCkBAIC0yNzIsMTEgJiM0MzsyOTMsNDQgQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJbXV0ZXhfdW5sb2NrKCZhbXA7aGlwLSZndDtleHRlbnRzX2xvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAotCQkJCQlhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCk7CiYjNDM7CSptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtJmd0O2NhY2hlZF9leHRlbnRzLAomIzQzOwkJCQkJICAgICBhYmxvY2sgLSBoaXAtJmd0O2NhY2hlZF9zdGFydCwKJiM0MzsJCQkJCSAgICAgZGJsb2NrKTsKIAltdXRleF91bmxvY2soJmFtcDtoaXAtJmd0O2V4dGVudHNfbG9jayk7CiAKLWRvbmU6CiYjNDM7CWlmICh3YXNfZGlydHkpCiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovCiYjNDM7aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKJiM0MzsJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXNrLCBtYXhfYmxvY2tzOwomIzQzOwlzZWN0b3JfdCBzZWN0b3I7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovCiYjNDM7CWFibG9jayA9IGlibG9jayAmZ3Q7Jmd0OyBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwomIzQzOwlpZiAoaWJsb2NrICZndDs9IGhpcC0mZ3Q7ZnNfYmxvY2tzKSB7CiYjNDM7CQlpZiAoIWNyZWF0ZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCWlmIChpYmxvY2sgJmd0OyBoaXAtJmd0O2ZzX2Jsb2NrcykKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsJfSBlbHNlCiYjNDM7CQljcmVhdGUgPSAwOwomIzQzOwomIzQzOwlyZXMgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgY3JlYXRlLCAmYW1wO2RibG9jaywgJmFtcDttYXhfYmxvY2tzLAomIzQzOwkJCQkgIE5VTEwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKIAloZnNfZGJnKCYjMzQ7aW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XG4mIzM0OywKIAkJaW5vZGUtJmd0O2lfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTsKIApAQCAtMjkwLDkgJiM0MzszNDQsOCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQloaXAtJmd0O3BoeXNfc2l6ZSAmIzQzOz0gc2ItJmd0O3NfYmxvY2tzaXplOwogCQloaXAtJmd0O2ZzX2Jsb2NrcyYjNDM7JiM0Mzs7CiAJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgc2ItJmd0O3NfYmxvY2tzaXplKTsKLQl9Ci0JaWYgKGNyZWF0ZSB8fCB3YXNfZGlydHkpCiAJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1MywyMCAmIzQzOzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCQlpbm9kZS0mZ3Q7aV9pbm8sIChsb25nIGxvbmcpaGlwLSZndDtwaHlzX3NpemUsIGlub2RlLSZndDtpX3NpemUpOwogCiAJaWYgKGlub2RlLSZndDtpX3NpemUgJmd0OyBoaXAtJmd0O3BoeXNfc2l6ZSkgewotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7Ci0JCXN0cnVjdCBmb2xpbyAqZm9saW87Ci0JCXZvaWQgKmZzZGF0YSA9IE5VTEw7Ci0JCWxvZmZfdCBzaXplID0gaW5vZGUtJmd0O2lfc2l6ZTsKJiM0MzsJCWlmIChTX0lTUkVHKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJcmVzID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW5vZGUtJmd0O2lfc2l6ZSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLSZndDtpX21hcHBpbmc7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJCQl2b2lkICpmc2RhdGEgPSBOVUxMOwomIzQzOwomIzQzOwkJCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywKJiM0MzsJCQkJCQkgIGlub2RlLSZndDtpX3NpemUsIDAsCiYjNDM7CQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7CiYjNDM7CQkJaWYgKHJlcykKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsCiYjNDM7CQkJCQkJaW5vZGUtJmd0O2lfc2l6ZSwgMCwgMCwKJiM0MzsJCQkJCQlmb2xpbywgZnNkYXRhKTsKJiM0MzsJCQlpZiAocmVzICZsdDsgMCkKJiM0MzsJCQkJcmV0dXJuOwomIzQzOwomIzQzOwkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwkJfQogCi0JCXJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwKLQkJCQkJICAmYW1wO2ZvbGlvLCAmYW1wO2ZzZGF0YSk7Ci0JCWlmIChyZXMpCi0JCQlyZXR1cm47Ci0JCXJlcyA9IGdlbmVyaWNfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIDAsCi0JCQkJCWZvbGlvLCBmc2RhdGEpOwotCQlpZiAocmVzICZsdDsgMCkKLQkJCXJldHVybjsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgaWYgKGlub2RlLSZndDtpX3NpemUgPT0gaGlwLSZndDtwaHlzX3NpemUpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZmlsZS5jIGIvZnMvaGZzcGx1cy9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODI2Nzg0ODhmYjA1NAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvZmlsZS5jCkBAIC0wLDAgJiM0MzsxLDMwNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQomIzQzOwkJaW5vZGUgPSBIRlNQTFVTX0koaW5vZGUpLSZndDtyc3JjX2lub2RlOwomIzQzOwlpZiAoIShmaWxlLSZndDtmX2ZsYWdzICZhbXA7IE9fTEFSR0VGSUxFKSAmYW1wOyZhbXA7IGlfc2l6ZV9yZWFkKGlub2RlKSAmZ3Q7IE1BWF9OT05fTEZTKQomIzQzOwkJcmV0dXJuIC1FT1ZFUkZMT1c7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KTsKJiM0MzsJZmlsZS0mZ3Q7Zl9tb2RlIHw9IEZNT0RFX0NBTl9PRElSRUNUOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsKJiM0MzsJaWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpCiYjNDM7CQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7CiYjNDM7CWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbXA7SEZTUExVU19JKGlub2RlKS0mZ3Q7b3BlbmNudCkpIHsKJiM0MzsJCWlub2RlX2xvY2soaW5vZGUpOwomIzQzOwkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKJiM0MzsJCWlmIChpbm9kZS0mZ3Q7aV9mbGFncyAmYW1wOyBTX0RFQUQpIHsKJiM0MzsJCQloZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtJmd0O2lfaW5vLAomIzQzOwkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwomIzQzOwkJCWhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTsKJiM0MzsJCX0KJiM0MzsJCWlub2RlX3VubG9jayhpbm9kZSk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKJiM0MzsJCSAgICAgICBpbnQgZGF0YXN5bmMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nLSZndDtob3N0OwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtJmd0O2lfc2I7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwomIzQzOwlpbnQgZXJyb3IgPSAwLCBlcnJvcjI7CiYjNDM7CiYjNDM7CWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAomIzQzOwkJaW5vZGUtJmd0O2lfaW5vLCBzdGFydCwgZW5kKTsKJiM0MzsKJiM0MzsJZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFN5bmMgaW5vZGUgbWV0YWRhdGEgaW50byB0aGUgY2F0YWxvZyBhbmQgZXh0ZW50IHRyZWVzLgomIzQzOwkgKi8KJiM0MzsJc3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLgomIzQzOwkgKi8KJiM0MzsJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAomIzQzOwkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKJiM0MzsJCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfRVhUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKJiM0MzsJCWNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0KJiM0MzsJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS0mZ3Q7ZXh0X3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJaWYgKCFlcnJvcikKJiM0MzsJCQllcnJvciA9IGVycm9yMjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKJiM0MzsJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksCiYjNDM7CQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJCWVycm9yMiA9CiYjNDM7CQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoCiYjNDM7CQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwomIzQzOwkJCWlmICghZXJyb3IpCiYjNDM7CQkJCWVycm9yID0gZXJyb3IyOwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKSkKJiM0MzsJCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKJiM0MzsJCQkJJmFtcDtIRlNQTFVTX0koc2JpLSZndDthbGxvY19maWxlKS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQljbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwomIzQzOwkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7CiYjNDM7CQlpZiAoIWVycm9yKQomIzQzOwkJCWVycm9yID0gZXJyb3IyOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKJiM0MzsJaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7CiYjNDM7CiYjNDM7CWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlpZiAoIWVycm9yKQomIzQzOwkJZXJyb3IgPSBlcnJvcjI7CiYjNDM7CiYjNDM7CWlmICghdGVzdF9iaXQoSEZTUExVU19TQl9OT0JBUlJJRVIsICZhbXA7c2JpLSZndDtmbGFncykpCiYjNDM7CQlibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtJmd0O2lfc2ItJmd0O3NfYmRldik7CiYjNDM7CiYjNDM7CXJldHVybiBlcnJvcjsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGUKJiM0MzsgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseQomIzQzOyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb24KJiM0MzsgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQkJc3RydWN0IGlvdl9pdGVyICpmcm9tKQomIzQzO3sKJiM0MzsJbG9mZl90IG9mZnNldCA9IGlvY2ItJmd0O2tpX3BvcywgZW5kOwomIzQzOwlzc2l6ZV90IHdyaXR0ZW47CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7PSB+SU9DQl9ESVJFQ1Q7CiYjNDM7CiYjNDM7CXdyaXR0ZW4gPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20sCiYjNDM7CQkJCQkgICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkJCSAgICBOVUxMLCBOVUxMKTsKJiM0MzsJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJcmV0dXJuIHdyaXR0ZW47CiYjNDM7CiYjNDM7CWVuZCA9IGlvY2ItJmd0O2tpX3BvcyAmIzQzOyB3cml0dGVuIC0gMTsKJiM0MzsJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLSZndDtraV9maWxwLSZndDtmX21hcHBpbmcsCiYjNDM7CQkJCQkgICBvZmZzZXQsIGVuZCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsKJiM0MzsJaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItJmd0O2tpX2ZpbHAtJmd0O2ZfbWFwcGluZywKJiM0MzsJCQkJIG9mZnNldCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAomIzQzOwkJCQkgZW5kICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsCiYjNDM7CQkJCQlzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiYjNDM7ewomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGZyb20sCiYjNDM7CQkJICAgJmFtcDtoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywKJiM0MzsJCQkgICAmYW1wO2hmc3BsdXNfd3JpdGVfZGlvX29wcywKJiM0MzsJCQkgICAwLCBOVUxMLCAwKTsKJiM0MzsJaWYgKHJldCA9PSAtRU5PVEJMSykKJiM0MzsJCXJldCA9IDA7CiYjNDM7CWVsc2UgaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHsKJiM0MzsJCXNzaXplX3Qgd3JpdHRlbjsKJiM0MzsKJiM0MzsJCXdyaXR0ZW4gPSBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20pOwomIzQzOwkJaWYgKHdyaXR0ZW4gJmx0OyAwKQomIzQzOwkJCXJldHVybiB3cml0dGVuOwomIzQzOwkJcmV0ICYjNDM7PSB3cml0dGVuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtJmd0O2lfc2IpOwomIzQzOwlsb2ZmX3QgdG90YWxfY2FwYWNpdHk7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpbm9kZV9sb2NrKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VuZXJpY193cml0ZV9jaGVja3MoaW9jYiwgaXRlcik7CiYjNDM7CWlmIChyZXQgJmx0Oz0gMCkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwl0b3RhbF9jYXBhY2l0eSA9IChsb2ZmX3Qpc2JpLSZndDt0b3RhbF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7PSB0b3RhbF9jYXBhY2l0eSkgewomIzQzOwkJcmV0ID0gLUVGQklHOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJcmV0ID0gZXJyOwomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlvY2ItJmd0O2tpX3BvcyAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkgewomIzQzOwkJbG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwkJbG9mZl90IG5ld19zaXplID0gaW9jYi0mZ3Q7a2lfcG9zOwomIzQzOwomIzQzOwkJaWYgKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfRElSRUNUKSB7CiYjNDM7CQkJbmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLAomIzQzOwkJCQkJICBIRlNQTFVTX0koaW5vZGUpLSZndDtwaHlzX3NpemUpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaV9zaXplX3dyaXRlKGlub2RlLCBuZXdfc2l6ZSk7CiYjNDM7CQllcnIgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpb2NiLSZndDtraV9wb3MpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpOwomIzQzOwkJCXJldCA9IGVycjsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwl9IGVsc2UgaWYgKChpb2NiLSZndDtraV9mbGFncyAmYW1wOyBJT0NCX0RJUkVDVCkgJmFtcDsmYW1wOwomIzQzOwkJICAgSEZTUExVU19JKGlub2RlKS0mZ3Q7cGh5c19zaXplICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQlpX3NpemVfd3JpdGUoaW5vZGUsIEhGU1BMVVNfSShpbm9kZSktJmd0O3BoeXNfc2l6ZSk7CiYjNDM7CQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpCiYjNDM7CQlyZXQgPSBoZnNwbHVzX2Rpb193cml0ZV9pdGVyKGlvY2IsIGl0ZXIpOwomIzQzOwllbHNlIHsKJiM0MzsJCXJldCA9IGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaXRlciwKJiM0MzsJCQkJCQkmYW1wO2hmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLAomIzQzOwkJCQkJCU5VTEwsIE5VTEwpOwomIzQzOwl9CiYjNDM7CiYjNDM7dW5sb2NrOgomIzQzOwlpbm9kZV91bmxvY2soaW5vZGUpOwomIzQzOwomIzQzOwlpZiAocmV0ICZndDsgMCkKJiM0MzsJCXJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwKJiM0MzsJCQkJCXN0cnVjdCBpb3ZfaXRlciAqaXRlcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwlzc2l6ZV90IHJldDsKJiM0MzsKJiM0MzsJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9ESVJFQ1QpIHsKJiM0MzsJCWZpbGVfYWNjZXNzZWQoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlciwKJiM0MzsJCQkJICAgJmFtcDtoZnNwbHVzX2lvbWFwX29wcywKJiM0MzsJCQkJICAgTlVMTCwgMCwgTlVMTCwgMCk7CiYjNDM7CX0gZWxzZQomIzQzOwkJcmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTsKJiM0MzsKJiM0MzsJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLSZndDtmX21hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CiYjNDM7CXN3aXRjaCAod2hlbmNlKSB7CiYjNDM7CWNhc2UgU0VFS19IT0xFOgomIzQzOwkJaW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpOwomIzQzOwkJb2Zmc2V0ID0gaW9tYXBfc2Vla19ob2xlKGlub2RlLCBvZmZzZXQsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzOwkJaW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTRUVLX0RBVEE6CiYjNDM7CQlpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7CiYjNDM7CQlvZmZzZXQgPSBpb21hcF9zZWVrX2RhdGEoaW5vZGUsIG9mZnNldCwgJmFtcDtoZnNwbHVzX2lvbWFwX29wcyk7CiYjNDM7CQlpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGdlbmVyaWNfZmlsZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9mZnNldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHZmc19zZXRwb3MoZmlsZSwgb2Zmc2V0LCBpbm9kZS0mZ3Q7aV9zYi0mZ3Q7c19tYXhieXRlcyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7CiYjNDM7CS5sbHNlZWsJCT0gaGZzcGx1c19maWxlX2xsc2VlaywKJiM0MzsJLnJlYWRfaXRlcgk9IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIsCiYjNDM7CS53cml0ZV9pdGVyCT0gaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIsCiYjNDM7CS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAomIzQzOwkuc3BsaWNlX3JlYWQJPSBmaWxlbWFwX3NwbGljZV9yZWFkLAomIzQzOwkuc3BsaWNlX3dyaXRlCT0gaXRlcl9maWxlX3NwbGljZV93cml0ZSwKJiM0MzsJLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKJiM0MzsJLm9wZW4JCT0gaGZzcGx1c19maWxlX29wZW4sCiYjNDM7CS5yZWxlYXNlCT0gaGZzcGx1c19maWxlX3JlbGVhc2UsCiYjNDM7CS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCiYjNDM7fTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTE3NSw2ICYjNDM7MTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXJldHVybiBzYi0mZ3Q7c19mc19pbmZvOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQaHlzaWNhbCBieXRlIG9mZnNldCBvZiBhbGxvY2F0aW9uIGJsb2NrICYjMzk7ZGJsb2NrJiMzOTsgb24gdGhlIHZvbHVtZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCQkJICB1MzIgZGJsb2NrKQomIzQzO3sKJiM0MzsJc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7CiYjNDM7CWxvZmZfdCBwaHlzX2J5dGVzOwomIzQzOwomIzQzOwlwaHlzX2J5dGVzID0gZGJsb2NrOwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYmktJmd0O2ZzX3NoaWZ0OwomIzQzOwlwaHlzX2J5dGVzICYjNDM7PSBzYmktJmd0O2Jsb2Nrb2Zmc2V0OwomIzQzOwlwaHlzX2J5dGVzICZsdDsmbHQ7PSBzYi0mZ3Q7c19ibG9ja3NpemVfYml0czsKJiM0MzsKJiM0MzsJcmV0dXJuIHBoeXNfYnl0ZXM7CiYjNDM7fQogCiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHsKIAlhdG9taWNfdCBvcGVuY250OwpAQCAtNDMwLDEyICYjNDM7NDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7CiAKJiM0MzsvKiBmaWxlLmMgKi8KJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uczsKJiM0MztpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCiYjNDM7CQkgICAgICAgaW50IGRhdGFzeW5jKTsKJiM0MzsKIC8qIGV4dGVudHMuYyAqLwogaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLAogCQkJY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsyKTsKIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAogCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiYjNDM7aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLAomIzQzOwkJCXUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYyk7CiBpbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsCiAJCSAgICAgIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSk7CiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpOwpAQCAtNDQzLDYgJiM0Mzs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zOwogCkBAIC00NjIsOCAmIzQzOzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCQkgICAgc3RydWN0IGtzdGF0ICpzdGF0LCB1MzIgcmVxdWVzdF9tYXNrLAogCQkgICAgdW5zaWduZWQgaW50IHF1ZXJ5X2ZsYWdzKTsKLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCwKLQkJICAgICAgIGludCBkYXRhc3luYyk7CiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpOwogaW50IGhmc3BsdXNfZmlsZWF0dHJfc2V0KHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCQkJIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCAxYzU3Yzg3M2YwNWQ2Li4wODczMWVjMGNlY2QzIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xOCwxNSAmIzQzOzE4LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Vpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ZpbGVhdHRyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2lvbWFwLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aGZzcGx1c19yYXcuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3hhdHRyLmgmIzM0OwotCi1zdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKLXsKLQlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7Ci19CiYjNDM7I2luY2x1ZGUgJiMzNDtpb21hcC5oJiMzNDsKIAogc3RhdGljIHZvaWQgaGZzcGx1c193cml0ZV9mYWlsZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCB0bykKIHsKQEAgLTEyMCw2NyAmIzQzOzExNywxMyBAQCBzdGF0aWMgYm9vbCBoZnNwbHVzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgbWFzaykKIAlyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTsKIH0KIAotc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLSZndDtraV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0mZ3Q7Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLSZndDtob3N0OwotCWxvZmZfdCBpc2l6ZTsKLQlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKLQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwotCXNzaXplX3QgcmV0OwotCi0JLyoKLQkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgotCSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KLQkgKi8KLQlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKLQkJbG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlOwotCi0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCS8qCi0JCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQotCQkgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuCi0JCSAqLwotCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7Ci0KLQkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X29mZiA9IGlzaXplOwotCQllbmRfb2ZmID0gKGVuZCAmZ3Q7IDApID8gZW5kIC0gMSA6IGVuZDsKLQotCQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKLQkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7Ci0KLQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpOwotCX0KLQotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwotCi0JLyoKLQkgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXcKLQkgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLgotCSAqLwotCWlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IHJldCAmbHQ7IDApKSB7Ci0JCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCi0JCWlmIChlbmQgJmd0OyBpc2l6ZSkKLQkJCWhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiB9CkBAIC0xODgsOCAmIzQzOzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAotCS53cml0ZXBhZ2VzCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbywKJiM0MzsJLndyaXRlcGFnZXMJPSBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMsCiAJLndyaXRlX2JlZ2luCT0gaGZzcGx1c193cml0ZV9iZWdpbiwKIAkud3JpdGVfZW5kCT0gZ2VuZXJpY193cml0ZV9lbmQsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKQEAgLTE5NywxOCAmIzQzOzE0MCw3MCBAQCBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHsKIAkucmVsZWFzZV9mb2xpbwk9IGhmc3BsdXNfcmVsZWFzZV9mb2xpbywKIH07CiAKLWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0gewomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHMgPSB7CiAJLmRpcnR5X2ZvbGlvCT0gYmxvY2tfZGlydHlfZm9saW8sCiAJLmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLAotCS5yZWFkX2ZvbGlvCT0gaGZzcGx1c19yZWFkX2ZvbGlvLAomIzQzOwkucmVhZF9mb2xpbwk9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLAogCS53cml0ZV9iZWdpbgk9IGhmc3BsdXNfd3JpdGVfYmVnaW4sCiAJLndyaXRlX2VuZAk9IGdlbmVyaWNfd3JpdGVfZW5kLAogCS5ibWFwCQk9IGhmc3BsdXNfYm1hcCwKLQkuZGlyZWN0X0lPCT0gaGZzcGx1c19kaXJlY3RfSU8sCi0JLndyaXRlcGFnZXMJPSBoZnNwbHVzX3dyaXRlcGFnZXMsCiYjNDM7CS53cml0ZXBhZ2VzCT0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsCiAJLm1pZ3JhdGVfZm9saW8JPSBidWZmZXJfbWlncmF0ZV9mb2xpbywKIH07CiAKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CWlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGhmc3BsdXNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjKQomIzQzO3sKJiM0MzsJaW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKJiM0MzsJCQkgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4IHdwYyA9IHsKJiM0MzsJCS5pbm9kZQk9IG1hcHBpbmctJmd0O2hvc3QsCiYjNDM7CQkud2JjCT0gd2JjLAomIzQzOwkJLm9wcwk9ICZhbXA7aGZzcGx1c193cml0ZWJhY2tfb3BzLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gaW9tYXBfd3JpdGVwYWdlcygmYW1wO3dwYyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCAmYW1wO2hmc3BsdXNfaW9tYXBfb3BzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7CiYjNDM7CS5yZWFkX2ZvbGlvCQk9IGhmc3BsdXNfcmVhZF9mb2xpbywKJiM0MzsJLnJlYWRhaGVhZAkJPSBoZnNwbHVzX3JlYWRhaGVhZCwKJiM0MzsJLndyaXRlcGFnZXMJCT0gaGZzcGx1c193cml0ZXBhZ2VzLAomIzQzOwkuZGlydHlfZm9saW8JCT0gaW9tYXBfZGlydHlfZm9saW8sCiYjNDM7CS5ibWFwCQkJPSBoZnNwbHVzX2FvcF9ibWFwLAomIzQzOwkubWlncmF0ZV9mb2xpbwkJPSBmaWxlbWFwX21pZ3JhdGVfZm9saW8sCiYjNDM7CS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUJPSBpb21hcF9pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiYjNDM7CS5lcnJvcl9yZW1vdmVfZm9saW8JPSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbywKJiM0MzsJLnJlbGVhc2VfZm9saW8JCT0gaW9tYXBfcmVsZWFzZV9mb2xpbywKJiM0MzsJLmludmFsaWRhdGVfZm9saW8JPSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLAomIzQzOwkuc3dhcF9hY3RpdmF0ZQkJPSBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUsCiYjNDM7fTsKJiM0MzsKIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LApAQCAtMjY4LDM1ICYjNDM7MjYzLDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKCEoZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBPX0xBUkdFRklMRSkgJmFtcDsmYW1wOyBpX3NpemVfcmVhZChpbm9kZSkgJmd0OyBNQVhfTk9OX0xGUykKLQkJcmV0dXJuIC1FT1ZFUkZMT1c7Ci0JYXRvbWljX2luYygmYW1wO0hGU1BMVVNfSShpbm9kZSktJmd0O29wZW5jbnQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQotCWlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKQotCQlpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktJmd0O3JzcmNfaW5vZGU7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFtcDtIRlNQTFVTX0koaW5vZGUpLSZndDtvcGVuY250KSkgewotCQlpbm9kZV9sb2NrKGlub2RlKTsKLQkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKLQkJaWYgKGlub2RlLSZndDtpX2ZsYWdzICZhbXA7IFNfREVBRCkgewotCQkJaGZzcGx1c19kZWxldGVfY2F0KGlub2RlLSZndDtpX2lubywKLQkJCQkJICAgSEZTUExVU19TQihzYiktJmd0O2hpZGRlbl9kaXIsIE5VTEwpOwotCQkJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwotCQl9Ci0JCWlub2RlX3VubG9jayhpbm9kZSk7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJCSAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQogewpAQCAtMzExLDEwICYjNDM7Mjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCSAgICBhdHRyLSZndDtpYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiAJCWlmIChhdHRyLSZndDtpYV9zaXplICZndDsgaW5vZGUtJmd0O2lfc2l6ZSkgewotCQkJZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwKLQkJCQkJCQkgICBhdHRyLSZndDtpYV9zaXplKTsKLQkJCWlmIChlcnJvcikKJiM0MzsJCQlsb2ZmX3Qgb2xkX3NpemUgPSBpbm9kZS0mZ3Q7aV9zaXplOwomIzQzOwomIzQzOwkJCWlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci0mZ3Q7aWFfc2l6ZSk7CiYjNDM7CQkJZXJyb3IgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKJiM0MzsJCQlpZiAoZXJyb3IpIHsKJiM0MzsJCQkJaV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7CiAJCQkJcmV0dXJuIGVycm9yOwomIzQzOwkJCX0KIAkJfQogCQl0cnVuY2F0ZV9zZXRzaXplKGlub2RlLCBhdHRyLSZndDtpYV9zaXplKTsKIAkJaGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTsKQEAgLTM1Myw4NiAmIzQzOzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAogCXJldHVybiAwOwogfQogCi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsCi0JCSAgICAgICBpbnQgZGF0YXN5bmMpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtJmd0O2ZfbWFwcGluZy0mZ3Q7aG9zdDsKLQlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKLQlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLSZndDtpX3NiKTsKLQlzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS0mZ3Q7c192aGRyOwotCWludCBlcnJvciA9IDAsIGVycm9yMjsKLQotCWhmc19kYmcoJiMzNDtpbm9kZS0mZ3Q7aV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcbiYjMzQ7LAotCQlpbm9kZS0mZ3Q7aV9pbm8sIHN0YXJ0LCBlbmQpOwotCi0JZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCWlub2RlX2xvY2soaW5vZGUpOwotCi0JLyoKLQkgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy4KLQkgKi8KLQlzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTsKLQotCS8qCi0JICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuCi0JICovCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLAotCQkJCSZhbXA7SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksICZhbXA7aGlwLSZndDtmbGFncyk7Ci0JCWVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2NhdF90cmVlLSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nKTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksCi0JCQkJJmFtcDtIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQljbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0KLQkJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLSZndDtleHRfdHJlZS0mZ3Q7aW5vZGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQlpZiAoc2JpLSZndDthdHRyX3RyZWUpIHsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktJmd0O2ZsYWdzKSkgewotCQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCAmYW1wO2hpcC0mZ3Q7ZmxhZ3MpOwotCQkJZXJyb3IyID0KLQkJCQlmaWxlbWFwX3dyaXRlX2FuZF93YWl0KAotCQkJCQkgICAgc2JpLSZndDthdHRyX3RyZWUtJmd0O2lub2RlLSZndDtpX21hcHBpbmcpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IGVycm9yMjsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksICZhbXA7aGlwLSZndDtmbGFncykpCi0JCQlwcl9lcnIoJiMzNDtzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcbiYjMzQ7KTsKLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwKLQkJCQkmYW1wO0hGU1BMVVNfSShzYmktJmd0O2FsbG9jX2ZpbGUpLSZndDtmbGFncykpIHsKLQkJY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgJmFtcDtoaXAtJmd0O2ZsYWdzKTsKLQkJZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktJmd0O2FsbG9jX2ZpbGUtJmd0O2lfbWFwcGluZyk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLQltdXRleF9sb2NrKCZhbXA7c2JpLSZndDt2aF9tdXRleCk7Ci0JaGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTsKLQltdXRleF91bmxvY2soJmFtcDtzYmktJmd0O3ZoX211dGV4KTsKLQotCWVycm9yMiA9IGhmc3BsdXNfY29tbWl0X3N1cGVyYmxvY2soaW5vZGUtJmd0O2lfc2IpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gZXJyb3IyOwotCi0JaWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgJmFtcDtzYmktJmd0O2ZsYWdzKSkKLQkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLSZndDtpX3NiLSZndDtzX2JkZXYpOwotCi0JaW5vZGVfdW5sb2NrKGlub2RlKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewogCS5zZXRhdHRyCT0gaGZzcGx1c19zZXRhdHRyLAogCS5nZXRhdHRyCT0gaGZzcGx1c19nZXRhdHRyLApAQCAtNDU0LDE5ICYjNDM7MzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0gewogCS5saXN0eGF0dHIJPSBoZnNwbHVzX2xpc3R4YXR0ciwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0gewotCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZF9pdGVyCT0gZ2VuZXJpY19maWxlX3JlYWRfaXRlciwKLQkud3JpdGVfaXRlcgk9IGdlbmVyaWNfZmlsZV93cml0ZV9pdGVyLAotCS5tbWFwX3ByZXBhcmUJPSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLAotCS5zcGxpY2VfcmVhZAk9IGZpbGVtYXBfc3BsaWNlX3JlYWQsCi0JLnNwbGljZV93cml0ZQk9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLmZzeW5jCQk9IGhmc3BsdXNfZmlsZV9mc3luYywKLQkub3BlbgkJPSBoZnNwbHVzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsCi19OwotCiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJCXVtb2RlX3QgbW9kZSkKIHsKQEAgLTUxMyw3ICYjNDM7MzkwLDcgQEAgc3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJc2JpLSZndDtmaWxlX2NvdW50JiM0MzsmIzQzOzsKIAkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZV9ub2hpZ2htZW0oaW5vZGUpOwotCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJaW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7YV9vcHMgPSAmYW1wO2hmc3BsdXNfc3ltbGlua19hb3BzOwogCQloaXAtJmd0O2NsdW1wX2Jsb2NrcyA9IDE7CiAJfSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLSZndDtpX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtJmd0O2lfbW9kZSkgfHwKIAkJICAgU19JU0ZJRk8oaW5vZGUtJmd0O2lfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtJmd0O2lfbW9kZSkpIHsKQEAgLTY1NCw3ICYjNDM7NTMxLDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKQogCQl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWlub2RlX25vaGlnaG1lbShpbm9kZSk7Ci0JCQlpbm9kZS0mZ3Q7aV9tYXBwaW5nLSZndDthX29wcyA9ICZhbXA7aGZzcGx1c19hb3BzOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzID0gJmFtcDtoZnNwbHVzX3N5bWxpbmtfYW9wczsKIAkJfSBlbHNlIHsKIAkJCWlub2RlLSZndDtpX29wID0gJmFtcDtoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtJmd0O2lfbW9kZSwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5jCkBAIC0wLDAgJiM0MzsxLDE4OSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyoKJiM0MzsgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW9tYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGFnZW1hcC5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7aGZzcGx1c19mcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2hmc3BsdXNfcmF3LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW9tYXAuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwKJiM0MzsJCQkJIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncywKJiM0MzsJCQkJIHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKQomIzQzO3sKJiM0MzsJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLSZndDtpX3NiOwomIzQzOwlzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTsKJiM0MzsJc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTsKJiM0MzsJdTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzOwomIzQzOwlsb2ZmX3QgYWJsb2NrX29mZnNldCwgYWJsb2NrX2J5dGVzOwomIzQzOwlsb2ZmX3QgYmxvY2tfc3RhcnQ7CiYjNDM7CWJvb2wgaXNfbmV3OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAoIW1heV9hbGxvYykgewomIzQzOwkJLyogQ29tcGxldGVseSBiZXlvbmQgRU9GLiBUcmVhdCBhcyBob2xlICovCiYjNDM7CQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpICZsdDs9IG9mZnNldCkgewomIzQzOwkJCWlvbWFwLSZndDt0eXBlID0gSU9NQVBfSE9MRTsKJiM0MzsJCQlpb21hcC0mZ3Q7YWRkciA9IElPTUFQX05VTExfQUREUjsKJiM0MzsJCQlpb21hcC0mZ3Q7b2Zmc2V0ID0gb2Zmc2V0OwomIzQzOwkJCWlvbWFwLSZndDtsZW5ndGggPSBsZW5ndGg7CiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBDbGFtcCBsZW5ndGggaWYgdGhlIHJlcXVlc3RlZCByYW5nZSBnb2VzIGJleW9uZCBpX3NpemUgKi8KJiM0MzsJCWlmIChvZmZzZXQgJiM0MzsgbGVuZ3RoICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKSB7CiYjNDM7CQkJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gaV9ibG9ja3NpemUoaW5vZGUpOwomIzQzOwomIzQzOwkJCWxlbmd0aCA9IHJvdW5kX3VwKGlfc2l6ZSwgYmxvY2tzaXplKSAtIG9mZnNldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlhYmxvY2sgPSBvZmZzZXQgJmd0OyZndDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJZXJyID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgJmFtcDtkYmxvY2ssCiYjNDM7CQkJCSAmYW1wO21heF9ibG9ja3MsIE5VTEwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJYWJsb2NrX29mZnNldCA9IG9mZnNldCAmYW1wOyAoc2JpLSZndDthbGxvY19ibGtzeiAtIDEpOwomIzQzOwlhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgJmx0OyZsdDsgc2JpLSZndDthbGxvY19ibGtzel9zaGlmdDsKJiM0MzsKJiM0MzsJbGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGFibG9ja19ieXRlcyAtIGFibG9ja19vZmZzZXQpOwomIzQzOwlibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpOwomIzQzOwlpc19uZXcgPSBtYXlfYWxsb2MgJmFtcDsmYW1wOyBibG9ja19zdGFydCAmZ3Q7PSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsJaWYgKG1heV9hbGxvYyAmYW1wOyZhbXA7ICFpc19uZXcgJmFtcDsmYW1wOyBvZmZzZXQgJmx0OyBoaXAtJmd0O3BoeXNfc2l6ZSkKJiM0MzsJCWxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBoaXAtJmd0O3BoeXNfc2l6ZSAtIG9mZnNldCk7CiYjNDM7CiYjNDM7CWlvbWFwLSZndDtiZGV2ID0gc2ItJmd0O3NfYmRldjsKJiM0MzsJaW9tYXAtJmd0O29mZnNldCA9IG9mZnNldDsKJiM0MzsJaW9tYXAtJmd0O2xlbmd0aCA9IGxlbmd0aDsKJiM0MzsJaW9tYXAtJmd0O2FkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICYjNDM7IGFibG9ja19vZmZzZXQ7CiYjNDM7CWlvbWFwLSZndDt0eXBlID0gSU9NQVBfTUFQUEVEOwomIzQzOwlpb21hcC0mZ3Q7ZmxhZ3MgPSBJT01BUF9GX01FUkdFRDsKJiM0MzsKJiM0MzsJaWYgKGlzX25ldykKJiM0MzsJCWlvbWFwLSZndDtmbGFncyB8PSBJT01BUF9GX05FVzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAomIzQzOwkJCQlsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCiYjNDM7CQkJCSAgICAgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAomIzQzOwkJCQkgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9faGZzcGx1c19pb21hcF9iZWdpbihpbm9kZSwKJiM0MzsJCQkJICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsCiYjNDM7CQkJCSAgICAgaW9tYXAsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0gewomIzQzOwkuaW9tYXBfYmVnaW4gPSBoZnNwbHVzX2lvbWFwX2JlZ2luLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpCiYjNDM7ICoKJiM0MzsgKiBBZHZhbmNlIHRoZSBhbGxvY2F0ZWQtYW5kLXplcm9lZCBoaWdoLXdhdGVyIG1hcmsKJiM0MzsgKiAoaGlwLSZndDtwaHlzX3NpemUgLyBoaXAtJmd0O2ZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLAomIzQzOwkJCQkgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sCiYjNDM7CQkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGlvbWFwICppb21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKJiM0MzsJbG9mZl90IGVuZDsKJiM0MzsJYm9vbCBkaXJ0aWVkID0gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghd3JpdHRlbikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwllbmQgPSByb3VuZF91cChwb3MgJiM0Mzsgd3JpdHRlbiwgc2ItJmd0O3NfYmxvY2tzaXplKTsKJiM0MzsKJiM0MzsJaWYgKGhpcC0mZ3Q7cGh5c19zaXplICZsdDsgZW5kKSB7CiYjNDM7CQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC0mZ3Q7cGh5c19zaXplKTsKJiM0MzsJCWhpcC0mZ3Q7cGh5c19zaXplID0gZW5kOwomIzQzOwkJaGlwLSZndDtmc19ibG9ja3MgPSBlbmQgJmd0OyZndDsgc2ItJmd0O3NfYmxvY2tzaXplX2JpdHM7CiYjNDM7CQlkaXJ0aWVkID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoZGlydGllZCkKJiM0MzsJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwomIzQzOwomIzQzOwlyZXR1cm4gd3JpdHRlbjsKJiM0Mzt9CiYjNDM7CiYjNDM7Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHsKJiM0MzsJLmlvbWFwX2JlZ2luCT0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbiwKJiM0MzsJLmlvbWFwX2VuZAk9IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kLAomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKCkKJiM0MzsgKgomIzQzOyAqIFplcm8tZXh0ZW5kIHRoZSBiYWNraW5nIHN0b3JlIGZyb20gdGhlIGN1cnJlbnQgcGh5c19zaXplIHVwIHRvICYjMzk7c2l6ZSYjMzk7LgomIzQzOyAqIFVzZWQgYm90aCBieSBoZnNwbHVzX3NldGF0dHIoKSBhbmQgYnkgaGZzcGx1c19maWxlX3RydW5jYXRlKCkuCiYjNDM7ICovCiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpOwomIzQzOwlsb2ZmX3Qgc3RhcnQgPSBoaXAtJmd0O3BoeXNfc2l6ZTsKJiM0MzsKJiM0MzsJaWYgKHNpemUgJmx0Oz0gc3RhcnQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsCiYjNDM7CQkJCSZhbXA7aGZzcGx1c193cml0ZV9pb21hcF9vcHMsIE5VTEwsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKCkgLSBtYXAgZm9saW8gZHVyaW5nIHdyaXRlYmFjawomIzQzOyAqCiYjNDM7ICogQ2FsbGVkIGZvciBlYWNoIGZvbGlvIGR1cmluZyB3cml0ZWJhY2suIElmIHRoZSBmb2xpbyBmYWxscyBvdXRzaWRlCiYjNDM7ICogdGhlIGN1cnJlbnQgaW9tYXAsIHJlbWFwcyBieSBjYWxsaW5nIF9faGZzcGx1c19pb21hcF9iZWdpbigpIGFnYWluLgomIzQzOyAqLwomIzQzO3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlKHN0cnVjdCBpb21hcF93cml0ZXBhZ2VfY3R4ICp3cGMsCiYjNDM7CQkJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LAomIzQzOwkJCQkJdW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAob2Zmc2V0ICZsdDsgd3BjLSZndDtpb21hcC5vZmZzZXQgfHwKJiM0MzsJICAgIG9mZnNldCAmZ3Q7PSB3cGMtJmd0O2lvbWFwLm9mZnNldCAmIzQzOyB3cGMtJmd0O2lvbWFwLmxlbmd0aCkgewomIzQzOwkJZXJyID0gX19oZnNwbHVzX2lvbWFwX2JlZ2luKHdwYy0mZ3Q7aW5vZGUsCiYjNDM7CQkJCQkgICAgb2Zmc2V0LCBsZW4sIDAsCiYjNDM7CQkJCQkgICAgJmFtcDt3cGMtJmd0O2lvbWFwLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHsKJiM0MzsJLndyaXRlYmFja19yYW5nZQk9IGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlLAomIzQzOwkud3JpdGViYWNrX3N1Ym1pdAk9IGlvbWFwX2lvZW5kX3dyaXRlYmFja19zdWJtaXQsCiYjNDM7fTsKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBoZnNwbHVzX3dyaXRlX2Rpb19vcHMgPSB7CiYjNDM7CS5lbmRfaW8JCT0gaW9tYXBfZGlvX2VuZF9pbywKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcywKJiM0MzsJCQkJIHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3BhbikKJiM0Mzt7CiYjNDM7CXJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sICZhbXA7aGZzcGx1c19pb21hcF9vcHMpOwomIzQzO30KZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuaCBiL2ZzL2hmc3BsdXMvaW9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pb21hcC5oCkBAIC0wLDAgJiM0MzsxLDE4IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KJiM0MzsvKgomIzQzOyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbQomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSAomIzQzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzOwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wczsKJiM0MzsKJiM0MztpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7CiYjNDM7aW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLAomIzQzOwkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc2VjdG9yX3QgKnNwYW4pOwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfSEZTUExVU19JT01BUF9IICovCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtNTcxLDYgJiM0Mzs1NzEsNyBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJCWdvdG8gb3V0X2Nsb3NlX2F0dHJfdHJlZTsKIAl9CiAJc2JpLSZndDthbGxvY19maWxlID0gaW5vZGU7CiYjNDM7CW1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAKIAkvKiBMb2FkIHRoZSByb290IGRpcmVjdG9yeSAqLwogCXJvb3QgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfUk9PVF9DTklEKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmgKQEAgLTE3MSwxOCAmIzQzOzE3MSwyMiBAQCBlbnVtIHsKIAlIRlNfWEFUVFJfTkFNRSwKIH07CiAKJiM0MzsjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVAkoMykKJiM0MzsKIHN0cnVjdCBoZnNfZXh0ZW50IHsKIAlfX2JlMTYgYmxvY2s7CiAJX19iZTE2IGNvdW50OwogfTsKLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107CiYjNDM7dHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1tIRlNfRk9SS19FWFRFTlRfQ09VTlRdOwomIzQzOwomIzQzOyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVAkoOCkKIAogLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZXh0ZW50IHsKIAlfX2JlMzIgc3RhcnRfYmxvY2s7CiAJX19iZTMyIGJsb2NrX2NvdW50OwogfSBfX3BhY2tlZDsKLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTsKJiM0Mzt0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07CiAKIC8qIEluZm9ybWF0aW9uIGZvciBhICYjMzQ7Rm9yayYjMzQ7IGluIGEgZmlsZSAqLwogc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oCmluZGV4IDU2YjQzZDU5NGU2ZTIuLjUwZmU2MDM2YjAxYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmgKQEAgLTU2MCw2ICYjNDM7NTYwLDI2IEBAIHN0cnVjdCBpb21hcF9kaW9fb3BzIHsKIAlzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDsKIH07CiAKJiM0MzsvKgomIzQzOyAqIERpcmVjdCBJL08gY29tcGxldGlvbiBoYW5kbGVyCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZQomIzQzO2ludCBpb21hcF9kaW9fZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLAomIzQzOwkJICAgICBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItJmd0O2tpX2ZpbHApOwomIzQzOwomIzQzOwlpZiAoZXJyb3IpCiYjNDM7CQlyZXR1cm4gZXJyb3I7CiYjNDM7CiYjNDM7CWlmIChzaXplICZhbXA7JmFtcDsgaV9zaXplX3JlYWQoaW5vZGUpICZsdDsgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpIHsKJiM0MzsJCWlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IHNpemUpOwomIzQzOwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogLyoKICAqIFdhaXQgZm9yIHRoZSBJL08gdG8gY29tcGxldGUgaW4gaW9tYXBfZGlvX3J3IGV2ZW4gaWYgdGhlIGtpb2NiIGlzIG5vdAogICogc3luY2hyb25vdXMuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODk1NgoJCQkJCQkJb3V0cHV0OiAyNDYKCQkJCQkJCXRob3VnaHRzOiAxNDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgSEZTJiM0MzsgRmlsZXN5c3RlbSBJL08gUGF0Y2ggU2VyaWVzIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQmIzM5O3MgcmVmYWN0b3JpbmcgdGhlIGBoZnNwbHVzYCBmaWxlc3lzdGVtLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHNoaWZ0IGZyb20gYExFR0FDWV9ESVJFQ1RfSU9gIHRvIGBpb21hcGAgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgbmV3IGZpbGVzOiBgZnMvaGZzcGx1cy9maWxlLmNgLCBgZnMvaGZzcGx1cy9pb21hcC5jYCwgYW5kIGBmcy9oZnNwbHVzL2lvbWFwLmhgLCBhbmQgdGhleSYjMzk7dmUgbW9kaWZpZWQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhbmQgYWRkZWQgYSBgaGZzcGx1c19tYXBfZXh0ZW50YCBmdW5jdGlvbi4gSSBzZWUgdGhleSYjMzk7cmUgYWxzbyB1c2luZyBgbG9ja19wYWdlYCBhbmQgYGZvbGlvX3dhaXRfc3RhYmxlYCBub3cgaW4gdGhlIGJsb2NrIGFsbG9jYXRpb24vZnJlZWluZyByb3V0aW5lcy4KCk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzLCBpcyBtZW1vcnkgc2FmZXR5LiAgU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYXZlbnVlcyBmb3IgbGVha2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgcmVwbGFjaW5nIHRoZSBvbGQgZGlyZWN0IGFuZCBidWZmZXJlZCBJTyBwYXRocyB3aXRoIGBpb21hcGAtYmFzZWQgb25lcy4gVGhleSYjMzk7dmUgdXBkYXRlZCB0aGUgYGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIHVzaW5nIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgKHdpdGggYGlvbWFwX2Rpb19yd2AgZm9yIGRpcmVjdCBJL08pLiAgVGhleSBhbHNvIGltcGxlbWVudCBgaGZzcGx1c19pb21hcF9vcHNgLCBhbmQgdGhlIHdyaXRlYmFjay93cml0ZSBJTyBvcGVyYXRpb24gc3RydWN0dXJlcy4gVGhleSYjMzk7cmUgaW1wbGVtZW50aW5nIGBiZWdpbmAgYW5kIGBlbmRgIGZ1bmN0aW9ucyBmb3IgaW9tYXAgYW5kIHdyaXRlIG9wZXJhdGlvbnMsIGFzIHdlbGwgYXMgZnVuY3Rpb25zIGZvciB3cml0ZWJhY2suCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhleSYjMzk7cmUgc3RpY2tpbmcgdG8gc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zOiBgcmVhZF9pdGVyYCwgYHdyaXRlX2l0ZXJgLCBgbGxzZWVrYCwgYGZzeW5jYCwgYG9wZW5gLCBhbmQgYHJlbGVhc2VgLiAgVGhlIGBpb2N0bGAgZnVuY3Rpb24gcmVtYWlucyB1bmNoYW5nZWQgYXQgYGhmc3BsdXNfaW9jdGxgLiBUaGV5JiMzOTt2ZSBtb2RpZmllZCBgaGZzcGx1c19nZXRfYmxvY2tgIHRvIHVzZSBgaGZzcGx1c19tYXBfZXh0ZW50YC4gYGhmc3BsdXNfbWFwX2V4dGVudGAgcmV0dXJucyBgZGJsb2NrYCBhbmQgYG1heF9ibG9ja3NgLiAgU28sIEkgbmVlZCB0byBjaGVjayBob3cgYGRibG9ja2AgYW5kIGBtYXhfYmxvY2tzYCBhcmUgaW5pdGlhbGl6ZWQuCgpBbHJpZ2h0LCBhIGRlZXBlciBkaXZlLiBJIHNlZSB0aGV5JiMzOTtyZSB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAgdG8gemVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgaW4gYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLCB3aGljaCBpcyBncmVhdDsgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSB3YW50IHRvIHNlZS4gIGBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZGAgaXMgYWR2YW5jaW5nIGBoaXAtJmd0O3BoeXNfc2l6ZWAgYW5kIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAgYW5kIGBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGVgIGFyZSB1c2luZyBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAgZm9yIHplcm8tZXh0ZW5zaW9uIGlmIHRoZSB3cml0ZSBleHRlbmRzIHBhc3QgdGhlIGN1cnJlbnQgZmlsZSBzaXplLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBob3cgdGhlIGBpb21hcGAgYWRkcmVzcyBpcyBzZXQgd2l0aGluIGBoZnNwbHVzX2lvbWFwX2JlZ2luYC4gIEl0JiMzOTtzIHNldHRpbmcgYGlvbWFwLSZndDthZGRyYCBiYXNlZCBvbiBgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlc2AgYW5kIGFuIG9mZnNldC4gIENydWNpYWxseSwgaWYgYSBuZXcgYmxvY2sgaXMgYmVpbmcgYWxsb2NhdGVkLCB0aGV5IHNldCBgSU9NQVBfRl9ORVdgLiAgVGhlIGBpb21hcGAgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgemVyb2luZyBvZiB0aGVzZSBgSU9NQVBfRl9ORVdgIGJsb2NrcywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0LgoKU28sIHRoZSBjaGFuZ2VzIGFwcGVhciB0byBiZSBzdGFuZGFyZCBWRlMvYGlvbWFwYCBjb252ZXJzaW9ucy4gTm8gY3VzdG9tIGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IHN5c3RlbSBjYWxscywgbm8gbmV3IG5ldGxpbmsgYXR0cmlidXRlcywgYW5kIG5vIG5ldyBpb2N0bHMuIEkgdGhpbmsgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHBlcmZlY3RseSBjYXBhYmxlIG9mIGNhdGNoaW5nIG91dC1vZi1ib3VuZHMgcmVhZHMsIHVzZS1hZnRlci1mcmVlLCBhbmQgb3RoZXIgY29tbW9uIG1lbW9yeSBzYWZldHkgaXNzdWVzLiAgVGhlIEtNU0FOIHRvb2wgaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyBgaGZzcGx1c19tYXBfZXh0ZW50YCB3b3Jrcy4gSXQgaGFzIGEgY2hlY2sgZm9yIHRoZSBgYWJsb2NrYCBpbmRleCBhbmQgY2FsbHMgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIHRvIGxvY2F0ZSBhIGJsb2NrLiAgSWYgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIGZpbmRzIGEgYmxvY2sgaXQgc2V0cyBgKmRibG9ja2AgYW5kIHJldHVybnMgYSB2YWx1ZSwgb3RoZXJ3aXNlIGAqZGJsb2NrYCBpcyBzZXQgdG8gMC4gVGhlbiwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGRibG9jayBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gdGhlIGlvbWFwLiBUaGUgY2hlY2sgdGhhdCBjYWxscyBgaGZzcGx1c19tYXBfZXh0ZW50YCBjYXRjaGVzIGFueSBlcnJvci4gSXQgdXNlcyBgaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgJmFtcDtkYmxvY2ssICZhbXA7bWF4X2Jsb2NrcywgTlVMTClgLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBwcm9jZXNzIHJldHVybnMgZWFybHkuCgpCYXNlZCBvbiBteSBhbmFseXNpcywgYGlvbWFwX3plcm9fcmFuZ2VgIGlzIHVzZWQsIGFuZCB0aGVyZSBpcyBzYWZlIGhhbmRsaW5nIG9mIGFsbG9jYXRlZCBibG9ja3MuIFRoaXMgcGF0Y2ggdXNlcyBgSQoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0gZnJvbSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUuIEl0IGludHJvZHVjZXMgbmV3IGZpbGUgb3BlcmF0aW9ucywgaW9tYXAgY2FsbGJhY2tzLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgbG9naWMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0YW5kYXJkIFZGUyBhbmQgaW9tYXAgQVBJIHVzYWdlLCBzdWNoIGFzIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgaW9tYXBfemVyb19yYW5nZWAuIEZpbGUgZXhwYW5zaW9ucyBhcmUgcHJvcGVybHkgemVyb2VkIHVzaW5nIGBpb21hcF96ZXJvX3JhbmdlYCwgYW5kIG5ld2x5IGFsbG9jYXRlZCBibG9ja3MgYXJlIGZsYWdnZWQgd2l0aCBgSU9NQVBfRl9ORVdgLCB3aGljaCB0aGUgaW9tYXAgY29yZSBoYW5kbGVzIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCBkaXNrIGRhdGEgZXhwb3N1cmUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGlvY3RscywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjA2LjQ1NDgzNzc2OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NDA3OTc1OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9jb250X2V4cGFuZFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnZlcnRzIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW0gZnJvbSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyZWQgSS9PIHRvIHRoZSBtb2Rlcm4gaW9tYXAgaW5mcmFzdHJ1Y3R1cmUuIEl0IGludHJvZHVjZXMgbmV3IGZpbGUgb3BlcmF0aW9ucywgaW9tYXAgY2FsbGJhY2tzLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgbG9naWMuIFRoZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHN0YW5kYXJkIFZGUyBhbmQgaW9tYXAgQVBJIHVzYWdlLCBzdWNoIGFzIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgaW9tYXBfemVyb19yYW5nZWAuIEZpbGUgZXhwYW5zaW9ucyBhcmUgcHJvcGVybHkgemVyb2VkIHVzaW5nIGBpb21hcF96ZXJvX3JhbmdlYCwgYW5kIG5ld2x5IGFsbG9jYXRlZCBibG9ja3MgYXJlIGZsYWdnZWQgd2l0aCBgSU9NQVBfRl9ORVdgLCB3aGljaCB0aGUgaW9tYXAgY29yZSBoYW5kbGVzIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCBkaXNrIGRhdGEgZXhwb3N1cmUuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm8gbmV3IGlvY3RscywgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludHJvZHVjZWQgdGhhdCBjb3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBzYW5pdGl6ZXJzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIEhGUysgZmlsZXN5c3RlbSB0byB1c2UgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTywgcmVwbGFjaW5nIHRoZSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyIGhlYWQgYmFzZWQgcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGlvbWFwIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBzZWVraW5nLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjM6MDYuNDU0ODQyOTk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4OTgxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkZTUxMDQ1YzAwNTQzM2E3Y2RhNTBhYTZkMGNlMDk5ZTMxZjE1ZDdmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjIzOjA1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xcbmluZGV4IGNhODQwMWNiNjk1NGQuLmI0NDMyYzY0ZGIzYmUgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9LY29uZmlnXFxuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXFxuQEAgLTUsNyArNSw3IEBAIGNvbmZpZyBIRlNQTFVTX0ZTXFxuIFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiBcXHRzZWxlY3QgTkxTXFxuIFxcdHNlbGVjdCBOTFNfVVRGOFxcbi1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbitcXHRzZWxlY3QgRlNfSU9NQVBcXG4gXFx0aGVscFxcbiBcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxcbiBcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG5pbmRleCBmMmE5YWU2OTdlODExLi4zZGRlYTY5YTljNjk4IDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvTWFrZWZpbGVcXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXFxuQEAgLTUsOCArNSw5IEBAXFxuIFxcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXFxuIFxcbi1oZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBpb2N0bC5vIGV4dGVudHMubyBjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBcXFxcXFxuLVxcdFxcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXFxcXG4raGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gZmlsZS5vIGlvbWFwLm8gaW9jdGwubyBleHRlbnRzLm8gXFxcXFxcbitcXHRcXHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXFxcXG4rXFx0XFx0dW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXFxcXG4gXFx0XFx0YXR0cmlidXRlcy5vIHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3NlY3VyaXR5Lm8geGF0dHJfdHJ1c3RlZC5vXFxuIFxcbiAjIEtVbml0IHRlc3RzXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvYml0bWFwLmMgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXFxuaW5kZXggMWIzYWY4Yzg3Y2FkYi4uNjFjNDljY2E0YTdhMiAxMDA2NDRcXG4tLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jXFxuKysrIGIvZnMvaGZzcGx1cy9iaXRtYXAuY1xcbkBAIC0zOSw2ICszOSw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRzdGFydCA9IHNpemU7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuK1xcdGxvY2tfcGFnZShwYWdlKTtcXG4rXFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XFxuIFxcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcXG4gXFx0aSA9IG9mZnNldCAlIDMyO1xcbkBAIC03NSw2ICs3Nyw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRcXHRjdXJyKys7XFxuIFxcdFxcdH1cXG4gXFx0XFx0a3VubWFwX2xvY2FsKHBwdHIpO1xcbitcXHRcXHR1bmxvY2tfcGFnZShwYWdlKTtcXG4gXFx0XFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcXG4gXFx0XFx0aWYgKG9mZnNldCBcXHUwMDNlPSBzaXplKVxcbiBcXHRcXHRcXHRicmVhaztcXG5AQCAtODQsNiArODcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0XFx0XFx0c3RhcnQgPSBzaXplO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXHRcXHRsb2NrX3BhZ2UocGFnZSk7XFxuK1xcdFxcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xcbiBcXHRcXHRjdXJyID0gcHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0XFx0aWYgKChzaXplIF4gb2Zmc2V0KSAvIFBBR0VfQ0FDSEVfQklUUylcXG4gXFx0XFx0XFx0ZW5kID0gcHB0ciArIFBBR0VfQ0FDSEVfQklUUyAvIDMyO1xcbkBAIC05OCw2ICsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0c3RhcnQgPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpO1xcbiBcXHRpZiAoc3RhcnQgXFx1MDAzZT0gc2l6ZSkge1xcbiBcXHRcXHRoZnNfZGJnKFxcXCJiaXRtYXAgZnVsbFxcXFxuXFxcIik7XFxuK1xcdFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0XFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuK1xcdFxcdHN0YXJ0ID0gc2l6ZTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFx0LyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqL1xcbkBAIC0xMjgsNiArMTM2LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXFxuIFxcdFxcdH1cXG4gXFx0XFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuIFxcdFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0XFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuIFxcdFxcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XFxuIFxcdFxcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBvZmZzZXQgLyBQQUdFX0NBQ0hFX0JJVFMsXFxuIFxcdFxcdFxcdFxcdFxcdCBOVUxMKTtcXG5AQCAtMTM1LDYgKzE0NCw4IEBAIGludCBoZnNwbHVzX2Jsb2NrX2FsbG9jYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzaXplLFxcbiBcXHRcXHRcXHRzdGFydCA9IHNpemU7XFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHR9XFxuK1xcdFxcdGxvY2tfcGFnZShwYWdlKTtcXG4rXFx0XFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XFxuIFxcdFxcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XFxuIFxcdFxcdGN1cnIgPSBwcHRyO1xcbiBcXHRcXHRlbmQgPSBwcHRyICsgUEFHRV9DQUNIRV9CSVRTIC8gMzI7XFxuQEAgLTE1Miw2ICsxNjMsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcXG4gXFx0KmN1cnIgPSBjcHVfdG9fYmUzMihuKTtcXG4gXFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XFxuIFxcdGt1bm1hcF9sb2NhbChwcHRyKTtcXG4rXFx0dW5sb2NrX3BhZ2UocGFnZSk7XFxuIFxcdCptYXggPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpIC0gc3RhcnQ7XFxuIFxcdHNiaS1cXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcXG4gXFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XFxuQEAgLTE4NSw2ICsxOTcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcXG4gXFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIHBuciwgTlVMTCk7XFxuIFxcdGlmIChJU19FUlIocGFnZSkpXFxuIFxcdFxcdGdvdG8ga2Fib29tO1xcbitcXHRsb2NrX3BhZ2UocGFnZSk7XFxuK1xcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xcbiBcXHRwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xcbiBcXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXFx1MDAyNiAoUEFHRV9DQUNIRV9CSVRTIC0gMSkpIC8gMzI7XFxuIFxcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcXG5AQCAtMjE2LDkgKzIzMCwxMiBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdFxcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRcXHRwYWdlID0gcmVhZF9tYXBwaW5nX3BhZ2UobWFwcGluZywgKytwbnIsIE5VTEwpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKHBhZ2UpKVxcbiBcXHRcXHRcXHRnb3RvIGthYm9vbTtcXG4rXFx0XFx0bG9ja19wYWdlKHBhZ2UpO1xcbitcXHRcXHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcXG4gXFx0XFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcXG4gXFx0XFx0Y3VyciA9IHBwdHI7XFxuIFxcdFxcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcXG5AQCAtMjMyLDYgKzI0OSw3IEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxcbiBvdXQ6XFxuIFxcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xcbiBcXHRrdW5tYXBfbG9jYWwocHB0cik7XFxuK1xcdHVubG9ja19wYWdlKHBhZ2UpO1xcbiBcXHRzYmktXFx1MDAzZWZyZWVfYmxvY2tzICs9IGxlbjtcXG4gXFx0aGZzcGx1c19tYXJrX21kYl9kaXJ0eShzYik7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2c2JpLVxcdTAwM2VhbGxvY19tdXRleCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcXG5pbmRleCA4MTNlNjhiOGVjZDY1Li44ZjdmNTYwY2VjNjQyIDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jXFxuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcXG5AQCAtMTUsNiArMTUsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFxcImhmc3BsdXNfZnMuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImhmc3BsdXNfcmF3LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJpb21hcC5oXFxcIlxcbiBcXG4gLyogQ29tcGFyZSB0d28gZXh0ZW50cyBrZXlzLCByZXR1cm5zIDAgb24gc2FtZSwgcG9zL25lZyBmb3IgZGlmZmVyZW5jZSAqL1xcbiBpbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXFxuIFxcdGtleS1cXHUwMDNlZXh0LnBhZCA9IDA7XFxuIH1cXG4gXFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcXG4rLypcXG4rICogaGZzcGx1c19leHRfZmluZF9ibG9jaygpIC0gZmluZCBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGJsb2NrXFxuKyAqXFxuKyAqIEZpbmQgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBmb3IgJ29mZicgd2l0aGluIGFuIDgtZW50cnlcXG4rICogZXh0ZW50IHJlY29yZCwgYW5kIHRoZSBudW1iZXIgb2YgZnVydGhlciBhbGxvY2F0aW9uIGJsb2Nrc1xcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxcbisgKi9cXG4rc3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmLFxcbitcXHRcXHRcXHRcXHQgdTMyICpkYmxvY2spXFxuIHtcXG4gXFx0aW50IGk7XFxuIFxcdHUzMiBjb3VudDtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA4OyBleHQrKywgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UOyBleHQrKywgaSsrKSB7XFxuIFxcdFxcdGNvdW50ID0gYmUzMl90b19jcHUoZXh0LVxcdTAwM2VibG9ja19jb3VudCk7XFxuLVxcdFxcdGlmIChvZmYgXFx1MDAzYyBjb3VudClcXG4tXFx0XFx0XFx0cmV0dXJuIGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlc3RhcnRfYmxvY2spICsgb2ZmO1xcbitcXHRcXHRpZiAob2ZmIFxcdTAwM2MgY291bnQpIHtcXG4rXFx0XFx0XFx0KmRibG9jayA9IGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlc3RhcnRfYmxvY2spICsgb2ZmO1xcbitcXHRcXHRcXHRyZXR1cm4gY291bnQgLSBvZmY7XFxuK1xcdFxcdH1cXG4gXFx0XFx0b2ZmIC09IGNvdW50O1xcbiBcXHR9XFxuIFxcdC8qIHBhbmljPyAqL1xcbitcXHQqZGJsb2NrID0gMDtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTY4LDcgKzgwLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9ibG9ja19jb3VudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dClcXG4gXFx0aW50IGk7XFxuIFxcdHUzMiBjb3VudCA9IDA7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgODsgZXh0KyssIGkrKylcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspXFxuIFxcdFxcdGNvdW50ICs9IGJlMzJfdG9fY3B1KGV4dC1cXHUwMDNlYmxvY2tfY291bnQpO1xcbiBcXHRyZXR1cm4gY291bnQ7XFxuIH1cXG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXFxuIFxcdHJldHVybiByZXM7XFxuIH1cXG4gXFxuLS8qIEdldCBhIGJsb2NrIGF0IGlibG9jayBmb3IgaW5vZGUsIHBvc3NpYmx5IGFsbG9jYXRpbmcgaWYgY3JlYXRlICovXFxuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuLVxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbisvKlxcbisgKiBoZnNwbHVzX21hcF9leHRlbnQoKSAtIGZpbmQgb3IgYWxsb2NhdGUgYSBzZXF1ZW5jZSBvZiBhbGxvY2F0aW9uIGJsb2Nrc1xcbisgKlxcbisgKiBMb29rcyB1cCB0aGUgYWxsb2NhdGlvbiBibG9jayBhdCAnYWJsb2NrJyBmb3IgaW5vZGUsIGV4dGVuZGluZyB0aGVcXG4rICogZmlsZSAodmlhIGhmc3BsdXNfZmlsZV9leHRlbmQoKSwgaW4gY2x1bXBfYmxvY2tzLXNpemVkIGNodW5rcykgd2hlblxcbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXFxuKyAqXFxuKyAqIE9uIHN1Y2Nlc3MsICpkYmxvY2sgaXMgdGhlIGRpc2sgYWxsb2NhdGlvbiBibG9jayBiYWNraW5nICdhYmxvY2snLFxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXFxuKyAqIGNvbnRpZ3VvdXMgd2l0aCBpdCAoaS5lLiB0aGUgcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgZXh0ZW50IGVudHJ5XFxuKyAqIHRoYXQgY29udGFpbnMgJ2FibG9jaycpLCB3aGljaCBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSB3aG9sZSBmaWxlJ3NcXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXFxuKyAqIGV4dGVudCBlbnRyaWVzLiBJZiBhIG5ldyBleHRlbnQgaGFkIHRvIGJlIGFsbG9jYXRlZCB0byBzYXRpc2Z5IHRoZVxcbisgKiByZXF1ZXN0LCAqYmFsbG9jICh3aGVuIG5vbi1OVUxMKSBpcyBzZXQgdG8gdHJ1ZS5cXG4rICovXFxuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcXG4rXFx0XFx0XFx0dTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKVxcbiB7XFxuLVxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4tXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuIFxcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuLVxcdGludCByZXMgPSAtRUlPO1xcbi1cXHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1hc2s7XFxuLVxcdHNlY3Rvcl90IHNlY3RvcjtcXG4tXFx0aW50IHdhc19kaXJ0eSA9IDA7XFxuK1xcdGludCB3YXNfZGlydHk7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xcbi1cXHRhYmxvY2sgPSBpYmxvY2sgXFx1MDAzZVxcdTAwM2Ugc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFx0aWYgKGJhbGxvYylcXG4rXFx0XFx0KmJhbGxvYyA9IGZhbHNlO1xcbiBcXG4tXFx0aWYgKGlibG9jayBcXHUwMDNlPSBoaXAtXFx1MDAzZWZzX2Jsb2Nrcykge1xcbitcXHRpZiAoYWJsb2NrIFxcdTAwM2U9IGhpcC1cXHUwMDNlYWxsb2NfYmxvY2tzKSB7XFxuIFxcdFxcdGlmICghY3JlYXRlKVxcbi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tXFx0XFx0aWYgKGlibG9jayBcXHUwMDNlIGhpcC1cXHUwMDNlZnNfYmxvY2tzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0XFx0aWYgKGFibG9jayBcXHUwMDNlPSBoaXAtXFx1MDAzZWFsbG9jX2Jsb2Nrcykge1xcbi1cXHRcXHRcXHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XFxuLVxcdFxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdFxcdHJldHVybiByZXM7XFxuLVxcdFxcdH1cXG4tXFx0fSBlbHNlXFxuLVxcdFxcdGNyZWF0ZSA9IDA7XFxuK1xcdFxcdHJlcyA9IGhmc3BsdXNfZmlsZV9leHRlbmQoaW5vZGUsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0aWYgKGJhbGxvYylcXG4rXFx0XFx0XFx0KmJhbGxvYyA9IHRydWU7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChhYmxvY2sgXFx1MDAzYyBoaXAtXFx1MDAzZWZpcnN0X2Jsb2Nrcykge1xcbi1cXHRcXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcXG4tXFx0XFx0Z290byBkb25lO1xcbitcXHRcXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVxcdTAwM2VmaXJzdF9leHRlbnRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGFibG9jayxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBkYmxvY2spO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGlub2RlLVxcdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxcbkBAIC0yNzIsMTEgKzI5Myw0NCBAQCBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbiBcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmhpcC1cXHUwMDNlZXh0ZW50c19sb2NrKTtcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdH1cXG4tXFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXFx1MDAzZWNhY2hlZF9leHRlbnRzLFxcbi1cXHRcXHRcXHRcXHRcXHRhYmxvY2sgLSBoaXAtXFx1MDAzZWNhY2hlZF9zdGFydCk7XFxuK1xcdCptYXhfYmxvY2tzID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXFx1MDAzZWNhY2hlZF9leHRlbnRzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGFibG9jayAtIGhpcC1cXHUwMDNlY2FjaGVkX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGRibG9jayk7XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2aGlwLVxcdTAwM2VleHRlbnRzX2xvY2spO1xcbiBcXG4tZG9uZTpcXG4rXFx0aWYgKHdhc19kaXJ0eSlcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cXG4raW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG4rXFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrLCBtYXhfYmxvY2tzO1xcbitcXHRzZWN0b3JfdCBzZWN0b3I7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xcbitcXHRhYmxvY2sgPSBpYmxvY2sgXFx1MDAzZVxcdTAwM2Ugc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFxuK1xcdGlmIChpYmxvY2sgXFx1MDAzZT0gaGlwLVxcdTAwM2Vmc19ibG9ja3MpIHtcXG4rXFx0XFx0aWYgKCFjcmVhdGUpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRpZiAoaWJsb2NrIFxcdTAwM2UgaGlwLVxcdTAwM2Vmc19ibG9ja3MpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9IGVsc2VcXG4rXFx0XFx0Y3JlYXRlID0gMDtcXG4rXFxuK1xcdHJlcyA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBjcmVhdGUsIFxcdTAwMjZkYmxvY2ssIFxcdTAwMjZtYXhfYmxvY2tzLFxcbitcXHRcXHRcXHRcXHQgIE5VTEwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4gXFx0aGZzX2RiZyhcXFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxcXG5cXFwiLFxcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIChsb25nIGxvbmcpaWJsb2NrLCBkYmxvY2spO1xcbiBcXG5AQCAtMjkwLDkgKzM0NCw4IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuIFxcdFxcdGhpcC1cXHUwMDNlcGh5c19zaXplICs9IHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZTtcXG4gXFx0XFx0aGlwLVxcdTAwM2Vmc19ibG9ja3MrKztcXG4gXFx0XFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBzYi1cXHUwMDNlc19ibG9ja3NpemUpO1xcbi1cXHR9XFxuLVxcdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxcbiBcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNTUzLDIwICs2MDYsMzIgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWhpcC1cXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cXHUwMDNlaV9zaXplKTtcXG4gXFxuIFxcdGlmIChpbm9kZS1cXHUwMDNlaV9zaXplIFxcdTAwM2UgaGlwLVxcdTAwM2VwaHlzX3NpemUpIHtcXG4tXFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi1cXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi1cXHRcXHR2b2lkICpmc2RhdGEgPSBOVUxMO1xcbi1cXHRcXHRsb2ZmX3Qgc2l6ZSA9IGlub2RlLVxcdTAwM2VpX3NpemU7XFxuK1xcdFxcdGlmIChTX0lTUkVHKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdFxcdHJlcyA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGlub2RlLVxcdTAwM2VpX3NpemUpO1xcbitcXHRcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbitcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRcXHRcXHR2b2lkICpmc2RhdGEgPSBOVUxMO1xcbitcXG4rXFx0XFx0XFx0cmVzID0gaGZzcGx1c193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIGlub2RlLVxcdTAwM2VpX3NpemUsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmZvbGlvLCBcXHUwMDI2ZnNkYXRhKTtcXG4rXFx0XFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0XFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSwgMCwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0Zm9saW8sIGZzZGF0YSk7XFxuK1xcdFxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0XFx0fVxcbiBcXG4tXFx0XFx0cmVzID0gaGZzcGx1c193cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBzaXplLCAwLFxcbi1cXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZmb2xpbywgXFx1MDAyNmZzZGF0YSk7XFxuLVxcdFxcdGlmIChyZXMpXFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwgMCxcXG4tXFx0XFx0XFx0XFx0XFx0Zm9saW8sIGZzZGF0YSk7XFxuLVxcdFxcdGlmIChyZXMgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH0gZWxzZSBpZiAoaW5vZGUtXFx1MDAzZWlfc2l6ZSA9PSBoaXAtXFx1MDAzZXBoeXNfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2ZpbGUuYyBiL2ZzL2hmc3BsdXMvZmlsZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MjY3ODQ4OGZiMDU0XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXFxuQEAgLTAsMCArMSwzMDcgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLypcXG4rICogRmlsZSBvcGVyYXRpb25zOiBvcGVuL3JlbGVhc2UvZnN5bmMgYW5kIGlvbWFwLWJhc2VkIHJlYWQvd3JpdGUvc2Vla1xcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9mcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb3VudC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuK3tcXG4rXFx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXFxuK1xcdFxcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcnNyY19pbm9kZTtcXG4rXFx0aWYgKCEoZmlsZS1cXHUwMDNlZl9mbGFncyBcXHUwMDI2IE9fTEFSR0VGSUxFKSBcXHUwMDI2XFx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXFx1MDAzZSBNQVhfTk9OX0xGUylcXG4rXFx0XFx0cmV0dXJuIC1FT1ZFUkZMT1c7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZW9wZW5jbnQpO1xcbitcXHRmaWxlLVxcdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFxuK1xcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbitcXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuK1xcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KSkge1xcbitcXHRcXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4rXFx0XFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcXG4rXFx0XFx0aWYgKGlub2RlLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgU19ERUFEKSB7XFxuK1xcdFxcdFxcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cXHUwMDNlaV9pbm8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIEhGU1BMVVNfU0Ioc2IpLVxcdTAwM2VoaWRkZW5fZGlyLCBOVUxMKTtcXG4rXFx0XFx0XFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4rXFx0XFx0ICAgICAgIGludCBkYXRhc3luYylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cXHUwMDNlc192aGRyO1xcbitcXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XFxuK1xcbitcXHRoZnNfZGJnKFxcXCJpbm9kZS1cXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXFxcblxcXCIsXFxuK1xcdFxcdGlub2RlLVxcdTAwM2VpX2lubywgc3RhcnQsIGVuZCk7XFxuK1xcbitcXHRlcnJvciA9IGZpbGVfd3JpdGVfYW5kX3dhaXRfcmFuZ2UoZmlsZSwgc3RhcnQsIGVuZCk7XFxuK1xcdGlmIChlcnJvcilcXG4rXFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXFxuK1xcdCAqL1xcbitcXHRzeW5jX2lub2RlX21ldGFkYXRhKGlub2RlLCAxKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxcbitcXHQgKi9cXG4rXFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLFxcbitcXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQ0FUX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4rXFx0XFx0ZXJyb3IgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cXHUwMDNlY2F0X3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRlcnJvcjIgPVxcbitcXHRcXHRcXHRmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cXHUwMDNlZXh0X3RyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmcpO1xcbitcXHRcXHRpZiAoIWVycm9yKVxcbitcXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHNiaS1cXHUwMDNlYXR0cl90cmVlKSB7XFxuK1xcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuK1xcdFxcdFxcdGVycm9yMiA9XFxuK1xcdFxcdFxcdFxcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBzYmktXFx1MDAzZWF0dHJfdHJlZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuK1xcdFxcdFxcdGlmICghZXJyb3IpXFxuK1xcdFxcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKSlcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJzeW5jIG5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHRyZWVcXFxcblxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShzYmktXFx1MDAzZWFsbG9jX2ZpbGUpLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0XFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbitcXHRcXHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cXHUwMDNlYWxsb2NfZmlsZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4rXFx0XFx0aWYgKCFlcnJvcilcXG4rXFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnNiaS1cXHUwMDNldmhfbXV0ZXgpO1xcbitcXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnNiaS1cXHUwMDNldmhfbXV0ZXgpO1xcbitcXG4rXFx0ZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGlmICghZXJyb3IpXFxuK1xcdFxcdGVycm9yID0gZXJyb3IyO1xcbitcXG4rXFx0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXFx1MDAyNnNiaS1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmRldik7XFxuK1xcbitcXHRyZXR1cm4gZXJyb3I7XFxuK31cXG4rXFxuKy8qXFxuKyAqIGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoKSAtIGZhbGwgYmFjayB0byBidWZmZXJlZCBJL08gZm9yIHRoZVxcbisgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseVxcbisgKiAodW5hbGlnbmVkIHRhaWwsIG9yIG5vIGJsb2NrcyBjb3VsZCBiZSBtYXBwZWQgd2l0aG91dCBhbGxvY2F0aW9uXFxuKyAqIG91dHNpZGUgdGhlIGRpcmVjdCBwYXRoKS5cXG4rICovXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmFsbGJhY2tfYnVmZmVyZWRfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuK3tcXG4rXFx0bG9mZl90IG9mZnNldCA9IGlvY2ItXFx1MDAzZWtpX3BvcywgZW5kO1xcbitcXHRzc2l6ZV90IHdyaXR0ZW47XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XFxuK1xcbitcXHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgTlVMTCk7XFxuK1xcdGlmICh3cml0dGVuIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHdyaXR0ZW47XFxuK1xcbitcXHRlbmQgPSBpb2NiLVxcdTAwM2VraV9wb3MgKyB3cml0dGVuIC0gMTtcXG4rXFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG9mZnNldCwgZW5kKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQsXFxuK1xcdFxcdFxcdFxcdCBlbmQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcbitcXHRyZXR1cm4gd3JpdHRlbjtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4re1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxcbitcXHRcXHRcXHQgICBcXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXFxuK1xcdFxcdFxcdCAgIFxcdTAwMjZoZnNwbHVzX3dyaXRlX2Rpb19vcHMsXFxuK1xcdFxcdFxcdCAgIDAsIE5VTEwsIDApO1xcbitcXHRpZiAocmV0ID09IC1FTk9UQkxLKVxcbitcXHRcXHRyZXQgPSAwO1xcbitcXHRlbHNlIGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGlvdl9pdGVyX2NvdW50KGZyb20pKSB7XFxuK1xcdFxcdHNzaXplX3Qgd3JpdHRlbjtcXG4rXFxuK1xcdFxcdHdyaXR0ZW4gPSBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGZyb20pO1xcbitcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiB3cml0dGVuO1xcbitcXHRcXHRyZXQgKz0gd3JpdHRlbjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdGxvZmZfdCB0b3RhbF9jYXBhY2l0eTtcXG4rXFx0c3NpemVfdCByZXQ7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpbm9kZV9sb2NrKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGl0ZXIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cXHUwMDNldG90YWxfYmxvY2tzIFxcdTAwM2NcXHUwMDNjIHNiaS1cXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAzZT0gdG90YWxfY2FwYWNpdHkpIHtcXG4rXFx0XFx0cmV0ID0gLUVGQklHO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmlsZV9tb2RpZmllZChmaWxlKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdGxvZmZfdCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4rXFx0XFx0bG9mZl90IG5ld19zaXplID0gaW9jYi1cXHUwMDNla2lfcG9zO1xcbitcXG4rXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcXG4rXFx0XFx0XFx0bmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgIEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXBoeXNfc2l6ZSk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgbmV3X3NpemUpO1xcbitcXHRcXHRlcnIgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX3NpemUpO1xcbitcXHRcXHRcXHRyZXQgPSBlcnI7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXHR9IGVsc2UgaWYgKChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfRElSRUNUKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VwaHlzX3NpemUgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VwaHlzX3NpemUpO1xcbitcXHRcXHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ESVJFQ1QpXFxuK1xcdFxcdHJldCA9IGhmc3BsdXNfZGlvX3dyaXRlX2l0ZXIoaW9jYiwgaXRlcik7XFxuK1xcdGVsc2Uge1xcbitcXHRcXHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGl0ZXIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0TlVMTCwgTlVMTCk7XFxuK1xcdH1cXG4rXFxuK3VubG9jazpcXG4rXFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX3dyaXRlX3N5bmMoaW9jYiwgcmV0KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aW5vZGVfbG9ja19zaGFyZWQoaW5vZGUpO1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcXG4rXFx0XFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0XFx0cmV0ID0gaW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsXFxuK1xcdFxcdFxcdFxcdCAgIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyxcXG4rXFx0XFx0XFx0XFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XFxuK1xcdH0gZWxzZVxcbitcXHRcXHRyZXQgPSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKGlvY2IsIGl0ZXIpO1xcbitcXG4rXFx0aW5vZGVfdW5sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgbG9mZl90IGhmc3BsdXNfZmlsZV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4rXFxuK1xcdHN3aXRjaCAod2hlbmNlKSB7XFxuK1xcdGNhc2UgU0VFS19IT0xFOlxcbitcXHRcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdG9mZnNldCA9IGlvbWFwX3NlZWtfaG9sZShpbm9kZSwgb2Zmc2V0LCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRcXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU0VFS19EQVRBOlxcbitcXHRcXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XFxuK1xcdFxcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRcXHRpbm9kZV91bmxvY2tfc2hhcmVkKGlub2RlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBnZW5lcmljX2ZpbGVfbGxzZWVrKGZpbGUsIG9mZnNldCwgd2hlbmNlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvZmZzZXQ7XFxuK1xcbitcXHRyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX21heGJ5dGVzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4rXFx0Lmxsc2Vla1xcdFxcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcXG4rXFx0LnJlYWRfaXRlclxcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcXG4rXFx0LndyaXRlX2l0ZXJcXHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyLFxcbitcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbitcXHQuc3BsaWNlX3JlYWRcXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXFxuK1xcdC5zcGxpY2Vfd3JpdGVcXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXFxuK1xcdC5mc3luY1xcdFxcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxcbitcXHQub3BlblxcdFxcdD0gaGZzcGx1c19maWxlX29wZW4sXFxuK1xcdC5yZWxlYXNlXFx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcXG4rXFx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbmluZGV4IGVjMDRiODJhZDkyNzguLjgxNjZhYmIyMjM5N2IgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmhcXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxcbkBAIC0xNzUsNiArMTc1LDIyIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqSEZTUExVU19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gc2ItXFx1MDAzZXNfZnNfaW5mbztcXG4gfVxcbiBcXG4rLypcXG4rICogUGh5c2ljYWwgYnl0ZSBvZmZzZXQgb2YgYWxsb2NhdGlvbiBibG9jayAnZGJsb2NrJyBvbiB0aGUgdm9sdW1lLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBsb2ZmX3QgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHUzMiBkYmxvY2spXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XFxuK1xcdGxvZmZfdCBwaHlzX2J5dGVzO1xcbitcXG4rXFx0cGh5c19ieXRlcyA9IGRibG9jaztcXG4rXFx0cGh5c19ieXRlcyBcXHUwMDNjXFx1MDAzYz0gc2JpLVxcdTAwM2Vmc19zaGlmdDtcXG4rXFx0cGh5c19ieXRlcyArPSBzYmktXFx1MDAzZWJsb2Nrb2Zmc2V0O1xcbitcXHRwaHlzX2J5dGVzIFxcdTAwM2NcXHUwMDNjPSBzYi1cXHUwMDNlc19ibG9ja3NpemVfYml0cztcXG4rXFxuK1xcdHJldHVybiBwaHlzX2J5dGVzO1xcbit9XFxuIFxcbiBzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvIHtcXG4gXFx0YXRvbWljX3Qgb3BlbmNudDtcXG5AQCAtNDMwLDEyICs0NDYsMTkgQEAgaW50IGhmc3BsdXNfcmVuYW1lX2NhdCh1MzIgY25pZCwgc3RydWN0IGlub2RlICpzcmNfZGlyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqc3JjX25cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX29wZXJhdGlvbnM7XFxuIFxcbisvKiBmaWxlLmMgKi9cXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcXG4rXFx0XFx0ICAgICAgIGludCBkYXRhc3luYyk7XFxuK1xcbiAvKiBleHRlbnRzLmMgKi9cXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxcbiBcXHRcXHRcXHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xcbiBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7XFxuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcXG4rXFx0XFx0XFx0dTMyICpkYmxvY2ssIHUzMiAqbWF4X2Jsb2NrcywgYm9vbCAqYmFsbG9jKTtcXG4gaW50IGhmc3BsdXNfZnJlZV9mb3JrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBjbmlkLFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaywgaW50IHR5cGUpO1xcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xcbkBAIC00NDMsNiArNDY2LDcgQEAgdm9pZCBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7XFxuIFxcbiAvKiBpbm9kZS5jICovXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcztcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19zeW1saW5rX2FvcHM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zO1xcbiBcXG5AQCAtNDYyLDggKzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qga3N0YXQgKnN0YXQsIHUzMiByZXF1ZXN0X21hc2ssXFxuIFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgcXVlcnlfZmxhZ3MpO1xcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuLVxcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9zZXQoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSk7XFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbmluZGV4IDFjNTdjODczZjA1ZDYuLjA4NzMxZWMwY2VjZDMgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXFxuQEAgLTE4LDE1ICsxOCwxMiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3JlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdWlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlYXR0ci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwieGF0dHIuaFxcXCJcXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi17XFxuLVxcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcXG4tfVxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4gXFxuIHN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXFxuIHtcXG5AQCAtMTIwLDY3ICsxMTcsMTMgQEAgc3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuIFxcdHJldHVybiByZXMgPyB0cnlfdG9fZnJlZV9idWZmZXJzKGZvbGlvKSA6IGZhbHNlO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4rc3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4tXFx0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbi1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuLVxcdGxvZmZfdCBpc2l6ZTtcXG4tXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuLVxcdGxvZmZfdCBlbmQgPSBpb2NiLVxcdTAwM2VraV9wb3MgKyBjb3VudDtcXG4tXFx0c3NpemVfdCByZXQ7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLlxcbi1cXHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXFxuLVxcdCAqL1xcbi1cXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXFx1MDAyNlxcdTAwMjYgaW9jYi1cXHUwMDNla2lfcG9zIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuLVxcdFxcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XFxuLVxcdFxcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcXG4tXFxuLVxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbi1cXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXFxuLVxcdFxcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcXG4tXFxuLVxcdFxcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0c3RhcnRfb2ZmID0gaXNpemU7XFxuLVxcdFxcdGVuZF9vZmYgPSAoZW5kIFxcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xcbi1cXG4tXFx0XFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHRcXHRlbmRfcGFnZSA9IGVuZF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4tXFxuLVxcdFxcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKGlvY2IsIGlub2RlLCBpdGVyLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcXG4tXFx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cXG4tXFx0ICovXFxuLVxcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAzYyAwKSkge1xcbi1cXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFxuLVxcdFxcdGlmIChlbmQgXFx1MDAzZSBpc2l6ZSlcXG4tXFx0XFx0XFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tXFx0XFx0XFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIHtcXG4gXFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIH1cXG5AQCAtMTg4LDggKzEzMSw4IEBAIHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcXG4gXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4gXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbi1cXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxcbi1cXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvLFxcbitcXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c19idHJlZV93cml0ZXBhZ2VzLFxcbiBcXHQud3JpdGVfYmVnaW5cXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXFxuIFxcdC53cml0ZV9lbmRcXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxcbiBcXHQubWlncmF0ZV9mb2xpb1xcdD0gYnVmZmVyX21pZ3JhdGVfZm9saW8sXFxuQEAgLTE5NywxOCArMTQwLDcwIEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbiBcXHQucmVsZWFzZV9mb2xpb1xcdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxcbiB9O1xcbiBcXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XFxuK3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuK3tcXG4rXFx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGhmc3BsdXNfc3ltbGlua193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHtcXG4gXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4gXFx0LmludmFsaWRhdGVfZm9saW8gPSBibG9ja19pbnZhbGlkYXRlX2ZvbGlvLFxcbi1cXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19yZWFkX2ZvbGlvLFxcbitcXHQucmVhZF9mb2xpb1xcdD0gaGZzcGx1c19zeW1saW5rX3JlYWRfZm9saW8sXFxuIFxcdC53cml0ZV9iZWdpblxcdD0gaGZzcGx1c193cml0ZV9iZWdpbixcXG4gXFx0LndyaXRlX2VuZFxcdD0gZ2VuZXJpY193cml0ZV9lbmQsXFxuIFxcdC5ibWFwXFx0XFx0PSBoZnNwbHVzX2JtYXAsXFxuLVxcdC5kaXJlY3RfSU9cXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxcbi1cXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsXFxuIFxcdC5taWdyYXRlX2ZvbGlvXFx0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcXHUwMDI2aGZzcGx1c19pb21hcF9vcHMpO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXFxuK3tcXG4rXFx0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcXG4re1xcbitcXHRzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCB3cGMgPSB7XFxuK1xcdFxcdC5pbm9kZVxcdD0gbWFwcGluZy1cXHUwMDNlaG9zdCxcXG4rXFx0XFx0LndiY1xcdD0gd2JjLFxcbitcXHRcXHQub3BzXFx0PSBcXHUwMDI2aGZzcGx1c193cml0ZWJhY2tfb3BzLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXFx1MDAyNndwYyk7XFxuK31cXG4rXFxuK3N0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2FvcF9ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaylcXG4re1xcbitcXHRyZXR1cm4gaW9tYXBfYm1hcChtYXBwaW5nLCBibG9jaywgXFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XFxuK1xcdC5yZWFkX2ZvbGlvXFx0XFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXFxuK1xcdC5yZWFkYWhlYWRcXHRcXHQ9IGhmc3BsdXNfcmVhZGFoZWFkLFxcbitcXHQud3JpdGVwYWdlc1xcdFxcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcbitcXHQuZGlydHlfZm9saW9cXHRcXHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxcbitcXHQuYm1hcFxcdFxcdFxcdD0gaGZzcGx1c19hb3BfYm1hcCxcXG4rXFx0Lm1pZ3JhdGVfZm9saW9cXHRcXHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcXG4rXFx0LmlzX3BhcnRpYWxseV91cHRvZGF0ZVxcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxcbitcXHQuZXJyb3JfcmVtb3ZlX2ZvbGlvXFx0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG4rXFx0LnJlbGVhc2VfZm9saW9cXHRcXHQ9IGlvbWFwX3JlbGVhc2VfZm9saW8sXFxuK1xcdC5pbnZhbGlkYXRlX2ZvbGlvXFx0PSBpb21hcF9pbnZhbGlkYXRlX2ZvbGlvLFxcbitcXHQuc3dhcF9hY3RpdmF0ZVxcdFxcdD0gaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlLFxcbit9O1xcbitcXG4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XFxuIFxcdC5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LFxcbiBcXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcXG5AQCAtMjY4LDM1ICsyNjMsNiBAQCBzdGF0aWMgaW50IGhmc3BsdXNfZ2V0X3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiAtRUlPO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi17XFxuLVxcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxcbi1cXHRcXHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXFx1MDAzZXJzcmNfaW5vZGU7XFxuLVxcdGlmICghKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX0xBUkdFRklMRSkgXFx1MDAyNlxcdTAwMjYgaV9zaXplX3JlYWQoaW5vZGUpIFxcdTAwM2UgTUFYX05PTl9MRlMpXFxuLVxcdFxcdHJldHVybiAtRU9WRVJGTE9XO1xcbi1cXHRhdG9taWNfaW5jKFxcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVxcdTAwM2VvcGVuY250KTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgaGZzcGx1c19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLXtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXG4tXFx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXFxuLVxcdFxcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cXHUwMDNlcnNyY19pbm9kZTtcXG4tXFx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXFx1MDAzZW9wZW5jbnQpKSB7XFxuLVxcdFxcdGlub2RlX2xvY2soaW5vZGUpO1xcbi1cXHRcXHRoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoaW5vZGUpO1xcbi1cXHRcXHRpZiAoaW5vZGUtXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBTX0RFQUQpIHtcXG4tXFx0XFx0XFx0aGZzcGx1c19kZWxldGVfY2F0KGlub2RlLVxcdTAwM2VpX2lubyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgSEZTUExVU19TQihzYiktXFx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xcbi1cXHRcXHRcXHRoZnNwbHVzX2RlbGV0ZV9pbm9kZShpbm9kZSk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0aW5vZGVfdW5sb2NrKGlub2RlKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4tfVxcbi1cXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbiB7XFxuQEAgLTMxMSwxMCArMjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHQgICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4gXFx0XFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xcbiBcXHRcXHRpZiAoYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG4tXFx0XFx0XFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuLVxcdFxcdFxcdGlmIChlcnJvcilcXG4rXFx0XFx0XFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXFx1MDAzZWlfc2l6ZTtcXG4rXFxuK1xcdFxcdFxcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuK1xcdFxcdFxcdGVycm9yID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuK1xcdFxcdFxcdGlmIChlcnJvcikge1xcbitcXHRcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cXHUwMDNlaWFfc2l6ZSk7XFxuIFxcdFxcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XFxuQEAgLTM1Myw4NiArMzIzLDYgQEAgaW50IGhmc3BsdXNfZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgY29uc3Qgc3RydWN0IHBhdGggKnBhdGgsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1pbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuLVxcdFxcdCAgICAgICBpbnQgZGF0YXN5bmMpXFxuLXtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4tXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4tXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbi1cXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IGhmc3BsdXNfdmggKnZoZHIgPSBzYmktXFx1MDAzZXNfdmhkcjtcXG4tXFx0aW50IGVycm9yID0gMCwgZXJyb3IyO1xcbi1cXG4tXFx0aGZzX2RiZyhcXFwiaW5vZGUtXFx1MDAzZWlfaW5vICVsbHUsIHN0YXJ0ICVsbHUsIGVuZCAlbGx1XFxcXG5cXFwiLFxcbi1cXHRcXHRpbm9kZS1cXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xcbi1cXG4tXFx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xcbi1cXHRpZiAoZXJyb3IpXFxuLVxcdFxcdHJldHVybiBlcnJvcjtcXG4tXFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cXG4tXFx0ICovXFxuLVxcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXFxuLVxcdCAqL1xcbi1cXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXFxuLVxcdFxcdFxcdFxcdFxcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpO1xcbi1cXHRcXHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVxcdTAwM2VjYXRfdHJlZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cXHUwMDNlZmxhZ3MpKSB7XFxuLVxcdFxcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGVycm9yMiA9XFxuLVxcdFxcdFxcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVxcdTAwM2VleHRfdHJlZS1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuLVxcdFxcdGlmICghZXJyb3IpXFxuLVxcdFxcdFxcdGVycm9yID0gZXJyb3IyO1xcbi1cXHR9XFxuLVxcbi1cXHRpZiAoc2JpLVxcdTAwM2VhdHRyX3RyZWUpIHtcXG4tXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSxcXG4tXFx0XFx0XFx0XFx0XFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0FUVFJfVFJFRV9JKHNiKSktXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFxcdTAwMjZoaXAtXFx1MDAzZWZsYWdzKTtcXG4tXFx0XFx0XFx0ZXJyb3IyID1cXG4tXFx0XFx0XFx0XFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHNiaS1cXHUwMDNlYXR0cl90cmVlLVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nKTtcXG4tXFx0XFx0XFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0XFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuLVxcdFxcdH1cXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXFx1MDAyNmhpcC1cXHUwMDNlZmxhZ3MpKVxcbi1cXHRcXHRcXHRwcl9lcnIoXFxcInN5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcXFxuXFxcIik7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLFxcbi1cXHRcXHRcXHRcXHRcXHUwMDI2SEZTUExVU19JKHNiaS1cXHUwMDNlYWxsb2NfZmlsZSktXFx1MDAzZWZsYWdzKSkge1xcbi1cXHRcXHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcXHUwMDI2aGlwLVxcdTAwM2VmbGFncyk7XFxuLVxcdFxcdGVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVxcdTAwM2VhbGxvY19maWxlLVxcdTAwM2VpX21hcHBpbmcpO1xcbi1cXHRcXHRpZiAoIWVycm9yKVxcbi1cXHRcXHRcXHRlcnJvciA9IGVycm9yMjtcXG4tXFx0fVxcbi1cXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2c2JpLVxcdTAwM2V2aF9tdXRleCk7XFxuLVxcdGhmc3BsdXNfcHJlcGFyZV92b2x1bWVfaGVhZGVyX2Zvcl9jb21taXQodmhkcik7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2c2JpLVxcdTAwM2V2aF9tdXRleCk7XFxuLVxcbi1cXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0aWYgKCFlcnJvcilcXG4tXFx0XFx0ZXJyb3IgPSBlcnJvcjI7XFxuLVxcbi1cXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcXHUwMDI2c2JpLVxcdTAwM2VmbGFncykpXFxuLVxcdFxcdGJsa2Rldl9pc3N1ZV9mbHVzaChpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19iZGV2KTtcXG4tXFxuLVxcdGlub2RlX3VubG9jayhpbm9kZSk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyb3I7XFxuLX1cXG4tXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4gXFx0LnNldGF0dHJcXHQ9IGhmc3BsdXNfc2V0YXR0cixcXG4gXFx0LmdldGF0dHJcXHQ9IGhmc3BsdXNfZ2V0YXR0cixcXG5AQCAtNDU0LDE5ICszNDQsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaGZzcGx1c19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuIFxcdC5saXN0eGF0dHJcXHQ9IGhmc3BsdXNfbGlzdHhhdHRyLFxcbiB9O1xcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XFxuLVxcdC5sbHNlZWtcXHRcXHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXFxuLVxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuLVxcdC53cml0ZV9pdGVyXFx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcXG4tXFx0Lm1tYXBfcHJlcGFyZVxcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcXG4tXFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbi1cXHQuc3BsaWNlX3dyaXRlXFx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxcbi1cXHQuZnN5bmNcXHRcXHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcXG4tXFx0Lm9wZW5cXHRcXHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxcbi1cXHQucmVsZWFzZVxcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXFxuLVxcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXFxuLX07XFxuLVxcbiBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIHtcXG5AQCAtNTEzLDcgKzM5MCw3IEBAIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXFxuIFxcdFxcdHNiaS1cXHUwMDNlZmlsZV9jb3VudCsrO1xcbiBcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG4gXFx0XFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbitcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX3N5bWxpbmtfYW9wcztcXG4gXFx0XFx0aGlwLVxcdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xcbiBcXHR9IGVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbiBcXHRcXHQgICBTX0lTRklGTyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTU09DSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbkBAIC02NTQsNyArNTMxLDcgQEAgaW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxcbiBcXHRcXHR9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpIHtcXG4gXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuIFxcdFxcdFxcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XFxuLVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfYW9wcztcXG4rXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zO1xcbiBcXHRcXHRcXHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVxcdTAwM2VpX21vZGUsXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9tYXAuYyBiL2ZzL2hmc3BsdXMvaW9tYXAuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMWU2ZGZhNjkzNTI2ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmNcXG5AQCAtMCwwICsxLDE4OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKlxcbisgKiBpb21hcCBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBoZnNwbHVzIGZpbGVzeXN0ZW1cXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX2ZzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJoZnNwbHVzX3Jhdy5oXFxcIlxcbisjaW5jbHVkZSBcXFwiaW9tYXAuaFxcXCJcXG4rXFxuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuK1xcdFxcdFxcdFxcdCBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBib29sIG1heV9hbGxvYylcXG4re1xcbitcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXFx1MDAzZWlfc2I7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xcbitcXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xcbitcXHR1MzIgYWJsb2NrLCBkYmxvY2ssIG1heF9ibG9ja3M7XFxuK1xcdGxvZmZfdCBhYmxvY2tfb2Zmc2V0LCBhYmxvY2tfYnl0ZXM7XFxuK1xcdGxvZmZfdCBibG9ja19zdGFydDtcXG4rXFx0Ym9vbCBpc19uZXc7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRpZiAoIW1heV9hbGxvYykge1xcbitcXHRcXHQvKiBDb21wbGV0ZWx5IGJleW9uZCBFT0YuIFRyZWF0IGFzIGhvbGUgKi9cXG4rXFx0XFx0aWYgKGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNjPSBvZmZzZXQpIHtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9IT0xFO1xcbitcXHRcXHRcXHRpb21hcC1cXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4rXFx0XFx0XFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xcbitcXHRcXHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFxcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XFxuK1xcdFxcdFxcdGxvZmZfdCBpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XFxuK1xcbitcXHRcXHRcXHRsZW5ndGggPSByb3VuZF91cChpX3NpemUsIGJsb2Nrc2l6ZSkgLSBvZmZzZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0YWJsb2NrID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIHNiaS1cXHUwMDNlYWxsb2NfYmxrc3pfc2hpZnQ7XFxuK1xcbitcXHRlcnIgPSBoZnNwbHVzX21hcF9leHRlbnQoaW5vZGUsIGFibG9jaywgbWF5X2FsbG9jLCBcXHUwMDI2ZGJsb2NrLFxcbitcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9ibG9ja3MsIE5VTEwpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0YWJsb2NrX29mZnNldCA9IG9mZnNldCBcXHUwMDI2IChzYmktXFx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XFxuK1xcdGFibG9ja19ieXRlcyA9IChsb2ZmX3QpbWF4X2Jsb2NrcyBcXHUwMDNjXFx1MDAzYyBzYmktXFx1MDAzZWFsbG9jX2Jsa3N6X3NoaWZ0O1xcbitcXG4rXFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGFibG9ja19ieXRlcyAtIGFibG9ja19vZmZzZXQpO1xcbitcXHRibG9ja19zdGFydCA9IHJvdW5kX2Rvd24ob2Zmc2V0LCBpX2Jsb2Nrc2l6ZShpbm9kZSkpO1xcbitcXHRpc19uZXcgPSBtYXlfYWxsb2MgXFx1MDAyNlxcdTAwMjYgYmxvY2tfc3RhcnQgXFx1MDAzZT0gaGlwLVxcdTAwM2VwaHlzX3NpemU7XFxuK1xcdGlmIChtYXlfYWxsb2MgXFx1MDAyNlxcdTAwMjYgIWlzX25ldyBcXHUwMDI2XFx1MDAyNiBvZmZzZXQgXFx1MDAzYyBoaXAtXFx1MDAzZXBoeXNfc2l6ZSlcXG4rXFx0XFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC1cXHUwMDNlcGh5c19zaXplIC0gb2Zmc2V0KTtcXG4rXFxuK1xcdGlvbWFwLVxcdTAwM2ViZGV2ID0gc2ItXFx1MDAzZXNfYmRldjtcXG4rXFx0aW9tYXAtXFx1MDAzZW9mZnNldCA9IG9mZnNldDtcXG4rXFx0aW9tYXAtXFx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcXG4rXFx0aW9tYXAtXFx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICsgYWJsb2NrX29mZnNldDtcXG4rXFx0aW9tYXAtXFx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XFxuK1xcdGlvbWFwLVxcdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xcbitcXG4rXFx0aWYgKGlzX25ldylcXG4rXFx0XFx0aW9tYXAtXFx1MDAzZWZsYWdzIHw9IElPTUFQX0ZfTkVXO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxcbit7XFxuK1xcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgb2Zmc2V0LCBsZW5ndGgsIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgIGlvbWFwLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHQgICAgIGxvZmZfdCBsZW5ndGgsIHVuc2lnbmVkIGludCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcXG4re1xcbitcXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxcbitcXHRcXHRcXHRcXHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBpb21hcCwgdHJ1ZSk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpbiA9IGhmc3BsdXNfaW9tYXBfYmVnaW4sXFxuK307XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCgpXFxuKyAqXFxuKyAqIEFkdmFuY2UgdGhlIGFsbG9jYXRlZC1hbmQtemVyb2VkIGhpZ2gtd2F0ZXIgbWFya1xcbisgKiAoaGlwLVxcdTAwM2VwaHlzX3NpemUgLyBoaXAtXFx1MDAzZWZzX2Jsb2NrcykgdG8gY292ZXIgdGhlIG5ld2x5IHdyaXR0ZW4gcmFuZ2UuXFxuKyAqL1xcbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXFxuK1xcdFxcdFxcdFxcdCAgIGxvZmZfdCBsZW5ndGgsIHNzaXplX3Qgd3JpdHRlbixcXG4rXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgaW9tYXAgKmlvbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4rXFx0bG9mZl90IGVuZDtcXG4rXFx0Ym9vbCBkaXJ0aWVkID0gZmFsc2U7XFxuK1xcbitcXHRpZiAoIXdyaXR0ZW4pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0ZW5kID0gcm91bmRfdXAocG9zICsgd3JpdHRlbiwgc2ItXFx1MDAzZXNfYmxvY2tzaXplKTtcXG4rXFxuK1xcdGlmIChoaXAtXFx1MDAzZXBoeXNfc2l6ZSBcXHUwMDNjIGVuZCkge1xcbitcXHRcXHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIGVuZCAtIGhpcC1cXHUwMDNlcGh5c19zaXplKTtcXG4rXFx0XFx0aGlwLVxcdTAwM2VwaHlzX3NpemUgPSBlbmQ7XFxuK1xcdFxcdGhpcC1cXHUwMDNlZnNfYmxvY2tzID0gZW5kIFxcdTAwM2VcXHUwMDNlIHNiLVxcdTAwM2VzX2Jsb2Nrc2l6ZV9iaXRzO1xcbitcXHRcXHRkaXJ0aWVkID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGRpcnRpZWQpXFxuK1xcdFxcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xcbitcXG4rXFx0cmV0dXJuIHdyaXR0ZW47XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XFxuK1xcdC5pb21hcF9iZWdpblxcdD0gaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbixcXG4rXFx0LmlvbWFwX2VuZFxcdD0gaGZzcGx1c193cml0ZV9pb21hcF9lbmQsXFxuK307XFxuK1xcbisvKlxcbisgKiBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKClcXG4rICpcXG4rICogWmVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgZnJvbSB0aGUgY3VycmVudCBwaHlzX3NpemUgdXAgdG8gJ3NpemUnLlxcbisgKiBVc2VkIGJvdGggYnkgaGZzcGx1c19zZXRhdHRyKCkgYW5kIGJ5IGhmc3BsdXNfZmlsZV90cnVuY2F0ZSgpLlxcbisgKi9cXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcXG4rXFx0bG9mZl90IHN0YXJ0ID0gaGlwLVxcdTAwM2VwaHlzX3NpemU7XFxuK1xcbitcXHRpZiAoc2l6ZSBcXHUwMDNjPSBzdGFydClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gaW9tYXBfemVyb19yYW5nZShpbm9kZSwgc3RhcnQsIHNpemUgLSBzdGFydCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLCBOVUxMLCBOVUxMKTtcXG4rfVxcbitcXG4rLypcXG4rICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXFxuKyAqXFxuKyAqIENhbGxlZCBmb3IgZWFjaCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrLiBJZiB0aGUgZm9saW8gZmFsbHMgb3V0c2lkZVxcbisgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXFxuKyAqL1xcbitzdGF0aWMgc3NpemVfdCBoZnNwbHVzX3dyaXRlYmFja19yYW5nZShzdHJ1Y3QgaW9tYXBfd3JpdGVwYWdlX2N0eCAqd3BjLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1NjQgb2Zmc2V0LFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCB1NjQgZW5kX3BvcylcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNjIHdwYy1cXHUwMDNlaW9tYXAub2Zmc2V0IHx8XFxuK1xcdCAgICBvZmZzZXQgXFx1MDAzZT0gd3BjLVxcdTAwM2Vpb21hcC5vZmZzZXQgKyB3cGMtXFx1MDAzZWlvbWFwLmxlbmd0aCkge1xcbitcXHRcXHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVxcdTAwM2Vpbm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIG9mZnNldCwgbGVuLCAwLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNndwYy1cXHUwMDNlaW9tYXAsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcXG4rXFx0LndyaXRlYmFja19yYW5nZVxcdD0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsXFxuK1xcdC53cml0ZWJhY2tfc3VibWl0XFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxcbit9O1xcbitcXG4rY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xcbitcXHQuZW5kX2lvXFx0XFx0PSBpb21hcF9kaW9fZW5kX2lvLFxcbit9O1xcbitcXG4raW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxcbit7XFxuK1xcdHJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sIFxcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5oIGIvZnMvaGZzcGx1cy9pb21hcC5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kYWMwN2E5ZDI1ZjhkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2hmc3BsdXMvaW9tYXAuaFxcbkBAIC0wLDAgKzEsMTggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLypcXG4rICogaW9tYXAgY2FsbGJhY2sgZGVjbGFyYXRpb25zIGZvciB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBfTElOVVhfSEZTUExVU19JT01BUF9IXFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxcbitcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c19pb21hcF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX3dyaXRlYmFja19vcHMgaGZzcGx1c193cml0ZWJhY2tfb3BzO1xcbitleHRlcm4gY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzO1xcbitcXG4raW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpO1xcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpmaWxlLCBzZWN0b3JfdCAqc3Bhbik7XFxuK1xcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmNcXG5pbmRleCA1Nzc3ZTMxZGU0NWFjLi40NTljYTZmM2I4MTQ3IDEwMDY0NFxcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xcbisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xcbkBAIC01NzEsNiArNTcxLDcgQEAgc3RhdGljIGludCBoZnNwbHVzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRcXHRnb3RvIG91dF9jbG9zZV9hdHRyX3RyZWU7XFxuIFxcdH1cXG4gXFx0c2JpLVxcdTAwM2VhbGxvY19maWxlID0gaW5vZGU7XFxuK1xcdG1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuIFxcbiBcXHQvKiBMb2FkIHRoZSByb290IGRpcmVjdG9yeSAqL1xcbiBcXHRyb290ID0gaGZzcGx1c19pZ2V0KHNiLCBIRlNQTFVTX1JPT1RfQ05JRCk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcXG5pbmRleCA0NWZiNGM5ZmY5ZjVlLi4xNDE3ZTE5ZDk0YmNlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmhcXG5AQCAtMTcxLDE4ICsxNzEsMjIgQEAgZW51bSB7XFxuIFxcdEhGU19YQVRUUl9OQU1FLFxcbiB9O1xcbiBcXG4rI2RlZmluZSBIRlNfRk9SS19FWFRFTlRfQ09VTlRcXHQoMylcXG4rXFxuIHN0cnVjdCBoZnNfZXh0ZW50IHtcXG4gXFx0X19iZTE2IGJsb2NrO1xcbiBcXHRfX2JlMTYgY291bnQ7XFxuIH07XFxuLXR5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbM107XFxuK3R5cGVkZWYgc3RydWN0IGhmc19leHRlbnQgaGZzX2V4dGVudF9yZWNbSEZTX0ZPUktfRVhURU5UX0NPVU5UXTtcXG4rXFxuKyNkZWZpbmUgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVFxcdCg4KVxcbiBcXG4gLyogQSBzaW5nbGUgY29udGlndW91cyBhcmVhIG9mIGEgZmlsZSAqL1xcbiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQge1xcbiBcXHRfX2JlMzIgc3RhcnRfYmxvY2s7XFxuIFxcdF9fYmUzMiBibG9ja19jb3VudDtcXG4gfSBfX3BhY2tlZDtcXG4tdHlwZWRlZiBzdHJ1Y3QgaGZzcGx1c19leHRlbnQgaGZzcGx1c19leHRlbnRfcmVjWzhdO1xcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XFxuIFxcbiAvKiBJbmZvcm1hdGlvbiBmb3IgYSBcXFwiRm9ya1xcXCIgaW4gYSBmaWxlICovXFxuIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3IHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pb21hcC5oIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXFxuaW5kZXggNTZiNDNkNTk0ZTZlMi4uNTBmZTYwMzZiMDFhYyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2lvbWFwLmhcXG5AQCAtNTYwLDYgKzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XFxuIFxcdHN0cnVjdCBiaW9fc2V0ICpiaW9fc2V0O1xcbiB9O1xcbiBcXG4rLypcXG4rICogRGlyZWN0IEkvTyBjb21wbGV0aW9uIGhhbmRsZXJcXG4rICovXFxuK3N0YXRpYyBpbmxpbmVcXG4raW50IGlvbWFwX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuK1xcdFxcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcbitcXHRpZiAoZXJyb3IpXFxuK1xcdFxcdHJldHVybiBlcnJvcjtcXG4rXFxuK1xcdGlmIChzaXplIFxcdTAwMjZcXHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcXHUwMDNjIGlvY2ItXFx1MDAzZWtpX3BvcyArIHNpemUpIHtcXG4rXFx0XFx0aV9zaXplX3dyaXRlKGlub2RlLCBpb2NiLVxcdTAwM2VraV9wb3MgKyBzaXplKTtcXG4rXFx0XFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXYWl0IGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIGluIGlvbWFwX2Rpb19ydyBldmVuIGlmIHRoZSBraW9jYiBpcyBub3RcXG4gICogc3luY2hyb25vdXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjA2LjkyOTYxNjc2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU3MzM0NTA5NTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9jb250X2V4cGFuZFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBpb21hcCBpbmZyYXN0cnVjdHVyZSBmb3IgZmlsZSBJL08sIHJlcGxhY2luZyB0aGUgbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlciBoZWFkIGJhc2VkIHBhdGhzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpb21hcCBvcGVyYXRpb25zIGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgc2Vla2luZywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGFuZCBibG9jayBhbGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRlNTEwNDVjMDA1NDMzYTdjZGE1MGFhNmQwY2UwOTllMzFmMTVkN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzoyMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZC4uYjQ0MzJjNjRkYjNiZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXG5AQCAtNSw3ICs1LDcgQEAgY29uZmlnIEhGU1BMVVNfRlNcbiBcdHNlbGVjdCBCVUZGRVJfSEVBRFxuIFx0c2VsZWN0IE5MU1xuIFx0c2VsZWN0IE5MU19VVEY4XG4tXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuK1x0c2VsZWN0IEZTX0lPTUFQXG4gXHRoZWxwXG4gXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuIFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXG4gXG4taGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXFxcbi1cdFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuK1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4rXHRcdHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuIFx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbiBcbiAjIEtVbml0IHRlc3RzXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jXG4rKysgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXG5AQCAtMzksNiArMzksOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbitcdGxvY2tfcGFnZShwYWdlKTtcbitcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0aSA9IG9mZnNldCAlIDMyO1xuQEAgLTc1LDYgKzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VycisrO1xuIFx0XHR9XG4gXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSBzaXplKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTg0LDYgKzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGxvY2tfcGFnZShwYWdlKTtcbitcdFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XG4gXHRcdGN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKVxuIFx0XHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC05OCw2ICsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdHN0YXJ0ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaTtcbiBcdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbiBcdFx0aGZzX2RiZyhcImJpdG1hcCBmdWxsXFxuXCIpO1xuK1x0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqL1xuQEAgLTEyOCw2ICsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0fVxuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUyxcbiBcdFx0XHRcdFx0IE5VTEwpO1xuQEAgLTEzNSw2ICsxNDQsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0xNTIsNiArMTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHQqY3VyciA9IGNwdV90b19iZTMyKG4pO1xuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdCptYXggPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpIC0gc3RhcnQ7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcbiBcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuQEAgLTE4NSw2ICsxOTcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbiBcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0Z290byBrYWJvb207XG4rXHRsb2NrX3BhZ2UocGFnZSk7XG4rXHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcbiBcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMTYsOSArMjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICsrcG5yLCBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0XHRnb3RvIGthYm9vbTtcbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiArMjQ5LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gb3V0OlxuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdHNiaS1cdTAwM2VmcmVlX2Jsb2NrcyArPSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLjhmN2Y1NjBjZWM2NDIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuICNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbisvKlxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xuKyAqXG4rICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAnb2ZmJyB3aXRoaW4gYW4gOC1lbnRyeVxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxuKyAqL1xuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbitcdFx0XHRcdCB1MzIgKmRibG9jaylcbiB7XG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGV4dCsrLCBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspIHtcbiBcdFx0Y291bnQgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuLVx0XHRpZiAob2ZmIFx1MDAzYyBjb3VudClcbi1cdFx0XHRyZXR1cm4gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbitcdFx0XHQqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4rXHRcdH1cbiBcdFx0b2ZmIC09IGNvdW50O1xuIFx0fVxuIFx0LyogcGFuaWM/ICovXG4rXHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQrKywgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKylcbiBcdFx0Y291bnQgKz0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbiBcdHJldHVybiBjb3VudDtcbiB9XG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuKy8qXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcbisgKlxuKyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICdhYmxvY2snIGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4rICpcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXG4rICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXG4rICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4rICovXG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4rXHRpbnQgd2FzX2RpcnR5O1xuK1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdGlmIChiYWxsb2MpXG4rXHRcdCpiYWxsb2MgPSBmYWxzZTtcbiBcbi1cdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4rXHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuK1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGJhbGxvYylcbitcdFx0XHQqYmFsbG9jID0gdHJ1ZTtcbitcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuK1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4rXHRcdFx0XHRcdFx0ICAgICBhYmxvY2ssXG4rXHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSArMjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbi1cdFx0XHRcdFx0YWJsb2NrIC0gaGlwLVx1MDAzZWNhY2hlZF9zdGFydCk7XG4rXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuK1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgZGJsb2NrKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcbi1kb25lOlxuK1x0aWYgKHdhc19kaXJ0eSlcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbitpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuK1x0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbitcdHNlY3Rvcl90IHNlY3RvcjtcbitcdGludCByZXM7XG4rXG4rXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xuK1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4rXG4rXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuK1x0XHRpZiAoIWNyZWF0ZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcdH0gZWxzZVxuK1x0XHRjcmVhdGUgPSAwO1xuK1xuK1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuK1x0XHRcdFx0ICBOVUxMKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4gXHRoZnNfZGJnKFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCIsXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSArMzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcysrO1xuIFx0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdH1cbi1cdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgKzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4rXHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdFx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuK1xuK1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHQgIGlub2RlLVx1MDAzZWlfc2l6ZSwgMCxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NpemUsIDAsIDAsXG4rXHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybjtcbitcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuIFxuLVx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsXG4tXHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLFxuLVx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbi1cdFx0aWYgKHJlcyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKGlub2RlLVx1MDAzZWlfc2l6ZSA9PSBoaXAtXHUwMDNlcGh5c19zaXplKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyNjc4NDg4ZmIwNTRcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5AQCAtMCwwICsxLDMwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4rXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuK1x0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcbitcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuK1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXHUwMDNlb3BlbmNudCkpIHtcbitcdFx0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG4rXHRcdGlmIChpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBTX0RFQUQpIHtcbitcdFx0XHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdCAgIEhGU1BMVVNfU0Ioc2IpLVx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xuK1x0XHRcdGhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTtcbitcdFx0fVxuK1x0XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbitcdFx0ICAgICAgIGludCBkYXRhc3luYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4rXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4rXG4rXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbitcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuK1xuK1x0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHQvKlxuK1x0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXG4rXHQgKi9cbitcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuK1xuK1x0LypcbitcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuK1x0ICovXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvcjIgPVxuK1x0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdGlmICghZXJyb3IpXG4rXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4rXHR9XG4rXG4rXHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4rXHRcdFx0ZXJyb3IyID1cbitcdFx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXG4rXHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdHByX2VycihcInN5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwiKTtcbitcdH1cbitcbitcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKHNiaS1cdTAwM2VhbGxvY19maWxlKS1cdTAwM2VmbGFncykpIHtcbitcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlYWxsb2NfZmlsZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRpZiAoIWVycm9yKVxuK1x0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1x0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1xuK1x0ZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdGVycm9yID0gZXJyb3IyO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXHUwMDI2c2JpLVx1MDAzZWZsYWdzKSlcbitcdFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rLypcbisgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcbisgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseVxuKyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb25cbisgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuK3tcbitcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcywgZW5kO1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0aW50IHJldDtcbitcbitcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4rXG4rXHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMKTtcbitcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gd3JpdHRlbjtcbitcbitcdGVuZCA9IGlvY2ItXHUwMDNla2lfcG9zICsgd3JpdHRlbiAtIDE7XG4rXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHRcdCAgIG9mZnNldCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHQgb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuK1x0XHRcdFx0IGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfZGlvX29wcyxcbitcdFx0XHQgICAwLCBOVUxMLCAwKTtcbitcdGlmIChyZXQgPT0gLUVOT1RCTEspXG4rXHRcdHJldCA9IDA7XG4rXHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbitcdFx0c3NpemVfdCB3cml0dGVuO1xuK1xuK1x0XHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcbitcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHRcdHJldCArPSB3cml0dGVuO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4re1xuK1x0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRsb2ZmX3QgdG90YWxfY2FwYWNpdHk7XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBlcnI7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGl0ZXIpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cdTAwM2V0b3RhbF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XG4rXHRcdHJldCA9IC1FRkJJRztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRlcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZXQgPSBlcnI7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0bG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRsb2ZmX3QgbmV3X3NpemUgPSBpb2NiLVx1MDAzZWtpX3BvcztcbitcbitcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4rXHRcdFx0bmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLFxuK1x0XHRcdFx0XHQgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbitcdFx0fVxuK1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcbitcdFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fSBlbHNlIGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbitcdFx0cmV0ID0gaGZzcGx1c19kaW9fd3JpdGVfaXRlcihpb2NiLCBpdGVyKTtcbitcdGVsc2Uge1xuK1x0XHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGl0ZXIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdFx0TlVMTCwgTlVMTCk7XG4rXHR9XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcbitcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcbitcdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlcixcbitcdFx0XHRcdCAgIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzLFxuK1x0XHRcdFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4rXHR9IGVsc2VcbitcdFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcbitcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1xuK1x0c3dpdGNoICh3aGVuY2UpIHtcbitcdGNhc2UgU0VFS19IT0xFOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfaG9sZShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0VFS19EQVRBOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBnZW5lcmljX2ZpbGVfbGxzZWVrKGZpbGUsIG9mZnNldCwgd2hlbmNlKTtcbitcdH1cbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4rXHQubGxzZWVrXHRcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcbitcdC5yZWFkX2l0ZXJcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyLFxuK1x0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuK1x0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4rXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4rXHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4rXHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuK1x0LnJlbGVhc2VcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXG4rXHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTE3NSw2ICsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbisvKlxuKyAqIFBoeXNpY2FsIGJ5dGUgb2Zmc2V0IG9mIGFsbG9jYXRpb24gYmxvY2sgJ2RibG9jaycgb24gdGhlIHZvbHVtZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4rXG4rXHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdHBoeXNfYnl0ZXMgKz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXG4rXHRyZXR1cm4gcGh5c19ieXRlcztcbit9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzMCwxMiArNDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfb3BlcmF0aW9ucztcbiBcbisvKiBmaWxlLmMgKi9cbitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuK1xuIC8qIGV4dGVudHMuYyAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBcdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xuIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcbitcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpO1xuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbiBcdFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xuQEAgLTQ0Myw2ICs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7XG4gXG5AQCAtNDYyLDggKzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbiBcdFx0ICAgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncyk7XG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKTtcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggMWM1N2M4NzNmMDVkNi4uMDg3MzFlYzBjZWNkMyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTUgKzE4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaGZzcGx1c19mcy5oXCJcbiAjaW5jbHVkZSBcImhmc3BsdXNfcmF3LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4tXG4tc3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuLX1cbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuIFxuIHN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG4ge1xuQEAgLTEyMCw2NyArMTE3LDEzIEBAIHN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuIFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuK3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuLVx0c3NpemVfdCByZXQ7XG4tXG4tXHQvKlxuLVx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbi1cdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbi1cdCAqL1xuLVx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4tXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbi1cbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuLVx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4tXHRcdCAqL1xuLVx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4tXG4tXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4tXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4tXG4tXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4tXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbi1cdH1cbi1cbi1cdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugb2YgZXJyb3IgZXh0ZW5kaW5nIHdyaXRlIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZld1xuLVx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiByZXQgXHUwMDNjIDApKSB7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbi1cdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4tc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4rc3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XG4gfVxuQEAgLTE4OCw4ICsxMzEsOCBAQCBzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbyxcbitcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfYnRyZWVfd3JpdGVwYWdlcyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuQEAgLTE5NywxOCArMTQwLDcwIEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LnJlbGVhc2VfZm9saW9cdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxuIH07XG4gXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XG4rc3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG4tXHQuZGlyZWN0X0lPXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuK1x0LndyaXRlcGFnZXNcdD0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiB9O1xuIFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4re1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGVcdD0gbWFwcGluZy1cdTAwM2Vob3N0LFxuK1x0XHQud2JjXHQ9IHdiYyxcbitcdFx0Lm9wc1x0PSBcdTAwMjZoZnNwbHVzX3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4rc3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYW9wX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuK3tcbitcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuK1x0LnJlYWRfZm9saW9cdFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkXHRcdD0gaGZzcGx1c19yZWFkYWhlYWQsXG4rXHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmJtYXBcdFx0XHQ9IGhmc3BsdXNfYW9wX2JtYXAsXG4rXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGVcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpb1x0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbitcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuc3dhcF9hY3RpdmF0ZVx0XHQ9IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSxcbit9O1xuK1xuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfaGFzaCAgICAgICA9IGhmc3BsdXNfaGFzaF9kZW50cnksXG4gXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcbkBAIC0yNjgsMzUgKzI2Myw2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAtRUlPO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuLVx0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbi1cdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuLVx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbi1cdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuLVx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuLVx0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbi1cdFx0XHRcdFx0ICAgSEZTUExVU19TQihzYiktXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuLVx0XHR9XG4tXHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuQEAgLTMxMSwxMCArMjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4rXHRcdFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuK1xuK1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbitcdFx0XHRlcnJvciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4rXHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiBcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiBcdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbkBAIC0zNTMsODYgKzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi1cdFx0ICAgICAgIGludCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4tXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4tXG4tXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbi1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuLVxuLVx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cbi1cdC8qXG4tXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbi1cdCAqL1xuLVx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXG4tXHQvKlxuLVx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXG4tXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdH1cbi1cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9XG4tXHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlZXh0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlcnJvcjIgPVxuLVx0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbi1cdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4tXHRcdFx0cHJfZXJyKFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxuXCIpO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXG4tXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXG4tXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuLVx0XHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVxuLVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuIFx0LmdldGF0dHJcdD0gaGZzcGx1c19nZXRhdHRyLFxuQEAgLTQ1NCwxOSArMzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxpc3R4YXR0clx0PSBoZnNwbHVzX2xpc3R4YXR0cixcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuLVx0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuLVx0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3Blbixcbi1cdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuLVx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbi19O1xuLVxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuQEAgLTUxMyw3ICszOTAsNyBAQCBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRzYmktXHUwMDNlZmlsZV9jb3VudCsrO1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XG4gXHRcdGhpcC1cdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xuIFx0fSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8XG4gXHRcdCAgIFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuQEAgLTY1NCw3ICs1MzEsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuK1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmMgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbkBAIC0wLDAgKzEsMTg5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0IHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0dTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzO1xuK1x0bG9mZl90IGFibG9ja19vZmZzZXQsIGFibG9ja19ieXRlcztcbitcdGxvZmZfdCBibG9ja19zdGFydDtcbitcdGJvb2wgaXNfbmV3O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghbWF5X2FsbG9jKSB7XG4rXHRcdC8qIENvbXBsZXRlbHkgYmV5b25kIEVPRi4gVHJlYXQgYXMgaG9sZSAqL1xuK1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4rXHRcdFx0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX0hPTEU7XG4rXHRcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4rXHRcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4rXHRcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0XHRsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4rXG4rXHRcdFx0bGVuZ3RoID0gcm91bmRfdXAoaV9zaXplLCBibG9ja3NpemUpIC0gb2Zmc2V0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRhYmxvY2sgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGVyciA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBtYXlfYWxsb2MsIFx1MDAyNmRibG9jayxcbitcdFx0XHRcdCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoc2JpLVx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XG4rXHRhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBhYmxvY2tfYnl0ZXMgLSBhYmxvY2tfb2Zmc2V0KTtcbitcdGJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7XG4rXHRpc19uZXcgPSBtYXlfYWxsb2MgXHUwMDI2XHUwMDI2IGJsb2NrX3N0YXJ0IFx1MDAzZT0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcdGlmIChtYXlfYWxsb2MgXHUwMDI2XHUwMDI2ICFpc19uZXcgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2MgaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbitcdFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC1cdTAwM2VwaHlzX3NpemUgLSBvZmZzZXQpO1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IHNiLVx1MDAzZXNfYmRldjtcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9IG9mZnNldDtcbitcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdGlvbWFwLVx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICsgYWJsb2NrX29mZnNldDtcbitcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xuK1xuK1x0aWYgKGlzX25ldylcbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHRzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuK1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIGlvbWFwLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXG4rXHRcdFx0XHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcbitcdFx0XHRcdCAgICAgaW9tYXAsIHRydWUpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZV9pb21hcF9lbmQoKVxuKyAqXG4rICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXG4rICogKGhpcC1cdTAwM2VwaHlzX3NpemUgLyBoaXAtXHUwMDNlZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS5cbisgKi9cbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4rXHRcdFx0XHQgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4re1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0bG9mZl90IGVuZDtcbitcdGJvb2wgZGlydGllZCA9IGZhbHNlO1xuK1xuK1x0aWYgKCF3cml0dGVuKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVuZCA9IHJvdW5kX3VwKHBvcyArIHdyaXR0ZW4sIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcbitcdGlmIChoaXAtXHUwMDNlcGh5c19zaXplIFx1MDAzYyBlbmQpIHtcbitcdFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBlbmQgLSBoaXAtXHUwMDNlcGh5c19zaXplKTtcbitcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcbitcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyA9IGVuZCBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbitcdFx0ZGlydGllZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoZGlydGllZClcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c19pb21hcF9jb250X2V4cGFuZCgpXG4rICpcbisgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAnc2l6ZScuXG4rICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS5cbisgKi9cbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0bG9mZl90IHN0YXJ0ID0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcbitcdGlmIChzaXplIFx1MDAzYz0gc3RhcnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsXG4rXHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7XG4rfVxuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXG4rICpcbisgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGVcbisgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IG9mZnNldCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbitcdCAgICBvZmZzZXQgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuK1x0XHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLFxuK1x0XHRcdFx0XHQgICAgb2Zmc2V0LCBsZW4sIDAsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcbitcdC53cml0ZWJhY2tfcmFuZ2VcdD0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsXG4rXHQud3JpdGViYWNrX3N1Ym1pdFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuK1x0LmVuZF9pb1x0XHQ9IGlvbWFwX2Rpb19lbmRfaW8sXG4rfTtcbitcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4rXHRcdFx0XHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxuK3tcbitcdHJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5oIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGFjMDdhOWQyNWY4ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcztcbitcbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7XG4raW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKTtcbitcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xuaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xuKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jXG5AQCAtNTcxLDYgKzU3MSw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0Z290byBvdXRfY2xvc2VfYXR0cl90cmVlO1xuIFx0fVxuIFx0c2JpLVx1MDAzZWFsbG9jX2ZpbGUgPSBpbm9kZTtcbitcdG1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qIExvYWQgdGhlIHJvb3QgZGlyZWN0b3J5ICovXG4gXHRyb290ID0gaGZzcGx1c19pZ2V0KHNiLCBIRlNQTFVTX1JPT1RfQ05JRCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuQEAgLTE3MSwxOCArMTcxLDIyIEBAIGVudW0ge1xuIFx0SEZTX1hBVFRSX05BTUUsXG4gfTtcbiBcbisjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVFx0KDMpXG4rXG4gc3RydWN0IGhmc19leHRlbnQge1xuIFx0X19iZTE2IGJsb2NrO1xuIFx0X19iZTE2IGNvdW50O1xuIH07XG4tdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1szXTtcbit0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07XG4rXG4rI2RlZmluZSBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXHQoOClcbiBcbiAvKiBBIHNpbmdsZSBjb250aWd1b3VzIGFyZWEgb2YgYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZXh0ZW50IHtcbiBcdF9fYmUzMiBzdGFydF9ibG9jaztcbiBcdF9fYmUzMiBibG9ja19jb3VudDtcbiB9IF9fcGFja2VkO1xuLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTtcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XG4gXG4gLyogSW5mb3JtYXRpb24gZm9yIGEgXCJGb3JrXCIgaW4gYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZm9ya19yYXcge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMi4uNTBmZTYwMzZiMDFhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNTYwLDYgKzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XG4gXHRzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDtcbiB9O1xuIFxuKy8qXG4rICogRGlyZWN0IEkvTyBjb21wbGV0aW9uIGhhbmRsZXJcbisgKi9cbitzdGF0aWMgaW5saW5lXG4raW50IGlvbWFwX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4rXHRcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHNpemUgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2MgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKTtcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKiBXYWl0IGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIGluIGlvbWFwX2Rpb19ydyBldmVuIGlmIHRoZSBraW9jYiBpcyBub3RcbiAgKiBzeW5jaHJvbm91cy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjA2LjkyOTYxNzc4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA2NTQyNjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEhGUysgaW9tYXAgQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBIRlMrIHBhdGNoLCBhbmQgaXQgbG9va3MgbGlrZSBhIGZhaXJseSBjb21wcmVoZW5zaXZlIG92ZXJoYXVsLiBUaGUgY29yZSBpZGVhIGlzIHRvIG1pZ3JhdGUgdGhlIEhGUysgZmlsZXN5c3RlbSdzIEkvTyBwYXRoIHRvIHV0aWxpemUgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlLCB3aGljaCwgYXMgd2Uga25vdywgY2FuIG9mZmVyIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGFuZCBmbGV4aWJpbGl0eSBhZHZhbnRhZ2VzLiBUaGUgZmFjdCB0aGF0IGl0J3MgcmVwbGFjaW5nIGBMRUdBQ1lfRElSRUNUX0lPYCB3aXRoIGBGU19JT01BUGAgaW4gYEtjb25maWdgIHByZXR0eSBtdWNoIGNvbmZpcm1zIHRoaXMgbWFqb3IgYXJjaGl0ZWN0dXJhbCBzaGlmdC5cblxuVGhpcyBpc24ndCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5jdGlvbmFsIHRyYW5zZm9ybWF0aW9uLiBXZSdyZSB0YWxraW5nIGFib3V0IG5ldyBmaWxlcyAoYGZpbGUuY2AsIGBpb21hcC5jYCkgYW5kIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBib2FyZC4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIGNvcmUgZmlsZXN5c3RlbSBjb21wb25lbnRzOiBgYml0bWFwLmNgIChwYWdlIGxvY2tpbmcgYW5kIHdyaXRlIHN0YWJpbGl0eSksIGBleHRlbnRzLmNgICh3aXRoIHRoZSBuZXcgYGhmc3BsdXNfbWFwX2V4dGVudGAgYW5kIHVwZGF0ZXMgdG8gYmxvY2stcmVsYXRlZCBmdW5jdGlvbnMpLCBgaW5vZGUuY2AgKGludGVncmF0aW5nIGlvbWFwIGZvciBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMsIHNlcGFyYXRpbmcgYnRyZWUgYW5kIHN5bWxpbmsgYW9wcykuIEFuZCwgb2YgY291cnNlLCB0aGUgYWRkaXRpb24gb2YgYGlvbWFwLmNgIGFuZCBgaW9tYXAuaGAgd2l0aCBhbGwgdGhlIGlvbWFwLXNwZWNpZmljIG9wZXJhdGlvbnMuXG5cblRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBzb21lIHNlcmlvdXMgZnV6emluZyBhbmQgdGVzdGluZy4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUga2V5IGFyZWFzLiBJJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgcmVhbGx5IHNjcnV0aW5pemluZyB0aGUgaW50ZXJhY3Rpb25zIG9mIGZ1bmN0aW9ucyBsaWtlIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYCwgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLCBhbmQgYGhmc3BsdXNfZmlsZV9mc3luY2Agc2luY2UgdGhleSdyZSB0aGUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdGhlIG5ldyBJL08gcGF0aC4gSSdsbCBhbHNvIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXh0ZW50IG1hcHBpbmcgKGBoZnNwbHVzX21hcF9leHRlbnRgKSBhbmQgdGhlIGlvbWFwIGNvbnRpbnVhdGlvbiAoYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLCBgX19oZnNwbHVzX2lvbWFwX2JlZ2luYCwgYGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kYCwgYGhmc3BsdXNfd3JpdGViYWNrX3JhbmdlYCkuIFRoZXNlIGFyZSBjcnVjaWFsIGZvciB0aGUgaW9tYXAncyBjb3JyZWN0IG9wZXJhdGlvbi5cblxuSSBzaG91bGQgdmVyaWZ5IHRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBtZXQsIGxpa2UgYENPTkZJR19IRlNQTFVTX0ZTYC5cblxuSSdsbCBydW4gc29tZSBgZ3JlcHBlcmAgc2VhcmNoZXMgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbiBuYW1lcyBpbnNpZGUgb2YgYGZzL2hmc3BsdXMvZmlsZS5jYCBhbmQgYGZzL2hmc3BsdXMvaW9tYXAuY2AgdG8gc2VlIGhvdyB0aGUgY2hhbmdlcyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTU5LCJPdXRwdXRUb2tlbnMiOjY3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjM6MTcuODM2MTYzNTA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNTgwNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdCkgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvZmlsZS5jLTE0LVxcbmZzL2hmc3BsdXMvZmlsZS5jOjE1OnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvaGZzcGx1cy9maWxlLmMtMTYte1xcbi0tXFxuZnMvaGZzcGx1cy9maWxlLmMtMjUtXFxuZnMvaGZzcGx1cy9maWxlLmM6MjY6c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNy17XFxuLS1cXG5mcy9oZnNwbHVzL2ZpbGUuYy00NC1cXG5mcy9oZnNwbHVzL2ZpbGUuYzo0NTppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuZnMvaGZzcGx1cy9maWxlLmMtNDYtXFx0XFx0ICAgICAgIGludCBkYXRhc3luYylcXG4tLVxcbmZzL2hmc3BsdXMvZmlsZS5jLTEyNy0gKi9cXG5mcy9oZnNwbHVzL2ZpbGUuYzoxMjg6c3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaGZzcGx1cy9maWxlLmMtMTI5LVxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2hmc3BsdXMvZmlsZS5jLTE1NS1cXG5mcy9oZnNwbHVzL2ZpbGUuYzoxNTY6c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaGZzcGx1cy9maWxlLmMtMTU3LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4tLVxcbmZzL2hmc3BsdXMvZmlsZS5jLTE4MS1cXG5mcy9oZnNwbHVzL2ZpbGUuYzoxODI6c3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2hmc3BsdXMvZmlsZS5jLTE4My1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNDktXFxuZnMvaGZzcGx1cy9maWxlLmM6MjUwOnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZmlsZV9yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2hmc3BsdXMvZmlsZS5jLTI1MS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNzAtXFxuZnMvaGZzcGx1cy9maWxlLmM6MjcxOnN0YXRpYyBsb2ZmX3QgaGZzcGx1c19maWxlX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSlcXG5mcy9oZnNwbHVzL2ZpbGUuYy0yNzIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyMzoxNy44ODg3NTEyNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NjcyMjUxOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGFzc3VtaW5nIEknbSB0aGUgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIEZpbGUgU3lzdGVtIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgaG93IEhGUysgZGVhbHMgd2l0aCBJL08gbWFwcGluZy4gVGhhdCdzIGEgY3JpdGljYWwgYXJlYSwgZXNwZWNpYWxseSB3aGVuIGxvb2tpbmcgYXQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMuIFRoZSBmaXJzdCBwbGFjZSBJJ20gZ29pbmcgdG8gaGVhZCBpcyBgZnMvaGZzcGx1cy9pb21hcC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBsaWtlbHkgcmVwb3NpdG9yeSBmb3IgdGhlIGZ1bmN0aW9ucyBoYW5kbGluZyBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIHRyYW5zbGF0aW9uLCBleHRlbnQgbWFuYWdlbWVudCwgYW5kIHRoZSBvdmVyYWxsIG1lY2hhbmljcyBvZiBob3cgSEZTKyBhcnJhbmdlcyBkYXRhIG9uIHRoZSBkaXNrLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLCBpbiB0ZXJtcyBvZiBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yYWdlLiBMZXQncyBzZWUgd2hhdCBzZWNyZXRzIGl0IGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDc4MiwiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjI3LjU2MTAwNjUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjUxMTQwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHxzc2l6ZV90fGxvZmZfdHxzdGF0aWMgaW50fHN0YXRpYyBzc2l6ZV90fHN0YXRpYyBsb2ZmX3QpIFthLXpBLVowLTlfXStcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzL2lvbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaGZzcGx1cy9pb21hcC5jLTEyLVxcbmZzL2hmc3BsdXMvaW9tYXAuYzoxMzpzdGF0aWMgaW50IF9faGZzcGx1c19pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xNC1cXHRcXHRcXHRcXHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxuZnMvaGZzcGx1cy9pb21hcC5jLTczLVxcbmZzL2hmc3BsdXMvaW9tYXAuYzo3NDpzdGF0aWMgaW50IGhmc3BsdXNfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcXG5mcy9oZnNwbHVzL2lvbWFwLmMtNzUtXFx0XFx0XFx0XFx0bG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxcbi0tXFxuZnMvaGZzcGx1cy9pb21hcC5jLTgyLVxcbmZzL2hmc3BsdXMvaW9tYXAuYzo4MzpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfYmVnaW4oc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCxcXG5mcy9oZnNwbHVzL2lvbWFwLmMtODQtXFx0XFx0XFx0XFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmM9OTI9Y29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX2lvbWFwX29wcyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xMDEtICovXFxuZnMvaGZzcGx1cy9pb21hcC5jOjEwMjpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXFxuZnMvaGZzcGx1cy9pb21hcC5jLTEwMy1cXHRcXHRcXHRcXHQgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sXFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmM9MTI5PWNvbnN0IHN0cnVjdCBpb21hcF9vcHMgaGZzcGx1c193cml0ZV9pb21hcF9vcHMgPSB7XFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTM5LSAqL1xcbmZzL2hmc3BsdXMvaW9tYXAuYzoxNDA6aW50IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuZnMvaGZzcGx1cy9pb21hcC5jLTE0MS17XFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTU3LSAqL1xcbmZzL2hmc3BsdXMvaW9tYXAuYzoxNTg6c3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcXG5mcy9oZnNwbHVzL2lvbWFwLmMtMTU5LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHU2NCBvZmZzZXQsXFxuLS1cXG5mcy9oZnNwbHVzL2lvbWFwLmM9MTgxPWNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW9tYXAuYy0xODQtXFxuZnMvaGZzcGx1cy9pb21hcC5jOjE4NTppbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXFxuZnMvaGZzcGx1cy9pb21hcC5jLTE4Ni1cXHRcXHRcXHRcXHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyMzoyNy44NzM1MjM0MzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg2MzE3NDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gYGZzL2hmc3BsdXMvZXh0ZW50cy5jYCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEhGUysgZXh0ZW50IG1hbmFnZW1lbnQgY29kZS4gTGV0J3Mgc2VlLi4uIHRoZSBgZnMvaGZzcGx1cy9leHRlbnRzLmNgIGZpbGUgaXMgcHJvYmFibHkgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0LiBFeHRlbnRzIGFyZSBmdW5kYW1lbnRhbCB0byBob3cgSEZTKyBvcmdhbml6ZXMgZGF0YSwgc28gdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgYWxsb2NhdGluZywgZGVhbGxvY2F0aW5nLCBhbmQgbWFuYWdpbmcgdGhvc2UgYmxvY2tzIHdvdWxkIHJlc2lkZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoaW5ncyBsaWtlIG1hcHBpbmcgbG9naWNhbCBibG9jayBudW1iZXJzIHRvIHBoeXNpY2FsIG9uZXMsIGhhbmRsaW5nIGZyYWdtZW50ZWQgZmlsZXMsIGFuZCBwb3NzaWJseSBkZWFsaW5nIHdpdGggYWxsb2NhdGlvbiBiaXRtYXBzIGlmIEhGUysgdXNlcyBvbmUuIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgSEZTKyBkYXRhIHN0cnVjdHVyZXMgdG8gdW5kZXJzdGFuZCBob3cgZXh0ZW50cyBhcmUgc3RvcmVkIG9uIGRpc2suIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc2MSwiT3V0cHV0VG9rZW5zIjo3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjQxLjczNjY5OTkxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTA1ODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oaW50fHNzaXplX3R8bG9mZl90fHN0YXRpYyBpbnR8c3RhdGljIHNzaXplX3R8c3RhdGljIGxvZmZfdHx1MzJ8c3RhdGljIHUzMikgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvZXh0ZW50cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvZXh0ZW50cy5jLTIwLS8qIENvbXBhcmUgdHdvIGV4dGVudHMga2V5cywgcmV0dXJucyAwIG9uIHNhbWUsIHBvcy9uZWcgZm9yIGRpZmZlcmVuY2UgKi9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMTppbnQgaGZzcGx1c19leHRfY21wX2tleShjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazEsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjItXFx0XFx0XFx0Y29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsyKVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9NDI9c3RhdGljIHZvaWQgaGZzcGx1c19leHRfYnVpbGRfa2V5KGhmc3BsdXNfYnRyZWVfa2V5ICprZXksIHUzMiBjbmlkLFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNTgtICovXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6NTk6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0LCB1MzIgb2ZmLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTYwLVxcdFxcdFxcdFxcdCB1MzIgKmRibG9jaylcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTc3LVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjc4OnN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNzkte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODctXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6ODg6c3RhdGljIHUzMiBoZnNwbHVzX2V4dF9sYXN0YmxvY2soc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtODkte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtOTgtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6OTk6c3RhdGljIGludCBfX2hmc3BsdXNfZXh0X3dyaXRlX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTEwMC1cXHRcXHRzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNDItXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTQzOnN0YXRpYyBpbnQgaGZzcGx1c19leHRfd3JpdGVfZXh0ZW50X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTE0NC17XFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNTgtXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM6MTU5OmludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0xNjAte1xcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmM9MTkxPXN0YXRpYyBpbmxpbmUgaW50IF9faGZzcGx1c19leHRfY2FjaGVfZXh0ZW50KHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZCxcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTIxOS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyMjA6c3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMjIxLXtcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI1Mi0gKi9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzoyNTM6aW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTI1NC1cXHRcXHRcXHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDctLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozMDg6aW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcXG5mcy9oZnNwbHVzL2V4dGVudHMuYy0zMDktXFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXFxuLS1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYz0zNTI9c3RhdGljIHZvaWQgaGZzcGx1c19kdW1wX2V4dGVudChzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dGVudClcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTM2My1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzozNjQ6c3RhdGljIGludCBoZnNwbHVzX2FkZF9leHRlbnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHRlbnQsIHUzMiBvZmZzZXQsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzY1LVxcdFxcdFxcdCAgICAgIHUzMiBhbGxvY19ibG9jaywgdTMyIGJsb2NrX2NvdW50KVxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzkxLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjM5MjpzdGF0aWMgaW50IGhmc3BsdXNfZnJlZV9leHRlbnRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtMzkzLVxcdFxcdFxcdFxcdHN0cnVjdCBoZnNwbHVzX2V4dGVudCAqZXh0ZW50LFxcbi0tXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDQ1LVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jOjQ0NjppbnQgaGZzcGx1c19mcmVlX2Zvcmsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGNuaWQsXFxuZnMvaGZzcGx1cy9leHRlbnRzLmMtNDQ3LVxcdFxcdHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrLCBpbnQgdHlwZSlcXG4tLVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ5MC1cXG5mcy9oZnNwbHVzL2V4dGVudHMuYzo0OTE6aW50IGhmc3BsdXNfZmlsZV9leHRlbmQoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCB6ZXJvb3V0KVxcbmZzL2hmc3BsdXMvZXh0ZW50cy5jLTQ5Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjIzOjQxLjc4ODgxMDc2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MTk2ODQxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBMaW5lIG9mIFJlYXNvbmluZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBjb3JlIEhGUysgZmlsZSBzeXN0ZW0gZnVuY3Rpb25zIGZvciB0aGlzIGludmVzdGlnYXRpb24uIEJhc2VkIG9uIHdoYXQgSSdtIHNlZWluZywgSSBzaG91bGQgc3RhcnQgd2l0aCB0aGVzZTogYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfcmVhZF9pdGVyYCwgYGhmc3BsdXNfZmlsZV9sbHNlZWtgLCBgaGZzcGx1c19tYXBfZXh0ZW50YCwgYW5kIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgYnVpbGRpbmcgYmxvY2tzIGZvciB1bmRlcnN0YW5kaW5nIGZpbGUgSS9PIGFuZCBleHRlbnQgbWFwcGluZyB3aXRoaW4gdGhlIEhGUysgY29udGV4dC5cblxuTm93LCBsZXQgbWUganVzdCBxdWlja2x5IGdsYW5jZSBhdCBgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlYC4gSXQncyBub24tc3RhdGljLCBzbyBpdCdzIHByb2JhYmx5IHdvcnRoIGEgbG9vaywgdGhvdWdoIEknbGwgbmVlZCB0byBwcmlvcml0aXplLiBJJ2xsIGFsc28gY2hlY2sgb3V0IGBoZnNwbHVzX2dldF9ibG9ja2Agc2luY2UgaXQgaGFzIGJlZW4gdXBkYXRlZCwgYW5kIHRoYXQgY291bGQgYmUgaW50ZXJlc3RpbmcuIE9uIHRoZSBvdGhlciBoYW5kLCBgaGZzcGx1c19leHRfZmluZF9ibG9ja2Agd2FzIGFsc28gdXBkYXRlZCBidXQgaXQncyBzdGF0aWMsIHNvIGl0IG1heSBub3QgYmUgYXMgY3JpdGljYWwgdG8gdGhlIGxhcmdlciBwaWN0dXJlLiBJJ2xsIGhhdmUgdG8gY29uc2lkZXIgdGhpcyBsYXRlci5cblxuRmluYWxseSwgSSdsbCBuZWVkIHRvIHJlZmVyZW5jZSB0aGUgYGZzL2hmc3BsdXMvS2NvbmZpZ2AgZmlsZS4gVGhhdCB3aWxsIHJldmVhbCBhbnkgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGNvdWxkIGluZmx1ZW5jZSBob3cgdGhlc2UgZnVuY3Rpb25zIGJlaGF2ZS4gSSBjYW4ndCBnZXQgdGhlIGZ1bGwgcGljdHVyZSB3aXRob3V0IHRoYXQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMyOTMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjM6NDkuNTA4NDk3MzE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEhGU1BMVVNfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0tcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IE5MU1xcbiAgIDc6XFx0XFx0c2VsZWN0IE5MU19VVEY4XFxuICAgODpcXHRcXHRzZWxlY3QgRlNfSU9NQVBcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XFxuICAxMTpcXHRcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBUaGlzIGZpbGUgc3lzdGVtIGlzIG9mdGVuIGNhbGxlZCBIRlMrIGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXFxuICAxNDpcXHRcXHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcXG4gIDE1OlxcdFxcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxcbiAgMTY6XFx0XFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBIRlMrIGZpbGVzeXN0ZW1cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcXHUwMDI2XFx1MDAyNiBLVU5JVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyMzo0OS41MDg1NTc5OTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ2NzE0ODgzNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEhGUysgSS9PIE9wZXJhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5BbHJpZ2h0LCBnaXZlbiB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZywgSSBuZWVkIHRvIGlkZW50aWZ5IGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcgYWZ0ZXIgdGhpcyBIRlMrIGlvbWFwIGNvbnZlcnNpb24uIFRoZSBnb2FsIGlzIHRvIGZvY3VzIG9uIGVudHJ5IHBvaW50cyBmb3IgZmlsZSBJL08gb3BlcmF0aW9ucyBhbmQgcmVsYXRlZCBleHRlbnQvYmxvY2sgbWFuYWdlbWVudC5cblxuRmlyc3QsIEkgcmV2aWV3ZWQgdGhlIGNhbmRpZGF0ZSBmdW5jdGlvbnM6IGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJgLCBgaGZzcGx1c19maWxlX3JlYWRfaXRlcmAsIGBoZnNwbHVzX2ZpbGVfbGxzZWVrYCwgYGhmc3BsdXNfbWFwX2V4dGVudGAsIGBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kYCwgYW5kIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGluY2x1ZGUgYGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyYCBldmVuIHRob3VnaCBpdCdzIHN0YXRpYywgc2luY2UgaXQncyBhc3NpZ25lZCB0byBgaGZzcGx1c19maWxlX29wZXJhdGlvbnMud3JpdGVfaXRlcmAgYW5kIHJlcHJlc2VudHMgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9uIGV4cGxpY2l0bHkgcHJlZmVycyBub24tc3RhdGljLCBub24taW5saW5lZCBlbnRyeSBwb2ludHMuXG5cblRoZXJlZm9yZSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBub24tc3RhdGljIGNhbmRpZGF0ZXMuIGBoZnNwbHVzX2ZpbGVfd3JpdGVfaXRlcmAgaXMgdGVtcHRpbmcsIGJ1dCBzdGF0aWMsIGFuZCBJIG5lZWQgdG8gcHJpb3JpdGl6ZSBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucy4gVGh1cywgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLCBhbmQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhcmUgZGVmaW5pdGVseSBpbiBzY29wZS5cblxuSSBtYWRlIHN1cmUgdG8gcmUtY2hlY2sgYWxsIHRoZSBjb2RlLiBJIHZlcmlmaWVkIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZSBpbmRlZWQgbm9uLXN0YXRpYywgYnkgbG9va2luZyB0aHJvdWdoIGBmcy9oZnNwbHVzL2ZpbGUuY2AsIGBmcy9oZnNwbHVzL2lvbWFwLmNgLCBhbmQgYGZzL2hmc3BsdXMvZXh0ZW50cy5jYC4gSSBjb25maXJtZWQgdGhhdCB0aGUgZGVmaW5pdGlvbnMgb2YgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX21hcF9leHRlbnRgLCBgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZGAsIGBoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVgLCBhbmQgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBhcmUgZXhhY3RseSBhcyBJIGV4cGVjdC5cblxuQmFzZWQgb24gdGhlIGluZm9ybWF0aW9uLCB0aGlzIHBhdGNoIHJlcHJlc2VudHMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IHdpdGggaW9tYXAsIHdoaWNoIHRvdWNoZXMgb24gdGhlIGNvcmUgZmlsZSBzeXN0ZW0sIGJsb2NrIGFsbG9jYXRpb24sIGV4dGVudCBtYXBwaW5nLCBhbmQgSS9PIGhhbmRsaW5nLCBhbmQgdGhlcmVmb3JlLCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFsbCBleGNlbGxlbnQgZnV6emluZyB0YXJnZXRzIHRvIGNvdmVyIGtleSBlbnRyeXBvaW50cyBmb3IgZmlsZSBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDExMiwiT3V0cHV0VG9rZW5zIjoxNzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjQ6MDQuMTgwMDQ5NTk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQwNzMxNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2ZpbGVfZnN5bmNcIixcbiAgICBcImhmc3BsdXNfbWFwX2V4dGVudFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9jb250X2V4cGFuZFwiLFxuICAgIFwiaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlXCIsXG4gICAgXCJoZnNwbHVzX2dldF9ibG9ja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBIRlMrIGZpbGVzeXN0ZW0gdG8gdXNlIHRoZSBpb21hcCBpbmZyYXN0cnVjdHVyZSBmb3IgZmlsZSBJL08sIHJlcGxhY2luZyB0aGUgbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlciBoZWFkIGJhc2VkIHBhdGhzLiBJdCBpbnRyb2R1Y2VzIG5ldyBpb21hcCBvcGVyYXRpb25zIGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgc2Vla2luZywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGFuZCBibG9jayBhbGxvY2F0aW9uIGxvZ2ljLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfZmlsZV9mc3luY1wiLFxuICAgIFwiaGZzcGx1c19tYXBfZXh0ZW50XCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kXCIsXG4gICAgXCJoZnNwbHVzX2lvbWFwX3N3YXBfYWN0aXZhdGVcIixcbiAgICBcImhmc3BsdXNfZ2V0X2Jsb2NrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIEhGUysgZmlsZXN5c3RlbSB0byB1c2UgdGhlIGlvbWFwIGluZnJhc3RydWN0dXJlIGZvciBmaWxlIEkvTywgcmVwbGFjaW5nIHRoZSBsZWdhY3kgZGlyZWN0IEkvTyBhbmQgYnVmZmVyIGhlYWQgYmFzZWQgcGF0aHMuIEl0IGludHJvZHVjZXMgbmV3IGlvbWFwIG9wZXJhdGlvbnMgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBzZWVraW5nLCBhbmQgbW9kaWZpZXMgZXh0ZW50IG1hcHBpbmcgYW5kIGJsb2NrIGFsbG9jYXRpb24gbG9naWMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBmaWxlc3lzdGVtIGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjQ6MDQuMjY0MTMwNTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTk4NjcxODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MjQ6MDQuMjY0Njk3NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjA1OTgxMDExMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRlNTEwNDVjMDA1NDMzYTdjZGE1MGFhNmQwY2UwOTllMzFmMTVkN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAyMzoyMzowNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvS2NvbmZpZyBiL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuaW5kZXggY2E4NDAxY2I2OTU0ZC4uYjQ0MzJjNjRkYjNiZSAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvS2NvbmZpZ1xuKysrIGIvZnMvaGZzcGx1cy9LY29uZmlnXG5AQCAtNSw3ICs1LDcgQEAgY29uZmlnIEhGU1BMVVNfRlNcbiBcdHNlbGVjdCBCVUZGRVJfSEVBRFxuIFx0c2VsZWN0IE5MU1xuIFx0c2VsZWN0IE5MU19VVEY4XG4tXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuK1x0c2VsZWN0IEZTX0lPTUFQXG4gXHRoZWxwXG4gXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuIFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9NYWtlZmlsZSBiL2ZzL2hmc3BsdXMvTWFrZWZpbGVcbmluZGV4IGYyYTlhZTY5N2U4MTEuLjNkZGVhNjlhOWM2OTggMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL01ha2VmaWxlXG4rKysgYi9mcy9oZnNwbHVzL01ha2VmaWxlXG5AQCAtNSw4ICs1LDkgQEBcbiBcbiBvYmotJChDT05GSUdfSEZTUExVU19GUykgKz0gaGZzcGx1cy5vXG4gXG4taGZzcGx1cy1vYmpzIDo9IHN1cGVyLm8gb3B0aW9ucy5vIGlub2RlLm8gaW9jdGwubyBleHRlbnRzLm8gY2F0YWxvZy5vIGRpci5vIGJ0cmVlLm8gXFxcbi1cdFx0Ym5vZGUubyBicmVjLm8gYmZpbmQubyB0YWJsZXMubyB1bmljb2RlLm8gd3JhcHBlci5vIGJpdG1hcC5vIHBhcnRfdGJsLm8gXFxcbitoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBmaWxlLm8gaW9tYXAubyBpb2N0bC5vIGV4dGVudHMubyBcXFxuK1x0XHRjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIFxcXG4rXHRcdHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxuIFx0XHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cbiBcbiAjIEtVbml0IHRlc3RzXG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9iaXRtYXAuYyBiL2ZzL2hmc3BsdXMvYml0bWFwLmNcbmluZGV4IDFiM2FmOGM4N2NhZGIuLjYxYzQ5Y2NhNGE3YTIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2JpdG1hcC5jXG4rKysgYi9mcy9oZnNwbHVzL2JpdG1hcC5jXG5AQCAtMzksNiArMzksOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbitcdGxvY2tfcGFnZShwYWdlKTtcbitcdGZvbGlvX3dhaXRfc3RhYmxlKHBhZ2VfZm9saW8ocGFnZSkpO1xuIFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdGN1cnIgPSBwcHRyICsgKG9mZnNldCBcdTAwMjYgKFBBR0VfQ0FDSEVfQklUUyAtIDEpKSAvIDMyO1xuIFx0aSA9IG9mZnNldCAlIDMyO1xuQEAgLTc1LDYgKzc3LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0Y3VycisrO1xuIFx0XHR9XG4gXHRcdGt1bm1hcF9sb2NhbChwcHRyKTtcbitcdFx0dW5sb2NrX3BhZ2UocGFnZSk7XG4gXHRcdG9mZnNldCArPSBQQUdFX0NBQ0hFX0JJVFM7XG4gXHRcdGlmIChvZmZzZXQgXHUwMDNlPSBzaXplKVxuIFx0XHRcdGJyZWFrO1xuQEAgLTg0LDYgKzg3LDggQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHRcdFx0c3RhcnQgPSBzaXplO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXHRcdGxvY2tfcGFnZShwYWdlKTtcbitcdFx0Zm9saW9fd2FpdF9zdGFibGUocGFnZV9mb2xpbyhwYWdlKSk7XG4gXHRcdGN1cnIgPSBwcHRyID0ga21hcF9sb2NhbF9wYWdlKHBhZ2UpO1xuIFx0XHRpZiAoKHNpemUgXiBvZmZzZXQpIC8gUEFHRV9DQUNIRV9CSVRTKVxuIFx0XHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC05OCw2ICsxMDMsOSBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdHN0YXJ0ID0gb2Zmc2V0ICsgKGN1cnIgLSBwcHRyKSAqIDMyICsgaTtcbiBcdGlmIChzdGFydCBcdTAwM2U9IHNpemUpIHtcbiBcdFx0aGZzX2RiZyhcImJpdG1hcCBmdWxsXFxuXCIpO1xuK1x0XHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHRcdHVubG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRzdGFydCA9IHNpemU7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFx0LyogZG8gYW55IHBhcnRpYWwgdTMyIGF0IHRoZSBzdGFydCAqL1xuQEAgLTEyOCw2ICsxMzYsNyBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0fVxuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0b2Zmc2V0ICs9IFBBR0VfQ0FDSEVfQklUUztcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG9mZnNldCAvIFBBR0VfQ0FDSEVfQklUUyxcbiBcdFx0XHRcdFx0IE5VTEwpO1xuQEAgLTEzNSw2ICsxNDQsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19hbGxvY2F0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2l6ZSxcbiBcdFx0XHRzdGFydCA9IHNpemU7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0xNTIsNiArMTYzLDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfYWxsb2NhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNpemUsXG4gXHQqY3VyciA9IGNwdV90b19iZTMyKG4pO1xuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdCptYXggPSBvZmZzZXQgKyAoY3VyciAtIHBwdHIpICogMzIgKyBpIC0gc3RhcnQ7XG4gXHRzYmktXHUwMDNlZnJlZV9ibG9ja3MgLT0gKm1heDtcbiBcdGhmc3BsdXNfbWFya19tZGJfZGlydHkoc2IpO1xuQEAgLTE4NSw2ICsxOTcsOCBAQCBpbnQgaGZzcGx1c19ibG9ja19mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBvZmZzZXQsIHUzMiBjb3VudClcbiBcdHBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBwbnIsIE5VTEwpO1xuIFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0Z290byBrYWJvb207XG4rXHRsb2NrX3BhZ2UocGFnZSk7XG4rXHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdHBwdHIgPSBrbWFwX2xvY2FsX3BhZ2UocGFnZSk7XG4gXHRjdXJyID0gcHB0ciArIChvZmZzZXQgXHUwMDI2IChQQUdFX0NBQ0hFX0JJVFMgLSAxKSkgLyAzMjtcbiBcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMTYsOSArMjMwLDEyIEBAIGludCBoZnNwbHVzX2Jsb2NrX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mZnNldCwgdTMyIGNvdW50KVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbiBcdFx0a3VubWFwX2xvY2FsKHBwdHIpO1xuK1x0XHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdFx0cGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsICsrcG5yLCBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihwYWdlKSlcbiBcdFx0XHRnb3RvIGthYm9vbTtcbitcdFx0bG9ja19wYWdlKHBhZ2UpO1xuK1x0XHRmb2xpb193YWl0X3N0YWJsZShwYWdlX2ZvbGlvKHBhZ2UpKTtcbiBcdFx0cHB0ciA9IGttYXBfbG9jYWxfcGFnZShwYWdlKTtcbiBcdFx0Y3VyciA9IHBwdHI7XG4gXHRcdGVuZCA9IHBwdHIgKyBQQUdFX0NBQ0hFX0JJVFMgLyAzMjtcbkBAIC0yMzIsNiArMjQ5LDcgQEAgaW50IGhmc3BsdXNfYmxvY2tfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2Zmc2V0LCB1MzIgY291bnQpXG4gb3V0OlxuIFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4gXHRrdW5tYXBfbG9jYWwocHB0cik7XG4rXHR1bmxvY2tfcGFnZShwYWdlKTtcbiBcdHNiaS1cdTAwM2VmcmVlX2Jsb2NrcyArPSBsZW47XG4gXHRoZnNwbHVzX21hcmtfbWRiX2RpcnR5KHNiKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNlYWxsb2NfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbmluZGV4IDgxM2U2OGI4ZWNkNjUuLjhmN2Y1NjBjZWM2NDIgMTAwNjQ0XG4tLS0gYS9mcy9oZnNwbHVzL2V4dGVudHMuY1xuKysrIGIvZnMvaGZzcGx1cy9leHRlbnRzLmNcbkBAIC0xNSw2ICsxNSw3IEBAXG4gXG4gI2luY2x1ZGUgXCJoZnNwbHVzX2ZzLmhcIlxuICNpbmNsdWRlIFwiaGZzcGx1c19yYXcuaFwiXG4rI2luY2x1ZGUgXCJpb21hcC5oXCJcbiBcbiAvKiBDb21wYXJlIHR3byBleHRlbnRzIGtleXMsIHJldHVybnMgMCBvbiBzYW1lLCBwb3MvbmVnIGZvciBkaWZmZXJlbmNlICovXG4gaW50IGhmc3BsdXNfZXh0X2NtcF9rZXkoY29uc3QgaGZzcGx1c19idHJlZV9rZXkgKmsxLFxuQEAgLTQ4LDE4ICs0OSwyOSBAQCBzdGF0aWMgdm9pZCBoZnNwbHVzX2V4dF9idWlsZF9rZXkoaGZzcGx1c19idHJlZV9rZXkgKmtleSwgdTMyIGNuaWQsXG4gXHRrZXktXHUwMDNlZXh0LnBhZCA9IDA7XG4gfVxuIFxuLXN0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZilcbisvKlxuKyAqIGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soKSAtIGZpbmQgY29udGlndW91cyBzZXF1ZW5jZSBvZiBibG9ja1xuKyAqXG4rICogRmluZCB0aGUgZGlzayBhbGxvY2F0aW9uIGJsb2NrIGZvciAnb2ZmJyB3aXRoaW4gYW4gOC1lbnRyeVxuKyAqIGV4dGVudCByZWNvcmQsIGFuZCB0aGUgbnVtYmVyIG9mIGZ1cnRoZXIgYWxsb2NhdGlvbiBibG9ja3NcbisgKiB0aGF0IGFyZSBjb250aWd1b3VzIHdpdGggaXQgaW4gdGhlIHNhbWUgZXh0ZW50IGVudHJ5LlxuKyAqL1xuK3N0YXRpYyB1MzIgaGZzcGx1c19leHRfZmluZF9ibG9jayhzdHJ1Y3QgaGZzcGx1c19leHRlbnQgKmV4dCwgdTMyIG9mZixcbitcdFx0XHRcdCB1MzIgKmRibG9jaylcbiB7XG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudDtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIDg7IGV4dCsrLCBpKyspIHtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEhGU1BMVVNfRk9SS19FWFRFTlRfQ09VTlQ7IGV4dCsrLCBpKyspIHtcbiBcdFx0Y291bnQgPSBiZTMyX3RvX2NwdShleHQtXHUwMDNlYmxvY2tfY291bnQpO1xuLVx0XHRpZiAob2ZmIFx1MDAzYyBjb3VudClcbi1cdFx0XHRyZXR1cm4gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0aWYgKG9mZiBcdTAwM2MgY291bnQpIHtcbitcdFx0XHQqZGJsb2NrID0gYmUzMl90b19jcHUoZXh0LVx1MDAzZXN0YXJ0X2Jsb2NrKSArIG9mZjtcbitcdFx0XHRyZXR1cm4gY291bnQgLSBvZmY7XG4rXHRcdH1cbiBcdFx0b2ZmIC09IGNvdW50O1xuIFx0fVxuIFx0LyogcGFuaWM/ICovXG4rXHQqZGJsb2NrID0gMDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC02OCw3ICs4MCw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19leHRfYmxvY2tfY291bnQoc3RydWN0IGhmc3BsdXNfZXh0ZW50ICpleHQpXG4gXHRpbnQgaTtcbiBcdHUzMiBjb3VudCA9IDA7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA4OyBleHQrKywgaSsrKVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVDsgZXh0KyssIGkrKylcbiBcdFx0Y291bnQgKz0gYmUzMl90b19jcHUoZXh0LVx1MDAzZWJsb2NrX2NvdW50KTtcbiBcdHJldHVybiBjb3VudDtcbiB9XG5AQCAtMjIzLDM3ICsyMzUsNDYgQEAgc3RhdGljIGludCBoZnNwbHVzX2V4dF9yZWFkX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYmxvY2spXG4gXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi0vKiBHZXQgYSBibG9jayBhdCBpYmxvY2sgZm9yIGlub2RlLCBwb3NzaWJseSBhbGxvY2F0aW5nIGlmIGNyZWF0ZSAqL1xuLWludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4tXHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxuKy8qXG4rICogaGZzcGx1c19tYXBfZXh0ZW50KCkgLSBmaW5kIG9yIGFsbG9jYXRlIGEgc2VxdWVuY2Ugb2YgYWxsb2NhdGlvbiBibG9ja3NcbisgKlxuKyAqIExvb2tzIHVwIHRoZSBhbGxvY2F0aW9uIGJsb2NrIGF0ICdhYmxvY2snIGZvciBpbm9kZSwgZXh0ZW5kaW5nIHRoZVxuKyAqIGZpbGUgKHZpYSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKCksIGluIGNsdW1wX2Jsb2Nrcy1zaXplZCBjaHVua3MpIHdoZW5cbisgKiAnY3JlYXRlJyBpcyBzZXQgYW5kICdhYmxvY2snIGxpZXMgYmV5b25kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24uXG4rICpcbisgKiBPbiBzdWNjZXNzLCAqZGJsb2NrIGlzIHRoZSBkaXNrIGFsbG9jYXRpb24gYmxvY2sgYmFja2luZyAnYWJsb2NrJyxcbisgKiBhbmQgKm1heF9ibG9ja3MgaXMgdGhlIG51bWJlciBvZiBmdXJ0aGVyIGFsbG9jYXRpb24gYmxvY2tzIHRoYXQgYXJlXG4rICogY29udGlndW91cyB3aXRoIGl0IChpLmUuIHRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBleHRlbnQgZW50cnlcbisgKiB0aGF0IGNvbnRhaW5zICdhYmxvY2snKSwgd2hpY2ggbWF5IGJlIHNtYWxsZXIgdGhhbiB0aGUgd2hvbGUgZmlsZSdzXG4rICogcmVtYWluaW5nIGFsbG9jYXRpb24gd2hlbiB0aGUgZm9yayBpcyBmcmFnbWVudGVkIGFjcm9zcyBzZXZlcmFsXG4rICogZXh0ZW50IGVudHJpZXMuIElmIGEgbmV3IGV4dGVudCBoYWQgdG8gYmUgYWxsb2NhdGVkIHRvIHNhdGlzZnkgdGhlXG4rICogcmVxdWVzdCwgKmJhbGxvYyAod2hlbiBub24tTlVMTCkgaXMgc2V0IHRvIHRydWUuXG4rICovXG4raW50IGhmc3BsdXNfbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgYWJsb2NrLCBpbnQgY3JlYXRlLFxuK1x0XHRcdHUzMiAqZGJsb2NrLCB1MzIgKm1heF9ibG9ja3MsIGJvb2wgKmJhbGxvYylcbiB7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuIFx0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbi1cdGludCByZXMgPSAtRUlPO1xuLVx0dTMyIGFibG9jaywgZGJsb2NrLCBtYXNrO1xuLVx0c2VjdG9yX3Qgc2VjdG9yO1xuLVx0aW50IHdhc19kaXJ0eSA9IDA7XG4rXHRpbnQgd2FzX2RpcnR5O1xuK1x0aW50IHJlcztcbiBcbi1cdC8qIENvbnZlcnQgaW5vZGUgYmxvY2sgdG8gZGlzayBhbGxvY2F0aW9uIGJsb2NrICovXG4tXHRhYmxvY2sgPSBpYmxvY2sgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdGlmIChiYWxsb2MpXG4rXHRcdCpiYWxsb2MgPSBmYWxzZTtcbiBcbi1cdGlmIChpYmxvY2sgXHUwMDNlPSBoaXAtXHUwMDNlZnNfYmxvY2tzKSB7XG4rXHRpZiAoYWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWFsbG9jX2Jsb2Nrcykge1xuIFx0XHRpZiAoIWNyZWF0ZSlcbi1cdFx0XHRyZXR1cm4gMDtcbi1cdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbi1cdFx0aWYgKGFibG9jayBcdTAwM2U9IGhpcC1cdTAwM2VhbGxvY19ibG9ja3MpIHtcbi1cdFx0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4tXHRcdFx0aWYgKHJlcylcbi1cdFx0XHRcdHJldHVybiByZXM7XG4tXHRcdH1cbi1cdH0gZWxzZVxuLVx0XHRjcmVhdGUgPSAwO1xuK1x0XHRyZXMgPSBoZnNwbHVzX2ZpbGVfZXh0ZW5kKGlub2RlLCBmYWxzZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0aWYgKGJhbGxvYylcbitcdFx0XHQqYmFsbG9jID0gdHJ1ZTtcbitcdH1cbiBcbiBcdGlmIChhYmxvY2sgXHUwMDNjIGhpcC1cdTAwM2VmaXJzdF9ibG9ja3MpIHtcbi1cdFx0ZGJsb2NrID0gaGZzcGx1c19leHRfZmluZF9ibG9jayhoaXAtXHUwMDNlZmlyc3RfZXh0ZW50cywgYWJsb2NrKTtcbi1cdFx0Z290byBkb25lO1xuK1x0XHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWZpcnN0X2V4dGVudHMsXG4rXHRcdFx0XHRcdFx0ICAgICBhYmxvY2ssXG4rXHRcdFx0XHRcdFx0ICAgICBkYmxvY2spO1xuK1x0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiBcdGlmIChpbm9kZS1cdTAwM2VpX2lubyA9PSBIRlNQTFVTX0VYVF9DTklEKVxuQEAgLTI3MiwxMSArMjkzLDQ0IEBAIGludCBoZnNwbHVzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRkYmxvY2sgPSBoZnNwbHVzX2V4dF9maW5kX2Jsb2NrKGhpcC1cdTAwM2VjYWNoZWRfZXh0ZW50cyxcbi1cdFx0XHRcdFx0YWJsb2NrIC0gaGlwLVx1MDAzZWNhY2hlZF9zdGFydCk7XG4rXHQqbWF4X2Jsb2NrcyA9IGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2soaGlwLVx1MDAzZWNhY2hlZF9leHRlbnRzLFxuK1x0XHRcdFx0XHQgICAgIGFibG9jayAtIGhpcC1cdTAwM2VjYWNoZWRfc3RhcnQsXG4rXHRcdFx0XHRcdCAgICAgZGJsb2NrKTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZoaXAtXHUwMDNlZXh0ZW50c19sb2NrKTtcbiBcbi1kb25lOlxuK1x0aWYgKHdhc19kaXJ0eSlcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogR2V0IGEgYmxvY2sgYXQgaWJsb2NrIGZvciBpbm9kZSwgcG9zc2libHkgYWxsb2NhdGluZyBpZiBjcmVhdGUgKi9cbitpbnQgaGZzcGx1c19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuK1x0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHUzMiBhYmxvY2ssIGRibG9jaywgbWFzaywgbWF4X2Jsb2NrcztcbitcdHNlY3Rvcl90IHNlY3RvcjtcbitcdGludCByZXM7XG4rXG4rXHQvKiBDb252ZXJ0IGlub2RlIGJsb2NrIHRvIGRpc2sgYWxsb2NhdGlvbiBibG9jayAqL1xuK1x0YWJsb2NrID0gaWJsb2NrIFx1MDAzZVx1MDAzZSBzYmktXHUwMDNlZnNfc2hpZnQ7XG4rXG4rXHRpZiAoaWJsb2NrIFx1MDAzZT0gaGlwLVx1MDAzZWZzX2Jsb2Nrcykge1xuK1x0XHRpZiAoIWNyZWF0ZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0aWYgKGlibG9jayBcdTAwM2UgaGlwLVx1MDAzZWZzX2Jsb2NrcylcbitcdFx0XHRyZXR1cm4gLUVJTztcbitcdH0gZWxzZVxuK1x0XHRjcmVhdGUgPSAwO1xuK1xuK1x0cmVzID0gaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIGNyZWF0ZSwgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLFxuK1x0XHRcdFx0ICBOVUxMKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4gXHRoZnNfZGJnKFwiaW5vICVsbHUsIGlibG9jayAlbGx1IC0gZGJsb2NrICV1XFxuXCIsXG4gXHRcdGlub2RlLVx1MDAzZWlfaW5vLCAobG9uZyBsb25nKWlibG9jaywgZGJsb2NrKTtcbiBcbkBAIC0yOTAsOSArMzQ0LDggQEAgaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSArPSBzYi1cdTAwM2VzX2Jsb2Nrc2l6ZTtcbiBcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcysrO1xuIFx0XHRpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbi1cdH1cbi1cdGlmIChjcmVhdGUgfHwgd2FzX2RpcnR5KVxuIFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC01NTMsMjAgKzYwNiwzMiBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX2lubywgKGxvbmcgbG9uZyloaXAtXHUwMDNlcGh5c19zaXplLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuIFxuIFx0aWYgKGlub2RlLVx1MDAzZWlfc2l6ZSBcdTAwM2UgaGlwLVx1MDAzZXBoeXNfc2l6ZSkge1xuLVx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcbi1cdFx0bG9mZl90IHNpemUgPSBpbm9kZS1cdTAwM2VpX3NpemU7XG4rXHRcdGlmIChTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRyZXMgPSBoZnNwbHVzX2lvbWFwX2NvbnRfZXhwYW5kKGlub2RlLCBpbm9kZS1cdTAwM2VpX3NpemUpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdFx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuK1xuK1x0XHRcdHJlcyA9IGhmc3BsdXNfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHQgIGlub2RlLVx1MDAzZWlfc2l6ZSwgMCxcbitcdFx0XHRcdFx0XHQgIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuK1x0XHRcdGlmIChyZXMpXG4rXHRcdFx0XHRyZXR1cm47XG4rXG4rXHRcdFx0cmVzID0gZ2VuZXJpY193cml0ZV9lbmQoTlVMTCwgbWFwcGluZyxcbitcdFx0XHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NpemUsIDAsIDAsXG4rXHRcdFx0XHRcdFx0Zm9saW8sIGZzZGF0YSk7XG4rXHRcdFx0aWYgKHJlcyBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybjtcbitcbitcdFx0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdFx0fVxuIFxuLVx0XHRyZXMgPSBoZnNwbHVzX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsXG4tXHRcdFx0XHRcdCAgXHUwMDI2Zm9saW8sIFx1MDAyNmZzZGF0YSk7XG4tXHRcdGlmIChyZXMpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRyZXMgPSBnZW5lcmljX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLFxuLVx0XHRcdFx0XHRmb2xpbywgZnNkYXRhKTtcbi1cdFx0aWYgKHJlcyBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuIFx0XHRyZXR1cm47XG4gXHR9IGVsc2UgaWYgKGlub2RlLVx1MDAzZWlfc2l6ZSA9PSBoaXAtXHUwMDNlcGh5c19zaXplKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9maWxlLmMgYi9mcy9oZnNwbHVzL2ZpbGUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgyNjc4NDg4ZmIwNTRcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2hmc3BsdXMvZmlsZS5jXG5AQCAtMCwwICsxLDMwNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLypcbisgKiBGaWxlIG9wZXJhdGlvbnM6IG9wZW4vcmVsZWFzZS9mc3luYyBhbmQgaW9tYXAtYmFzZWQgcmVhZC93cml0ZS9zZWVrXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3Vpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW91bnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4rXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuK1x0aWYgKCEoZmlsZS1cdTAwM2VmX2ZsYWdzIFx1MDAyNiBPX0xBUkdFRklMRSkgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2UgTUFYX05PTl9MRlMpXG4rXHRcdHJldHVybiAtRU9WRVJGTE9XO1xuK1x0YXRvbWljX2luYyhcdTAwMjZIRlNQTFVTX0koaW5vZGUpLVx1MDAzZW9wZW5jbnQpO1xuK1x0ZmlsZS1cdTAwM2VmX21vZGUgfD0gRk1PREVfQ0FOX09ESVJFQ1Q7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcbitcdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuK1x0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbitcdGlmIChhdG9taWNfZGVjX2FuZF90ZXN0KFx1MDAyNkhGU1BMVVNfSShpbm9kZSktXHUwMDNlb3BlbmNudCkpIHtcbitcdFx0aW5vZGVfbG9jayhpbm9kZSk7XG4rXHRcdGhmc3BsdXNfZmlsZV90cnVuY2F0ZShpbm9kZSk7XG4rXHRcdGlmIChpbm9kZS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBTX0RFQUQpIHtcbitcdFx0XHRoZnNwbHVzX2RlbGV0ZV9jYXQoaW5vZGUtXHUwMDNlaV9pbm8sXG4rXHRcdFx0XHRcdCAgIEhGU1BMVVNfU0Ioc2IpLVx1MDAzZWhpZGRlbl9kaXIsIE5VTEwpO1xuK1x0XHRcdGhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTtcbitcdFx0fVxuK1x0XHRpbm9kZV91bmxvY2soaW5vZGUpO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2ludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbitcdFx0ICAgICAgIGludCBkYXRhc3luYylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbitcdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4rXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4rXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4rXG4rXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbitcdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuK1xuK1x0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuK1x0aWYgKGVycm9yKVxuK1x0XHRyZXR1cm4gZXJyb3I7XG4rXG4rXHQvKlxuK1x0ICogU3luYyBpbm9kZSBtZXRhZGF0YSBpbnRvIHRoZSBjYXRhbG9nIGFuZCBleHRlbnQgdHJlZXMuXG4rXHQgKi9cbitcdHN5bmNfaW5vZGVfbWV0YWRhdGEoaW5vZGUsIDEpO1xuK1xuK1x0LypcbitcdCAqIEFuZCBleHBsaWNpdGx5IHdyaXRlIG91dCB0aGUgYnRyZWVzLlxuK1x0ICovXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19DQVRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQ0FUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWNhdF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksXG4rXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19FWFRfVFJFRV9JKHNiKSktXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfRVhUX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuK1x0XHRlcnJvcjIgPVxuK1x0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoc2JpLVx1MDAzZWV4dF90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdGlmICghZXJyb3IpXG4rXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4rXHR9XG4rXG4rXHRpZiAoc2JpLVx1MDAzZWF0dHJfdHJlZSkge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKEhGU1BMVVNfQVRUUl9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4rXHRcdFx0ZXJyb3IyID1cbitcdFx0XHRcdGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoXG4rXHRcdFx0XHRcdCAgICBzYmktXHUwMDNlYXR0cl90cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4rXHRcdFx0aWYgKCFlcnJvcilcbitcdFx0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAodGVzdF9hbmRfY2xlYXJfYml0KEhGU1BMVVNfSV9BVFRSX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpKVxuK1x0XHRcdHByX2VycihcInN5bmMgbm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgdHJlZVxcblwiKTtcbitcdH1cbitcbitcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLFxuK1x0XHRcdFx0XHUwMDI2SEZTUExVU19JKHNiaS1cdTAwM2VhbGxvY19maWxlKS1cdTAwM2VmbGFncykpIHtcbitcdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9BTExPQ19ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbitcdFx0ZXJyb3IyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlYWxsb2NfZmlsZS1cdTAwM2VpX21hcHBpbmcpO1xuK1x0XHRpZiAoIWVycm9yKVxuK1x0XHRcdGVycm9yID0gZXJyb3IyO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1x0aGZzcGx1c19wcmVwYXJlX3ZvbHVtZV9oZWFkZXJfZm9yX2NvbW1pdCh2aGRyKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZzYmktXHUwMDNldmhfbXV0ZXgpO1xuK1xuK1x0ZXJyb3IyID0gaGZzcGx1c19jb21taXRfc3VwZXJibG9jayhpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGlmICghZXJyb3IpXG4rXHRcdGVycm9yID0gZXJyb3IyO1xuK1xuK1x0aWYgKCF0ZXN0X2JpdChIRlNQTFVTX1NCX05PQkFSUklFUiwgXHUwMDI2c2JpLVx1MDAzZWZsYWdzKSlcbitcdFx0YmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19iZGV2KTtcbitcbitcdHJldHVybiBlcnJvcjtcbit9XG4rXG4rLypcbisgKiBoZnNwbHVzX2ZhbGxiYWNrX2J1ZmZlcmVkX3dyaXRlKCkgLSBmYWxsIGJhY2sgdG8gYnVmZmVyZWQgSS9PIGZvciB0aGVcbisgKiB0YWlsIG9mIGEgd3JpdGUgdGhhdCBpb21hcF9kaW9fcncoKSBjb3VsZCBub3QgcGVyZm9ybSBkaXJlY3RseVxuKyAqICh1bmFsaWduZWQgdGFpbCwgb3Igbm8gYmxvY2tzIGNvdWxkIGJlIG1hcHBlZCB3aXRob3V0IGFsbG9jYXRpb25cbisgKiBvdXRzaWRlIHRoZSBkaXJlY3QgcGF0aCkuXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdFx0c3RydWN0IGlvdl9pdGVyICpmcm9tKVxuK3tcbitcdGxvZmZfdCBvZmZzZXQgPSBpb2NiLVx1MDAzZWtpX3BvcywgZW5kO1xuK1x0c3NpemVfdCB3cml0dGVuO1xuK1x0aW50IHJldDtcbitcbitcdGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2PSB+SU9DQl9ESVJFQ1Q7XG4rXG4rXHR3cml0dGVuID0gaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tLFxuK1x0XHRcdFx0XHQgICAgXHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMKTtcbitcdGlmICh3cml0dGVuIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gd3JpdHRlbjtcbitcbitcdGVuZCA9IGlvY2ItXHUwMDNla2lfcG9zICsgd3JpdHRlbiAtIDE7XG4rXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHRcdCAgIG9mZnNldCwgZW5kKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiAtRUlPO1xuK1xuK1x0aW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlvY2ItXHUwMDNla2lfZmlscC1cdTAwM2VmX21hcHBpbmcsXG4rXHRcdFx0XHQgb2Zmc2V0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuK1x0XHRcdFx0IGVuZCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaW9fd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbit7XG4rXHRzc2l6ZV90IHJldDtcbitcbitcdHJldCA9IGlvbWFwX2Rpb19ydyhpb2NiLCBmcm9tLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzLFxuK1x0XHRcdCAgIFx1MDAyNmhmc3BsdXNfd3JpdGVfZGlvX29wcyxcbitcdFx0XHQgICAwLCBOVUxMLCAwKTtcbitcdGlmIChyZXQgPT0gLUVOT1RCTEspXG4rXHRcdHJldCA9IDA7XG4rXHRlbHNlIGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoaW92X2l0ZXJfY291bnQoZnJvbSkpIHtcbitcdFx0c3NpemVfdCB3cml0dGVuO1xuK1xuK1x0XHR3cml0dGVuID0gaGZzcGx1c19mYWxsYmFja19idWZmZXJlZF93cml0ZShpb2NiLCBmcm9tKTtcbitcdFx0aWYgKHdyaXR0ZW4gXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHdyaXR0ZW47XG4rXHRcdHJldCArPSB3cml0dGVuO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4re1xuK1x0c3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRsb2ZmX3QgdG90YWxfY2FwYWNpdHk7XG4rXHRzc2l6ZV90IHJldDtcbitcdGludCBlcnI7XG4rXG4rXHRpbm9kZV9sb2NrKGlub2RlKTtcbitcbitcdHJldCA9IGdlbmVyaWNfd3JpdGVfY2hlY2tzKGlvY2IsIGl0ZXIpO1xuK1x0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0dG90YWxfY2FwYWNpdHkgPSAobG9mZl90KXNiaS1cdTAwM2V0b3RhbF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcdGlmIChpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2U9IHRvdGFsX2NhcGFjaXR5KSB7XG4rXHRcdHJldCA9IC1FRkJJRztcbitcdFx0Z290byB1bmxvY2s7XG4rXHR9XG4rXG4rXHRlcnIgPSBmaWxlX21vZGlmaWVkKGZpbGUpO1xuK1x0aWYgKGVycikge1xuK1x0XHRyZXQgPSBlcnI7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfcG9zIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0bG9mZl90IG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRsb2ZmX3QgbmV3X3NpemUgPSBpb2NiLVx1MDAzZWtpX3BvcztcbitcbitcdFx0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUKSB7XG4rXHRcdFx0bmV3X3NpemUgPSBtYXhfdChsb2ZmX3QsIG5ld19zaXplLFxuK1x0XHRcdFx0XHQgIEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcGh5c19zaXplKTtcbitcdFx0fVxuK1xuK1x0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTtcbitcdFx0ZXJyID0gaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBvbGRfc2l6ZSk7XG4rXHRcdFx0cmV0ID0gZXJyO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdG1hcmtfaW5vZGVfZGlydHkoaW5vZGUpO1xuK1x0fSBlbHNlIGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICBIRlNQTFVTX0koaW5vZGUpLVx1MDAzZXBoeXNfc2l6ZSBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgSEZTUExVU19JKGlub2RlKS1cdTAwM2VwaHlzX3NpemUpO1xuK1x0XHRtYXJrX2lub2RlX2RpcnR5KGlub2RlKTtcbitcdH1cbitcbitcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RJUkVDVClcbitcdFx0cmV0ID0gaGZzcGx1c19kaW9fd3JpdGVfaXRlcihpb2NiLCBpdGVyKTtcbitcdGVsc2Uge1xuK1x0XHRyZXQgPSBpb21hcF9maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGl0ZXIsXG4rXHRcdFx0XHRcdFx0XHUwMDI2aGZzcGx1c193cml0ZV9pb21hcF9vcHMsXG4rXHRcdFx0XHRcdFx0TlVMTCwgTlVMTCk7XG4rXHR9XG4rXG4rdW5sb2NrOlxuK1x0aW5vZGVfdW5sb2NrKGlub2RlKTtcbitcbitcdGlmIChyZXQgXHUwMDNlIDApXG4rXHRcdHJldCA9IGdlbmVyaWNfd3JpdGVfc3luYyhpb2NiLCByZXQpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c19maWxlX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4rXHRcdFx0XHRcdHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXG4rXHRpZiAoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ESVJFQ1QpIHtcbitcdFx0ZmlsZV9hY2Nlc3NlZChpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0XHRyZXQgPSBpb21hcF9kaW9fcncoaW9jYiwgaXRlcixcbitcdFx0XHRcdCAgIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzLFxuK1x0XHRcdFx0ICAgTlVMTCwgMCwgTlVMTCwgMCk7XG4rXHR9IGVsc2VcbitcdFx0cmV0ID0gZ2VuZXJpY19maWxlX3JlYWRfaXRlcihpb2NiLCBpdGVyKTtcbitcbitcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGxvZmZfdCBoZnNwbHVzX2ZpbGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKVxuK3tcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLVx1MDAzZWZfbWFwcGluZy1cdTAwM2Vob3N0O1xuK1xuK1x0c3dpdGNoICh3aGVuY2UpIHtcbitcdGNhc2UgU0VFS19IT0xFOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfaG9sZShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU0VFS19EQVRBOlxuK1x0XHRpbm9kZV9sb2NrX3NoYXJlZChpbm9kZSk7XG4rXHRcdG9mZnNldCA9IGlvbWFwX3NlZWtfZGF0YShpbm9kZSwgb2Zmc2V0LCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRcdGlub2RlX3VubG9ja19zaGFyZWQoaW5vZGUpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBnZW5lcmljX2ZpbGVfbGxzZWVrKGZpbGUsIG9mZnNldCwgd2hlbmNlKTtcbitcdH1cbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBvZmZzZXQ7XG4rXG4rXHRyZXR1cm4gdmZzX3NldHBvcyhmaWxlLCBvZmZzZXQsIGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19tYXhieXRlcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4rXHQubGxzZWVrXHRcdD0gaGZzcGx1c19maWxlX2xsc2VlayxcbitcdC5yZWFkX2l0ZXJcdD0gaGZzcGx1c19maWxlX3JlYWRfaXRlcixcbitcdC53cml0ZV9pdGVyXHQ9IGhmc3BsdXNfZmlsZV93cml0ZV9pdGVyLFxuK1x0Lm1tYXBfcHJlcGFyZVx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxuK1x0LnNwbGljZV9yZWFkXHQ9IGZpbGVtYXBfc3BsaWNlX3JlYWQsXG4rXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG4rXHQuZnN5bmNcdFx0PSBoZnNwbHVzX2ZpbGVfZnN5bmMsXG4rXHQub3Blblx0XHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxuK1x0LnJlbGVhc2VcdD0gaGZzcGx1c19maWxlX3JlbGVhc2UsXG4rXHQudW5sb2NrZWRfaW9jdGwgPSBoZnNwbHVzX2lvY3RsLFxuK307XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmggYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuaW5kZXggZWMwNGI4MmFkOTI3OC4uODE2NmFiYjIyMzk3YiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oXG4rKysgYi9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaFxuQEAgLTE3NSw2ICsxNzUsMjIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpIRlNQTFVTX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gc2ItXHUwMDNlc19mc19pbmZvO1xuIH1cbiBcbisvKlxuKyAqIFBoeXNpY2FsIGJ5dGUgb2Zmc2V0IG9mIGFsbG9jYXRpb24gYmxvY2sgJ2RibG9jaycgb24gdGhlIHZvbHVtZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGxvZmZfdCBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0XHRcdFx0ICB1MzIgZGJsb2NrKVxuK3tcbitcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuK1x0bG9mZl90IHBoeXNfYnl0ZXM7XG4rXG4rXHRwaHlzX2J5dGVzID0gZGJsb2NrO1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiaS1cdTAwM2Vmc19zaGlmdDtcbitcdHBoeXNfYnl0ZXMgKz0gc2JpLVx1MDAzZWJsb2Nrb2Zmc2V0O1xuK1x0cGh5c19ieXRlcyBcdTAwM2NcdTAwM2M9IHNiLVx1MDAzZXNfYmxvY2tzaXplX2JpdHM7XG4rXG4rXHRyZXR1cm4gcGh5c19ieXRlcztcbit9XG4gXG4gc3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyB7XG4gXHRhdG9taWNfdCBvcGVuY250O1xuQEAgLTQzMCwxMiArNDQ2LDE5IEBAIGludCBoZnNwbHVzX3JlbmFtZV9jYXQodTMyIGNuaWQsIHN0cnVjdCBpbm9kZSAqc3JjX2RpciwgY29uc3Qgc3RydWN0IHFzdHIgKnNyY19uXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19kaXJfb3BlcmF0aW9ucztcbiBcbisvKiBmaWxlLmMgKi9cbitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcbitpbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG4rXHRcdCAgICAgICBpbnQgZGF0YXN5bmMpO1xuK1xuIC8qIGV4dGVudHMuYyAqL1xuIGludCBoZnNwbHVzX2V4dF9jbXBfa2V5KGNvbnN0IGhmc3BsdXNfYnRyZWVfa2V5ICprMSxcbiBcdFx0XHRjb25zdCBoZnNwbHVzX2J0cmVlX2tleSAqazIpO1xuIGludCBoZnNwbHVzX2V4dF93cml0ZV9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSk7XG4gaW50IGhmc3BsdXNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jayxcbiBcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpO1xuK2ludCBoZnNwbHVzX21hcF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSwgdTMyIGFibG9jaywgaW50IGNyZWF0ZSxcbitcdFx0XHR1MzIgKmRibG9jaywgdTMyICptYXhfYmxvY2tzLCBib29sICpiYWxsb2MpO1xuIGludCBoZnNwbHVzX2ZyZWVfZm9yayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgY25pZCxcbiBcdFx0ICAgICAgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKmZvcmssIGludCB0eXBlKTtcbiBpbnQgaGZzcGx1c19maWxlX2V4dGVuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIHplcm9vdXQpO1xuQEAgLTQ0Myw2ICs0NjYsNyBAQCB2b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiAvKiBpbm9kZS5jICovXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfc3ltbGlua19hb3BzO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7XG4gXG5AQCAtNDYyLDggKzQ4Niw2IEBAIGludCBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBpbnQgaGZzcGx1c19nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCxcbiBcdFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbiBcdFx0ICAgIHVuc2lnbmVkIGludCBxdWVyeV9mbGFncyk7XG4taW50IGhmc3BsdXNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IHN0YXJ0LCBsb2ZmX3QgZW5kLFxuLVx0XHQgICAgICAgaW50IGRhdGFzeW5jKTtcbiBpbnQgaGZzcGx1c19maWxlYXR0cl9nZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuIGludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlsZV9rYXR0ciAqZmEpO1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggMWM1N2M4NzNmMDVkNi4uMDg3MzFlYzBjZWNkMyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTgsMTUgKzE4LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlYXR0ci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tYXAuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwiaGZzcGx1c19mcy5oXCJcbiAjaW5jbHVkZSBcImhmc3BsdXNfcmF3LmhcIlxuICNpbmNsdWRlIFwieGF0dHIuaFwiXG4tXG4tc3RhdGljIGludCBoZnNwbHVzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0cmV0dXJuIGJsb2NrX3JlYWRfZnVsbF9mb2xpbyhmb2xpbywgaGZzcGx1c19nZXRfYmxvY2spO1xuLX1cbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuIFxuIHN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG4ge1xuQEAgLTEyMCw2NyArMTE3LDEzIEBAIHN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuIFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuK3N0YXRpYyBpbnQgaGZzcGx1c19idHJlZV9yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuLVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4tXHRsb2ZmX3QgaXNpemU7XG4tXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbi1cdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuLVx0c3NpemVfdCByZXQ7XG4tXG4tXHQvKlxuLVx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbi1cdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbi1cdCAqL1xuLVx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4tXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4tXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbi1cbi1cdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuLVx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4tXHRcdCAqL1xuLVx0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4tXG4tXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbi1cbi1cdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4tXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4tXG4tXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuLVx0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXG4tXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbi1cdH1cbi1cbi1cdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuLVxuLVx0Lypcbi1cdCAqIEluIGNhc2Ugb2YgZXJyb3IgZXh0ZW5kaW5nIHdyaXRlIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZld1xuLVx0ICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi5cbi1cdCAqL1xuLVx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiByZXQgXHUwMDNjIDApKSB7XG4tXHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVxuLVx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbi1cdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBibG9ja19yZWFkX2Z1bGxfZm9saW8oZm9saW8sIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiB9XG4gXG4tc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4rc3RhdGljIGludCBoZnNwbHVzX2J0cmVlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4ge1xuIFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XG4gfVxuQEAgLTE4OCw4ICsxMzEsOCBAQCBzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbi1cdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfYnRyZWVfcmVhZF9mb2xpbyxcbitcdC53cml0ZXBhZ2VzXHQ9IGhmc3BsdXNfYnRyZWVfd3JpdGVwYWdlcyxcbiBcdC53cml0ZV9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2JlZ2luLFxuIFx0LndyaXRlX2VuZFx0PSBnZW5lcmljX3dyaXRlX2VuZCxcbiBcdC5taWdyYXRlX2ZvbGlvXHQ9IGJ1ZmZlcl9taWdyYXRlX2ZvbGlvLFxuQEAgLTE5NywxOCArMTQwLDcwIEBAIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xuIFx0LnJlbGVhc2VfZm9saW9cdD0gaGZzcGx1c19yZWxlYXNlX2ZvbGlvLFxuIH07XG4gXG4tY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2FvcHMgPSB7XG4rc3RhdGljIGludCBoZnNwbHVzX3N5bWxpbmtfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRyZXR1cm4gYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKGZvbGlvLCBoZnNwbHVzX2dldF9ibG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYylcbit7XG4rXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX3N5bWxpbmtfYW9wcyA9IHtcbiBcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiBcdC5pbnZhbGlkYXRlX2ZvbGlvID0gYmxvY2tfaW52YWxpZGF0ZV9mb2xpbyxcbi1cdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfcmVhZF9mb2xpbyxcbitcdC5yZWFkX2ZvbGlvXHQ9IGhmc3BsdXNfc3ltbGlua19yZWFkX2ZvbGlvLFxuIFx0LndyaXRlX2JlZ2luXHQ9IGhmc3BsdXNfd3JpdGVfYmVnaW4sXG4gXHQud3JpdGVfZW5kXHQ9IGdlbmVyaWNfd3JpdGVfZW5kLFxuIFx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG4tXHQuZGlyZWN0X0lPXHQ9IGhmc3BsdXNfZGlyZWN0X0lPLFxuLVx0LndyaXRlcGFnZXNcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxuK1x0LndyaXRlcGFnZXNcdD0gaGZzcGx1c19zeW1saW5rX3dyaXRlcGFnZXMsXG4gXHQubWlncmF0ZV9mb2xpb1x0PSBidWZmZXJfbWlncmF0ZV9mb2xpbyxcbiB9O1xuIFxuK3N0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGlvbWFwX2Jpb19yZWFkX2ZvbGlvKGZvbGlvLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaGZzcGx1c19yZWFkYWhlYWQoc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWMpXG4re1xuK1x0aW9tYXBfYmlvX3JlYWRhaGVhZChyYWMsIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4re1xuK1x0c3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggd3BjID0ge1xuK1x0XHQuaW5vZGVcdD0gbWFwcGluZy1cdTAwM2Vob3N0LFxuK1x0XHQud2JjXHQ9IHdiYyxcbitcdFx0Lm9wc1x0PSBcdTAwMjZoZnNwbHVzX3dyaXRlYmFja19vcHMsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIGlvbWFwX3dyaXRlcGFnZXMoXHUwMDI2d3BjKTtcbit9XG4rXG4rc3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYW9wX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuK3tcbitcdHJldHVybiBpb21hcF9ibWFwKG1hcHBpbmcsIGJsb2NrLCBcdTAwMjZoZnNwbHVzX2lvbWFwX29wcyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xuK1x0LnJlYWRfZm9saW9cdFx0PSBoZnNwbHVzX3JlYWRfZm9saW8sXG4rXHQucmVhZGFoZWFkXHRcdD0gaGZzcGx1c19yZWFkYWhlYWQsXG4rXHQud3JpdGVwYWdlc1x0XHQ9IGhmc3BsdXNfd3JpdGVwYWdlcyxcbitcdC5kaXJ0eV9mb2xpb1x0XHQ9IGlvbWFwX2RpcnR5X2ZvbGlvLFxuK1x0LmJtYXBcdFx0XHQ9IGhmc3BsdXNfYW9wX2JtYXAsXG4rXHQubWlncmF0ZV9mb2xpb1x0XHQ9IGZpbGVtYXBfbWlncmF0ZV9mb2xpbyxcbitcdC5pc19wYXJ0aWFsbHlfdXB0b2RhdGVcdD0gaW9tYXBfaXNfcGFydGlhbGx5X3VwdG9kYXRlLFxuK1x0LmVycm9yX3JlbW92ZV9mb2xpb1x0PSBnZW5lcmljX2Vycm9yX3JlbW92ZV9mb2xpbyxcbitcdC5yZWxlYXNlX2ZvbGlvXHRcdD0gaW9tYXBfcmVsZWFzZV9mb2xpbyxcbitcdC5pbnZhbGlkYXRlX2ZvbGlvXHQ9IGlvbWFwX2ludmFsaWRhdGVfZm9saW8sXG4rXHQuc3dhcF9hY3RpdmF0ZVx0XHQ9IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZSxcbit9O1xuK1xuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0ge1xuIFx0LmRfaGFzaCAgICAgICA9IGhmc3BsdXNfaGFzaF9kZW50cnksXG4gXHQuZF9jb21wYXJlICAgID0gaGZzcGx1c19jb21wYXJlX2RlbnRyeSxcbkBAIC0yNjgsMzUgKzI2Myw2IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19nZXRfcGVybXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiAtRUlPO1xuIH1cbiBcbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdGlmIChIRlNQTFVTX0lTX1JTUkMoaW5vZGUpKVxuLVx0XHRpbm9kZSA9IEhGU1BMVVNfSShpbm9kZSktXHUwMDNlcnNyY19pbm9kZTtcbi1cdGlmICghKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19MQVJHRUZJTEUpIFx1MDAyNlx1MDAyNiBpX3NpemVfcmVhZChpbm9kZSkgXHUwMDNlIE1BWF9OT05fTEZTKVxuLVx0XHRyZXR1cm4gLUVPVkVSRkxPVztcbi1cdGF0b21pY19pbmMoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLXtcbi1cdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuLVxuLVx0aWYgKEhGU1BMVVNfSVNfUlNSQyhpbm9kZSkpXG4tXHRcdGlub2RlID0gSEZTUExVU19JKGlub2RlKS1cdTAwM2Vyc3JjX2lub2RlO1xuLVx0aWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoXHUwMDI2SEZTUExVU19JKGlub2RlKS1cdTAwM2VvcGVuY250KSkge1xuLVx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbi1cdFx0aWYgKGlub2RlLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IFNfREVBRCkge1xuLVx0XHRcdGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS1cdTAwM2VpX2lubyxcbi1cdFx0XHRcdFx0ICAgSEZTUExVU19TQihzYiktXHUwMDNlaGlkZGVuX2RpciwgTlVMTCk7XG4tXHRcdFx0aGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpO1xuLVx0XHR9XG4tXHRcdGlub2RlX3VubG9jayhpbm9kZSk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpXG4ge1xuQEAgLTMxMSwxMCArMjc3LDE0IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0ICAgIGF0dHItXHUwMDNlaWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbiBcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIFx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbi1cdFx0XHRlcnJvciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLFxuLVx0XHRcdFx0XHRcdFx0ICAgYXR0ci1cdTAwM2VpYV9zaXplKTtcbi1cdFx0XHRpZiAoZXJyb3IpXG4rXHRcdFx0bG9mZl90IG9sZF9zaXplID0gaW5vZGUtXHUwMDNlaV9zaXplO1xuK1xuK1x0XHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbitcdFx0XHRlcnJvciA9IGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmQoaW5vZGUsIGF0dHItXHUwMDNlaWFfc2l6ZSk7XG4rXHRcdFx0aWYgKGVycm9yKSB7XG4rXHRcdFx0XHRpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9zaXplKTtcbiBcdFx0XHRcdHJldHVybiBlcnJvcjtcbitcdFx0XHR9XG4gXHRcdH1cbiBcdFx0dHJ1bmNhdGVfc2V0c2l6ZShpbm9kZSwgYXR0ci1cdTAwM2VpYV9zaXplKTtcbiBcdFx0aGZzcGx1c19maWxlX3RydW5jYXRlKGlub2RlKTtcbkBAIC0zNTMsODYgKzMyMyw2IEBAIGludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLWludCBoZnNwbHVzX2ZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBzdGFydCwgbG9mZl90IGVuZCxcbi1cdFx0ICAgICAgIGludCBkYXRhc3luYylcbi17XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS1cdTAwM2VmX21hcHBpbmctXHUwMDNlaG9zdDtcbi1cdHN0cnVjdCBoZnNwbHVzX2lub2RlX2luZm8gKmhpcCA9IEhGU1BMVVNfSShpbm9kZSk7XG4tXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbi1cdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRzdHJ1Y3QgaGZzcGx1c192aCAqdmhkciA9IHNiaS1cdTAwM2VzX3ZoZHI7XG4tXHRpbnQgZXJyb3IgPSAwLCBlcnJvcjI7XG4tXG4tXHRoZnNfZGJnKFwiaW5vZGUtXHUwMDNlaV9pbm8gJWxsdSwgc3RhcnQgJWxsdSwgZW5kICVsbHVcXG5cIixcbi1cdFx0aW5vZGUtXHUwMDNlaV9pbm8sIHN0YXJ0LCBlbmQpO1xuLVxuLVx0ZXJyb3IgPSBmaWxlX3dyaXRlX2FuZF93YWl0X3JhbmdlKGZpbGUsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRyZXR1cm4gZXJyb3I7XG4tXHRpbm9kZV9sb2NrKGlub2RlKTtcbi1cbi1cdC8qXG4tXHQgKiBTeW5jIGlub2RlIG1ldGFkYXRhIGludG8gdGhlIGNhdGFsb2cgYW5kIGV4dGVudCB0cmVlcy5cbi1cdCAqL1xuLVx0c3luY19pbm9kZV9tZXRhZGF0YShpbm9kZSwgMSk7XG4tXG4tXHQvKlxuLVx0ICogQW5kIGV4cGxpY2l0bHkgd3JpdGUgb3V0IHRoZSBidHJlZXMuXG4tXHQgKi9cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0NBVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0NBVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9DQVRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlY2F0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdH1cbi1cbi1cdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0VYVF9ESVJUWSxcbi1cdFx0XHRcdFx1MDAyNkhGU1BMVVNfSShIRlNQTFVTX0VYVF9UUkVFX0koc2IpKS1cdTAwM2VmbGFncykpIHtcbi1cdFx0Y2xlYXJfYml0KEhGU1BMVVNfSV9FWFRfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncyk7XG4tXHRcdGVycm9yMiA9XG4tXHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChzYmktXHUwMDNlZXh0X3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0aWYgKCFlcnJvcilcbi1cdFx0XHRlcnJvciA9IGVycm9yMjtcbi1cdH1cbi1cbi1cdGlmIChzYmktXHUwMDNlYXR0cl90cmVlKSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koSEZTUExVU19BVFRSX1RSRUVfSShzYikpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRcdGNsZWFyX2JpdChIRlNQTFVTX0lfQVRUUl9ESVJUWSwgXHUwMDI2aGlwLVx1MDAzZWZsYWdzKTtcbi1cdFx0XHRlcnJvcjIgPVxuLVx0XHRcdFx0ZmlsZW1hcF93cml0ZV9hbmRfd2FpdChcbi1cdFx0XHRcdFx0ICAgIHNiaS1cdTAwM2VhdHRyX3RyZWUtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbi1cdFx0XHRpZiAoIWVycm9yKVxuLVx0XHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHRcdH1cbi1cdH0gZWxzZSB7XG4tXHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSEZTUExVU19JX0FUVFJfRElSVFksIFx1MDAyNmhpcC1cdTAwM2VmbGFncykpXG4tXHRcdFx0cHJfZXJyKFwic3luYyBub24tZXhpc3RlbnQgYXR0cmlidXRlcyB0cmVlXFxuXCIpO1xuLVx0fVxuLVxuLVx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIRlNQTFVTX0lfQUxMT0NfRElSVFksXG4tXHRcdFx0XHRcdTAwMjZIRlNQTFVTX0koc2JpLVx1MDAzZWFsbG9jX2ZpbGUpLVx1MDAzZWZsYWdzKSkge1xuLVx0XHRjbGVhcl9iaXQoSEZTUExVU19JX0FMTE9DX0RJUlRZLCBcdTAwMjZoaXAtXHUwMDNlZmxhZ3MpO1xuLVx0XHRlcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KHNiaS1cdTAwM2VhbGxvY19maWxlLVx1MDAzZWlfbWFwcGluZyk7XG4tXHRcdGlmICghZXJyb3IpXG4tXHRcdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXHR9XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXHRoZnNwbHVzX3ByZXBhcmVfdm9sdW1lX2hlYWRlcl9mb3JfY29tbWl0KHZoZHIpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnNiaS1cdTAwM2V2aF9tdXRleCk7XG4tXG4tXHRlcnJvcjIgPSBoZnNwbHVzX2NvbW1pdF9zdXBlcmJsb2NrKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0aWYgKCFlcnJvcilcbi1cdFx0ZXJyb3IgPSBlcnJvcjI7XG4tXG4tXHRpZiAoIXRlc3RfYml0KEhGU1BMVVNfU0JfTk9CQVJSSUVSLCBcdTAwMjZzYmktXHUwMDNlZmxhZ3MpKVxuLVx0XHRibGtkZXZfaXNzdWVfZmx1c2goaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2JkZXYpO1xuLVxuLVx0aW5vZGVfdW5sb2NrKGlub2RlKTtcbi1cbi1cdHJldHVybiBlcnJvcjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0LnNldGF0dHJcdD0gaGZzcGx1c19zZXRhdHRyLFxuIFx0LmdldGF0dHJcdD0gaGZzcGx1c19nZXRhdHRyLFxuQEAgLTQ1NCwxOSArMzQ0LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xuIFx0Lmxpc3R4YXR0clx0PSBoZnNwbHVzX2xpc3R4YXR0cixcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuLVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tXHQucmVhZF9pdGVyXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXG4tXHQud3JpdGVfaXRlclx0PSBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcixcbi1cdC5tbWFwX3ByZXBhcmVcdD0gZ2VuZXJpY19maWxlX21tYXBfcHJlcGFyZSxcbi1cdC5zcGxpY2VfcmVhZFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxuLVx0LnNwbGljZV93cml0ZVx0PSBpdGVyX2ZpbGVfc3BsaWNlX3dyaXRlLFxuLVx0LmZzeW5jXHRcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxuLVx0Lm9wZW5cdFx0PSBoZnNwbHVzX2ZpbGVfb3Blbixcbi1cdC5yZWxlYXNlXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxuLVx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcbi19O1xuLVxuIHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4ge1xuQEAgLTUxMyw3ICszOTAsNyBAQCBzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRzYmktXHUwMDNlZmlsZV9jb3VudCsrO1xuIFx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XG4gXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbitcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19zeW1saW5rX2FvcHM7XG4gXHRcdGhpcC1cdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xuIFx0fSBlbHNlIGlmIChTX0lTQ0hSKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS1cdTAwM2VpX21vZGUpIHx8XG4gXHRcdCAgIFNfSVNGSUZPKGlub2RlLVx1MDAzZWlfbW9kZSkgfHwgU19JU1NPQ0soaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuQEAgLTY1NCw3ICs1MzEsNyBAQCBpbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG4gXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4gXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuIFx0XHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG4tXHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuK1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfc3ltbGlua19hb3BzO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZoZnNwbHVzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucztcbiBcdFx0XHRpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLVx1MDAzZWlfbW9kZSxcbmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lvbWFwLmMgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xZTZkZmE2OTM1MjZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9mcy9oZnNwbHVzL2lvbWFwLmNcbkBAIC0wLDAgKzEsMTg5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGZ1bmN0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvbWFwLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImhmc3BsdXNfZnMuaFwiXG4rI2luY2x1ZGUgXCJoZnNwbHVzX3Jhdy5oXCJcbisjaW5jbHVkZSBcImlvbWFwLmhcIlxuK1xuK3N0YXRpYyBpbnQgX19oZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHQgbG9mZl90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLFxuK1x0XHRcdFx0IHN0cnVjdCBpb21hcCAqaW9tYXAsIGJvb2wgbWF5X2FsbG9jKVxuK3tcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0c3RydWN0IGhmc3BsdXNfc2JfaW5mbyAqc2JpID0gSEZTUExVU19TQihzYik7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0dTMyIGFibG9jaywgZGJsb2NrLCBtYXhfYmxvY2tzO1xuK1x0bG9mZl90IGFibG9ja19vZmZzZXQsIGFibG9ja19ieXRlcztcbitcdGxvZmZfdCBibG9ja19zdGFydDtcbitcdGJvb2wgaXNfbmV3O1xuK1x0aW50IGVycjtcbitcbitcdGlmICghbWF5X2FsbG9jKSB7XG4rXHRcdC8qIENvbXBsZXRlbHkgYmV5b25kIEVPRi4gVHJlYXQgYXMgaG9sZSAqL1xuK1x0XHRpZiAoaV9zaXplX3JlYWQoaW5vZGUpIFx1MDAzYz0gb2Zmc2V0KSB7XG4rXHRcdFx0aW9tYXAtXHUwMDNldHlwZSA9IElPTUFQX0hPTEU7XG4rXHRcdFx0aW9tYXAtXHUwMDNlYWRkciA9IElPTUFQX05VTExfQUREUjtcbitcdFx0XHRpb21hcC1cdTAwM2VvZmZzZXQgPSBvZmZzZXQ7XG4rXHRcdFx0aW9tYXAtXHUwMDNlbGVuZ3RoID0gbGVuZ3RoO1xuK1x0XHRcdHJldHVybiAwO1xuK1x0XHR9XG4rXG4rXHRcdC8qIENsYW1wIGxlbmd0aCBpZiB0aGUgcmVxdWVzdGVkIHJhbmdlIGdvZXMgYmV5b25kIGlfc2l6ZSAqL1xuK1x0XHRpZiAob2Zmc2V0ICsgbGVuZ3RoIFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcbitcdFx0XHRsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuK1x0XHRcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4rXG4rXHRcdFx0bGVuZ3RoID0gcm91bmRfdXAoaV9zaXplLCBibG9ja3NpemUpIC0gb2Zmc2V0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRhYmxvY2sgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGVyciA9IGhmc3BsdXNfbWFwX2V4dGVudChpbm9kZSwgYWJsb2NrLCBtYXlfYWxsb2MsIFx1MDAyNmRibG9jayxcbitcdFx0XHRcdCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRhYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiAoc2JpLVx1MDAzZWFsbG9jX2Jsa3N6IC0gMSk7XG4rXHRhYmxvY2tfYnl0ZXMgPSAobG9mZl90KW1heF9ibG9ja3MgXHUwMDNjXHUwMDNjIHNiaS1cdTAwM2VhbGxvY19ibGtzel9zaGlmdDtcbitcbitcdGxlbmd0aCA9IG1pbl90KGxvZmZfdCwgbGVuZ3RoLCBhYmxvY2tfYnl0ZXMgLSBhYmxvY2tfb2Zmc2V0KTtcbitcdGJsb2NrX3N0YXJ0ID0gcm91bmRfZG93bihvZmZzZXQsIGlfYmxvY2tzaXplKGlub2RlKSk7XG4rXHRpc19uZXcgPSBtYXlfYWxsb2MgXHUwMDI2XHUwMDI2IGJsb2NrX3N0YXJ0IFx1MDAzZT0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcdGlmIChtYXlfYWxsb2MgXHUwMDI2XHUwMDI2ICFpc19uZXcgXHUwMDI2XHUwMDI2IG9mZnNldCBcdTAwM2MgaGlwLVx1MDAzZXBoeXNfc2l6ZSlcbitcdFx0bGVuZ3RoID0gbWluX3QobG9mZl90LCBsZW5ndGgsIGhpcC1cdTAwM2VwaHlzX3NpemUgLSBvZmZzZXQpO1xuK1xuK1x0aW9tYXAtXHUwMDNlYmRldiA9IHNiLVx1MDAzZXNfYmRldjtcbitcdGlvbWFwLVx1MDAzZW9mZnNldCA9IG9mZnNldDtcbitcdGlvbWFwLVx1MDAzZWxlbmd0aCA9IGxlbmd0aDtcbitcdGlvbWFwLVx1MDAzZWFkZHIgPSBoZnNwbHVzX2FibG9ja190b19waHlzX2J5dGVzKHNiLCBkYmxvY2spICsgYWJsb2NrX29mZnNldDtcbitcdGlvbWFwLVx1MDAzZXR5cGUgPSBJT01BUF9NQVBQRUQ7XG4rXHRpb21hcC1cdTAwM2VmbGFncyA9IElPTUFQX0ZfTUVSR0VEO1xuK1xuK1x0aWYgKGlzX25ldylcbitcdFx0aW9tYXAtXHUwMDNlZmxhZ3MgfD0gSU9NQVBfRl9ORVc7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBoZnNwbHVzX2lvbWFwX2JlZ2luKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4rXHRcdFx0XHRsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHRzdHJ1Y3QgaW9tYXAgKmlvbWFwLCBzdHJ1Y3QgaW9tYXAgKnNyY21hcClcbit7XG4rXHRyZXR1cm4gX19oZnNwbHVzX2lvbWFwX2JlZ2luKGlub2RlLFxuK1x0XHRcdFx0ICAgICBvZmZzZXQsIGxlbmd0aCwgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIGlvbWFwLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pb21hcF9iZWdpbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuK1x0XHRcdFx0ICAgICBsb2ZmX3QgbGVuZ3RoLCB1bnNpZ25lZCBpbnQgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpb21hcCAqaW9tYXAsIHN0cnVjdCBpb21hcCAqc3JjbWFwKVxuK3tcbitcdHJldHVybiBfX2hmc3BsdXNfaW9tYXBfYmVnaW4oaW5vZGUsXG4rXHRcdFx0XHQgICAgIG9mZnNldCwgbGVuZ3RoLCBmbGFncyxcbitcdFx0XHRcdCAgICAgaW9tYXAsIHRydWUpO1xuK31cbitcbitjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzID0ge1xuK1x0LmlvbWFwX2JlZ2luID0gaGZzcGx1c19pb21hcF9iZWdpbixcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZV9pb21hcF9lbmQoKVxuKyAqXG4rICogQWR2YW5jZSB0aGUgYWxsb2NhdGVkLWFuZC16ZXJvZWQgaGlnaC13YXRlciBtYXJrXG4rICogKGhpcC1cdTAwM2VwaHlzX3NpemUgLyBoaXAtXHUwMDNlZnNfYmxvY2tzKSB0byBjb3ZlciB0aGUgbmV3bHkgd3JpdHRlbiByYW5nZS5cbisgKi9cbitzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsXG4rXHRcdFx0XHQgICBsb2ZmX3QgbGVuZ3RoLCBzc2l6ZV90IHdyaXR0ZW4sXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHN0cnVjdCBpb21hcCAqaW9tYXApXG4re1xuK1x0c3RydWN0IGhmc3BsdXNfaW5vZGVfaW5mbyAqaGlwID0gSEZTUExVU19JKGlub2RlKTtcbitcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuK1x0bG9mZl90IGVuZDtcbitcdGJvb2wgZGlydGllZCA9IGZhbHNlO1xuK1xuK1x0aWYgKCF3cml0dGVuKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGVuZCA9IHJvdW5kX3VwKHBvcyArIHdyaXR0ZW4sIHNiLVx1MDAzZXNfYmxvY2tzaXplKTtcbitcbitcdGlmIChoaXAtXHUwMDNlcGh5c19zaXplIFx1MDAzYyBlbmQpIHtcbitcdFx0aW5vZGVfYWRkX2J5dGVzKGlub2RlLCBlbmQgLSBoaXAtXHUwMDNlcGh5c19zaXplKTtcbitcdFx0aGlwLVx1MDAzZXBoeXNfc2l6ZSA9IGVuZDtcbitcdFx0aGlwLVx1MDAzZWZzX2Jsb2NrcyA9IGVuZCBcdTAwM2VcdTAwM2Ugc2ItXHUwMDNlc19ibG9ja3NpemVfYml0cztcbitcdFx0ZGlydGllZCA9IHRydWU7XG4rXHR9XG4rXG4rXHRpZiAoZGlydGllZClcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXG4rXHRyZXR1cm4gd3JpdHRlbjtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX29wcyBoZnNwbHVzX3dyaXRlX2lvbWFwX29wcyA9IHtcbitcdC5pb21hcF9iZWdpblx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2JlZ2luLFxuK1x0LmlvbWFwX2VuZFx0PSBoZnNwbHVzX3dyaXRlX2lvbWFwX2VuZCxcbit9O1xuK1xuKy8qXG4rICogaGZzcGx1c19pb21hcF9jb250X2V4cGFuZCgpXG4rICpcbisgKiBaZXJvLWV4dGVuZCB0aGUgYmFja2luZyBzdG9yZSBmcm9tIHRoZSBjdXJyZW50IHBoeXNfc2l6ZSB1cCB0byAnc2l6ZScuXG4rICogVXNlZCBib3RoIGJ5IGhmc3BsdXNfc2V0YXR0cigpIGFuZCBieSBoZnNwbHVzX2ZpbGVfdHJ1bmNhdGUoKS5cbisgKi9cbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgaGZzcGx1c19pbm9kZV9pbmZvICpoaXAgPSBIRlNQTFVTX0koaW5vZGUpO1xuK1x0bG9mZl90IHN0YXJ0ID0gaGlwLVx1MDAzZXBoeXNfc2l6ZTtcbitcbitcdGlmIChzaXplIFx1MDAzYz0gc3RhcnQpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGlvbWFwX3plcm9fcmFuZ2UoaW5vZGUsIHN0YXJ0LCBzaXplIC0gc3RhcnQsIE5VTEwsXG4rXHRcdFx0XHRcdTAwMjZoZnNwbHVzX3dyaXRlX2lvbWFwX29wcywgTlVMTCwgTlVMTCk7XG4rfVxuK1xuKy8qXG4rICogaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UoKSAtIG1hcCBmb2xpbyBkdXJpbmcgd3JpdGViYWNrXG4rICpcbisgKiBDYWxsZWQgZm9yIGVhY2ggZm9saW8gZHVyaW5nIHdyaXRlYmFjay4gSWYgdGhlIGZvbGlvIGZhbGxzIG91dHNpZGVcbisgKiB0aGUgY3VycmVudCBpb21hcCwgcmVtYXBzIGJ5IGNhbGxpbmcgX19oZnNwbHVzX2lvbWFwX2JlZ2luKCkgYWdhaW4uXG4rICovXG4rc3RhdGljIHNzaXplX3QgaGZzcGx1c193cml0ZWJhY2tfcmFuZ2Uoc3RydWN0IGlvbWFwX3dyaXRlcGFnZV9jdHggKndwYyxcbitcdFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgdTY0IG9mZnNldCxcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IGxlbiwgdTY0IGVuZF9wb3MpXG4re1xuK1x0aW50IGVycjtcbitcbitcdGlmIChvZmZzZXQgXHUwMDNjIHdwYy1cdTAwM2Vpb21hcC5vZmZzZXQgfHxcbitcdCAgICBvZmZzZXQgXHUwMDNlPSB3cGMtXHUwMDNlaW9tYXAub2Zmc2V0ICsgd3BjLVx1MDAzZWlvbWFwLmxlbmd0aCkge1xuK1x0XHRlcnIgPSBfX2hmc3BsdXNfaW9tYXBfYmVnaW4od3BjLVx1MDAzZWlub2RlLFxuK1x0XHRcdFx0XHQgICAgb2Zmc2V0LCBsZW4sIDAsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZ3cGMtXHUwMDNlaW9tYXAsIGZhbHNlKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGlvbWFwX2FkZF90b19pb2VuZCh3cGMsIGZvbGlvLCBvZmZzZXQsIGVuZF9wb3MsIGxlbik7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCBpb21hcF93cml0ZWJhY2tfb3BzIGhmc3BsdXNfd3JpdGViYWNrX29wcyA9IHtcbitcdC53cml0ZWJhY2tfcmFuZ2VcdD0gaGZzcGx1c193cml0ZWJhY2tfcmFuZ2UsXG4rXHQud3JpdGViYWNrX3N1Ym1pdFx0PSBpb21hcF9pb2VuZF93cml0ZWJhY2tfc3VibWl0LFxuK307XG4rXG4rY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgaGZzcGx1c193cml0ZV9kaW9fb3BzID0ge1xuK1x0LmVuZF9pb1x0XHQ9IGlvbWFwX2Rpb19lbmRfaW8sXG4rfTtcbitcbitpbnQgaGZzcGx1c19pb21hcF9zd2FwX2FjdGl2YXRlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaXMsXG4rXHRcdFx0XHQgc3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKVxuK3tcbitcdHJldHVybiBpb21hcF9zd2FwZmlsZV9hY3RpdmF0ZShzaXMsIGZpbGUsIHNwYW4sIFx1MDAyNmhmc3BsdXNfaW9tYXBfb3BzKTtcbit9XG5kaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pb21hcC5oIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGFjMDdhOWQyNWY4ZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZnMvaGZzcGx1cy9pb21hcC5oXG5AQCAtMCwwICsxLDE4IEBAXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbisvKlxuKyAqIGlvbWFwIGNhbGxiYWNrIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGhmc3BsdXMgZmlsZXN5c3RlbVxuKyAqL1xuK1xuKyNpZm5kZWYgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuKyNkZWZpbmUgX0xJTlVYX0hGU1BMVVNfSU9NQVBfSFxuK1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzIGhmc3BsdXNfd3JpdGVfaW9tYXBfb3BzO1xuK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW9tYXBfd3JpdGViYWNrX29wcyBoZnNwbHVzX3dyaXRlYmFja19vcHM7XG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzIGhmc3BsdXNfd3JpdGVfZGlvX29wcztcbitcbitpbnQgaGZzcGx1c19pb21hcF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSk7XG4raW50IGhmc3BsdXNfaW9tYXBfc3dhcF9hY3RpdmF0ZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzLFxuK1x0XHRcdFx0c3RydWN0IGZpbGUgKmZpbGUsIHNlY3Rvcl90ICpzcGFuKTtcbitcbisjZW5kaWYgLyogX0xJTlVYX0hGU1BMVVNfSU9NQVBfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvc3VwZXIuYyBiL2ZzL2hmc3BsdXMvc3VwZXIuY1xuaW5kZXggNTc3N2UzMWRlNDVhYy4uNDU5Y2E2ZjNiODE0NyAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuY1xuKysrIGIvZnMvaGZzcGx1cy9zdXBlci5jXG5AQCAtNTcxLDYgKzU3MSw3IEBAIHN0YXRpYyBpbnQgaGZzcGx1c19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdFx0Z290byBvdXRfY2xvc2VfYXR0cl90cmVlO1xuIFx0fVxuIFx0c2JpLVx1MDAzZWFsbG9jX2ZpbGUgPSBpbm9kZTtcbitcdG1hcHBpbmdfc2V0X3N0YWJsZV93cml0ZXMoaW5vZGUtXHUwMDNlaV9tYXBwaW5nKTtcbiBcbiBcdC8qIExvYWQgdGhlIHJvb3QgZGlyZWN0b3J5ICovXG4gXHRyb290ID0gaGZzcGx1c19pZ2V0KHNiLCBIRlNQTFVTX1JPT1RfQ05JRCk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZnNfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuaW5kZXggNDVmYjRjOWZmOWY1ZS4uMTQxN2UxOWQ5NGJjZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaGZzX2NvbW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2hmc19jb21tb24uaFxuQEAgLTE3MSwxOCArMTcxLDIyIEBAIGVudW0ge1xuIFx0SEZTX1hBVFRSX05BTUUsXG4gfTtcbiBcbisjZGVmaW5lIEhGU19GT1JLX0VYVEVOVF9DT1VOVFx0KDMpXG4rXG4gc3RydWN0IGhmc19leHRlbnQge1xuIFx0X19iZTE2IGJsb2NrO1xuIFx0X19iZTE2IGNvdW50O1xuIH07XG4tdHlwZWRlZiBzdHJ1Y3QgaGZzX2V4dGVudCBoZnNfZXh0ZW50X3JlY1szXTtcbit0eXBlZGVmIHN0cnVjdCBoZnNfZXh0ZW50IGhmc19leHRlbnRfcmVjW0hGU19GT1JLX0VYVEVOVF9DT1VOVF07XG4rXG4rI2RlZmluZSBIRlNQTFVTX0ZPUktfRVhURU5UX0NPVU5UXHQoOClcbiBcbiAvKiBBIHNpbmdsZSBjb250aWd1b3VzIGFyZWEgb2YgYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZXh0ZW50IHtcbiBcdF9fYmUzMiBzdGFydF9ibG9jaztcbiBcdF9fYmUzMiBibG9ja19jb3VudDtcbiB9IF9fcGFja2VkO1xuLXR5cGVkZWYgc3RydWN0IGhmc3BsdXNfZXh0ZW50IGhmc3BsdXNfZXh0ZW50X3JlY1s4XTtcbit0eXBlZGVmIHN0cnVjdCBoZnNwbHVzX2V4dGVudCBoZnNwbHVzX2V4dGVudF9yZWNbSEZTUExVU19GT1JLX0VYVEVOVF9DT1VOVF07XG4gXG4gLyogSW5mb3JtYXRpb24gZm9yIGEgXCJGb3JrXCIgaW4gYSBmaWxlICovXG4gc3RydWN0IGhmc3BsdXNfZm9ya19yYXcge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9tYXAuaCBiL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuaW5kZXggNTZiNDNkNTk0ZTZlMi4uNTBmZTYwMzZiMDFhYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW9tYXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9pb21hcC5oXG5AQCAtNTYwLDYgKzU2MCwyNiBAQCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyB7XG4gXHRzdHJ1Y3QgYmlvX3NldCAqYmlvX3NldDtcbiB9O1xuIFxuKy8qXG4rICogRGlyZWN0IEkvTyBjb21wbGV0aW9uIGhhbmRsZXJcbisgKi9cbitzdGF0aWMgaW5saW5lXG4raW50IGlvbWFwX2Rpb19lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4rXHRcdCAgICAgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcbitcdGlmIChlcnJvcilcbitcdFx0cmV0dXJuIGVycm9yO1xuK1xuK1x0aWYgKHNpemUgXHUwMDI2XHUwMDI2IGlfc2l6ZV9yZWFkKGlub2RlKSBcdTAwM2MgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKSB7XG4rXHRcdGlfc2l6ZV93cml0ZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MgKyBzaXplKTtcbitcdFx0bWFya19pbm9kZV9kaXJ0eShpbm9kZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbiAgKiBXYWl0IGZvciB0aGUgSS9PIHRvIGNvbXBsZXRlIGluIGlvbWFwX2Rpb19ydyBldmVuIGlmIHRoZSBraW9jYiBpcyBub3RcbiAgKiBzeW5jaHJvbm91cy5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjI0OjA0LjI2NDcwMDQ0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDU5ODA4MDE0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NpbmcgdGhlIEhGUysgRmlsZXN5c3RlbSBJL08gUGF0Y2ggU2VyaWVzIGZvciBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgRXhwb3N1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyB0aGF0J3MgcmVmYWN0b3JpbmcgdGhlIGBoZnNwbHVzYCBmaWxlc3lzdGVtLiBUaGUgcHJpbWFyeSBjaGFuZ2UgaXMgdGhlIHNoaWZ0IGZyb20gYExFR0FDWV9ESVJFQ1RfSU9gIHRvIGBpb21hcGAgZm9yIGZpbGUgSS9PIG9wZXJhdGlvbnMuIFRoZXkndmUgaW50cm9kdWNlZCBuZXcgZmlsZXM6IGBmcy9oZnNwbHVzL2ZpbGUuY2AsIGBmcy9oZnNwbHVzL2lvbWFwLmNgLCBhbmQgYGZzL2hmc3BsdXMvaW9tYXAuaGAsIGFuZCB0aGV5J3ZlIG1vZGlmaWVkIGBoZnNwbHVzX2dldF9ibG9ja2AgYW5kIGFkZGVkIGEgYGhmc3BsdXNfbWFwX2V4dGVudGAgZnVuY3Rpb24uIEkgc2VlIHRoZXkncmUgYWxzbyB1c2luZyBgbG9ja19wYWdlYCBhbmQgYGZvbGlvX3dhaXRfc3RhYmxlYCBub3cgaW4gdGhlIGJsb2NrIGFsbG9jYXRpb24vZnJlZWluZyByb3V0aW5lcy5cblxuTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIG1lbW9yeSBzYWZldHkuICBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGF2ZW51ZXMgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHJlcGxhY2luZyB0aGUgb2xkIGRpcmVjdCBhbmQgYnVmZmVyZWQgSU8gcGF0aHMgd2l0aCBgaW9tYXBgLWJhc2VkIG9uZXMuIFRoZXkndmUgdXBkYXRlZCB0aGUgYGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zYCBzdHJ1Y3R1cmUsIHVzaW5nIGBpb21hcF9kaW9fcndgLCBgaW9tYXBfZmlsZV9idWZmZXJlZF93cml0ZWAsIGFuZCBgZ2VuZXJpY19maWxlX3JlYWRfaXRlcmAgKHdpdGggYGlvbWFwX2Rpb19yd2AgZm9yIGRpcmVjdCBJL08pLiAgVGhleSBhbHNvIGltcGxlbWVudCBgaGZzcGx1c19pb21hcF9vcHNgLCBhbmQgdGhlIHdyaXRlYmFjay93cml0ZSBJTyBvcGVyYXRpb24gc3RydWN0dXJlcy4gVGhleSdyZSBpbXBsZW1lbnRpbmcgYGJlZ2luYCBhbmQgYGVuZGAgZnVuY3Rpb25zIGZvciBpb21hcCBhbmQgd3JpdGUgb3BlcmF0aW9ucywgYXMgd2VsbCBhcyBmdW5jdGlvbnMgZm9yIHdyaXRlYmFjay5cblxuVGhlIGdvb2QgbmV3cyBpcyB0aGF0IHRoZXkncmUgc3RpY2tpbmcgdG8gc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zOiBgcmVhZF9pdGVyYCwgYHdyaXRlX2l0ZXJgLCBgbGxzZWVrYCwgYGZzeW5jYCwgYG9wZW5gLCBhbmQgYHJlbGVhc2VgLiAgVGhlIGBpb2N0bGAgZnVuY3Rpb24gcmVtYWlucyB1bmNoYW5nZWQgYXQgYGhmc3BsdXNfaW9jdGxgLiBUaGV5J3ZlIG1vZGlmaWVkIGBoZnNwbHVzX2dldF9ibG9ja2AgdG8gdXNlIGBoZnNwbHVzX21hcF9leHRlbnRgLiBgaGZzcGx1c19tYXBfZXh0ZW50YCByZXR1cm5zIGBkYmxvY2tgIGFuZCBgbWF4X2Jsb2Nrc2AuICBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyBgZGJsb2NrYCBhbmQgYG1heF9ibG9ja3NgIGFyZSBpbml0aWFsaXplZC5cblxuQWxyaWdodCwgYSBkZWVwZXIgZGl2ZS4gSSBzZWUgdGhleSdyZSB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAgdG8gemVyby1leHRlbmQgdGhlIGJhY2tpbmcgc3RvcmUgaW4gYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgLCB3aGljaCBpcyBncmVhdDsgdGhhdCdzIGV4YWN0bHkgd2hhdCBJIHdhbnQgdG8gc2VlLiAgYGhmc3BsdXNfd3JpdGVfaW9tYXBfZW5kYCBpcyBhZHZhbmNpbmcgYGhpcC1cdTAwM2VwaHlzX3NpemVgIGFuZCBgaGZzcGx1c19maWxlX3dyaXRlX2l0ZXJgIGFuZCBgaGZzcGx1c19maWxlX3RydW5jYXRlYCBhcmUgdXNpbmcgYGhmc3BsdXNfaW9tYXBfY29udF9leHBhbmRgIGZvciB6ZXJvLWV4dGVuc2lvbiBpZiB0aGUgd3JpdGUgZXh0ZW5kcyBwYXN0IHRoZSBjdXJyZW50IGZpbGUgc2l6ZS5cblxuTm93LCBsZXQncyBsb29rIGF0IGhvdyB0aGUgYGlvbWFwYCBhZGRyZXNzIGlzIHNldCB3aXRoaW4gYGhmc3BsdXNfaW9tYXBfYmVnaW5gLiAgSXQncyBzZXR0aW5nIGBpb21hcC1cdTAwM2VhZGRyYCBiYXNlZCBvbiBgaGZzcGx1c19hYmxvY2tfdG9fcGh5c19ieXRlc2AgYW5kIGFuIG9mZnNldC4gIENydWNpYWxseSwgaWYgYSBuZXcgYmxvY2sgaXMgYmVpbmcgYWxsb2NhdGVkLCB0aGV5IHNldCBgSU9NQVBfRl9ORVdgLiAgVGhlIGBpb21hcGAgaW5mcmFzdHJ1Y3R1cmUgaXRzZWxmIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgemVyb2luZyBvZiB0aGVzZSBgSU9NQVBfRl9ORVdgIGJsb2NrcywgZW5zdXJpbmcgbm8gdW5pbml0aWFsaXplZCBkYXRhIGxlYWtzLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IEkgZXhwZWN0LlxuXG5TbywgdGhlIGNoYW5nZXMgYXBwZWFyIHRvIGJlIHN0YW5kYXJkIFZGUy9gaW9tYXBgIGNvbnZlcnNpb25zLiBObyBjdXN0b20gZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBubyBuZXcgc3lzdGVtIGNhbGxzLCBubyBuZXcgbmV0bGluayBhdHRyaWJ1dGVzLCBhbmQgbm8gbmV3IGlvY3Rscy4gSSB0aGluayBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgcGVyZmVjdGx5IGNhcGFibGUgb2YgY2F0Y2hpbmcgb3V0LW9mLWJvdW5kcyByZWFkcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBvdGhlciBjb21tb24gbWVtb3J5IHNhZmV0eSBpc3N1ZXMuICBUaGUgS01TQU4gdG9vbCBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy5cblxuTGV0J3MgZG91YmxlLWNoZWNrIGhvdyBgaGZzcGx1c19tYXBfZXh0ZW50YCB3b3Jrcy4gSXQgaGFzIGEgY2hlY2sgZm9yIHRoZSBgYWJsb2NrYCBpbmRleCBhbmQgY2FsbHMgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIHRvIGxvY2F0ZSBhIGJsb2NrLiAgSWYgYGhmc3BsdXNfZXh0X2ZpbmRfYmxvY2tgIGZpbmRzIGEgYmxvY2sgaXQgc2V0cyBgKmRibG9ja2AgYW5kIHJldHVybnMgYSB2YWx1ZSwgb3RoZXJ3aXNlIGAqZGJsb2NrYCBpcyBzZXQgdG8gMC4gVGhlbiwgbGV0IG1lIG1ha2Ugc3VyZSB0aGF0IGRibG9jayBpcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgaW4gdGhlIGlvbWFwLiBUaGUgY2hlY2sgdGhhdCBjYWxscyBgaGZzcGx1c19tYXBfZXh0ZW50YCBjYXRjaGVzIGFueSBlcnJvci4gSXQgdXNlcyBgaGZzcGx1c19tYXBfZXh0ZW50KGlub2RlLCBhYmxvY2ssIG1heV9hbGxvYywgXHUwMDI2ZGJsb2NrLCBcdTAwMjZtYXhfYmxvY2tzLCBOVUxMKWAuIElmIGFuIGVycm9yIG9jY3VycywgdGhlIHByb2Nlc3MgcmV0dXJucyBlYXJseS5cblxuQmFzZWQgb24gbXkgYW5hbHlzaXMsIGBpb21hcF96ZXJvX3JhbmdlYCBpcyB1c2VkLCBhbmQgdGhlcmUgaXMgc2FmZSBoYW5kbGluZyBvZiBhbGxvY2F0ZWQgYmxvY2tzLiBUaGlzIHBhdGNoIHVzZXMgYElcblxuIiwiSW5wdXRUb2tlbnMiOjE4OTU2LCJPdXRwdXRUb2tlbnMiOjI0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMzoyNDoyNC44NjI3ODI4NDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb252ZXJ0cyB0aGUgaGZzcGx1cyBmaWxlc3lzdGVtIGZyb20gbGVnYWN5IGRpcmVjdCBJL08gYW5kIGJ1ZmZlcmVkIEkvTyB0byB0aGUgbW9kZXJuIGlvbWFwIGluZnJhc3RydWN0dXJlLiBJdCBpbnRyb2R1Y2VzIG5ldyBmaWxlIG9wZXJhdGlvbnMsIGlvbWFwIGNhbGxiYWNrcywgYW5kIG1vZGlmaWVzIGV4dGVudCBtYXBwaW5nIGxvZ2ljLiBUaGUgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBzdGFuZGFyZCBWRlMgYW5kIGlvbWFwIEFQSSB1c2FnZSwgc3VjaCBhcyBgaW9tYXBfZGlvX3J3YCwgYGlvbWFwX2ZpbGVfYnVmZmVyZWRfd3JpdGVgLCBhbmQgYGlvbWFwX3plcm9fcmFuZ2VgLiBGaWxlIGV4cGFuc2lvbnMgYXJlIHByb3Blcmx5IHplcm9lZCB1c2luZyBgaW9tYXBfemVyb19yYW5nZWAsIGFuZCBuZXdseSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSBmbGFnZ2VkIHdpdGggYElPTUFQX0ZfTkVXYCwgd2hpY2ggdGhlIGlvbWFwIGNvcmUgaGFuZGxlcyB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgZGlzayBkYXRhIGV4cG9zdXJlLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vIG5ldyBpb2N0bHMsIGFuZCBubyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnRyb2R1Y2VkIHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgc2FuaXRpemVycy4gQSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrlrxw[1] Phase: Succeeded StartedAt: 2026-08-26 23:24:36 +0000 UTC FinishedAt: 2026-08-26 23:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 23:24:36 +0000 UTC FinishedAt: 2026-08-26 23:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2] Phase: Succeeded StartedAt: 2026-08-26 23:24:36 +0000 UTC FinishedAt: 2026-08-27 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 23:24:36 +0000 UTC FinishedAt: 2026-08-27 03:06:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 23:24:36 +0000 UTC FinishedAt: 2026-08-26 23:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 23:24:36 +0000 UTC FinishedAt: 2026-08-26 23:24:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowrlrxw/series-workflowrlrxw-convert-artifact-3394616666/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 23:24:46 +0000 UTC FinishedAt: 2026-08-26 23:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 23:24:46 +0000 UTC FinishedAt: 2026-08-26 23:41:36 +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:*d60c987a-be6f-4726-8dba-7f6b4d836848,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-workflowrlrxw/series-workflowrlrxw-convert-artifact-3394616666/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": "64299a9c-765a-4518-a904-709172e3e6c0", "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-workflowrlrxw/series-workflowrlrxw-build-action-1736700424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 23:24:46 +0000 UTC FinishedAt: 2026-08-26 23:41:26 +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:*d60c987a-be6f-4726-8dba-7f6b4d836848,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-workflowrlrxw/series-workflowrlrxw-convert-artifact-3394616666/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": "64299a9c-765a-4518-a904-709172e3e6c0", "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-workflowrlrxw/series-workflowrlrxw-build-action-1736700424/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 23:41:36 +0000 UTC FinishedAt: 2026-08-26 23:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 23:41:36 +0000 UTC FinishedAt: 2026-08-26 23:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 23:41:36 +0000 UTC FinishedAt: 2026-08-26 23:41:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 23:41:36 +0000 UTC FinishedAt: 2026-08-26 23:41:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowrlrxw/series-workflowrlrxw-convert-artifact-740980661/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 23:41:46 +0000 UTC FinishedAt: 2026-08-26 23:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 23:41:46 +0000 UTC FinishedAt: 2026-08-26 23:43:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64299a9c-765a-4518-a904-709172e3e6c0,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-workflowrlrxw/series-workflowrlrxw-build-action-1736700424/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-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 23:43:43 +0000 UTC FinishedAt: 2026-08-26 23:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 23:43:43 +0000 UTC FinishedAt: 2026-08-26 23:43:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 23:43:43 +0000 UTC FinishedAt: 2026-08-27 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 23:43:43 +0000 UTC FinishedAt: 2026-08-27 00:00:00 +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:*d60c987a-be6f-4726-8dba-7f6b4d836848,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-workflowrlrxw/series-workflowrlrxw-convert-artifact-740980661/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": "c6a44359-3e63-48aa-be4b-563b7e0cf103", "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-workflowrlrxw/series-workflowrlrxw-build-action-3233196225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 23:43:43 +0000 UTC FinishedAt: 2026-08-26 23:59:50 +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:*d60c987a-be6f-4726-8dba-7f6b4d836848,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-workflowrlrxw/series-workflowrlrxw-convert-artifact-740980661/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": "c6a44359-3e63-48aa-be4b-563b7e0cf103", "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-workflowrlrxw/series-workflowrlrxw-build-action-3233196225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 00:00:00 +0000 UTC FinishedAt: 2026-08-27 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 00:00:00 +0000 UTC FinishedAt: 2026-08-27 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 00:00:00 +0000 UTC FinishedAt: 2026-08-27 00:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 00:00:00 +0000 UTC FinishedAt: 2026-08-27 00:01:50 +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:*c6a44359-3e63-48aa-be4b-563b7e0cf103,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-workflowrlrxw/series-workflowrlrxw-build-action-3233196225/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-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 00:02:00 +0000 UTC FinishedAt: 2026-08-27 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 00:02:00 +0000 UTC FinishedAt: 2026-08-27 03:06:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*64299a9c-765a-4518-a904-709172e3e6c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6a44359-3e63-48aa-be4b-563b7e0cf103,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-workflowrlrxw/series-workflowrlrxw-build-action-1736700424/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-workflowrlrxw/series-workflowrlrxw-build-action-3233196225/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 00:02:00 +0000 UTC FinishedAt: 2026-08-27 00:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 00:02:00 +0000 UTC FinishedAt: 2026-08-27 00:02:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrlrxw/series-workflowrlrxw-convert-artifact-3906344858/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 00:02:00 +0000 UTC FinishedAt: 2026-08-27 00:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 00:02:00 +0000 UTC FinishedAt: 2026-08-27 00:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 00:02:00 +0000 UTC FinishedAt: 2026-08-27 00:02:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 00:02:10 +0000 UTC FinishedAt: 2026-08-27 03:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrlrxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["hfsplus_file_fsync","hfsplus_map_extent","hfsplus_iomap_cont_expand","hfsplus_iomap_swap_activate","hfsplus_get_block"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5870ce43c013ad564b3b83bae330b160e056df67","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"21631741-87b3-4cdc-90a9-ac84e2b3d36c","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 00:02:10 +0000 UTC FinishedAt: 2026-08-27 03:05:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64299a9c-765a-4518-a904-709172e3e6c0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c6a44359-3e63-48aa-be4b-563b7e0cf103,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-workflowrlrxw/series-workflowrlrxw-build-action-1736700424/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-workflowrlrxw/series-workflowrlrxw-build-action-3233196225/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-workflowrlrxw/series-workflowrlrxw-convert-artifact-3906344858/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,}