Name: series-workflowmmmdd Phase: Succeeded StartedAt: 2026-08-06 19:07:09 +0000 UTC FinishedAt: 2026-08-06 23:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[0] Phase: Succeeded StartedAt: 2026-08-06 19:07:09 +0000 UTC FinishedAt: 2026-08-06 19:47:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[0].run-triage Phase: Succeeded StartedAt: 2026-08-06 19:07:09 +0000 UTC FinishedAt: 2026-08-06 19:47:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_ZONED_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_ZONED_LOOP" ], "series_id": "1be50f07-39b9-4eac-b405-3b3e95ebb2fc" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bdev_check_zone_mgmt", "blkdev_get_zone_info", "blk_revalidate_disk_zones", "disk_release_zone_resources", "disk_init_zone_resources" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZGV2X2NoZWNrX3pvbmVfbWdtdCYjMzQ7LAogICAgJiMzNDtibGtkZXZfZ2V0X3pvbmVfaW5mbyYjMzQ7LAogICAgJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDssCiAgICAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB6b25lIGNvbmRpdGlvbnMgYXJlIHRyYWNrZWQgaW4gdGhlIGJsb2NrIGxheWVyLCBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBuZXcgYHpvbmVzX3N0YXRlYCBhcnJheSB0byByZXBsYWNlIGB6b25lc19jb25kYC4gSXQgdXBkYXRlcyB6b25lIG1hbmFnZW1lbnQgY2hlY2tzIChgYmRldl9jaGVja196b25lX21nbXRgKSwgem9uZSByZXZhbGlkYXRpb24gKGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCksIGFuZCB6b25lIGluZm9ybWF0aW9uIHJldHJpZXZhbCAoYGJsa2Rldl9nZXRfem9uZV9pbmZvYCkuIEl0IGFsc28gbW9kaWZpZXMgYF9fYWRkX2Rpc2tgIHRvIGRpc2FibGUgcGFydGl0aW9ucyBvbiB6b25lZCBibG9jayBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGJsb2NrIGxheWVyJiMzOTtzIHpvbmVkIHN0b3JhZ2Ugc3VwcG9ydCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gem9uZSBzdGF0ZSB0cmFja2luZyBvciBiaW8gc3VibWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwNTI4ZTY4ZTk3MDJlMWZmZGVmMWQyM2YyMWYyNzI0N2Q3ZTY3NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjQ2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXG5pbmRleCAxOTZiY2NmMjdmNThkLi44MGE0ZTJiY2MzZjM0IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTkwMSw4ICYjNDM7OTAxLDExIEBAIHZvaWQgc3VibWl0X2Jpb19ub2FjY3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcbiBcdGNhc2UgUkVRX09QX1pPTkVfUkVTRVQ6XG4gXHRjYXNlIFJFUV9PUF9aT05FX0ZJTklTSDpcbi1cdFx0LyogWm9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgcmVxdWlyZSBzZXF1ZW50aWFsIHpvbmVzLiAqL1xuLVx0XHRpZiAoIWJkZXZfem9uZV9pc19zZXEoYmlvLVx1MDAzZWJpX2JkZXYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcikpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogWm9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgcmVxdWlyZSBzZXF1ZW50aWFsIHpvbmVzIHRoYXQgYXJlXG4mIzQzO1x0XHQgKiBub3Qgb2ZmbGluZSBub3IgcmVhZC1vbmx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWJkZXZfY2hlY2tfem9uZV9tZ210KGJkZXYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcikpXG4gXHRcdFx0Z290byBlbmRfaW87XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVF9BTEw6XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xuaW5kZXggYTVhZmI4NDJiZjM1ZS4uZjE3MDY5MzA5YWM5ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstem9uZWQuY1xuQEAgLTM5LDYgJiM0MzszOSwxMDMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHpvbmVfY29uZF9uYW1lW10gPSB7XG4gfTtcbiAjdW5kZWYgWk9ORV9DT05EX05BTUVcbiBcbiYjNDM7LypcbiYjNDM7ICogSW50ZXJuYWwgYW5kIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgZW51bSBibGtfem9uZV9jb25kIHZhbHVlcyBmb3Igem9uZVxuJiM0MzsgKiBjb25kaXRpb25zLiBBbGwgdGhlc2UgdmFsdWVzIGZpdCBpbnRvIDQtYml0cywgYWxsb3dpbmcgdXNpbmcgdGhlIGhpZ2ggb3JkZXJcbiYjNDM7ICogYml0cyBhcyB0aGUgem9uZSB0eXBlLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBibGtfenN0YXRlIHtcbiYjNDM7XHRCTEtfWlNUQVRFX05PVF9XUFx0PSAweDAwLFxuJiM0MztcdEJMS19aU1RBVEVfRU1QVFlcdD0gMHgwMSxcbiYjNDM7XHRCTEtfWlNUQVRFX0lNUF9PUEVOXHQ9IDB4MDIsXG4mIzQzO1x0QkxLX1pTVEFURV9FWFBfT1BFTlx0PSAweDAzLFxuJiM0MztcdEJMS19aU1RBVEVfQ0xPU0VEXHQ9IDB4MDQsXG4mIzQzO1x0QkxLX1pTVEFURV9SRUFET05MWVx0PSAweDA1LFxuJiM0MztcdEJMS19aU1RBVEVfRlVMTFx0XHQ9IDB4MDYsXG4mIzQzO1x0QkxLX1pTVEFURV9PRkZMSU5FXHQ9IDB4MDcsXG4mIzQzO1x0QkxLX1pTVEFURV9BQ1RJVkVcdD0gMHgwOCxcbiYjNDM7XG4mIzQzO1x0QkxLX1pTVEFURV9DT05EX01BU0tcdD0gMHgwRixcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVudGlvbmFsIHpvbmUuICovXG4mIzQzO1x0QkxLX1pGTEFHX0NPTlZcdFx0PSAweDgwLFxuJiM0MztcdEJMS19aU1RBVEVfRkxBR1NfTUFTS1x0PSB+QkxLX1pTVEFURV9DT05EX01BU0ssXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGVudW0gYmxrX3pzdGF0ZSBjb25kaXRpb25zIGludG8gZW51bVxuJiM0MzsgKiBibGtfem9uZV9jb25kaXRpb24gdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHU4IGJsa196c3RhdGUyemNvbmRbXSA9IHtcbiYjNDM7XHRbQkxLX1pTVEFURV9OT1RfV1BdXHQ9IEJMS19aT05FX0NPTkRfTk9UX1dQLFxuJiM0MztcdFtCTEtfWlNUQVRFX0VNUFRZXVx0PSBCTEtfWk9ORV9DT05EX0VNUFRZLFxuJiM0MztcdFtCTEtfWlNUQVRFX0lNUF9PUEVOXVx0PSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOLFxuJiM0MztcdFtCTEtfWlNUQVRFX0VYUF9PUEVOXVx0PSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOLFxuJiM0MztcdFtCTEtfWlNUQVRFX0NMT1NFRF1cdD0gQkxLX1pPTkVfQ09ORF9DTE9TRUQsXG4mIzQzO1x0W0JMS19aU1RBVEVfUkVBRE9OTFldXHQ9IEJMS19aT05FX0NPTkRfUkVBRE9OTFksXG4mIzQzO1x0W0JMS19aU1RBVEVfRlVMTF1cdD0gQkxLX1pPTkVfQ09ORF9GVUxMLFxuJiM0MztcdFtCTEtfWlNUQVRFX09GRkxJTkVdXHQ9IEJMS19aT05FX0NPTkRfT0ZGTElORSxcbiYjNDM7XHRbQkxLX1pTVEFURV9BQ1RJVkVdXHQ9IEJMS19aT05FX0NPTkRfQUNUSVZFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIGJsa196b25lX2NvbmQgYmxrX3pzdGF0ZV90b196b25lX2NvbmQoZW51bSBibGtfenN0YXRlIHpzKVxuJiM0Mzt7XG4mIzQzO1x0dTggaWR4ID0genMgXHUwMDI2IEJMS19aU1RBVEVfQ09ORF9NQVNLO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IEFSUkFZX1NJWkUoYmxrX3pzdGF0ZTJ6Y29uZCkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBibGtfenN0YXRlMnpjb25kW2lkeF07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIExvb2t1cCB0YWJsZSBhbmQgaGVscGVyIHRvIGNvbnZlcnQgYW4gZW51bSBibGtfem9uZV9jb25kaXRpb24gaW50byBhbiBlbnVtXG4mIzQzOyAqIGJsa196c3RhdGUgY29uZGl0aW9uIHZhbHVlLiBUbyBrZWVwIHRoZSBsb29rdXAgdGFibGUgc21hbGwsIHRoZVxuJiM0MzsgKiBCTEtfWk9ORV9DT05EX0FDVElWRSBjb25kaXRpb24gaXMgbm90IGFkZGVkIGFuZCBoYW5kbGVkIHNlcGFyYXRlbHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdTggYmxrX3pjb25kMnpzdGF0ZVtdID0ge1xuJiM0MztcdFtCTEtfWk9ORV9DT05EX05PVF9XUF1cdFx0PSBCTEtfWlNUQVRFX05PVF9XUCxcbiYjNDM7XHRbQkxLX1pPTkVfQ09ORF9FTVBUWV1cdFx0PSBCTEtfWlNUQVRFX0VNUFRZLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX0lNUF9PUEVOXVx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbiYjNDM7XHRbQkxLX1pPTkVfQ09ORF9FWFBfT1BFTl1cdD0gQkxLX1pTVEFURV9BQ1RJVkUsXG4mIzQzO1x0W0JMS19aT05FX0NPTkRfQ0xPU0VEXVx0XHQ9IEJMS19aU1RBVEVfQUNUSVZFLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX1JFQURPTkxZXVx0PSBCTEtfWlNUQVRFX1JFQURPTkxZLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX0ZVTExdXHRcdD0gQkxLX1pTVEFURV9GVUxMLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX09GRkxJTkVdXHRcdD0gQkxLX1pTVEFURV9PRkZMSU5FLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIGJsa196c3RhdGUgYmxrX3pvbmVfY29uZF90b196c3RhdGUoZW51bSBibGtfem9uZV9jb25kIGNvbmQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY29uZCA9PSBCTEtfWk9ORV9DT05EX0FDVElWRSlcbiYjNDM7XHRcdHJldHVybiBCTEtfWlNUQVRFX0FDVElWRTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShjb25kIFx1MDAzZT0gQVJSQVlfU0laRShibGtfemNvbmQyenN0YXRlKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJsa196Y29uZDJ6c3RhdGVbY29uZF07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbWJpbmUgYW4gZW51bSBibGtfem9uZV9jb25kaXRpb24gYW5kIHpvbmUgZmxhZ3MgaW50byBhIHpvbmVzX3N0YXRlIGFycmF5XG4mIzQzOyAqIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGJsa196c3RhdGVfc2V0KHU4ICp6b25lc19zdGF0ZSwgdW5zaWduZWQgaW50IHpubyxcbiYjNDM7XHRcdFx0XHQgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kLCB1OCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICh6b25lc19zdGF0ZSlcbiYjNDM7XHRcdHpvbmVzX3N0YXRlW3pub10gPSBmbGFncyB8IGJsa196b25lX2NvbmRfdG9fenN0YXRlKGNvbmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHU4IGJsa196c3RhdGVfZmxhZ3MoZW51bSBibGtfenN0YXRlIHpzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpzIFx1MDAyNiBCTEtfWlNUQVRFX0ZMQUdTX01BU0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfenN0YXRlX2lzX2NvbnYoZW51bSBibGtfenN0YXRlIHpzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJsa196c3RhdGVfZmxhZ3MoenMpIFx1MDAyNiBCTEtfWkZMQUdfQ09OVjtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFBlci16b25lIHdyaXRlIHBsdWcuXG4gICogQG5vZGU6IGhsaXN0X25vZGUgc3RydWN0dXJlIGZvciBtYW5hZ2luZyB0aGUgcGx1ZyB1c2luZyBhIGhhc2ggdGFibGUuXG5AQCAtMTM1LDU1ICYjNDM7MjMyLDY0IEBAIGNvbnN0IGNoYXIgKmJsa196b25lX2NvbmRfc3RyKGVudW0gYmxrX3pvbmVfY29uZCB6b25lX2NvbmQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX2NvbmRfc3RyKTtcbiBcbi1zdGF0aWMgdm9pZCBibGtfem9uZV9zZXRfY29uZCh1OCAqem9uZXNfY29uZCwgdW5zaWduZWQgaW50IHpubyxcbi1cdFx0XHQgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiYjNDM7c3RhdGljIHZvaWQgZGlza196b25lX3NldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG4mIzQzO1x0XHRcdCAgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiB7XG4tXHRpZiAoIXpvbmVzX2NvbmQpXG4tXHRcdHJldHVybjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XG4mIzQzO1x0dTggKnpvbmVzX3N0YXRlO1xuIFxuLVx0c3dpdGNoIChjb25kKSB7XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuLVx0XHR6b25lc19jb25kW3pub10gPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcbi1cdFx0cmV0dXJuO1xuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX05PVF9XUDpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9GVUxMOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4tXHRkZWZhdWx0OlxuLVx0XHR6b25lc19jb25kW3pub10gPSBjb25kO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfc3RhdGUpO1xuJiM0MztcdGlmIChsaWtlbHkoem9uZXNfc3RhdGUgXHUwMDI2XHUwMDI2IHpubyBcdTAwM2MgZGlzay1cdTAwM2Vucl96b25lcykpXG4mIzQzO1x0XHRibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLFxuJiM0MztcdFx0XHQgICAgICAgYmxrX3pzdGF0ZV9mbGFncyh6b25lc19zdGF0ZVt6bm9dKSk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuLVx0XHRcdCAgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiYjNDM7c3RhdGljIGlubGluZSB1OCBkaXNrX3pvbmVfZ2V0X3N0YXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXG4ge1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xuJiM0MztcdHU4ICp6b25lc19zdGF0ZSwgenM7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfY29uZCk7XG4tXHRpZiAoem9uZXNfY29uZCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBjb25kaXRpb24gb2YgYSBjb252ZW50aW9uYWwsIHJlYWRvbmx5IGFuZCBvZmZsaW5lIHpvbmVzXG4tXHRcdCAqIG5ldmVyIGNoYW5nZXMsIHNvIGRvIG5vdGhpbmcgaWYgdGhlIHRhcmdldCB6b25lIGlzIGluIG9uZSBvZlxuLVx0XHQgKiB0aGVzZSBjb25kaXRpb25zLlxuLVx0XHQgKi9cbi1cdFx0c3dpdGNoICh6b25lc19jb25kW3pub10pIHtcbi1cdFx0Y2FzZSBCTEtfWk9ORV9DT05EX05PVF9XUDpcbi1cdFx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxuLVx0XHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRibGtfem9uZV9zZXRfY29uZCh6b25lc19jb25kLCB6bm8sIGNvbmQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4mIzQzO1x0aWYgKGxpa2VseSh6b25lc19zdGF0ZSBcdTAwMjZcdTAwMjYgem5vIFx1MDAzYyBkaXNrLVx1MDAzZW5yX3pvbmVzKSlcbiYjNDM7XHRcdHpzID0gem9uZXNfc3RhdGVbem5vXTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR6cyA9IDA7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBibGtfem9uZV9jb25kIGRpc2tfem9uZV9nZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2VjdG9yX3Qgc2VjdG9yKVxuJiM0Mzt7XG4mIzQzO1x0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0MztkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbmQgPT0gQkxLX1pPTkVfQ09ORF9SRUFET05MWSB8fFxuJiM0MztcdFx0Y29uZCA9PSBCTEtfWk9ORV9DT05EX09GRkxJTkU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHNlY3Rvcl90IHNlY3RvcilcbiYjNDM7e1xuJiM0MztcdGVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gZGlza196b25lX2dldF9jb25kKGRpc2ssIHNlY3Rvcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkaXNrX3pvbmVfaXNfc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXG4mIzQzO3tcbiYjNDM7XHR1OCB6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoZGlzaywgc2VjdG9yKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICFibGtfenN0YXRlX2lzX2NvbnYoenMpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTUsMjMgJiM0MzszMDEsMzYgQEAgc3RhdGljIHZvaWQgZGlza196b25lX3NldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG4gICovXG4gYm9vbCBiZGV2X3pvbmVfaXNfc2VxKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcilcbiB7XG4tXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtXHUwMDNlYmRfZGlzaztcbi1cdHVuc2lnbmVkIGludCB6bm8gPSBkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKTtcbi1cdGJvb2wgaXNfc2VxID0gZmFsc2U7XG4tXHR1OCAqem9uZXNfY29uZDtcbiYjNDM7XHRpZiAoIWJkZXZfaXNfem9uZWQoYmRldikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXNrX3pvbmVfaXNfc2VxKGJkZXYtXHUwMDNlYmRfZGlzaywgc2VjdG9yKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBiZGV2X2NoZWNrX3pvbmVfbWdtdCAtIGNoZWNrIGlmIGEgc2VjdG9yIGJlbG9uZ3MgdG8gYSB2YWxpZCBzZXF1ZW50aWFsIHpvbmVcbiYjNDM7ICogQGJkZXY6ICAgICAgIGJsb2NrIGRldmljZSB0byBjaGVja1xuJiM0MzsgKiBAc2VjdG9yOiAgICAgc2VjdG9yIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBpZiBAc2VjdG9yIG9uIEBiZGV2IGlzIGNvbnRhaW5lZCBpbiBhIHNlcXVlbnRpYWwgd3JpdGUgcmVxdWlyZWQgem9uZVxuJiM0MzsgKiB0aGF0IGlzIG5vdCBvZmZsaW5lIG5vciByZWFkLW9ubHkuXG4mIzQzOyAqL1xuJiM0Mztib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcilcbiYjNDM7e1xuJiM0MztcdGVudW0gYmxrX3pvbmVfY29uZCBjb25kO1xuJiM0MztcdHU4IHpzO1xuIFxuIFx0aWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfY29uZCk7XG4tXHRpZiAoem9uZXNfY29uZCBcdTAwMjZcdTAwMjYgem5vIFx1MDAzYyBkaXNrLVx1MDAzZW5yX3pvbmVzKVxuLVx0XHRpc19zZXEgPSB6b25lc19jb25kW3pub10gIT0gQkxLX1pPTkVfQ09ORF9OT1RfV1A7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHR6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi1cdTAwM2ViZF9kaXNrLCBzZWN0b3IpO1xuJiM0MztcdGlmIChibGtfenN0YXRlX2lzX2NvbnYoenMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIGlzX3NlcTtcbiYjNDM7XHRjb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xuJiM0MztcdHJldHVybiAhZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShjb25kKTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7XG4gXG4gLypcbiAgKiBab25lIHJlcG9ydCBhcmd1bWVudHMgZm9yIGJsb2NrIGRldmljZSBkcml2ZXJzIHJlcG9ydF96b25lcyBvcGVyYXRpb24uXG5AQCAtNTAwLDEyICYjNDM7NjE5LDE3IEBAIHN0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19mdWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIHp3cGx1Zy1cdTAwM2V3cF9vZmZzZXQgXHUwMDNlPSBkaXNrLVx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRpc2tfem9uZV9jb25kX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnLVx1MDAzZWNvbmQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiB7XG4gXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGxnO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdHU4ICp6b25lc19jb25kO1xuJiM0MztcdHU4ICp6b25lc19zdGF0ZTtcbiBcdHVuc2lnbmVkIGludCBpZHggPVxuIFx0XHRoYXNoXzMyKHp3cGx1Zy1cdTAwM2V6b25lX25vLCBkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfYml0cyk7XG4gXG5AQCAtNTI0LDE1ICYjNDM7NjQ4LDE2IEBAIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfY29uZCBhcnJheVxuJiM0MztcdCAqIFNldCB0aGUgem9uZSBjb25kaXRpb246IGlmIHdlIGRvIG5vdCB5ZXQgaGF2ZSBhIHpvbmVzX3N0YXRlIGFycmF5XG4gXHQgKiBhdHRhY2hlZCB0byB0aGUgZGlzaywgdGhlbiB0aGlzIGlzIGEgem9uZSB3cml0ZSBwbHVnIGluc2VydCBmcm9tIHRoZVxuIFx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcbiBcdCAqIG5lY2Vzc2FyaWxseSBpbiB0aGUgYWN0aXZlIGNvbmRpdGlvbi5cbiBcdCAqL1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVx1MDAzZXpvbmVzX2NvbmQsXG4mIzQzO1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay1cdTAwM2V6b25lc19zdGF0ZSxcbiBcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaykpO1xuLVx0aWYgKHpvbmVzX2NvbmQpXG4tXHRcdHp3cGx1Zy1cdTAwM2Vjb25kID0gem9uZXNfY29uZFt6d3BsdWctXHUwMDNlem9uZV9ub107XG4mIzQzO1x0aWYgKHpvbmVzX3N0YXRlKVxuJiM0MztcdFx0endwbHVnLVx1MDAzZWNvbmQgPVxuJiM0MztcdFx0XHRibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6b25lc19zdGF0ZVt6d3BsdWctXHUwMDNlem9uZV9ub10pO1xuIFx0ZWxzZVxuIFx0XHR6d3BsdWctXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfQUNUSVZFO1xuIFxuQEAgLTU3NCw2ICYjNDM7Njk5LDI2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa196b25lX3dwbHVnICpkaXNrX2dldF96b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIGRpc2tfZ2V0X2hhc2hlZF96b25lX3dwbHVnKGRpc2ssIHNlY3Rvcik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4mIzQzO1x0XHRcdFx0ICAgICB2b2lkICgqYWN0b3IpKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqLFxuJiM0MztcdFx0XHRcdFx0XHQgICB2b2lkICopLFxuJiM0MztcdFx0XHRcdCAgICAgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywgXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldLFxuJiM0MztcdFx0XHRcdFx0IG5vZGUpXG4mIzQzO1x0XHRcdGFjdG9yKHp3cGx1ZywgZGF0YSk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuIHtcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnID1cbkBAIC01OTIsOSAmIzQzOzczNyw5IEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIFx0V0FSTl9PTl9PTkNFKCFiaW9fbGlzdF9lbXB0eShcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XG4tXHRibGtfem9uZV9zZXRfY29uZChyY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay1cdTAwM2V6b25lc19jb25kLFxuJiM0MztcdGJsa196c3RhdGVfc2V0KHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVx1MDAzZXpvbmVzX3N0YXRlLFxuIFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKSksXG4tXHRcdFx0ICB6d3BsdWctXHUwMDNlem9uZV9ubywgendwbHVnLVx1MDAzZWNvbmQpO1xuJiM0MztcdFx0ICAgICAgIHp3cGx1Zy1cdTAwM2V6b25lX25vLCB6d3BsdWctXHUwMDNlY29uZCwgMCk7XG4gXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2endwbHVnLVx1MDAzZW5vZGUpO1xuIFx0YXRvbWljX2RlYyhcdTAwMjZkaXNrLVx1MDAzZW5yX3pvbmVfd3BsdWdzKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTtcbkBAIC02MDgsNiAmIzQzOzc1Myw1MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19wdXRfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiBcdFx0ZGlza19mcmVlX3pvbmVfd3BsdWcoendwbHVnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGJpbyAqYmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXHUwMDNlZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XG4mIzQzO1x0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XG4mIzQzO1x0YmlvX2lvX2Vycm9yKGJpbyk7XG4mIzQzO1x0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuJiM0MztcdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xuJiM0MztcdGJsa19xdWV1ZV9leGl0KHEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBYm9ydCAoZmFpbCkgYWxsIHBsdWdnZWQgQklPcyBvZiBhIHpvbmUgd3JpdGUgcGx1Zy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gendwbHVnLVx1MDAzZWRpc2s7XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpb19saXN0X2VtcHR5KFx1MDAyNnp3cGx1Zy1cdTAwM2ViaW9fbGlzdCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IHpvbmUgJXU6IEFib3J0aW5nIHBsdWdnZWQgQklPc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHp3cGx1Zy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgendwbHVnLVx1MDAzZXpvbmVfbm8pO1xuJiM0MztcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNnp3cGx1Zy1cdTAwM2ViaW9fbGlzdCkpKVxuJiM0MztcdFx0YmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHp3cGx1ZywgYmlvKTtcbiYjNDM7XG4mIzQzO1x0endwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJMS19aT05FX1dQTFVHX1BMVUdHRUQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZVxuJiM0MztcdCAqIHRoZSB6b25lIHdyaXRlIHBsdWcgZnJvbSB0aGUgd29yayBsaXN0IGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2VcbiYjNDM7XHQgKiB0b29rIHdoZW4gdGhlIHpvbmUgd3JpdGUgcGx1ZyB3YXMgYWRkZWQgdG8gdGhhdCBsaXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChibGtfcXVldWVfem9uZWRfcWQxX3dyaXRlcyhkaXNrLVx1MDAzZXF1ZXVlKSkge1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbiYjNDM7XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZ6d3BsdWctXHUwMDNlZW50cnkpKSB7XG4mIzQzO1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlblxuICAqIHRoZSB6b25lIHdyaXRlIHBsdWcgd2FzIGFkZGVkIHRvIHRoZSBoYXNoIHRhYmxlLiBUaGUgem9uZSB3cml0ZSBwbHVnIHdpbGwgYmVcbkBAIC02MjUsNiAmIzQzOzgxNywxMiBAQCBzdGF0aWMgdm9pZCBkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2NoZWNrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiB7XG4mIzQzO1x0aWYgKGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1ZykpIHtcbiYjNDM7XHRcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuJiM0MztcdFx0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghKHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX1pPTkVfV1BMVUdfREVBRCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC03MDgsNTMgJiM0Mzs5MDYsNiBAQCBzdGF0aWMgc3RydWN0IGJsa196b25lX3dwbHVnICpkaXNrX2dldF9vcl9hbGxvY196b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIHp3cGx1ZztcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcihzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zyxcbi1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiaW8gKmJpbylcbi17XG4tXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHp3cGx1Zy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuLVxuLVx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XG4tXHRiaW9faW9fZXJyb3IoYmlvKTtcbi1cdGRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTtcbi1cdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xuLVx0YmxrX3F1ZXVlX2V4aXQocSk7XG4tfVxuLVxuLS8qXG4tICogQWJvcnQgKGZhaWwpIGFsbCBwbHVnZ2VkIEJJT3Mgb2YgYSB6b25lIHdyaXRlIHBsdWcuXG4tICovXG4tc3RhdGljIHZvaWQgZGlza196b25lX3dwbHVnX2Fib3J0KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuLXtcbi1cdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gendwbHVnLVx1MDAzZWRpc2s7XG4tXHRzdHJ1Y3QgYmlvICpiaW87XG4tXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrKTtcbi1cbi1cdGlmIChiaW9fbGlzdF9lbXB0eShcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcXG5cJiMzNDssXG4tXHRcdFx0ICAgIHp3cGx1Zy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgendwbHVnLVx1MDAzZXpvbmVfbm8pO1xuLVx0d2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSkpXG4tXHRcdGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcih6d3BsdWcsIGJpbyk7XG4tXG4tXHR6d3BsdWctXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QkxLX1pPTkVfV1BMVUdfUExVR0dFRDtcbi1cbi1cdC8qXG4tXHQgKiBJZiB3ZSBhcmUgdXNpbmcgdGhlIHBlciBkaXNrIHpvbmUgd3JpdGUgcGx1Z3Mgd29ya2VyIHRocmVhZCwgcmVtb3ZlXG4tXHQgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlXG4tXHQgKiB0b29rIHdoZW4gdGhlIHpvbmUgd3JpdGUgcGx1ZyB3YXMgYWRkZWQgdG8gdGhhdCBsaXN0LlxuLVx0ICovXG4tXHRpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay1cdTAwM2VxdWV1ZSkpIHtcbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnp3cGx1Zy1cdTAwM2VlbnRyeSkpIHtcbi1cdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnp3cGx1Zy1cdTAwM2VlbnRyeSk7XG4tXHRcdFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuLVx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBVcGRhdGUgYSB6b25lIHdyaXRlIHBsdWcgY29uZGl0aW9uIGJhc2VkIG9uIHRoZSB3cml0ZSBwb2ludGVyIG9mZnNldC5cbiAgKi9cbkBAIC03ODUsOCAmIzQzOzkzNiwxMCBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgem9uZSB3cml0ZSBwb2ludGVyIGFuZCBhYm9ydCBhbGwgcGx1Z2dlZCBCSU9zLiAqL1xuIFx0endwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJMS19aT05FX1dQTFVHX05FRURfV1BfVVBEQVRFO1xuLVx0endwbHVnLVx1MDAzZXdwX29mZnNldCA9IHdwX29mZnNldDtcbi1cdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xuJiM0MztcdGlmICghZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkge1xuJiM0MztcdFx0endwbHVnLVx1MDAzZXdwX29mZnNldCA9IHdwX29mZnNldDtcbiYjNDM7XHRcdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xuJiM0MztcdH1cbiBcbiBcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuIFx0aWYgKCF6d3BsdWctXHUwMDNld3Bfb2Zmc2V0IHx8IGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXG5AQCAtODE2LDggJiM0Mzs5NjksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGJsa196b25lX3dwX29mZnNldChzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBibGtfem9uZSAqem9uZSlcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXG4ge1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XG4gXHR1bnNpZ25lZCBpbnQgd3Bfb2Zmc2V0ID0gYmxrX3pvbmVfd3Bfb2Zmc2V0KHpvbmUpO1xuQEAgLTgyOSw2ICYjNDM7OTgyLDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRpZiAoendwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURSlcbiBcdFx0XHRkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChkaXNrLCB6d3BsdWcsIHdwX29mZnNldCk7XG4mIzQzO1x0XHRpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLVx1MDAzZWNvbmQpKSB7XG4mIzQzO1x0XHRcdHp3cGx1Zy1cdTAwM2Vjb25kID0gem9uZS1cdTAwM2Vjb25kO1xuJiM0MztcdFx0XHRkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7XG4mIzQzO1x0XHR9XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuIFx0fVxuQEAgLTg3MSw3ICYjNDM7MTAyOCw3IEBAIGludCBkaXNrX3JlcG9ydF96b25lKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsXG4gXHR9XG4gXG4gXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKVxuLVx0XHRkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XG4mIzQzO1x0XHRkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZShkaXNrLCB6b25lKTtcbiBcbiBcdGlmIChhcmdzIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZWNiKVxuIFx0XHRyZXR1cm4gYXJncy1cdTAwM2VjYih6b25lLCBpZHgsIGFyZ3MtXHUwMDNlZGF0YSk7XG5AQCAtOTQwLDcgJiM0MzsxMDk3LDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcbiBcdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGJkZXZfem9uZV9zZWN0b3JzKGJkZXYpO1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4mIzQzO1x0dTggKnpvbmVzX3N0YXRlLCB6cztcbiBcbiBcdGlmICghYmRldl9pc196b25lZChiZGV2KSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTk1NSwxMiAmIzQzOzExMTIsMTggQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcbiBcdFx0cmV0dXJuIGJsa2Rldl9yZXBvcnRfem9uZV9mYWxsYmFjayhiZGV2LCBzZWN0b3IsIHpvbmUpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2ggfHwgIXpvbmVzX2NvbmQpIHtcbiYjNDM7XHR6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX3N0YXRlKTtcbiYjNDM7XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfc3RhdGUpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTtcbiBcdH1cbi1cdHpvbmUtXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildO1xuJiM0MztcbiYjNDM7XHR6cyA9IHpvbmVzX3N0YXRlW2Rpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpXTtcbiYjNDM7XHR6b25lLVx1MDAzZWNvbmQgPSBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XG4mIzQzO1x0aWYgKGJsa196c3RhdGVfaXNfY29udih6cykpXG4mIzQzO1x0XHR6b25lLVx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR6b25lLVx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0em9uZS1cdTAwM2VzdGFydCA9IHNlY3RvcjtcbkBAIC05NzAsOCAmIzQzOzExMzMsNyBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuIFx0ICogSWYgdGhpcyBpcyBhIGNvbnZlbnRpb25hbCB6b25lLCB3ZSBkbyBub3QgaGF2ZSBhIHpvbmUgd3JpdGUgcGx1ZyBhbmRcbiBcdCAqIGNhbiByZXBvcnQgdGhlIHpvbmUgaW1tZWRpYXRlbHkuXG4gXHQgKi9cbi1cdGlmICh6b25lLVx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9OT1RfV1ApIHtcbi1cdFx0em9uZS1cdTAwM2V0eXBlID0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw7XG4mIzQzO1x0aWYgKHpvbmUtXHUwMDNldHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkge1xuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gem9uZV9zZWN0b3JzO1xuIFx0XHR6b25lLVx1MDAzZXdwID0gVUxMT05HX01BWDtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtOTgyLDE0ICYjNDM7MTE0NCwxMiBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuIFx0ICogb2ZmbGluZSwgb25seSBzZXQgdGhlIHpvbmUgd3JpdGUgcG9pbnRlciB0byBhbiBpbnZhbGlkIHZhbHVlIGFuZFxuIFx0ICogcmVwb3J0IHRoZSB6b25lLlxuIFx0ICovXG4tXHR6b25lLVx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTtcbiBcdGlmIChkaXNrX3pvbmVfaXNfbGFzdChkaXNrLCB6b25lKSlcbiBcdFx0em9uZS1cdTAwM2VjYXBhY2l0eSA9IGRpc2stXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5O1xuIFx0ZWxzZVxuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gZGlzay1cdTAwM2V6b25lX2NhcGFjaXR5O1xuIFxuLVx0aWYgKHpvbmUtXHUwMDNlY29uZCA9PSBCTEtfWk9ORV9DT05EX1JFQURPTkxZIHx8XG4tXHQgICAgem9uZS1cdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfT0ZGTElORSkge1xuJiM0MztcdGlmIChkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHpvbmUtXHUwMDNlY29uZCkpIHtcbiBcdFx0em9uZS1cdTAwM2V3cCA9IFVMTE9OR19NQVg7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTExMDgsMzQgJiM0MzsxMjY4LDMyIEBAIHN0YXRpYyB2b2lkIGJsa196b25lX3Jlc2V0X2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfcmVzZXRfd3Aoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KHp3cGx1Zy1cdTAwM2VkaXNrLCB6d3BsdWcsIDApO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9hbGxfYmlvX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2s7XG4tXHRzZWN0b3JfdCBjYXBhY2l0eSA9IGdldF9jYXBhY2l0eShkaXNrKTtcbi1cdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHNlY3Rvcl90IHNlY3Rvcjtcbi1cdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpKSB7XG4tXHRcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh6d3BsdWcsXG4tXHRcdFx0XHRcdFx0IFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaFtpXSxcbi1cdFx0XHRcdFx0XHQgbm9kZSkge1xuLVx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0XHRcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KGRpc2ssIHp3cGx1ZywgMCk7XG4tXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fVxuJiM0MztcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuJiM0MztcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkaXNrLVx1MDAzZW5yX3pvbmVfd3BsdWdzKSlcbiYjNDM7XHRcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhkaXNrLCBkaXNrX3pvbmVfd3BsdWdfcmVzZXRfd3AsIE5VTEwpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSBjYWNoZWQgem9uZSBjb25kaXRpb25zLiAqL1xuLVx0Zm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgXHUwMDNjIGNhcGFjaXR5O1xuLVx0ICAgICBzZWN0b3IgJiM0Mzs9IGJkZXZfem9uZV9zZWN0b3JzKGJpby1cdTAwM2ViaV9iZGV2KSlcbiYjNDM7XHRmb3IgKHNlY3RvciA9IDA7IHNlY3RvciBcdTAwM2MgZ2V0X2NhcGFjaXR5KGRpc2spO1xuJiM0MztcdCAgICAgc2VjdG9yICYjNDM7PSBiZGV2X3pvbmVfc2VjdG9ycyhiaW8tXHUwMDNlYmlfYmRldikpIHtcbiYjNDM7XHRcdGlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpIHx8XG4mIzQzO1x0XHQgICAgZGlza196b25lX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoZGlzaywgc2VjdG9yKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGRpc2tfem9uZV9zZXRfY29uZChkaXNrLCBzZWN0b3IsIEJMS19aT05FX0NPTkRfRU1QVFkpO1xuJiM0MztcdH1cbiBcdGNsZWFyX2JpdChHRF9aT05FX0FQUEVORF9VU0VELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG5AQCAtMTM4MSwxMSAmIzQzOzE1MzksMTIgQEAgc3RhdGljIGJvb2wgYmxrX3pvbmVfd3BsdWdfcHJlcGFyZV9iaW8oc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG4tXHQgKiBDaGVjayB0aGF0IHRoZSB1c2VyIGlzIG5vdCBhdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgZnVsbCB6b25lLlxuLVx0ICogV2Uga25vdyBzdWNoIEJJTyB3aWxsIGZhaWwsIGFuZCB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93IG91clxuLVx0ICogd3JpdGUgcG9pbnRlciBvZmZzZXQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHpvbmUuXG4mIzQzO1x0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seVxuJiM0MztcdCAqIG9yIG9mZmxpbmUgem9uZS4gV2Uga25vdyBzdWNoIEJJT3Mgd2lsbCBmYWlsLCBzbyB0aGVyZSBpcyBubyBwb2ludFxuJiM0MztcdCAqIGluIGlzc3VpbmcgdGhlbS5cbiBcdCAqL1xuLVx0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXG4mIzQzO1x0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykgfHxcbiYjNDM7XHQgICAgZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuQEAgLTE0NDIsNyAmIzQzOzE2MDEsNyBAQCBzdGF0aWMgYm9vbCBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgbnJfc2VncylcbiBcdH1cbiBcbiBcdC8qIENvbnZlbnRpb25hbCB6b25lcyBkbyBub3QgbmVlZCB3cml0ZSBwbHVnZ2luZy4gKi9cbi1cdGlmICghYmRldl96b25lX2lzX3NlcShiaW8tXHUwMDNlYmlfYmRldiwgc2VjdG9yKSkge1xuJiM0MztcdGlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpKSB7XG4gXHRcdC8qIFpvbmUgYXBwZW5kIHRvIGNvbnZlbnRpb25hbCB6b25lcyBpcyBub3QgYWxsb3dlZC4gKi9cbiBcdFx0aWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuIFx0XHRcdGJpb19pb19lcnJvcihiaW8pO1xuQEAgLTE4NTQsMTIgJiM0MzsyMDEzLDIwIEBAIHN0YXRpYyBpbnQgZGlza196b25lX3dwbHVnc193b3JrZXIodm9pZCAqZGF0YSlcbiBcbiB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZkaXNrLVx1MDAzZW5yX3pvbmVfd3BsdWdzLCAwKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdCk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXJfYmlvX2RvbmUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRElWX1JPVU5EX1VQX1VMTChnZXRfY2FwYWNpdHkoZGlzayksIGxpbS1cdTAwM2VjaHVua19zZWN0b3JzKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEZvciB0aGUgc2l6ZSBvZiBhIGRpc2sgem9uZSB3cml0ZSBwbHVnIGhhc2ggdGFibGUsIHVzZSB0aGUgc2l6ZSBvZiB0aGVcbiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmRcbkBAIC0xODY5LDEzICYjNDM7MjAzNiwyMSBAQCB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiAjZGVmaW5lIEJMS19aT05FX1dQTFVHX01BWF9IQVNIX0JJVFNcdFx0OVxuICNkZWZpbmUgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkVcdDEyOFxuIFxuLXN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZSlcbiYjNDM7c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbi1cdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl96b25lcyA9IGRpc2tfZ2V0X25yX3pvbmVzKGRpc2spO1xuJiM0MztcdHVuc2lnbmVkIGludCBwb29sX3NpemUsIGk7XG4gXHRpbnQgcmV0ID0gLUVOT01FTTtcbiBcbi1cdGF0b21pY19zZXQoXHUwMDI2ZGlzay1cdTAwM2Vucl96b25lX3dwbHVncywgMCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXG4mIzQzO1x0ICogem9uZXMsIHVzZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwb29sX3NpemUgPSBtYXgobGltLVx1MDAzZW1heF9vcGVuX3pvbmVzLCBsaW0tXHUwMDNlbWF4X2FjdGl2ZV96b25lcyk7XG4mIzQzO1x0aWYgKCFwb29sX3NpemUpXG4mIzQzO1x0XHRwb29sX3NpemUgPSBtaW4oQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsIG5yX3pvbmVzKTtcbiYjNDM7XG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfYml0cyA9XG4gXHRcdG1pbihpbG9nMihwb29sX3NpemUpICYjNDM7IDEsIEJMS19aT05FX1dQTFVHX01BWF9IQVNIX0JJVFMpO1xuIFxuQEAgLTE4OTMsMjEgJiM0MzsyMDY4LDYgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4tXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbi1cdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcbi1cdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuLVx0ICovXG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4tXHRcdFx0YWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3p3cGx1Z3NcJiMzNDssXG4tXHRcdFx0XHRcdFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSxcbi1cdFx0XHRcdFx0cG9vbF9zaXplLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4tXHRcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbi1cdFx0XHRnb3RvIGRlc3Ryb3lfcG9vbDtcbi1cdH1cbi1cbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID1cbiBcdFx0a3RocmVhZF9jcmVhdGUoZGlza196b25lX3dwbHVnc193b3JrZXIsIGRpc2ssXG4gXHRcdFx0ICAgICAgIFwmIzM0OyVzX3p3cGx1Z3Nfd29ya2VyXCYjMzQ7LCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG5AQCAtMTkxOCw4ICYjNDM7MjA3OCwxOCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHR9XG4gXHR3YWtlX3VwX3Byb2Nlc3MoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuIFxuJiM0MztcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPVxuJiM0MztcdFx0YWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3p3cGx1Z3NcJiMzNDssXG4mIzQzO1x0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxuJiM0MztcdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuJiM0MztcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbiYjNDM7XHRcdGdvdG8gc3RvcF93b3JrZXI7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO3N0b3Bfd29ya2VyOlxuJiM0MztcdGt0aHJlYWRfc3RvcChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4mIzQzO1x0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIgPSBOVUxMO1xuIGRlc3Ryb3lfcG9vbDpcbiBcdG1lbXBvb2xfZGVzdHJveShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpO1xuIFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gTlVMTDtcbkBAIC0xOTYzLDE5ICYjNDM7MjEzMywxOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxuJiM0MztzdGF0aWMgdm9pZCBkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggKnpvbmVzX3N0YXRlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay1cdTAwM2V6b25lc19jb25kLCB6b25lc19jb25kLFxuJiM0MztcdHpvbmVzX3N0YXRlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihkaXNrLVx1MDAzZXpvbmVzX3N0YXRlLCB6b25lc19zdGF0ZSxcbiBcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaykpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuIFxuLVx0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfY29uZCk7XG4mIzQzO1x0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4mIzQzO3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikge1xuIFx0XHRrdGhyZWFkX3N0b3AoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuQEAgLTE5ODMsMzAgJiM0MzsyMTUzLDIyIEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdH1cbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3QpKTtcbiBcbi1cdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKVxuLVx0XHRkcmFpbl93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbiYjNDM7XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuJiM0MztcdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4mIzQzO1x0fVxuIFxuIFx0ZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7XG4gXG4tXHRkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIE5VTEwpO1xuJiM0MztcdGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KGRpc2ssIE5VTEwpO1xuIFx0ZGlzay1cdTAwM2V6b25lX2NhcGFjaXR5ID0gMDtcbiBcdGRpc2stXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5ID0gMDtcbiBcdGRpc2stXHUwMDNlbnJfem9uZXMgPSAwO1xuIH1cbiBcbi12b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi17XG4tXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSkge1xuLVx0XHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4tXHR9XG4tXG4tXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XG4tfVxuLVxuIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xuIFx0c3RydWN0IGdlbmRpc2tcdCpkaXNrO1xuLVx0dThcdFx0KnpvbmVzX2NvbmQ7XG4mIzQzO1x0dThcdFx0KnpvbmVzX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50XHRucl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0bnJfY29udl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0em9uZV9jYXBhY2l0eTtcbkBAIC0yMDE0LDQ5ICYjNDM7MjE3NiwyNiBAQCBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbiBcdHNlY3Rvcl90XHRzZWN0b3I7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7c3RhdGljIGludCBkaXNrX2luaXRfcmV2YWxpZGF0ZV9hcmdzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRcdFx0c3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiB7XG4tXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbi1cdHVuc2lnbmVkIGludCBwb29sX3NpemU7XG4tXHRpbnQgcmV0ID0gMDtcbi1cbiBcdGFyZ3MtXHUwMDNlZGlzayA9IGRpc2s7XG4tXHRhcmdzLVx1MDAzZW5yX3pvbmVzID1cbi1cdFx0RElWX1JPVU5EX1VQX1VMTChnZXRfY2FwYWNpdHkoZGlzayksIGxpbS1cdTAwM2VjaHVua19zZWN0b3JzKTtcbiYjNDM7XHRhcmdzLVx1MDAzZW5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XG4gXG4gXHQvKiBDYWNoZWQgem9uZSBjb25kaXRpb25zOiAxIGJ5dGUgcGVyIHpvbmUgKi9cbi1cdGFyZ3MtXHUwMDNlem9uZXNfY29uZCA9IGt6YWxsb2MoYXJncy1cdTAwM2Vucl96b25lcywgR0ZQX05PSU8pO1xuLVx0aWYgKCFhcmdzLVx1MDAzZXpvbmVzX2NvbmQpXG4mIzQzO1x0YXJncy1cdTAwM2V6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy1cdTAwM2Vucl96b25lcywgR0ZQX05PSU8pO1xuJiM0MztcdGlmICghYXJncy1cdTAwM2V6b25lc19zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAoIWRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQvKlxuLVx0ICogSWYgdGhlIGRldmljZSBoYXMgbm8gbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gYW5kIGFjdGl2ZVxuLVx0ICogem9uZXMsIHVzZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRS5cbi1cdCAqL1xuLVx0cG9vbF9zaXplID0gbWF4KGxpbS1cdTAwM2VtYXhfb3Blbl96b25lcywgbGltLVx1MDAzZW1heF9hY3RpdmVfem9uZXMpO1xuLVx0aWYgKCFwb29sX3NpemUpXG4tXHRcdHBvb2xfc2l6ZSA9XG4tXHRcdFx0bWluKEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLCBhcmdzLVx1MDAzZW5yX3pvbmVzKTtcbi1cbi1cdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XG4tXHRcdHJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzaywgcG9vbF9zaXplKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRrZnJlZShhcmdzLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLypcbi0gKiBVcGRhdGUgdGhlIGRpc2sgem9uZSByZXNvdXJjZXMgaW5mb3JtYXRpb24gYW5kIGRldmljZSBxdWV1ZSBsaW1pdHMuXG4tICogVGhlIGRpc2sgcXVldWUgaXMgZnJvemVuIHdoZW4gdGhpcyBpcyBleGVjdXRlZC5cbiYjNDM7ICogUmV2YWxpZGF0ZSBhbmQgdXBkYXRlIHRoZSBkaXNrIHpvbmUgcmVzb3VyY2VzIGluZm9ybWF0aW9uIGFuZCBkZXZpY2UgcXVldWVcbiYjNDM7ICogbGltaXRzLlxuICAqL1xuLXN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxuJiM0MztzdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXHUwMDNlcXVldWU7XG4gXHR1bnNpZ25lZCBpbnQgbnJfc2VxX3pvbmVzO1xuQEAgLTIwNjQsMjMgJiM0MzsyMjAzLDI4IEBAIHN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCByZXQgPSAwO1xuIFxuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbnRpcmUgZGlzayBjYXBhY2l0eSBoYXMgYmVlbiBjaGVja2VkLiAqL1xuJiM0MztcdGlmIChhcmdzLVx1MDAzZXNlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IE1pc3Npbmcgem9uZXMgZnJvbSBzZWN0b3IgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGFyZ3MtXHUwMDNlc2VjdG9yKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFyZ3MtXHUwMDNlbnJfY29udl96b25lcyBcdTAwM2U9IGFyZ3MtXHUwMDNlbnJfem9uZXMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy1cdTAwM2Vucl9jb252X3pvbmVzLCBhcmdzLVx1MDAzZW5yX3pvbmVzKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuIFxuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IGFyZ3MtXHUwMDNlbnJfem9uZXM7XG4tXHRpZiAoYXJncy1cdTAwM2Vucl9jb252X3pvbmVzIFx1MDAzZT0gZGlzay1cdTAwM2Vucl96b25lcykge1xuLVx0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcbi1cdFx0cHJfd2FybihcJiMzNDslczogSW52YWxpZCBudW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzICV1IC8gJXVcXG5cJiMzNDssXG4tXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGFyZ3MtXHUwMDNlbnJfY29udl96b25lcywgZGlzay1cdTAwM2Vucl96b25lcyk7XG4tXHRcdHJldCA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gdW5mcmVlemU7XG4tXHR9XG4tXG4gXHRkaXNrLVx1MDAzZXpvbmVfY2FwYWNpdHkgPSBhcmdzLVx1MDAzZXpvbmVfY2FwYWNpdHk7XG4gXHRkaXNrLVx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eSA9IGFyZ3MtXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5O1xuLVx0ZGlza19zZXRfem9uZXNfY29uZF9hcnJheShkaXNrLCBhcmdzLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0YXJncy1cdTAwM2V6b25lc19jb25kID0gTlVMTDtcbiYjNDM7XHRkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBhcmdzLVx1MDAzZXpvbmVzX3N0YXRlKTtcbiYjNDM7XHRhcmdzLVx1MDAzZXpvbmVzX3N0YXRlID0gTlVMTDtcbiBcbiBcdC8qXG4gXHQgKiBTb21lIGRldmljZXMgY2FuIGFkdmVydGlzZSB6b25lIHJlc291cmNlIGxpbWl0cyB0aGF0IGFyZSBsYXJnZXIgdGhhblxuQEAgLTIxMjAsNDggJiM0MzsyMjY0LDU5IEBAIHN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gY29tbWl0OlxuIFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbiBcbi11bmZyZWV6ZTpcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZChzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4tXHRcdFx0XHQgICAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiYjNDM7c3RhdGljIHZvaWQgZGlza19kcm9wX3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsIHZvaWQgKmRhdGEpXG4ge1xuLVx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQgPSB6b25lLVx1MDAzZWNvbmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdC8qIENoZWNrIHRoYXQgdGhlIHpvbmUgY29uZGl0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSB0eXBlLiAqL1xuLVx0c3dpdGNoIChjb25kKSB7XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxuLVx0XHRpZiAoem9uZS1cdTAwM2V0eXBlICE9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMKVxuLVx0XHRcdGdvdG8gaW52YWxpZF9jb25kaXRpb247XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9GVUxMOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4tXHRcdGlmICh6b25lLVx1MDAzZXR5cGUgIT0gQkxLX1pPTkVfVFlQRV9TRVFXUklURV9SRVEpXG4tXHRcdFx0Z290byBpbnZhbGlkX2NvbmRpdGlvbjtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JVhcXG5cJiMzNDssXG4tXHRcdFx0YXJncy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgY29uZCk7XG4tXHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0ZGlza196b25lX3dwbHVnX2Fib3J0KHp3cGx1Zyk7XG4mIzQzO1x0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfY2FwYWNpdHkoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbiYjNDM7XHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBsaW0tXHUwMDNlY2h1bmtfc2VjdG9ycztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfem9uZXMgPSBkaXNrX2dldF9ucl96b25lcyhkaXNrKTtcbiYjNDM7XHRpbnQgcmV0ID0gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFnZXRfY2FwYWNpdHkoZGlzaykpXG4mIzQzO1x0XHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0XG4mIzQzO1x0ICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDslczogSW52YWxpZCBub24gcG93ZXIgb2YgdHdvIHpvbmUgc2l6ZSAoJWxsdSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lX3NlY3RvcnMpO1xuJiM0MztcdFx0Z290byBkcm9wX2FsbF96d3BsdWdzO1xuIFx0fVxuIFxuLVx0YmxrX3pvbmVfc2V0X2NvbmQoYXJncy1cdTAwM2V6b25lc19jb25kLCBpZHgsIGNvbmQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2sgaWYgdGhlIGNhcGFjaXR5IGhhcyBjaGFuZ2VkLiBJZiBpdCBkaWQsIGFzc3VtZSB0aGF0IHRoZSBkZXZpY2VcbiYjNDM7XHQgKiB3YXMgcmVmb3JtYXR0ZWQgYW5kIHRoYXQgYWxsIHNlcXVlbnRpYWwgem9uZXMgYXJlIG5vdyBlbXB0eS4gU28gZHJvcFxuJiM0MztcdCAqIGFsbCB6b25lIHdyaXRlIHBsdWcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlbnJfem9uZXMgXHUwMDI2XHUwMDI2IGRpc2stXHUwMDNlbnJfem9uZXMgIT0gbnJfem9uZXMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IE51bWJlciBvZiB6b25lcyBjaGFuZ2VkICgldSAtXHUwMDNlICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGRpc2stXHUwMDNlbnJfem9uZXMsIG5yX3pvbmVzKTtcbiYjNDM7XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4taW52YWxpZF9jb25kaXRpb246XG4tXHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JXggZm9yIHR5cGUgMHgleFxcblwmIzM0Oyxcbi1cdFx0YXJncy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgY29uZCwgem9uZS1cdTAwM2V0eXBlKTtcbiYjNDM7ZHJvcF9hbGxfendwbHVnczpcbiYjNDM7XHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MoZGlzaywgZGlza19kcm9wX3pvbmVfd3BsdWcsIE5VTEwpO1xuIFxuLVx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9jb252X3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuQEAgLTIxNjksMTIgJiM0MzsyMzI0LDI2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFyZ3MtXHUwMDNlZGlzaztcbiBcbiYjNDM7XHQvKiBDaGVjayB0aGUgem9uZSBjb25kaXRpb24uICovXG4mIzQzO1x0c3dpdGNoICh6b25lLVx1MDAzZWNvbmQpIHtcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIGNvbnYuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lLVx1MDAzZWNvbmQsIHpvbmUtXHUwMDNlc3RhcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh6b25lLVx1MDAzZWNhcGFjaXR5ICE9IHpvbmUtXHUwMDNlbGVuKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IEludmFsaWQgY29udmVudGlvbmFsIHpvbmUgY2FwYWNpdHlcXG5cJiMzNDssXG4gXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbiYjNDM7XHRibGtfenN0YXRlX3NldChhcmdzLVx1MDAzZXpvbmVzX3N0YXRlLCBpZHgsIHpvbmUtXHUwMDNlY29uZCwgQkxLX1pGTEFHX0NPTlYpO1xuJiM0MztcbiBcdGlmIChkaXNrX3pvbmVfaXNfbGFzdChkaXNrLCB6b25lKSlcbiBcdFx0YXJncy1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSB6b25lLVx1MDAzZWNhcGFjaXR5O1xuIFxuQEAgLTIxOTAsNiAmIzQzOzIzNTksMjQgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9zZXFfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZztcbiBcdHVuc2lnbmVkIGludCB3cF9vZmZzZXQ7XG4gXG4mIzQzO1x0LyogQ2hlY2sgdGhlIHpvbmUgY29uZGl0aW9uLiAqL1xuJiM0MztcdHN3aXRjaCAoem9uZS1cdTAwM2Vjb25kKSB7XG4mIzQzO1x0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfRlVMTDpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHJfd2FybihcJiMzNDslczogSW52YWxpZCBzZXEuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lLVx1MDAzZWNvbmQsIHpvbmUtXHUwMDNlc3RhcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRibGtfenN0YXRlX3NldChhcmdzLVx1MDAzZXpvbmVzX3N0YXRlLCBpZHgsIHpvbmUtXHUwMDNlY29uZCwgMCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJlbWVtYmVyIHRoZSBjYXBhY2l0eSBvZiB0aGUgZmlyc3Qgc2VxdWVudGlhbCB6b25lIGFuZCBjaGVja1xuIFx0ICogaWYgaXQgaXMgY29uc3RhbnQgZm9yIGFsbCB6b25lcywgaWdub3JpbmcgdGhlIGxhc3Qgem9uZSBhcyBpdCBjYW4gYmVcbkBAIC0yMjE0LDcgJiM0MzsyNDAxLDcgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9zZXFfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3cF9vZmZzZXQgPSBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XG4mIzQzO1x0d3Bfb2Zmc2V0ID0gZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoZGlzaywgem9uZSk7XG4gXHRpZiAoIXdwX29mZnNldCB8fCB3cF9vZmZzZXQgXHUwMDNlPSB6b25lLVx1MDAzZWNhcGFjaXR5KVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMjcyLDExICYjNDM7MjQ1OSw2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0LyogQ2hlY2sgem9uZSBjb25kaXRpb24gKi9cbi1cdHJldCA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZCh6b25lLCBpZHgsIGFyZ3MpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdC8qIENoZWNrIHpvbmUgdHlwZSAqL1xuIFx0c3dpdGNoICh6b25lLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw6XG5AQCAtMjMxMywzOSAmIzQzOzI0OTUsMzcgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiAgKi9cbiBpbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXHUwMDNlcXVldWU7XG4tXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBxLVx1MDAzZWxpbWl0cy5jaHVua19zZWN0b3JzO1xuLVx0c2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7XG4gXHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIGFyZ3MgPSB7IH07XG4tXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3MsIG5vaW9fZmxhZztcbiBcdHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgcmVwX2FyZ3MgPSB7XG4gXHRcdC5jYiA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY2IsXG4gXHRcdC5kYXRhID0gXHUwMDI2YXJncyxcbiBcdH07XG4tXHRpbnQgcmV0ID0gLUVOT01FTTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbm9pb19mbGFnO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQocSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWJsa19xdWV1ZV9pc196b25lZChkaXNrLVx1MDAzZXF1ZXVlKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuLVx0aWYgKCFjYXBhY2l0eSlcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0cmV0ID0gZGlza19yZXZhbGlkYXRlX2NhcGFjaXR5KGRpc2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Lypcbi1cdCAqIENoZWNrcyB0aGF0IHRoZSBkZXZpY2UgZHJpdmVyIGluZGljYXRlZCBhIHZhbGlkIHpvbmUgc2l6ZSBhbmQgdGhhdFxuLVx0ICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuXG4mIzQzO1x0ICogQWxsb2NhdGUgem9uZSByZXNvdXJjZXMgaWYgdGhleSBhcmUgbmVlZGVkIGFuZCB3ZSBoYXZlIG5vdCBkb25lXG4mIzQzO1x0ICogc28geWV0LCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmV2YWxpZGF0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gcmVwb3J0XG4mIzQzO1x0ICogem9uZXMuIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzXG4mIzQzO1x0ICogaWYgR0ZQX05PSU8gd2FzIHNwZWNpZmllZC5cbiBcdCAqL1xuLVx0aWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkge1xuLVx0XHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxcblwmIzM0Oyxcbi1cdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgem9uZV9zZWN0b3JzKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4mIzQzO1x0aWYgKGRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSBcdTAwMjZcdTAwMjYgIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCkge1xuJiM0MztcdFx0cmV0ID0gZGlza19hbGxvY196b25lX3Jlc291cmNlcyhkaXNrKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogRW5zdXJlIHRoYXQgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIGRvbmUgYXMgaWZcbi1cdCAqIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuXG4tXHQgKi9cbi1cdG5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuLVx0cmV0ID0gZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFx1MDAyNmFyZ3MpO1xuJiM0MztcdHJldCA9IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3MoZGlzaywgXHUwMDI2YXJncyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNTksMzIgJiM0MzsyNTM5LDE4IEBAIGludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYz0gMClcbi1cdFx0Z290byBmcmVlX3Jlc291cmNlcztcbiYjNDM7XHRcdGdvdG8gZnJlZV9hcmdzO1xuIFxuLVx0Lypcbi1cdCAqIElmIHpvbmVzIHdoZXJlIHJlcG9ydGVkLCBtYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHlcbi1cdCAqIGhhcyBiZWVuIGNoZWNrZWQuXG4tXHQgKi9cbi1cdGlmIChhcmdzLnNlY3RvciAhPSBjYXBhY2l0eSkge1xuLVx0XHRwcl93YXJuKFwmIzM0OyVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcXG5cJiMzNDssXG4tXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGFyZ3Muc2VjdG9yKTtcbi1cdFx0cmV0ID0gLUVOT0RFVjtcbi1cdFx0Z290byBmcmVlX3Jlc291cmNlcztcbi1cdH1cbi1cbi1cdHJldCA9IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFx1MDAyNmFyZ3MpO1xuJiM0MztcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhkaXNrLCBcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gZnJlZV9yZXNvdXJjZXM7XG4mIzQzO1x0XHRnb3RvIGZyZWVfYXJncztcbiBcbiBcdHJldHVybiAwO1xuIFxuLWZyZWVfcmVzb3VyY2VzOlxuJiM0MztmcmVlX2FyZ3M6XG4gXHRwcl93YXJuKFwmIzM0OyVzOiBmYWlsZWQgdG8gcmV2YWxpZGF0ZSB6b25lc1xcblwmIzM0OywgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuIFxuLVx0a2ZyZWUoYXJncy56b25lc19jb25kKTtcbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4mIzQzO1x0a2ZyZWUoYXJncy56b25lc19zdGF0ZSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0yNDM1LDggJiM0MzsyNjAxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfaXNzdWVfemVyb291dCk7XG4gXG4gI2lmZGVmIENPTkZJR19CTEtfREVCVUdfRlNcbiBzdGF0aWMgdm9pZCBxdWV1ZV96b25lX3dwbHVnX3Nob3coc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4tXHRcdFx0XHQgIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiYjNDM7XHRcdFx0XHQgIHZvaWQgKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCBzZXFfZmlsZSAqbSA9IGRhdGE7XG4gXHR1bnNpZ25lZCBpbnQgendwX3dwX29mZnNldCwgendwX2ZsYWdzO1xuIFx0dW5zaWduZWQgaW50IHp3cF96b25lX25vLCB6d3BfcmVmO1xuIFx0dW5zaWduZWQgaW50IHp3cF9iaW9fbGlzdF9zaXplO1xuQEAgLTI0NjEsMTkgJiM0MzsyNjI4LDggQEAgc3RhdGljIHZvaWQgcXVldWVfem9uZV93cGx1Z19zaG93KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLFxuIGludCBxdWV1ZV96b25lX3dwbHVnc19zaG93KHZvaWQgKmRhdGEsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRhdGE7XG4tXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHEtXHUwMDNlZGlzaztcbi1cdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuLVx0dW5zaWduZWQgaW50IGk7XG4tXG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbi1cdFx0cmV0dXJuIDA7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspXG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh6d3BsdWcsIFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaFtpXSxcbi1cdFx0XHRcdFx0IG5vZGUpXG4tXHRcdFx0cXVldWVfem9uZV93cGx1Z19zaG93KHp3cGx1ZywgbSk7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MocS1cdTAwM2VkaXNrLCBxdWV1ZV96b25lX3dwbHVnX3Nob3csIG0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDUwYWJmZDkzMjg4NjEuLmNmZThkNDE4NWUyNWEgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC01NzcsNiAmIzQzOzU3Nyw3IEBAIGludCBibGtkZXZfcmVwb3J0X3pvbmVzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gXHRcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiYjNDM7Ym9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpO1xuICNlbHNlIC8qIENPTkZJR19CTEtfREVWX1pPTkVEICovXG4gc3RhdGljIGlubGluZSB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG5AQCAtNjE5LDYgJiM0Mzs2MjAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4mIzQzO1x0XHRcdFx0XHRzZWN0b3JfdCBzZWN0b3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cbiBcbiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2X2FsbG9jKHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCBlOGNlMGNhYmYzOTJjLi4zNGE2NDA3N2JhMDJjIDEwMDY0NFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZ2VuaGQuY1xuQEAgLTQ0Nyw2ICYjNDM7NDQ3LDEzIEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRiZGV2X3NldF9mbGFnKGRpc2stXHUwMDNlcGFydDAsIEJEX0hBU19TVUJNSVRfQklPKTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGRvIG5vdCBzdXBwb3J0IHBhcnRpdGlvbnMgd2l0aCB6b25lZCBibG9jayBkZXZpY2VzLCBzbyBkbyBub3QgdHJ5XG4mIzQzO1x0ICogdG8gc2NhbiB0aGUgcGFydGl0aW9ucyB0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYmxrX3F1ZXVlX2lzX3pvbmVkKGRpc2stXHUwMDNlcXVldWUpKVxuJiM0MztcdFx0ZGlzay1cdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9OT19QQVJUO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB0aGUgZHJpdmVyIHByb3ZpZGVzIGFuIGV4cGxpY2l0IG1ham9yIG51bWJlciBpdCBhbHNvIG11c3QgcHJvdmlkZVxuIFx0ICogdGhlIG51bWJlciBvZiBtaW5vcnMgbnVtYmVycyBzdXBwb3J0ZWQsIGFuZCB0aG9zZSB3aWxsIGJlIHVzZWQgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggMjBjYjhlZDdkOTg3YS4uNGZhMDA3NTc1MjdkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIHN0cnVjdCBnZW5kaXNrIHtcbiBcdHVuc2lnbmVkIGludFx0XHRucl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHR6b25lX2NhcGFjaXR5O1xuIFx0dW5zaWduZWQgaW50XHRcdGxhc3Rfem9uZV9jYXBhY2l0eTtcbi1cdHU4IF9fcmN1XHRcdCp6b25lc19jb25kO1xuJiM0MztcdHU4IF9fcmN1XHRcdCp6b25lc19zdGF0ZTtcbiBcdHVuc2lnbmVkIGludFx0XHR6b25lX3dwbHVnc19oYXNoX2JpdHM7XG4gXHRhdG9taWNfdFx0XHRucl96b25lX3dwbHVncztcbiBcdHNwaW5sb2NrX3RcdFx0em9uZV93cGx1Z3NfaGFzaF9sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9jaGVja196b25lX21nbXQmIzM0OywKICAgICYjMzQ7YmxrZGV2X2dldF96b25lX2luZm8mIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgem9uZSBjb25kaXRpb25zIGFyZSB0cmFja2VkIGluIHRoZSBibG9jayBsYXllciwgaW50cm9kdWNpbmcgYGVudW0gYmxrX3pzdGF0ZWAgYW5kIGEgbmV3IGB6b25lc19zdGF0ZWAgYXJyYXkgdG8gcmVwbGFjZSBgem9uZXNfY29uZGAuIEl0IHVwZGF0ZXMgem9uZSBtYW5hZ2VtZW50IGNoZWNrcyAoYGJkZXZfY2hlY2tfem9uZV9tZ210YCksIHpvbmUgcmV2YWxpZGF0aW9uIChgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2ApLCBhbmQgem9uZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwgKGBibGtkZXZfZ2V0X3pvbmVfaW5mb2ApLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2FkZF9kaXNrYCB0byBkaXNhYmxlIHBhcnRpdGlvbnMgb24gem9uZWQgYmxvY2sgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBibG9jayBsYXllciYjMzk7cyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDUyOGU2OGU5NzAyZTFmZmRlZjFkMjNmMjFmMjcyNDdkN2U2NzRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxOTo0NjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDE5NmJjY2YyN2Y1OGQuLjgwYTRlMmJjYzNmMzQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtOTAxLDggJiM0Mzs5MDEsMTEgQEAgdm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pCiAJY2FzZSBSRVFfT1BfWk9ORV9DTE9TRToKIAljYXNlIFJFUV9PUF9aT05FX1JFU0VUOgogCWNhc2UgUkVRX09QX1pPTkVfRklOSVNIOgotCQkvKiBab25lIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyByZXF1aXJlIHNlcXVlbnRpYWwgem9uZXMuICovCi0JCWlmICghYmRldl96b25lX2lzX3NlcShiaW8tJmd0O2JpX2JkZXYsIGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IpKQomIzQzOwkJLyoKJiM0MzsJCSAqIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcyB0aGF0IGFyZQomIzQzOwkJICogbm90IG9mZmxpbmUgbm9yIHJlYWQtb25seS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFiZGV2X2NoZWNrX3pvbmVfbWdtdChiZGV2LCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yKSkKIAkJCWdvdG8gZW5kX2lvOwogCQlicmVhazsKIAljYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpvbmVkLmMKaW5kZXggYTVhZmI4NDJiZjM1ZS4uZjE3MDY5MzA5YWM5ZCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXpvbmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmMKQEAgLTM5LDYgJiM0MzszOSwxMDMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHpvbmVfY29uZF9uYW1lW10gPSB7CiB9OwogI3VuZGVmIFpPTkVfQ09ORF9OQU1FCiAKJiM0MzsvKgomIzQzOyAqIEludGVybmFsIGFuZCBjb21wYWN0IHJlcHJlc2VudGF0aW9uIG9mIGVudW0gYmxrX3pvbmVfY29uZCB2YWx1ZXMgZm9yIHpvbmUKJiM0MzsgKiBjb25kaXRpb25zLiBBbGwgdGhlc2UgdmFsdWVzIGZpdCBpbnRvIDQtYml0cywgYWxsb3dpbmcgdXNpbmcgdGhlIGhpZ2ggb3JkZXIKJiM0MzsgKiBiaXRzIGFzIHRoZSB6b25lIHR5cGUuCiYjNDM7ICovCiYjNDM7ZW51bSBibGtfenN0YXRlIHsKJiM0MzsJQkxLX1pTVEFURV9OT1RfV1AJPSAweDAwLAomIzQzOwlCTEtfWlNUQVRFX0VNUFRZCT0gMHgwMSwKJiM0MzsJQkxLX1pTVEFURV9JTVBfT1BFTgk9IDB4MDIsCiYjNDM7CUJMS19aU1RBVEVfRVhQX09QRU4JPSAweDAzLAomIzQzOwlCTEtfWlNUQVRFX0NMT1NFRAk9IDB4MDQsCiYjNDM7CUJMS19aU1RBVEVfUkVBRE9OTFkJPSAweDA1LAomIzQzOwlCTEtfWlNUQVRFX0ZVTEwJCT0gMHgwNiwKJiM0MzsJQkxLX1pTVEFURV9PRkZMSU5FCT0gMHgwNywKJiM0MzsJQkxLX1pTVEFURV9BQ1RJVkUJPSAweDA4LAomIzQzOwomIzQzOwlCTEtfWlNUQVRFX0NPTkRfTUFTSwk9IDB4MEYsCiYjNDM7CiYjNDM7CS8qIENvbnZlbnRpb25hbCB6b25lLiAqLwomIzQzOwlCTEtfWkZMQUdfQ09OVgkJPSAweDgwLAomIzQzOwlCTEtfWlNUQVRFX0ZMQUdTX01BU0sJPSB+QkxLX1pTVEFURV9DT05EX01BU0ssCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIExvb2t1cCB0YWJsZSBhbmQgaGVscGVyIHRvIGNvbnZlcnQgZW51bSBibGtfenN0YXRlIGNvbmRpdGlvbnMgaW50byBlbnVtCiYjNDM7ICogYmxrX3pvbmVfY29uZGl0aW9uIHZhbHVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdTggYmxrX3pzdGF0ZTJ6Y29uZFtdID0gewomIzQzOwlbQkxLX1pTVEFURV9OT1RfV1BdCT0gQkxLX1pPTkVfQ09ORF9OT1RfV1AsCiYjNDM7CVtCTEtfWlNUQVRFX0VNUFRZXQk9IEJMS19aT05FX0NPTkRfRU1QVFksCiYjNDM7CVtCTEtfWlNUQVRFX0lNUF9PUEVOXQk9IEJMS19aT05FX0NPTkRfSU1QX09QRU4sCiYjNDM7CVtCTEtfWlNUQVRFX0VYUF9PUEVOXQk9IEJMS19aT05FX0NPTkRfRVhQX09QRU4sCiYjNDM7CVtCTEtfWlNUQVRFX0NMT1NFRF0JPSBCTEtfWk9ORV9DT05EX0NMT1NFRCwKJiM0MzsJW0JMS19aU1RBVEVfUkVBRE9OTFldCT0gQkxLX1pPTkVfQ09ORF9SRUFET05MWSwKJiM0MzsJW0JMS19aU1RBVEVfRlVMTF0JPSBCTEtfWk9ORV9DT05EX0ZVTEwsCiYjNDM7CVtCTEtfWlNUQVRFX09GRkxJTkVdCT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FLAomIzQzOwlbQkxLX1pTVEFURV9BQ1RJVkVdCT0gQkxLX1pPTkVfQ09ORF9BQ1RJVkUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGVudW0gYmxrX3pvbmVfY29uZCBibGtfenN0YXRlX3RvX3pvbmVfY29uZChlbnVtIGJsa196c3RhdGUgenMpCiYjNDM7ewomIzQzOwl1OCBpZHggPSB6cyAmYW1wOyBCTEtfWlNUQVRFX0NPTkRfTUFTSzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShpZHggJmd0Oz0gQVJSQVlfU0laRShibGtfenN0YXRlMnpjb25kKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJsa196c3RhdGUyemNvbmRbaWR4XTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGludG8gYW4gZW51bQomIzQzOyAqIGJsa196c3RhdGUgY29uZGl0aW9uIHZhbHVlLiBUbyBrZWVwIHRoZSBsb29rdXAgdGFibGUgc21hbGwsIHRoZQomIzQzOyAqIEJMS19aT05FX0NPTkRfQUNUSVZFIGNvbmRpdGlvbiBpcyBub3QgYWRkZWQgYW5kIGhhbmRsZWQgc2VwYXJhdGVseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdTggYmxrX3pjb25kMnpzdGF0ZVtdID0gewomIzQzOwlbQkxLX1pPTkVfQ09ORF9OT1RfV1BdCQk9IEJMS19aU1RBVEVfTk9UX1dQLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9FTVBUWV0JCT0gQkxLX1pTVEFURV9FTVBUWSwKJiM0MzsJW0JMS19aT05FX0NPTkRfSU1QX09QRU5dCT0gQkxLX1pTVEFURV9BQ1RJVkUsCiYjNDM7CVtCTEtfWk9ORV9DT05EX0VYUF9PUEVOXQk9IEJMS19aU1RBVEVfQUNUSVZFLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9DTE9TRURdCQk9IEJMS19aU1RBVEVfQUNUSVZFLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9SRUFET05MWV0JPSBCTEtfWlNUQVRFX1JFQURPTkxZLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9GVUxMXQkJPSBCTEtfWlNUQVRFX0ZVTEwsCiYjNDM7CVtCTEtfWk9ORV9DT05EX09GRkxJTkVdCQk9IEJMS19aU1RBVEVfT0ZGTElORSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgZW51bSBibGtfenN0YXRlIGJsa196b25lX2NvbmRfdG9fenN0YXRlKGVudW0gYmxrX3pvbmVfY29uZCBjb25kKQomIzQzO3sKJiM0MzsJaWYgKGNvbmQgPT0gQkxLX1pPTkVfQ09ORF9BQ1RJVkUpCiYjNDM7CQlyZXR1cm4gQkxLX1pTVEFURV9BQ1RJVkU7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoY29uZCAmZ3Q7PSBBUlJBWV9TSVpFKGJsa196Y29uZDJ6c3RhdGUpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gYmxrX3pjb25kMnpzdGF0ZVtjb25kXTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb21iaW5lIGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGFuZCB6b25lIGZsYWdzIGludG8gYSB6b25lc19zdGF0ZSBhcnJheQomIzQzOyAqIGVudHJ5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfenN0YXRlX3NldCh1OCAqem9uZXNfc3RhdGUsIHVuc2lnbmVkIGludCB6bm8sCiYjNDM7CQkJCSAgZW51bSBibGtfem9uZV9jb25kIGNvbmQsIHU4IGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHpvbmVzX3N0YXRlKQomIzQzOwkJem9uZXNfc3RhdGVbem5vXSA9IGZsYWdzIHwgYmxrX3pvbmVfY29uZF90b196c3RhdGUoY29uZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTggYmxrX3pzdGF0ZV9mbGFncyhlbnVtIGJsa196c3RhdGUgenMpCiYjNDM7ewomIzQzOwlyZXR1cm4genMgJmFtcDsgQkxLX1pTVEFURV9GTEFHU19NQVNLOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmxrX3pzdGF0ZV9pc19jb252KGVudW0gYmxrX3pzdGF0ZSB6cykKJiM0Mzt7CiYjNDM7CXJldHVybiBibGtfenN0YXRlX2ZsYWdzKHpzKSAmYW1wOyBCTEtfWkZMQUdfQ09OVjsKJiM0Mzt9CiYjNDM7CiAvKgogICogUGVyLXpvbmUgd3JpdGUgcGx1Zy4KICAqIEBub2RlOiBobGlzdF9ub2RlIHN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgdGhlIHBsdWcgdXNpbmcgYSBoYXNoIHRhYmxlLgpAQCAtMTM1LDU1ICYjNDM7MjMyLDY0IEBAIGNvbnN0IGNoYXIgKmJsa196b25lX2NvbmRfc3RyKGVudW0gYmxrX3pvbmVfY29uZCB6b25lX2NvbmQpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9jb25kX3N0cik7CiAKLXN0YXRpYyB2b2lkIGJsa196b25lX3NldF9jb25kKHU4ICp6b25lc19jb25kLCB1bnNpZ25lZCBpbnQgem5vLAotCQkJICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpCiYjNDM7c3RhdGljIHZvaWQgZGlza196b25lX3NldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsCiYjNDM7CQkJICAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKQogewotCWlmICghem9uZXNfY29uZCkKLQkJcmV0dXJuOwomIzQzOwl1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7CiYjNDM7CXU4ICp6b25lc19zdGF0ZTsKIAotCXN3aXRjaCAoY29uZCkgewotCWNhc2UgQkxLX1pPTkVfQ09ORF9JTVBfT1BFTjoKLQljYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46Ci0JY2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDoKLQkJem9uZXNfY29uZFt6bm9dID0gQkxLX1pPTkVfQ09ORF9BQ1RJVkU7Ci0JCXJldHVybjsKLQljYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOgotCWNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWToKLQljYXNlIEJMS19aT05FX0NPTkRfRlVMTDoKLQljYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORToKLQljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6Ci0JZGVmYXVsdDoKLQkJem9uZXNfY29uZFt6bm9dID0gY29uZDsKLQkJcmV0dXJuOwotCX0KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLSZndDt6b25lc19zdGF0ZSk7CiYjNDM7CWlmIChsaWtlbHkoem9uZXNfc3RhdGUgJmFtcDsmYW1wOyB6bm8gJmx0OyBkaXNrLSZndDtucl96b25lcykpCiYjNDM7CQlibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLAomIzQzOwkJCSAgICAgICBibGtfenN0YXRlX2ZsYWdzKHpvbmVzX3N0YXRlW3pub10pKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLAotCQkJICAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKQomIzQzO3N0YXRpYyBpbmxpbmUgdTggZGlza196b25lX2dldF9zdGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yKQogewotCXU4ICp6b25lc19jb25kOwomIzQzOwl1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7CiYjNDM7CXU4ICp6b25lc19zdGF0ZSwgenM7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jem9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLSZndDt6b25lc19jb25kKTsKLQlpZiAoem9uZXNfY29uZCkgewotCQl1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7Ci0KLQkJLyoKLQkJICogVGhlIGNvbmRpdGlvbiBvZiBhIGNvbnZlbnRpb25hbCwgcmVhZG9ubHkgYW5kIG9mZmxpbmUgem9uZXMKLQkJICogbmV2ZXIgY2hhbmdlcywgc28gZG8gbm90aGluZyBpZiB0aGUgdGFyZ2V0IHpvbmUgaXMgaW4gb25lIG9mCi0JCSAqIHRoZXNlIGNvbmRpdGlvbnMuCi0JCSAqLwotCQlzd2l0Y2ggKHpvbmVzX2NvbmRbem5vXSkgewotCQljYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOgotCQljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6Ci0JCWNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlibGtfem9uZV9zZXRfY29uZCh6b25lc19jb25kLCB6bm8sIGNvbmQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CiYjNDM7CXpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stJmd0O3pvbmVzX3N0YXRlKTsKJiM0MzsJaWYgKGxpa2VseSh6b25lc19zdGF0ZSAmYW1wOyZhbXA7IHpubyAmbHQ7IGRpc2stJmd0O25yX3pvbmVzKSkKJiM0MzsJCXpzID0gem9uZXNfc3RhdGVbem5vXTsKJiM0MzsJZWxzZQomIzQzOwkJenMgPSAwOwogCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4genM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBlbnVtIGJsa196b25lX2NvbmQgZGlza196b25lX2dldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzOwkJCQkJICAgICBzZWN0b3JfdCBzZWN0b3IpCiYjNDM7ewomIzQzOwl1OCB6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoZGlzaywgc2VjdG9yKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJsa196c3RhdGVfdG9fem9uZV9jb25kKHpzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7ZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShlbnVtIGJsa196b25lX2NvbmQgY29uZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHwKJiM0MzsJCWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZGlza196b25lX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkJICAgIHNlY3Rvcl90IHNlY3RvcikKJiM0Mzt7CiYjNDM7CWVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gZGlza196b25lX2dldF9jb25kKGRpc2ssIHNlY3Rvcik7CiYjNDM7CiYjNDM7CXJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkaXNrX3pvbmVfaXNfc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpCiYjNDM7ewomIzQzOwl1OCB6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoZGlzaywgc2VjdG9yKTsKJiM0MzsKJiM0MzsJcmV0dXJuICFibGtfenN0YXRlX2lzX2NvbnYoenMpOwogfQogCiAvKioKQEAgLTE5NSwyMyAmIzQzOzMwMSwzNiBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvciwKICAqLwogYm9vbCBiZGV2X3pvbmVfaXNfc2VxKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcikKIHsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtJmd0O2JkX2Rpc2s7Ci0JdW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpOwotCWJvb2wgaXNfc2VxID0gZmFsc2U7Ci0JdTggKnpvbmVzX2NvbmQ7CiYjNDM7CWlmICghYmRldl9pc196b25lZChiZGV2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpc2tfem9uZV9pc19zZXEoYmRldi0mZ3Q7YmRfZGlzaywgc2VjdG9yKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYmRldl9jaGVja196b25lX21nbXQgLSBjaGVjayBpZiBhIHNlY3RvciBiZWxvbmdzIHRvIGEgdmFsaWQgc2VxdWVudGlhbCB6b25lCiYjNDM7ICogQGJkZXY6ICAgICAgIGJsb2NrIGRldmljZSB0byBjaGVjawomIzQzOyAqIEBzZWN0b3I6ICAgICBzZWN0b3IgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBpZiBAc2VjdG9yIG9uIEBiZGV2IGlzIGNvbnRhaW5lZCBpbiBhIHNlcXVlbnRpYWwgd3JpdGUgcmVxdWlyZWQgem9uZQomIzQzOyAqIHRoYXQgaXMgbm90IG9mZmxpbmUgbm9yIHJlYWQtb25seS4KJiM0MzsgKi8KJiM0Mztib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcikKJiM0Mzt7CiYjNDM7CWVudW0gYmxrX3pvbmVfY29uZCBjb25kOwomIzQzOwl1OCB6czsKIAogCWlmICghYmRldl9pc196b25lZChiZGV2KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCXpvbmVzX2NvbmQgPSByY3VfZGVyZWZlcmVuY2UoZGlzay0mZ3Q7em9uZXNfY29uZCk7Ci0JaWYgKHpvbmVzX2NvbmQgJmFtcDsmYW1wOyB6bm8gJmx0OyBkaXNrLSZndDtucl96b25lcykKLQkJaXNfc2VxID0gem9uZXNfY29uZFt6bm9dICE9IEJMS19aT05FX0NPTkRfTk9UX1dQOwotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi0mZ3Q7YmRfZGlzaywgc2VjdG9yKTsKJiM0MzsJaWYgKGJsa196c3RhdGVfaXNfY29udih6cykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gaXNfc2VxOwomIzQzOwljb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpOwomIzQzOwlyZXR1cm4gIWRpc2tfem9uZV9jb25kX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoY29uZCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTsKIAogLyoKICAqIFpvbmUgcmVwb3J0IGFyZ3VtZW50cyBmb3IgYmxvY2sgZGV2aWNlIGRyaXZlcnMgcmVwb3J0X3pvbmVzIG9wZXJhdGlvbi4KQEAgLTUwMCwxMiAmIzQzOzYxOSwxNyBAQCBzdGF0aWMgYm9vbCBkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlyZXR1cm4gendwbHVnLSZndDt3cF9vZmZzZXQgJmd0Oz0gZGlzay0mZ3Q7bGFzdF96b25lX2NhcGFjaXR5OwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWctJmd0O2NvbmQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJCQkJICAgc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpCiB7CiAJc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4ICp6b25lc19jb25kOwomIzQzOwl1OCAqem9uZXNfc3RhdGU7CiAJdW5zaWduZWQgaW50IGlkeCA9CiAJCWhhc2hfMzIoendwbHVnLSZndDt6b25lX25vLCBkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoX2JpdHMpOwogCkBAIC01MjQsMTUgJiM0Mzs2NDgsMTYgQEAgc3RhdGljIGJvb2wgZGlza19pbnNlcnRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAl9CiAKIAkvKgotCSAqIFNldCB0aGUgem9uZSBjb25kaXRpb246IGlmIHdlIGRvIG5vdCB5ZXQgaGF2ZSBhIHpvbmVzX2NvbmQgYXJyYXkKJiM0MzsJICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfc3RhdGUgYXJyYXkKIAkgKiBhdHRhY2hlZCB0byB0aGUgZGlzaywgdGhlbiB0aGlzIGlzIGEgem9uZSB3cml0ZSBwbHVnIGluc2VydCBmcm9tIHRoZQogCSAqIGZpcnN0IGNhbGwgdG8gYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpLCBpbiB3aGljaCBjYXNlIHRoZSB6b25lIGlzCiAJICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLgogCSAqLwotCXpvbmVzX2NvbmQgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay0mZ3Q7em9uZXNfY29uZCwKJiM0MzsJem9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay0mZ3Q7em9uZXNfc3RhdGUsCiAJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrKSk7Ci0JaWYgKHpvbmVzX2NvbmQpCi0JCXp3cGx1Zy0mZ3Q7Y29uZCA9IHpvbmVzX2NvbmRbendwbHVnLSZndDt6b25lX25vXTsKJiM0MzsJaWYgKHpvbmVzX3N0YXRlKQomIzQzOwkJendwbHVnLSZndDtjb25kID0KJiM0MzsJCQlibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6b25lc19zdGF0ZVt6d3BsdWctJmd0O3pvbmVfbm9dKTsKIAllbHNlCiAJCXp3cGx1Zy0mZ3Q7Y29uZCA9IEJMS19aT05FX0NPTkRfQUNUSVZFOwogCkBAIC01NzQsNiAmIzQzOzY5OSwyNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqZGlza19nZXRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlyZXR1cm4gZGlza19nZXRfaGFzaGVkX3pvbmVfd3BsdWcoZGlzaywgc2VjdG9yKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKJiM0MzsJCQkJICAgICB2b2lkICgqYWN0b3IpKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqLAomIzQzOwkJCQkJCSAgIHZvaWQgKiksCiYjNDM7CQkJCSAgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh6d3BsdWcsICZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaFtpXSwKJiM0MzsJCQkJCSBub2RlKQomIzQzOwkJCWFjdG9yKHp3cGx1ZywgZGF0YSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfd3BsdWdfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCiB7CiAJc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcgPQpAQCAtNTkyLDkgJiM0Mzs3MzcsOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKIAlXQVJOX09OX09OQ0UoIWJpb19saXN0X2VtcHR5KCZhbXA7endwbHVnLSZndDtiaW9fbGlzdCkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTsKLQlibGtfem9uZV9zZXRfY29uZChyY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay0mZ3Q7em9uZXNfY29uZCwKJiM0MzsJYmxrX3pzdGF0ZV9zZXQocmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stJmd0O3pvbmVzX3N0YXRlLAogCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hfbG9jaykpLAotCQkJICB6d3BsdWctJmd0O3pvbmVfbm8sIHp3cGx1Zy0mZ3Q7Y29uZCk7CiYjNDM7CQkgICAgICAgendwbHVnLSZndDt6b25lX25vLCB6d3BsdWctJmd0O2NvbmQsIDApOwogCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3p3cGx1Zy0mZ3Q7bm9kZSk7CiAJYXRvbWljX2RlYygmYW1wO2Rpc2stJmd0O25yX3pvbmVfd3BsdWdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7CkBAIC02MDgsNiAmIzQzOzc1Myw1MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19wdXRfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKIAkJZGlza19mcmVlX3pvbmVfd3BsdWcoendwbHVnKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGJpbyAqYmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctJmd0O2Rpc2stJmd0O3F1ZXVlOwomIzQzOwomIzQzOwliaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19aT05FX1dSSVRFX1BMVUdHSU5HKTsKJiM0MzsJYmlvX2lvX2Vycm9yKGJpbyk7CiYjNDM7CWRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTsKJiM0MzsJLyogRHJvcCB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGRpc2tfem9uZV93cGx1Z19hZGRfYmlvKCkuICovCiYjNDM7CWJsa19xdWV1ZV9leGl0KHEpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gendwbHVnLSZndDtkaXNrOwomIzQzOwlzdHJ1Y3QgYmlvICpiaW87CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt6d3BsdWctJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoYmlvX2xpc3RfZW1wdHkoJmFtcDt6d3BsdWctJmd0O2Jpb19saXN0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0OyVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcbiYjMzQ7LAomIzQzOwkJCSAgICB6d3BsdWctJmd0O2Rpc2stJmd0O2Rpc2tfbmFtZSwgendwbHVnLSZndDt6b25lX25vKTsKJiM0MzsJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmFtcDt6d3BsdWctJmd0O2Jpb19saXN0KSkpCiYjNDM7CQlibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3IoendwbHVnLCBiaW8pOwomIzQzOwomIzQzOwl6d3BsdWctJmd0O2ZsYWdzICZhbXA7PSB+QkxLX1pPTkVfV1BMVUdfUExVR0dFRDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZQomIzQzOwkgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlCiYjNDM7CSAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay0mZ3Q7cXVldWUpKSB7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0X2xvY2spOwomIzQzOwkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7endwbHVnLSZndDtlbnRyeSkpIHsKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7endwbHVnLSZndDtlbnRyeSk7CiYjNDM7CQkJZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0X2xvY2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlbgogICogdGhlIHpvbmUgd3JpdGUgcGx1ZyB3YXMgYWRkZWQgdG8gdGhlIGhhc2ggdGFibGUuIFRoZSB6b25lIHdyaXRlIHBsdWcgd2lsbCBiZQpAQCAtNjI1LDYgJiM0Mzs4MTcsMTIgQEAgc3RhdGljIHZvaWQgZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKIAogc3RhdGljIGlubGluZSBib29sIGRpc2tfY2hlY2tfem9uZV93cGx1Z19kZWFkKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKQogewomIzQzOwlpZiAoZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkgewomIzQzOwkJZGlza196b25lX3dwbHVnX2Fib3J0KHp3cGx1Zyk7CiYjNDM7CQlkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCWlmICghKHp3cGx1Zy0mZ3Q7ZmxhZ3MgJmFtcDsgQkxLX1pPTkVfV1BMVUdfREVBRCkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtNzA4LDUzICYjNDM7OTA2LDYgQEAgc3RhdGljIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqZGlza19nZXRfb3JfYWxsb2Nfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlyZXR1cm4gendwbHVnOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLAotCQkJCQkgICAgICAgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gendwbHVnLSZndDtkaXNrLSZndDtxdWV1ZTsKLQotCWJpb19jbGVhcl9mbGFnKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpOwotCWJpb19pb19lcnJvcihiaW8pOwotCWRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTsKLQkvKiBEcm9wIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZGlza196b25lX3dwbHVnX2FkZF9iaW8oKS4gKi8KLQlibGtfcXVldWVfZXhpdChxKTsKLX0KLQotLyoKLSAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLgotICovCi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfYWJvcnQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSB6d3BsdWctJmd0O2Rpc2s7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3p3cGx1Zy0mZ3Q7bG9jayk7Ci0KLQlpZiAoYmlvX2xpc3RfZW1wdHkoJmFtcDt6d3BsdWctJmd0O2Jpb19saXN0KSkKLQkJcmV0dXJuOwotCi0JcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0OyVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcbiYjMzQ7LAotCQkJICAgIHp3cGx1Zy0mZ3Q7ZGlzay0mZ3Q7ZGlza19uYW1lLCB6d3BsdWctJmd0O3pvbmVfbm8pOwotCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZhbXA7endwbHVnLSZndDtiaW9fbGlzdCkpKQotCQlibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3IoendwbHVnLCBiaW8pOwotCi0JendwbHVnLSZndDtmbGFncyAmYW1wOz0gfkJMS19aT05FX1dQTFVHX1BMVUdHRUQ7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSB1c2luZyB0aGUgcGVyIGRpc2sgem9uZSB3cml0ZSBwbHVncyB3b3JrZXIgdGhyZWFkLCByZW1vdmUKLQkgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlCi0JICogdG9vayB3aGVuIHRoZSB6b25lIHdyaXRlIHBsdWcgd2FzIGFkZGVkIHRvIHRoYXQgbGlzdC4KLQkgKi8KLQlpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay0mZ3Q7cXVldWUpKSB7Ci0JCXNwaW5fbG9jaygmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2xpc3RfbG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmYW1wO3p3cGx1Zy0mZ3Q7ZW50cnkpKSB7Ci0JCQlsaXN0X2RlbF9pbml0KCZhbXA7endwbHVnLSZndDtlbnRyeSk7Ci0JCQlkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0X2xvY2spOwotCX0KLX0KLQogLyoKICAqIFVwZGF0ZSBhIHpvbmUgd3JpdGUgcGx1ZyBjb25kaXRpb24gYmFzZWQgb24gdGhlIHdyaXRlIHBvaW50ZXIgb2Zmc2V0LgogICovCkBAIC03ODUsOCAmIzQzOzkzNiwxMCBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAogCS8qIFVwZGF0ZSB0aGUgem9uZSB3cml0ZSBwb2ludGVyIGFuZCBhYm9ydCBhbGwgcGx1Z2dlZCBCSU9zLiAqLwogCXp3cGx1Zy0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURTsKLQl6d3BsdWctJmd0O3dwX29mZnNldCA9IHdwX29mZnNldDsKLQlkaXNrX3pvbmVfd3BsdWdfdXBkYXRlX2NvbmQoZGlzaywgendwbHVnKTsKJiM0MzsJaWYgKCFkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKSB7CiYjNDM7CQl6d3BsdWctJmd0O3dwX29mZnNldCA9IHdwX29mZnNldDsKJiM0MzsJCWRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpOwomIzQzOwl9CiAKIAlkaXNrX3pvbmVfd3BsdWdfYWJvcnQoendwbHVnKTsKIAlpZiAoIXp3cGx1Zy0mZ3Q7d3Bfb2Zmc2V0IHx8IGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpCkBAIC04MTYsOCAmIzQzOzk2OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmxrX3pvbmVfd3Bfb2Zmc2V0KHN0cnVjdCBibGtfem9uZSAqem9uZSkKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLAotCQkJCQkJICAgc3RydWN0IGJsa196b25lICp6b25lKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGJsa196b25lICp6b25lKQogewogCXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwogCXVuc2lnbmVkIGludCB3cF9vZmZzZXQgPSBibGtfem9uZV93cF9vZmZzZXQoem9uZSk7CkBAIC04MjksNiAmIzQzOzk4MiwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRpc2tfem9uZV93cGx1Z19zeW5jX3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt6d3BsdWctJmd0O2xvY2ssIGZsYWdzKTsKIAkJaWYgKHp3cGx1Zy0mZ3Q7ZmxhZ3MgJmFtcDsgQkxLX1pPTkVfV1BMVUdfTkVFRF9XUF9VUERBVEUpCiAJCQlkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChkaXNrLCB6d3BsdWcsIHdwX29mZnNldCk7CiYjNDM7CQlpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLSZndDtjb25kKSkgewomIzQzOwkJCXp3cGx1Zy0mZ3Q7Y29uZCA9IHpvbmUtJmd0O2NvbmQ7CiYjNDM7CQkJZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpOwomIzQzOwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7CiAJCWRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTsKIAl9CkBAIC04NzEsNyAmIzQzOzEwMjgsNyBAQCBpbnQgZGlza19yZXBvcnRfem9uZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IGJsa196b25lICp6b25lLAogCX0KIAogCWlmIChkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoKQotCQlkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7CiYjNDM7CQlkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZShkaXNrLCB6b25lKTsKIAogCWlmIChhcmdzICZhbXA7JmFtcDsgYXJncy0mZ3Q7Y2IpCiAJCXJldHVybiBhcmdzLSZndDtjYih6b25lLCBpZHgsIGFyZ3MtJmd0O2RhdGEpOwpAQCAtOTQwLDcgJiM0MzsxMDk3LDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKIAlzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBiZGV2X3pvbmVfc2VjdG9ycyhiZGV2KTsKIAlzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4ICp6b25lc19jb25kOwomIzQzOwl1OCAqem9uZXNfc3RhdGUsIHpzOwogCiAJaWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC05NTUsMTIgJiM0MzsxMTEyLDE4IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsCiAJCXJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQl6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stJmd0O3pvbmVzX2NvbmQpOwotCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfY29uZCkgewomIzQzOwl6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLSZndDt6b25lc19zdGF0ZSk7CiYjNDM7CWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfc3RhdGUpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTsKIAl9Ci0Jem9uZS0mZ3Q7Y29uZCA9IHpvbmVzX2NvbmRbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildOwomIzQzOwomIzQzOwl6cyA9IHpvbmVzX3N0YXRlW2Rpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpXTsKJiM0MzsJem9uZS0mZ3Q7Y29uZCA9IGJsa196c3RhdGVfdG9fem9uZV9jb25kKHpzKTsKJiM0MzsJaWYgKGJsa196c3RhdGVfaXNfY29udih6cykpCiYjNDM7CQl6b25lLSZndDt0eXBlID0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw7CiYjNDM7CWVsc2UKJiM0MzsJCXpvbmUtJmd0O3R5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXpvbmUtJmd0O3N0YXJ0ID0gc2VjdG9yOwpAQCAtOTcwLDggJiM0MzsxMTMzLDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKIAkgKiBJZiB0aGlzIGlzIGEgY29udmVudGlvbmFsIHpvbmUsIHdlIGRvIG5vdCBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIGFuZAogCSAqIGNhbiByZXBvcnQgdGhlIHpvbmUgaW1tZWRpYXRlbHkuCiAJICovCi0JaWYgKHpvbmUtJmd0O2NvbmQgPT0gQkxLX1pPTkVfQ09ORF9OT1RfV1ApIHsKLQkJem9uZS0mZ3Q7dHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMOwomIzQzOwlpZiAoem9uZS0mZ3Q7dHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkgewogCQl6b25lLSZndDtjYXBhY2l0eSA9IHpvbmVfc2VjdG9yczsKIAkJem9uZS0mZ3Q7d3AgPSBVTExPTkdfTUFYOwogCQlyZXR1cm4gMDsKQEAgLTk4MiwxNCAmIzQzOzExNDQsMTIgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKIAkgKiBvZmZsaW5lLCBvbmx5IHNldCB0aGUgem9uZSB3cml0ZSBwb2ludGVyIHRvIGFuIGludmFsaWQgdmFsdWUgYW5kCiAJICogcmVwb3J0IHRoZSB6b25lLgogCSAqLwotCXpvbmUtJmd0O3R5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTsKIAlpZiAoZGlza196b25lX2lzX2xhc3QoZGlzaywgem9uZSkpCiAJCXpvbmUtJmd0O2NhcGFjaXR5ID0gZGlzay0mZ3Q7bGFzdF96b25lX2NhcGFjaXR5OwogCWVsc2UKIAkJem9uZS0mZ3Q7Y2FwYWNpdHkgPSBkaXNrLSZndDt6b25lX2NhcGFjaXR5OwogCi0JaWYgKHpvbmUtJmd0O2NvbmQgPT0gQkxLX1pPTkVfQ09ORF9SRUFET05MWSB8fAotCSAgICB6b25lLSZndDtjb25kID09IEJMS19aT05FX0NPTkRfT0ZGTElORSkgewomIzQzOwlpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLSZndDtjb25kKSkgewogCQl6b25lLSZndDt3cCA9IFVMTE9OR19NQVg7CiAJCXJldHVybiAwOwogCX0KQEAgLTExMDgsMzQgJiM0MzsxMjY4LDMyIEBAIHN0YXRpYyB2b2lkIGJsa196b25lX3Jlc2V0X2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgZGlza196b25lX3dwbHVnX3Jlc2V0X3dwKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt6d3BsdWctJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoendwbHVnLSZndDtkaXNrLCB6d3BsdWcsIDApOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYmxrX3pvbmVfcmVzZXRfYWxsX2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiaW8tJmd0O2JpX2JkZXYtJmd0O2JkX2Rpc2s7Ci0Jc2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7Ci0Jc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzZWN0b3JfdCBzZWN0b3I7Ci0JdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkaXNrLSZndDtucl96b25lX3dwbHVncykpIHsKLQkJLyogVXBkYXRlIHRoZSBjb25kaXRpb24gb2YgYWxsIHpvbmUgd3JpdGUgcGx1Z3MuICovCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpJiM0MzsmIzQzOykgewotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywKLQkJCQkJCSAmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hbaV0sCi0JCQkJCQkgbm9kZSkgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7Ci0JCQkJZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoZGlzaywgendwbHVnLCAwKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7Ci0JCQl9Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQomIzQzOwkvKiBVcGRhdGUgdGhlIGNvbmRpdGlvbiBvZiBhbGwgem9uZSB3cml0ZSBwbHVncy4gKi8KJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7ZGlzay0mZ3Q7bnJfem9uZV93cGx1Z3MpKQomIzQzOwkJZGlza19mb3JfYWxsX3pvbmVfd3BsdWdzKGRpc2ssIGRpc2tfem9uZV93cGx1Z19yZXNldF93cCwgTlVMTCk7CiAKIAkvKiBVcGRhdGUgdGhlIGNhY2hlZCB6b25lIGNvbmRpdGlvbnMuICovCi0JZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgJmx0OyBjYXBhY2l0eTsKLQkgICAgIHNlY3RvciAmIzQzOz0gYmRldl96b25lX3NlY3RvcnMoYmlvLSZndDtiaV9iZGV2KSkKJiM0MzsJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgJmx0OyBnZXRfY2FwYWNpdHkoZGlzayk7CiYjNDM7CSAgICAgc2VjdG9yICYjNDM7PSBiZGV2X3pvbmVfc2VjdG9ycyhiaW8tJmd0O2JpX2JkZXYpKSB7CiYjNDM7CQlpZiAoIWRpc2tfem9uZV9pc19zZXEoZGlzaywgc2VjdG9yKSB8fAomIzQzOwkJICAgIGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGRpc2ssIHNlY3RvcikpCiYjNDM7CQkJY29udGludWU7CiAJCWRpc2tfem9uZV9zZXRfY29uZChkaXNrLCBzZWN0b3IsIEJMS19aT05FX0NPTkRfRU1QVFkpOwomIzQzOwl9CiAJY2xlYXJfYml0KEdEX1pPTkVfQVBQRU5EX1VTRUQsICZhbXA7ZGlzay0mZ3Q7c3RhdGUpOwogfQogCkBAIC0xMzgxLDExICYjNDM7MTUzOSwxMiBAQCBzdGF0aWMgYm9vbCBibGtfem9uZV93cGx1Z19wcmVwYXJlX2JpbyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZywKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IHRoZSB1c2VyIGlzIG5vdCBhdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgZnVsbCB6b25lLgotCSAqIFdlIGtub3cgc3VjaCBCSU8gd2lsbCBmYWlsLCBhbmQgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBvdmVyZmxvdyBvdXIKLQkgKiB3cml0ZSBwb2ludGVyIG9mZnNldCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgem9uZS4KJiM0MzsJICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seQomIzQzOwkgKiBvciBvZmZsaW5lIHpvbmUuIFdlIGtub3cgc3VjaCBCSU9zIHdpbGwgZmFpbCwgc28gdGhlcmUgaXMgbm8gcG9pbnQKJiM0MzsJICogaW4gaXNzdWluZyB0aGVtLgogCSAqLwotCWlmIChkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpKQomIzQzOwlpZiAoZGlza196b25lX3dwbHVnX2lzX2Z1bGwoZGlzaywgendwbHVnKSB8fAomIzQzOwkgICAgZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkgewpAQCAtMTQ0Miw3ICYjNDM7MTYwMSw3IEBAIHN0YXRpYyBib29sIGJsa196b25lX3dwbHVnX2hhbmRsZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBucl9zZWdzKQogCX0KIAogCS8qIENvbnZlbnRpb25hbCB6b25lcyBkbyBub3QgbmVlZCB3cml0ZSBwbHVnZ2luZy4gKi8KLQlpZiAoIWJkZXZfem9uZV9pc19zZXEoYmlvLSZndDtiaV9iZGV2LCBzZWN0b3IpKSB7CiYjNDM7CWlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpKSB7CiAJCS8qIFpvbmUgYXBwZW5kIHRvIGNvbnZlbnRpb25hbCB6b25lcyBpcyBub3QgYWxsb3dlZC4gKi8KIAkJaWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkgewogCQkJYmlvX2lvX2Vycm9yKGJpbyk7CkBAIC0xODU0LDEyICYjNDM7MjAxMywyMCBAQCBzdGF0aWMgaW50IGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyKHZvaWQgKmRhdGEpCiAKIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewomIzQzOwlhdG9taWNfc2V0KCZhbXA7ZGlzay0mZ3Q7bnJfem9uZV93cGx1Z3MsIDApOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0KTsKIAlpbml0X2NvbXBsZXRpb24oJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc193b3JrZXJfYmlvX2RvbmUpOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9ICZhbXA7ZGlzay0mZ3Q7cXVldWUtJmd0O2xpbWl0czsKJiM0MzsKJiM0MzsJcmV0dXJuIERJVl9ST1VORF9VUF9VTEwoZ2V0X2NhcGFjaXR5KGRpc2spLCBsaW0tJmd0O2NodW5rX3NlY3RvcnMpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGb3IgdGhlIHNpemUgb2YgYSBkaXNrIHpvbmUgd3JpdGUgcGx1ZyBoYXNoIHRhYmxlLCB1c2UgdGhlIHNpemUgb2YgdGhlCiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmQKQEAgLTE4NjksMTMgJiM0MzsyMDM2LDIxIEBAIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogI2RlZmluZSBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTCQk5CiAjZGVmaW5lIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFCTEyOAogCi1zdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKQomIzQzO3N0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKLQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltID0gJmFtcDtkaXNrLSZndDtxdWV1ZS0mZ3Q7bGltaXRzOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfem9uZXMgPSBkaXNrX2dldF9ucl96b25lcyhkaXNrKTsKJiM0MzsJdW5zaWduZWQgaW50IHBvb2xfc2l6ZSwgaTsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCWF0b21pY19zZXQoJmFtcDtkaXNrLSZndDtucl96b25lX3dwbHVncywgMCk7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBkZXZpY2UgaGFzIG5vIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGFuZCBhY3RpdmUKJiM0MzsJICogem9uZXMsIHVzZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRS4KJiM0MzsJICovCiYjNDM7CXBvb2xfc2l6ZSA9IG1heChsaW0tJmd0O21heF9vcGVuX3pvbmVzLCBsaW0tJmd0O21heF9hY3RpdmVfem9uZXMpOwomIzQzOwlpZiAoIXBvb2xfc2l6ZSkKJiM0MzsJCXBvb2xfc2l6ZSA9IG1pbihCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSwgbnJfem9uZXMpOwomIzQzOwogCWRpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hfYml0cyA9CiAJCW1pbihpbG9nMihwb29sX3NpemUpICYjNDM7IDEsIEJMS19aT05FX1dQTFVHX01BWF9IQVNIX0JJVFMpOwogCkBAIC0xODkzLDIxICYjNDM7MjA2OCw2IEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpCiAJCWdvdG8gZnJlZV9oYXNoOwogCi0JLyoKLQkgKiBXZSBtYXkgYWxyZWFkeSBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBhcyB0aGlzIGZ1bmN0aW9uIG1heQotCSAqIGJlIGNhbGxlZCBhZnRlciBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoKSwgd2hpY2ggZG9lcyBub3QgZGVzdHJveQotCSAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXQKLQkgKiBkaXNrX3JlbGVhc2UoKSB0aW1lKS4KLQkgKi8KLQlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKSB7Ci0JCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxID0KLQkJCWFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3p3cGx1Z3MmIzM0OywKLQkJCQkJV1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLAotCQkJCQlwb29sX3NpemUsIGRpc2stJmd0O2Rpc2tfbmFtZSk7Ci0JCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpCi0JCQlnb3RvIGRlc3Ryb3lfcG9vbDsKLQl9Ci0KIAlkaXNrLSZndDt6b25lX3dwbHVnc193b3JrZXIgPQogCQlrdGhyZWFkX2NyZWF0ZShkaXNrX3pvbmVfd3BsdWdzX3dvcmtlciwgZGlzaywKIAkJCSAgICAgICAmIzM0OyVzX3p3cGx1Z3Nfd29ya2VyJiMzNDssIGRpc2stJmd0O2Rpc2tfbmFtZSk7CkBAIC0xOTE4LDggJiM0MzsyMDc4LDE4IEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAl9CiAJd2FrZV91cF9wcm9jZXNzKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcik7CiAKJiM0MzsJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPQomIzQzOwkJYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7JXNfendwbHVncyYjMzQ7LAomIzQzOwkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsCiYjNDM7CQkJCXBvb2xfc2l6ZSwgZGlzay0mZ3Q7ZGlza19uYW1lKTsKJiM0MzsJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc193cSkKJiM0MzsJCWdvdG8gc3RvcF93b3JrZXI7CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztzdG9wX3dvcmtlcjoKJiM0MzsJa3RocmVhZF9zdG9wKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcik7CiYjNDM7CWRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlciA9IE5VTEw7CiBkZXN0cm95X3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KGRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpOwogCWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMOwpAQCAtMTk2MywxOSAmIzQzOzIxMzMsMTkgQEAgc3RhdGljIHZvaWQgZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJZGlzay0mZ3Q7em9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKQomIzQzO3N0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfc3RhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7Ci0Jem9uZXNfY29uZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay0mZ3Q7em9uZXNfY29uZCwgem9uZXNfY29uZCwKJiM0MzsJem9uZXNfc3RhdGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGRpc2stJmd0O3pvbmVzX3N0YXRlLCB6b25lc19zdGF0ZSwKIAkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoX2xvY2spKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQlrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTsKJiM0MzsJa2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpOwogfQogCi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiYjNDM7dm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcikgewogCQlrdGhyZWFkX3N0b3AoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKTsKQEAgLTE5ODMsMzAgJiM0MzsyMTUzLDIyIEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAl9CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfbGlzdCkpOwogCi0JaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKQotCQlkcmFpbl93b3JrcXVldWUoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpOwomIzQzOwlpZiAoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpIHsKJiM0MzsJCWRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKTsKJiM0MzsJCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxID0gTlVMTDsKJiM0MzsJfQogCiAJZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7CiAKLQlkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIE5VTEwpOwomIzQzOwlkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBOVUxMKTsKIAlkaXNrLSZndDt6b25lX2NhcGFjaXR5ID0gMDsKIAlkaXNrLSZndDtsYXN0X3pvbmVfY2FwYWNpdHkgPSAwOwogCWRpc2stJmd0O25yX3pvbmVzID0gMDsKIH0KIAotdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0JaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKTsKLQkJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPSBOVUxMOwotCX0KLQotCWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKLX0KLQogc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyB7CiAJc3RydWN0IGdlbmRpc2sJKmRpc2s7Ci0JdTgJCSp6b25lc19jb25kOwomIzQzOwl1OAkJKnpvbmVzX3N0YXRlOwogCXVuc2lnbmVkIGludAlucl96b25lczsKIAl1bnNpZ25lZCBpbnQJbnJfY29udl96b25lczsKIAl1bnNpZ25lZCBpbnQJem9uZV9jYXBhY2l0eTsKQEAgLTIwMTQsNDkgJiM0MzsyMTc2LDI2IEBAIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgewogCXNlY3Rvcl90CXNlY3RvcjsKIH07CiAKLXN0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzO3N0YXRpYyBpbnQgZGlza19pbml0X3JldmFsaWRhdGVfYXJncyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJCQlzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKQogewotCXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9ICZhbXA7ZGlzay0mZ3Q7cXVldWUtJmd0O2xpbWl0czsKLQl1bnNpZ25lZCBpbnQgcG9vbF9zaXplOwotCWludCByZXQgPSAwOwotCiAJYXJncy0mZ3Q7ZGlzayA9IGRpc2s7Ci0JYXJncy0mZ3Q7bnJfem9uZXMgPQotCQlESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLSZndDtjaHVua19zZWN0b3JzKTsKJiM0MzsJYXJncy0mZ3Q7bnJfem9uZXMgPSBkaXNrX2dldF9ucl96b25lcyhkaXNrKTsKIAogCS8qIENhY2hlZCB6b25lIGNvbmRpdGlvbnM6IDEgYnl0ZSBwZXIgem9uZSAqLwotCWFyZ3MtJmd0O3pvbmVzX2NvbmQgPSBremFsbG9jKGFyZ3MtJmd0O25yX3pvbmVzLCBHRlBfTk9JTyk7Ci0JaWYgKCFhcmdzLSZndDt6b25lc19jb25kKQomIzQzOwlhcmdzLSZndDt6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy0mZ3Q7bnJfem9uZXMsIEdGUF9OT0lPKTsKJiM0MzsJaWYgKCFhcmdzLSZndDt6b25lc19zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIWRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIElmIHRoZSBkZXZpY2UgaGFzIG5vIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGFuZCBhY3RpdmUKLQkgKiB6b25lcywgdXNlIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLgotCSAqLwotCXBvb2xfc2l6ZSA9IG1heChsaW0tJmd0O21heF9vcGVuX3pvbmVzLCBsaW0tJmd0O21heF9hY3RpdmVfem9uZXMpOwotCWlmICghcG9vbF9zaXplKQotCQlwb29sX3NpemUgPQotCQkJbWluKEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLCBhcmdzLSZndDtucl96b25lcyk7Ci0KLQlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2gpIHsKLQkJcmV0ID0gZGlza19hbGxvY196b25lX3Jlc291cmNlcyhkaXNrLCBwb29sX3NpemUpOwotCQlpZiAocmV0KQotCQkJa2ZyZWUoYXJncy0mZ3Q7em9uZXNfY29uZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBVcGRhdGUgdGhlIGRpc2sgem9uZSByZXNvdXJjZXMgaW5mb3JtYXRpb24gYW5kIGRldmljZSBxdWV1ZSBsaW1pdHMuCi0gKiBUaGUgZGlzayBxdWV1ZSBpcyBmcm96ZW4gd2hlbiB0aGlzIGlzIGV4ZWN1dGVkLgomIzQzOyAqIFJldmFsaWRhdGUgYW5kIHVwZGF0ZSB0aGUgZGlzayB6b25lIHJlc291cmNlcyBpbmZvcm1hdGlvbiBhbmQgZGV2aWNlIHF1ZXVlCiYjNDM7ICogbGltaXRzLgogICovCi1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAotCQkJCSAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpCiYjNDM7c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLSZndDtxdWV1ZTsKIAl1bnNpZ25lZCBpbnQgbnJfc2VxX3pvbmVzOwpAQCAtMjA2NCwyMyAmIzQzOzIyMDMsMjggQEAgc3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlpbnQgcmV0ID0gMDsKIAomIzQzOwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHkgaGFzIGJlZW4gY2hlY2tlZC4gKi8KJiM0MzsJaWYgKGFyZ3MtJmd0O3NlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDslczogTWlzc2luZyB6b25lcyBmcm9tIHNlY3RvciAlbGx1XG4mIzM0OywKJiM0MzsJCQlkaXNrLSZndDtkaXNrX25hbWUsIGFyZ3MtJmd0O3NlY3Rvcik7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYXJncy0mZ3Q7bnJfY29udl96b25lcyAmZ3Q7PSBhcmdzLSZndDtucl96b25lcykgewomIzQzOwkJcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIG51bWJlciBvZiBjb252ZW50aW9uYWwgem9uZXMgJXUgLyAldVxuJiMzNDssCiYjNDM7CQkJZGlzay0mZ3Q7ZGlza19uYW1lLCBhcmdzLSZndDtucl9jb252X3pvbmVzLCBhcmdzLSZndDtucl96b25lcyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7CiAKIAltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7CiAKIAlkaXNrLSZndDtucl96b25lcyA9IGFyZ3MtJmd0O25yX3pvbmVzOwotCWlmIChhcmdzLSZndDtucl9jb252X3pvbmVzICZndDs9IGRpc2stJmd0O25yX3pvbmVzKSB7Ci0JCXF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKHEpOwotCQlwcl93YXJuKCYjMzQ7JXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XG4mIzM0OywKLQkJCWRpc2stJmd0O2Rpc2tfbmFtZSwgYXJncy0mZ3Q7bnJfY29udl96b25lcywgZGlzay0mZ3Q7bnJfem9uZXMpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIHVuZnJlZXplOwotCX0KLQogCWRpc2stJmd0O3pvbmVfY2FwYWNpdHkgPSBhcmdzLSZndDt6b25lX2NhcGFjaXR5OwogCWRpc2stJmd0O2xhc3Rfem9uZV9jYXBhY2l0eSA9IGFyZ3MtJmd0O2xhc3Rfem9uZV9jYXBhY2l0eTsKLQlkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIGFyZ3MtJmd0O3pvbmVzX2NvbmQpOwotCWFyZ3MtJmd0O3pvbmVzX2NvbmQgPSBOVUxMOwomIzQzOwlkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBhcmdzLSZndDt6b25lc19zdGF0ZSk7CiYjNDM7CWFyZ3MtJmd0O3pvbmVzX3N0YXRlID0gTlVMTDsKIAogCS8qCiAJICogU29tZSBkZXZpY2VzIGNhbiBhZHZlcnRpc2Ugem9uZSByZXNvdXJjZSBsaW1pdHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4KQEAgLTIxMjAsNDggJiM0MzsyMjY0LDU5IEBAIHN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiBjb21taXQ6CiAJcmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwogCi11bmZyZWV6ZToKIAlibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NvbmQoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LAotCQkJCSAgICBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKQomIzQzO3N0YXRpYyB2b2lkIGRpc2tfZHJvcF96b25lX3dwbHVnKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLCB2b2lkICpkYXRhKQogewotCWVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gem9uZS0mZ3Q7Y29uZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIENoZWNrIHRoYXQgdGhlIHpvbmUgY29uZGl0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSB0eXBlLiAqLwotCXN3aXRjaCAoY29uZCkgewotCWNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6Ci0JCWlmICh6b25lLSZndDt0eXBlICE9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMKQotCQkJZ290byBpbnZhbGlkX2NvbmRpdGlvbjsKLQkJYnJlYWs7Ci0JY2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOgotCWNhc2UgQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjoKLQljYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOgotCWNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWToKLQljYXNlIEJMS19aT05FX0NPTkRfRlVMTDoKLQljYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORToKLQljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6Ci0JCWlmICh6b25lLSZndDt0eXBlICE9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRKQotCQkJZ290byBpbnZhbGlkX2NvbmRpdGlvbjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JVhcbiYjMzQ7LAotCQkJYXJncy0mZ3Q7ZGlzay0mZ3Q7ZGlza19uYW1lLCBjb25kKTsKLQkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpOwomIzQzOwlkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt6d3BsdWctJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfY2FwYWNpdHkoc3RydWN0IGdlbmRpc2sgKmRpc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSAmYW1wO2Rpc2stJmd0O3F1ZXVlLSZndDtsaW1pdHM7CiYjNDM7CXNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGxpbS0mZ3Q7Y2h1bmtfc2VjdG9yczsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7CiYjNDM7CWludCByZXQgPSAtRU5PREVWOwomIzQzOwomIzQzOwlpZiAoIWdldF9jYXBhY2l0eShkaXNrKSkKJiM0MzsJCWdvdG8gZHJvcF9hbGxfendwbHVnczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0CiYjNDM7CSAqIHRoZSBtYXggem9uZSBhcHBlbmQgbGltaXQgaXMgc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkgewomIzQzOwkJcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxuJiMzNDssCiYjNDM7CQkJZGlzay0mZ3Q7ZGlza19uYW1lLCB6b25lX3NlY3RvcnMpOwomIzQzOwkJZ290byBkcm9wX2FsbF96d3BsdWdzOwogCX0KIAotCWJsa196b25lX3NldF9jb25kKGFyZ3MtJmd0O3pvbmVzX2NvbmQsIGlkeCwgY29uZCk7CiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGlmIHRoZSBjYXBhY2l0eSBoYXMgY2hhbmdlZC4gSWYgaXQgZGlkLCBhc3N1bWUgdGhhdCB0aGUgZGV2aWNlCiYjNDM7CSAqIHdhcyByZWZvcm1hdHRlZCBhbmQgdGhhdCBhbGwgc2VxdWVudGlhbCB6b25lcyBhcmUgbm93IGVtcHR5LiBTbyBkcm9wCiYjNDM7CSAqIGFsbCB6b25lIHdyaXRlIHBsdWcuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGlzay0mZ3Q7bnJfem9uZXMgJmFtcDsmYW1wOyBkaXNrLSZndDtucl96b25lcyAhPSBucl96b25lcykgewomIzQzOwkJcHJfd2FybigmIzM0OyVzOiBOdW1iZXIgb2Ygem9uZXMgY2hhbmdlZCAoJXUgLSZndDsgJXUpXG4mIzM0OywKJiM0MzsJCQlkaXNrLSZndDtkaXNrX25hbWUsIGRpc2stJmd0O25yX3pvbmVzLCBucl96b25lcyk7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBkcm9wX2FsbF96d3BsdWdzOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIAotaW52YWxpZF9jb25kaXRpb246Ci0JcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JXggZm9yIHR5cGUgMHgleFxuJiMzNDssCi0JCWFyZ3MtJmd0O2Rpc2stJmd0O2Rpc2tfbmFtZSwgY29uZCwgem9uZS0mZ3Q7dHlwZSk7CiYjNDM7ZHJvcF9hbGxfendwbHVnczoKJiM0MzsJZGlza19mb3JfYWxsX3pvbmVfd3BsdWdzKGRpc2ssIGRpc2tfZHJvcF96b25lX3dwbHVnLCBOVUxMKTsKIAotCXJldHVybiAtRU5PREVWOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX2NvbnZfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsCkBAIC0yMTY5LDEyICYjNDM7MjMyNCwyNiBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX2NvbnZfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBhcmdzLSZndDtkaXNrOwogCiYjNDM7CS8qIENoZWNrIHRoZSB6b25lIGNvbmRpdGlvbi4gKi8KJiM0MzsJc3dpdGNoICh6b25lLSZndDtjb25kKSB7CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOgomIzQzOwljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXByX3dhcm4oJiMzNDslczogSW52YWxpZCBjb252LiB6b25lIGNvbmRpdGlvbiAweCVYIGF0IHNlY3RvciAlbGx1XG4mIzM0OywKJiM0MzsJCQlkaXNrLSZndDtkaXNrX25hbWUsIHpvbmUtJmd0O2NvbmQsIHpvbmUtJmd0O3N0YXJ0KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiAJaWYgKHpvbmUtJmd0O2NhcGFjaXR5ICE9IHpvbmUtJmd0O2xlbikgewogCQlwcl93YXJuKCYjMzQ7JXM6IEludmFsaWQgY29udmVudGlvbmFsIHpvbmUgY2FwYWNpdHlcbiYjMzQ7LAogCQkJZGlzay0mZ3Q7ZGlza19uYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiYjNDM7CWJsa196c3RhdGVfc2V0KGFyZ3MtJmd0O3pvbmVzX3N0YXRlLCBpZHgsIHpvbmUtJmd0O2NvbmQsIEJMS19aRkxBR19DT05WKTsKJiM0MzsKIAlpZiAoZGlza196b25lX2lzX2xhc3QoZGlzaywgem9uZSkpCiAJCWFyZ3MtJmd0O2xhc3Rfem9uZV9jYXBhY2l0eSA9IHpvbmUtJmd0O2NhcGFjaXR5OwogCkBAIC0yMTkwLDYgJiM0MzsyMzU5LDI0IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfc2VxX3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LAogCXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwogCXVuc2lnbmVkIGludCB3cF9vZmZzZXQ7CiAKJiM0MzsJLyogQ2hlY2sgdGhlIHpvbmUgY29uZGl0aW9uLiAqLwomIzQzOwlzd2l0Y2ggKHpvbmUtJmd0O2NvbmQpIHsKJiM0MzsJY2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOgomIzQzOwljYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9DTE9TRUQ6CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWToKJiM0MzsJY2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOgomIzQzOwljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXByX3dhcm4oJiMzNDslczogSW52YWxpZCBzZXEuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcbiYjMzQ7LAomIzQzOwkJCWRpc2stJmd0O2Rpc2tfbmFtZSwgem9uZS0mZ3Q7Y29uZCwgem9uZS0mZ3Q7c3RhcnQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYmxrX3pzdGF0ZV9zZXQoYXJncy0mZ3Q7em9uZXNfc3RhdGUsIGlkeCwgem9uZS0mZ3Q7Y29uZCwgMCk7CiYjNDM7CiAJLyoKIAkgKiBSZW1lbWJlciB0aGUgY2FwYWNpdHkgb2YgdGhlIGZpcnN0IHNlcXVlbnRpYWwgem9uZSBhbmQgY2hlY2sKIAkgKiBpZiBpdCBpcyBjb25zdGFudCBmb3IgYWxsIHpvbmVzLCBpZ25vcmluZyB0aGUgbGFzdCB6b25lIGFzIGl0IGNhbiBiZQpAQCAtMjIxNCw3ICYjNDM7MjQwMSw3IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfc2VxX3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LAogCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaCkKIAkJcmV0dXJuIDA7CiAKLQl3cF9vZmZzZXQgPSBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7CiYjNDM7CXdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpOwogCWlmICghd3Bfb2Zmc2V0IHx8IHdwX29mZnNldCAmZ3Q7PSB6b25lLSZndDtjYXBhY2l0eSkKIAkJcmV0dXJuIDA7CiAKQEAgLTIyNzIsMTEgJiM0MzsyNDU5LDYgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCwKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogQ2hlY2sgem9uZSBjb25kaXRpb24gKi8KLQlyZXQgPSBibGtfcmV2YWxpZGF0ZV96b25lX2NvbmQoem9uZSwgaWR4LCBhcmdzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJLyogQ2hlY2sgem9uZSB0eXBlICovCiAJc3dpdGNoICh6b25lLSZndDt0eXBlKSB7CiAJY2FzZSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTDoKQEAgLTIzMTMsMzkgJiM0MzsyNDk1LDM3IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsCiAgKi8KIGludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0mZ3Q7cXVldWU7Ci0Jc2VjdG9yX3Qgem9uZV9zZWN0b3JzID0gcS0mZ3Q7bGltaXRzLmNodW5rX3NlY3RvcnM7Ci0Jc2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7CiAJc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyBhcmdzID0geyB9OwotCXVuc2lnbmVkIGludCBtZW1mbGFncywgbm9pb19mbGFnOwogCXN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgcmVwX2FyZ3MgPSB7CiAJCS5jYiA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY2IsCiAJCS5kYXRhID0gJmFtcDthcmdzLAogCX07Ci0JaW50IHJldCA9IC1FTk9NRU07CiYjNDM7CXVuc2lnbmVkIGludCBub2lvX2ZsYWc7CiYjNDM7CWludCByZXQ7CiAKLQlpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQocSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQoZGlzay0mZ3Q7cXVldWUpKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoIWNhcGFjaXR5KQotCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJcmV0ID0gZGlza19yZXZhbGlkYXRlX2NhcGFjaXR5KGRpc2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCS8qCi0JICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0Ci0JICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuCiYjNDM7CSAqIEFsbG9jYXRlIHpvbmUgcmVzb3VyY2VzIGlmIHRoZXkgYXJlIG5lZWRlZCBhbmQgd2UgaGF2ZSBub3QgZG9uZQomIzQzOwkgKiBzbyB5ZXQsIGFuZCBpbml0aWFsaXplIHRoZSByZXZhbGlkYXRpb24gYXJndW1lbnRzIHBhc3NlZCB0byByZXBvcnQKJiM0MzsJICogem9uZXMuIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzCiYjNDM7CSAqIGlmIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuCiAJICovCi0JaWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkgewotCQlwcl93YXJuKCYjMzQ7JXM6IEludmFsaWQgbm9uIHBvd2VyIG9mIHR3byB6b25lIHNpemUgKCVsbHUpXG4mIzM0OywKLQkJCWRpc2stJmd0O2Rpc2tfbmFtZSwgem9uZV9zZWN0b3JzKTsKLQkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CW5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwomIzQzOwlpZiAoZGlza19uZWVkX3pvbmVfcmVzb3VyY2VzKGRpc2spICZhbXA7JmFtcDsgIWRpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2gpIHsKJiM0MzsJCXJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzayk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJbWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAl9CiAKLQkvKgotCSAqIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzIGlmCi0JICogR0ZQX05PSU8gd2FzIHNwZWNpZmllZC4KLQkgKi8KLQlub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTsKLQlyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgJmFtcDthcmdzKTsKJiM0MzsJcmV0ID0gZGlza19pbml0X3JldmFsaWRhdGVfYXJncyhkaXNrLCAmYW1wO2FyZ3MpOwogCWlmIChyZXQpIHsKIAkJbWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7CiAJCXJldHVybiByZXQ7CkBAIC0yMzU5LDMyICYjNDM7MjUzOSwxOCBAQCBpbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAltZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFnKTsKIAogCWlmIChyZXQgJmx0Oz0gMCkKLQkJZ290byBmcmVlX3Jlc291cmNlczsKJiM0MzsJCWdvdG8gZnJlZV9hcmdzOwogCi0JLyoKLQkgKiBJZiB6b25lcyB3aGVyZSByZXBvcnRlZCwgbWFrZSBzdXJlIHRoYXQgdGhlIGVudGlyZSBkaXNrIGNhcGFjaXR5Ci0JICogaGFzIGJlZW4gY2hlY2tlZC4KLQkgKi8KLQlpZiAoYXJncy5zZWN0b3IgIT0gY2FwYWNpdHkpIHsKLQkJcHJfd2FybigmIzM0OyVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcbiYjMzQ7LAotCQkJZGlzay0mZ3Q7ZGlza19uYW1lLCBhcmdzLnNlY3Rvcik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9yZXNvdXJjZXM7Ci0JfQotCi0JcmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgJmFtcDthcmdzKTsKJiM0MzsJcmV0ID0gZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssICZhbXA7YXJncyk7CiAJaWYgKHJldCkKLQkJZ290byBmcmVlX3Jlc291cmNlczsKJiM0MzsJCWdvdG8gZnJlZV9hcmdzOwogCiAJcmV0dXJuIDA7CiAKLWZyZWVfcmVzb3VyY2VzOgomIzQzO2ZyZWVfYXJnczoKIAlwcl93YXJuKCYjMzQ7JXM6IGZhaWxlZCB0byByZXZhbGlkYXRlIHpvbmVzXG4mIzM0OywgZGlzay0mZ3Q7ZGlza19uYW1lKTsKIAotCWtmcmVlKGFyZ3Muem9uZXNfY29uZCk7Ci0JbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpOwotCWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKLQlibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwomIzQzOwlrZnJlZShhcmdzLnpvbmVzX3N0YXRlKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNDM1LDggJiM0MzsyNjAxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfaXNzdWVfemVyb291dCk7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFQlVHX0ZTCiBzdGF0aWMgdm9pZCBxdWV1ZV96b25lX3dwbHVnX3Nob3coc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsCi0JCQkJICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiYjNDM7CQkJCSAgdm9pZCAqZGF0YSkKIHsKJiM0MzsJc3RydWN0IHNlcV9maWxlICptID0gZGF0YTsKIAl1bnNpZ25lZCBpbnQgendwX3dwX29mZnNldCwgendwX2ZsYWdzOwogCXVuc2lnbmVkIGludCB6d3Bfem9uZV9ubywgendwX3JlZjsKIAl1bnNpZ25lZCBpbnQgendwX2Jpb19saXN0X3NpemU7CkBAIC0yNDYxLDE5ICYjNDM7MjYyOCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZywKIGludCBxdWV1ZV96b25lX3dwbHVnc19zaG93KHZvaWQgKmRhdGEsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRhdGE7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBxLSZndDtkaXNrOwotCXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoKQotCQlyZXR1cm4gMDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkmIzQzOyYjNDM7KQotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLCAmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hbaV0sCi0JCQkJCSBub2RlKQotCQkJcXVldWVfem9uZV93cGx1Z19zaG93KHp3cGx1ZywgbSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhxLSZndDtkaXNrLCBxdWV1ZV96b25lX3dwbHVnX3Nob3csIG0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDUwYWJmZDkzMjg4NjEuLmNmZThkNDE4NWUyNWEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oCkBAIC01NzcsNiAmIzQzOzU3Nyw3IEBAIGludCBibGtkZXZfcmVwb3J0X3pvbmVzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBjbWQsCiAJCXVuc2lnbmVkIGxvbmcgYXJnKTsKIGludCBibGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwomIzQzO2Jvb2wgYmRldl9jaGVja196b25lX21nbXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yKTsKICNlbHNlIC8qIENPTkZJR19CTEtfREVWX1pPTkVEICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewpAQCAtNjE5LDYgJiM0Mzs2MjAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogewogCXJldHVybiAtRU5PVFRZOwogfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAomIzQzOwkJCQkJc2VjdG9yX3Qgc2VjdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqLwogCiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2X2FsbG9jKHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pOwpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZThjZTBjYWJmMzkyYy4uMzRhNjQwNzdiYTAyYyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00NDcsNiAmIzQzOzQ0NywxMyBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJYmRldl9zZXRfZmxhZyhkaXNrLSZndDtwYXJ0MCwgQkRfSEFTX1NVQk1JVF9CSU8pOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBXZSBkbyBub3Qgc3VwcG9ydCBwYXJ0aXRpb25zIHdpdGggem9uZWQgYmxvY2sgZGV2aWNlcywgc28gZG8gbm90IHRyeQomIzQzOwkgKiB0byBzY2FuIHRoZSBwYXJ0aXRpb25zIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJsa19xdWV1ZV9pc196b25lZChkaXNrLSZndDtxdWV1ZSkpCiYjNDM7CQlkaXNrLSZndDtmbGFncyB8PSBHRU5IRF9GTF9OT19QQVJUOwomIzQzOwogCS8qCiAJICogSWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbiBleHBsaWNpdCBtYWpvciBudW1iZXIgaXQgYWxzbyBtdXN0IHByb3ZpZGUKIAkgKiB0aGUgbnVtYmVyIG9mIG1pbm9ycyBudW1iZXJzIHN1cHBvcnRlZCwgYW5kIHRob3NlIHdpbGwgYmUgdXNlZCB0bwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggMjBjYjhlZDdkOTg3YS4uNGZhMDA3NTc1MjdkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIHN0cnVjdCBnZW5kaXNrIHsKIAl1bnNpZ25lZCBpbnQJCW5yX3pvbmVzOwogCXVuc2lnbmVkIGludAkJem9uZV9jYXBhY2l0eTsKIAl1bnNpZ25lZCBpbnQJCWxhc3Rfem9uZV9jYXBhY2l0eTsKLQl1OCBfX3JjdQkJKnpvbmVzX2NvbmQ7CiYjNDM7CXU4IF9fcmN1CQkqem9uZXNfc3RhdGU7CiAJdW5zaWduZWQgaW50CQl6b25lX3dwbHVnc19oYXNoX2JpdHM7CiAJYXRvbWljX3QJCW5yX3pvbmVfd3BsdWdzOwogCXNwaW5sb2NrX3QJCXpvbmVfd3BsdWdzX2hhc2hfbG9jazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBab25lZCBCbG9jayBEZXZpY2UgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBibG9jayBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSB6b25lZCBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGBibG9jay9ibGstem9uZWQuY2AsIGBibG9jay9ibGstY29yZS5jYCwgYGJsb2NrL2Jsay5oYCwgYGJsb2NrL2dlbmhkLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLiBTdHJhaWdodCBhd2F5LCBJIHNlZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgY2hhbmdpbmcgaG93IHpvbmUgc3RhdGVzIGFyZSB0cmFja2VkLiBJbnN0ZWFkIG9mIGB6b25lc19jb25kYCwgd2UmIzM5O3JlIG5vdyBkZWFsaW5nIHdpdGggYHpvbmVzX3N0YXRlYC4gVGhpcyBoYXMgYSBodWdlIGZ1bmN0aW9uYWwgaW1wYWN0LiBUaGlzIGlzIGEgZ29vZCBzaWduIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBzdWJtaXRfYmlvX25vYWNjdGAgbm93IGNoZWNrcyB3aXRoIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAuIFRoYXQgb25lIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gVGhleSYjMzk7cmUgYmFzaWNhbGx5IG1ha2luZyBzdXJlIHpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIGFyZSBvbmx5IGFsbG93ZWQgb24gc2VxdWVudGlhbCB6b25lcyB0aGF0IGFyZSBvbmxpbmUgYW5kIG5vdCByZWFkLW9ubHkuIFdlIGFsc28gbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBob3cgYF9fYWRkX2Rpc2tgIGlzIG1vZGlmaWVkIGluIGBibG9jay9nZW5oZC5jYCB0byBzZXQgYEdFTkhEX0ZMX05PX1BBUlRgIGZvciB6b25lZCBibG9jayBkZXZpY2VzLgoKU28sIEkmIzM5O20gdGhpbmtpbmcgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlc2UgbmV3IGNoZWNrcyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gQmFzZWQgb24gdGhhdCwgSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBwcmltZSBmdXp6aW5nIGNhbmRpZGF0ZXM6CgoqICAgYGJkZXZfY2hlY2tfem9uZV9tZ210YCAoZXNwZWNpYWxseSBnaXZlbiBpdCYjMzk7cyBub3cgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBzdWJtaXRfYmlvX25vYWNjdGApCiogICBgZGlza196b25lX3NldF9jb25kYAoqICAgYGRpc2tfem9uZV9nZXRfc3RhdGVgCiogICBgZGlza196b25lX2dldF9jb25kYAoqICAgYGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5YAoqICAgYGRpc2tfem9uZV9pc19zZXFgCiogICBgZGlza19pbnNlcnRfem9uZV93cGx1Z2AKKiAgIGBkaXNrX3pvbmVfd3BsdWdfYWJvcnRgCiogICBgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGVgCiogICBgYmxrZGV2X2dldF96b25lX2luZm9gCiogICBgYmxrX3pvbmVfcmVzZXRfYWxsX2Jpb19lbmRpb2AKKiAgIGBibGtfem9uZV93cGx1Z19wcmVwYXJlX2Jpb2AKKiAgIGBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGVgCiogICBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AKKiAgIGBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNgCiogICBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AKCkkmIzM5O20gemVyb2luZyBpbiBvbiBhIGZldyBmdW5jdGlvbnMgd2hpY2ggYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZzoKCiogICBgYmRldl9jaGVja196b25lX21nbXRgIChzaW5jZSBpdCYjMzk7cyBhIGJvdW5kYXJ5IGV4cG9zZWQgdG8gdGhlIHN1Ym1pdCBwYXRoKS4KKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCAobGlrZWx5IGludm9sdmVkIGluIGluaXRpYWwgZGlzayBzZXR1cCBvciB6b25lIHJldmFsaWRhdGlvbikKKiAgIGBibGtkZXZfZ2V0X3pvbmVfaW5mb2AgKGlmIGFuIEFQSSwgYW5kIGNvbW1vbmx5IHVzZWQgaXQgbWF5IGJlIHZhbHVhYmxlIHRvIGZ1enopLgoqICAgYGRpc2tfem9uZV93cGx1Z19hYm9ydGAgKGVycm9yIHJlY292ZXJ5KS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBhY3R1YWxseSBlbmFibGVkLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoYXQgd2l0aCBgZ2l0IGdyZXBgIG9yIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBidWlsZCB0aGF0JiMzOTtzIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxuLS1cbmJsb2NrL0tjb25maWctOTYtXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXG5ibG9jay9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVx0dHJpc3RhdGUgXCYjMzQ7Wm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIGZvY3VzIGlzIG9uIGBCTEtfREVWX1pPTkVEYC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3Igem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIG5hdHVyYWxseS4gSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaW5raW5nIG1vcmUgYnJvYWRseSwgSSB3b25kZXIuLi5gQkxLX0RFVl9aT05FRF9MT09QYCBjb3VsZCBiZSB1c2VmdWwsIGVzcGVjaWFsbHkgZm9yIGNyZWF0aW5nIGEgdmlydHVhbCBlbnZpcm9ubWVudCB0byB0ZXN0IHRoaW5ncyB3aXRob3V0IG5lZWRpbmcgcmVhbCBoYXJkd2FyZSwgdGhhdCBtaWdodCBiZSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYEJMS19ERVZfWk9ORURfTE9PUGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgoKKipEaXZpbmcgaW50byBCTEtfREVWX1pPTkVEX0xPT1AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIGFuZCBtb2R1bGVzIGFyZSBwcmVyZXF1aXNpdGVzIG9yIGFyZSByZWxhdGVkIHRvIGBCTEtfREVWX1pPTkVEX0xPT1BgLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IHRyZWUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHVzdWFsbHkgaW52b2x2ZXMgc2VhcmNoaW5nIGZvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyByZWxhdGVkIHRvIHRoaXMgb3B0aW9uLiBJ4oCZbGwgYmUgd2F0Y2hpbmcgb3V0IGZvciB0aGluZ3MgbGlrZSBzdG9yYWdlIHN0YWNrIGNvbXBvbmVudHMsIGJsb2NrIGRldmljZSBkcml2ZXJzLCBvciBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzLiBJdCBjb3VsZCBhbHNvIGRlcGVuZCBvbiBzb21lIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLCBvYnZpb3VzbHkuIEl0JiMzOTtzIGFsc28gcG9zc2libGUgdGhhdCBpdCByZXF1aXJlcyBlbmFibGluZyBjZXJ0YWluIGtlcm5lbCBhcmNoaXRlY3R1cmVzLiBJIGFsc28gd2lsbCB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIGFyZSBpbmNsdWRlZCwgYXMgdGhlc2Ugb2Z0ZW4gaW1wbHkgdXNhZ2Ugb2YgdGhlIG9wdGlvbiwgdGhvdWdoIG5vdCBleHBsaWNpdCBkZXBlbmRlbmN5LiBJIGFsc28gd2lsbCBtYWtlIG5vdGVzLCBhcyB3ZWxsIGFzIHRlc3QgbXkgY3VycmVudCBrbm93bGVkZ2UsIHNvIEkgY2FuIHNlZSB3aGljaCBJIG5lZWQgdG8gcmVmcmVzaCBvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWxseSBjb25mbGljdGluZyBvcHRpb25zIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHQgIFNheSBOIGlmIHlvdSBkb24mIzM5O3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcbiAzNTE6XHRcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXG4gMzUyOlx0XHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXG4gMzUzOlx0XG4gMzU0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCYjMzQ7XG4gMzU1Olx0XG4gMzU2Olx0Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuIDM1NzpcdFx0dHJpc3RhdGUgXCYjMzQ7Wm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAzNTg6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuIDM1OTpcdFx0aGVscFxuIDM2MDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcbiAzNjE6XHRcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcbiAzNjI6XHRcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXG4gMzYzOlx0XHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXG4gMzY0Olx0XHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcbiAzNjU6XHRcdCAgbGlrZTpcbiAzNjY6XHRcbiAzNjc6XHRcdCAgZWNobyBcJiMzNDthZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcJiMzNDsgXHUwMDNlIFxcXG4gMzY4Olx0XHRcdC9kZXYvemxvb3AtY29udHJvbFxuIDM2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTMyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBwcm9jZXNzIHRoaXPigKYKCioqWm9uZWQgQmxvY2sgRGV2aWNlIENvbmZ1c2lvbiAtIEEgUXVpY2sgRGl2ZSoqCgpIb2xkIG9uIGEgc2Vjb25kLiAqQkxLX0RFVl9aT05FRF9MT09QKj8gSSBoYWRuJiMzOTt0IHNlZW4gdGhhdCBvbmUgYmVmb3JlLiBJJiMzOTttIHVzdWFsbHkgcHJldHR5IHVwLXRvLWRhdGUgb24gYmxvY2sgZGV2aWNlIGRlZmluaXRpb25zLCBidXQgdGhpcyBjYXVnaHQgbWUgb2ZmIGd1YXJkLiBXYWl0LCBpc24mIzM5O3QgKkJMS19ERVZfWk9ORUQqIHRoZSBwcmltYXJ5IG9uZSBJJiMzOTtkIGJlIGxvb2tpbmcgYXQ/IFllYWgsIHRoYXQgcmluZ3MgYSBiZWxsLiBOb3csIGxldCYjMzk7cyB0aGlua+KApiB3aGF0IGFib3V0ICpOVUxMX0JMS19aT05FRCo/IEhtbSwgdGhhdCBjb3VsZCBhY3R1YWxseSBiZSByZWxldmFudCB0byBteSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byAqTlVMTF9CTEtfWk9ORUQqLCBJJiMzOTtsbCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBicm9hZGVyICpOVUxMX0JMSyogY29udGV4dC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJpZ2h0IGFic3RyYWN0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OVUxMX0JMSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX05VTExfQkxLXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O051bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctOS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYE5VTExfQkxLYCBab25lZCBTdXBwb3J0KioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYE5VTExfQkxLYCB6b25lZCBzdXBwb3J0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzdGFydCBieSB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIGxvd2VzdCBsZXZlbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgaG93IGl0IHdpbGwgcGVyZm9ybSBpbiBhIHR5cGljYWwgd29ya2xvYWQuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHRoZSB6b25lZCBjaGFyYWN0ZXJpc3RpY3MgYXJlIGxldmVyYWdlZCwgYW5kIHdoZXJlIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG1heSBiZSBhdmFpbGFibGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zIGFuZCBjYXBhYmlsaXRpZXMuIEFyZSB3ZSBnZXR0aW5nIGZ1bGwgdXRpbGl6YXRpb24gb3V0IG9mIHRoaXMgZmVhdHVyZT8gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIHNwZWNpZmljIGNvbnRyb2xsZXJzIG9yIGRyaXZlIG1vZGVscz8gTXkgZm9jdXMgaGFzIHRvIGJlIG9uIHRoZSBkZXRhaWxzIG9mIGJsb2NrIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O051bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuICAxMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX05VTExfQkxLIFx1MDAyNlx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBab25lZCBDb25maWd1cmF0aW9uIG9mIGBudWxsX2Jsa2AqKgoKSG1tLCBpdCBzZWVtcyBsaWtlIGBudWxsX2Jsa2AgbWlnaHQgbm90IGhhdmUgYSBkZWRpY2F0ZWQsIHNlcGFyYXRlIHpvbmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhhdCYjMzk7cyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gY2xhcmlmeSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgIG9yLCBpZiBpdCBleGlzdHMsIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2Ugc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6b25lZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU9MTA9ZW5kaWZcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6MTE6bnVsbF9ibGstJChDT05GSUdfQkxLX0RFVl9aT05FRCkgJiM0Mzs9IHpvbmVkLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMzQ9TU9EVUxFX1BBUk1fREVTQyhtYnBzLCBcJiMzNDtMaW1pdCBtYXhpbXVtIGJhbmR3aWR0aCAoaW4gTWlCL3MpLiBEZWZhdWx0OiAwIChubyBsaW1pdClcJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjM1LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjM2OnN0YXRpYyBib29sIGdfem9uZWQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzc6bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVkLCBnX3pvbmVkLCBib29sLCBTX0lSVUdPKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIzODpNT0RVTEVfUEFSTV9ERVNDKHpvbmVkLCBcJiMzNDtNYWtlIGRldmljZSBhcyBhIGhvc3QtbWFuYWdlZCB6b25lZCBibG9jayBkZXZpY2UuIERlZmF1bHQ6IGZhbHNlXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIzOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDE9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfc2l6ZSwgZ196b25lX3NpemUsIHVsb25nLCBTX0lSVUdPKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI0MjpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfc2l6ZSwgXCYjMzQ7Wm9uZSBzaXplIGluIE1CIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBNdXN0IGJlIHBvd2VyLW9mLXR3bzogRGVmYXVsdDogMjU2XCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI0My1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDU9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfY2FwYWNpdHksIGdfem9uZV9jYXBhY2l0eSwgdWxvbmcsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjQ2Ok1PRFVMRV9QQVJNX0RFU0Moem9uZV9jYXBhY2l0eSwgXCYjMzQ7Wm9uZSBjYXBhY2l0eSBpbiBNQiB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gQ2FuIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6b25lIHNpemUuIERlZmF1bHQ6IFpvbmUgc2l6ZVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNDctXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjQ5PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX25yX2NvbnYsIGdfem9uZV9ucl9jb252LCB1aW50LCAwNDQ0KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI1MDpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfbnJfY29udiwgXCYjMzQ7TnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gRGVmYXVsdDogMFwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNTEtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjUzPW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX21heF9vcGVuLCBnX3pvbmVfbWF4X29wZW4sIHVpbnQsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjU0Ok1PRFVMRV9QQVJNX0RFU0Moem9uZV9tYXhfb3BlbiwgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2Ygb3BlbiB6b25lcyB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gRGVmYXVsdDogMCAobm8gbGltaXQpXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI1NS1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNTc9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfbWF4X2FjdGl2ZSwgZ196b25lX21heF9hY3RpdmUsIHVpbnQsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjU4Ok1PRFVMRV9QQVJNX0RFU0Moem9uZV9tYXhfYWN0aXZlLCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgem9uZXMgd2hlbiBibG9jayBkZXZpY2UgaXMgem9uZWQuIERlZmF1bHQ6IDAgKG5vIGxpbWl0KVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNTktXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjY2PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX2Z1bGwsIGdfem9uZV9mdWxsLCBib29sLCBTX0lSVUdPKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI2NzpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfZnVsbCwgXCYjMzQ7SW5pdGlhbGl6ZSB0aGUgc2VxdWVudGlhbCB3cml0ZSByZXF1aXJlZCB6b25lcyBvZiBhIHpvbmVkIGRldmljZSB0byBiZSBmdWxsLiBEZWZhdWx0OiBmYWxzZVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNjgtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NDYxPU5VTExCX0RFVklDRV9BVFRSKGNhY2hlX3NpemUsIHVsb25nLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ2MjpOVUxMQl9ERVZJQ0VfQVRUUih6b25lZCwgYm9vbCwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy00NjMtTlVMTEJfREVWSUNFX0FUVFIoem9uZV9zaXplLCB1bG9uZywgTlVMTCk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTk2PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpudWxsYl9kZXZpY2VfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02MzItXHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl96b25lX3NpemUsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2MzM6XHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl96b25lZCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTYzNC1cdE5VTEwsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzc3PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgxNS1cdGRldi1cdTAwM2V1c2VfcGVyX25vZGVfaGN0eCA9IGdfdXNlX3Blcl9ub2RlX2hjdHg7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4MTY6XHRkZXYtXHUwMDNlem9uZWQgPSBnX3pvbmVkO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODE3LVx0ZGV2LVx1MDAzZXpvbmVfc2l6ZSA9IGdfem9uZV9zaXplO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTgzND1zdGF0aWMgdm9pZCBudWxsX2ZyZWVfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MzgtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4Mzk6XHRudWxsX2ZyZWVfem9uZWRfZGV2KGRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04NDAtXHRiYWRibG9ja3NfZXhpdChcdTAwMjZkZXYtXHUwMDNlYmFkYmxvY2tzKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMjQyPXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF90cmFuc2ZlcihzdHJ1Y3QgbnVsbGIgKm51bGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMjUyLVx0aWYgKCFpc193cml0ZSkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTI1MzpcdFx0aWYgKGRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTI1NC1cdFx0XHR2YWxpZF9sZW4gPSBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4obnVsbGIsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTQ0Mj1zdGF0aWMgdm9pZCBudWxsX2hhbmRsZV9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ1My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0NTQ6XHRpZiAoZGV2LVx1MDAzZXpvbmVkKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ1NTpcdFx0c3RzID0gbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChjbWQsIG9wLCBzZWN0b3IsIG5yX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ1Ni1cdGVsc2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNjE5PXN0YXRpYyBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gbnVsbF90aW1lb3V0X3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNjM5LVx0LypcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE2NDA6XHQgKiBJZiB0aGUgZGV2aWNlIGlzIG1hcmtlZCBhcyBibG9ja2luZyAoaS5lLiBtZW1vcnkgYmFja2VkIG9yIHpvbmVkXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNjQxLVx0ICogZGV2aWNlKSwgdGhlIHN1Ym1pc3Npb24gcGF0aCBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciByZXNvdXJjZXNcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNzg5PXN0YXRpYyB2b2lkIG51bGxfY29uZmlnX2Rpc2NhcmQoc3RydWN0IG51bGxiICpudWxsYiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE3OTktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxODAwOlx0aWYgKG51bGxiLVx1MDAzZWRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTgwMS1cdFx0bnVsbGItXHUwMDNlZGV2LVx1MDAzZWRpc2NhcmQgPSBmYWxzZTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE4MDI6XHRcdHByX2luZm8oXCYjMzQ7ZGlzY2FyZCBvcHRpb24gaXMgaWdub3JlZCBpbiB6b25lZCBtb2RlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE4MDMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xODg1PXN0YXRpYyBpbnQgbnVsbF92YWxpZGF0ZV9jb25mKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTE4LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTkxOTpcdGlmIChkZXYtXHUwMDNlem9uZWQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTIwLVx0ICAgICghZGV2LVx1MDAzZXpvbmVfc2l6ZSB8fCAhaXNfcG93ZXJfb2ZfMihkZXYtXHUwMDNlem9uZV9zaXplKSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTU1PXN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTkxLVx0bnVsbF9jb25maWdfZGlzY2FyZChudWxsYiwgXHUwMDI2bGltKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5OTI6XHRpZiAoZGV2LVx1MDAzZXpvbmVkKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTkzOlx0XHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk5NC1cdFx0aWYgKHJ2KVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNDUtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMDQ2Olx0aWYgKG51bGxiLVx1MDAzZWRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjA0NzpcdFx0cnYgPSBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihudWxsYik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMDQ4LVx0XHRpZiAocnYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjA2Ni1vdXRfY2xlYW51cF96b25lOlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjA2NzpcdG51bGxfZnJlZV96b25lZF9kZXYoZGV2KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNjgtb3V0X2NsZWFudXBfdGFnczpcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9NTM9c3RydWN0IG51bGxiX2RldmljZSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTgxLVx0dW5zaWduZWQgbG9uZyBjYWNoZV9zaXplOyAvKiBkaXNrIGNhY2hlIHNpemUgaW4gTUIgKi9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo4MjpcdHVuc2lnbmVkIGxvbmcgem9uZV9zaXplOyAvKiB6b25lIHNpemUgaW4gTUIgaWYgZGV2aWNlIGlzIHpvbmVkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6ODM6XHR1bnNpZ25lZCBsb25nIHpvbmVfY2FwYWNpdHk7IC8qIHpvbmUgY2FwYWNpdHkgaW4gTUIgaWYgZGV2aWNlIGlzIHpvbmVkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtODQtXHR1bnNpZ25lZCBpbnQgem9uZV9ucl9jb252OyAvKiBudW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzICovXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEwNC1cdGJvb2wgZGlzY2FyZDsgLyogaWYgc3VwcG9ydCBkaXNjYXJkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTA1Olx0Ym9vbCB6b25lZDsgLyogaWYgZGV2aWNlIGlzIHpvbmVkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTA2LVx0Ym9vbCB6b25lX2Z1bGw7IC8qIEluaXRpYWxpemUgem9uZXMgdG8gYmUgZnVsbCAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD0xMzg9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX21lbW9yeV9iYWNrZWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQxLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE0MjppbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDQ6dm9pZCBudWxsX2ZyZWVfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ1LWludCBudWxsX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNDctXHRcdCAgICAgIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE0ODpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0OS1cdFx0XHRcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD0xNTI9c3NpemVfdCB6b25lX2NvbmRfc3RvcmUoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNTQtI2Vsc2VcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNTU6c3RhdGljIGlubGluZSBpbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTU2LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE2MC19XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTYxOnN0YXRpYyBpbmxpbmUgaW50IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTYyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTY0LX1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjU6c3RhdGljIGlubGluZSB2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KSB7fVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE2NjpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3Nfem9uZWRfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNjctXHRcdFx0ZW51bSByZXFfb3Agb3AsIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycylcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NDI9c3RhdGljIGlubGluZSB2b2lkIG51bGxfdW5sb2NrX3pvbmUoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01MC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo1MTppbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNTItXHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03OS1cdCAqIHpvbmUgYXQgdGhlIHNhbWUgdGltZSBhcyBzdWNoIHpvbmUgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBjb3JyZXNwb25kXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6ODA6XHQgKiB0byBhbnkgcmVhbCB6b25lZCBkZXZpY2UuXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtODEtXHQgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTc0LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE3NTppbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODYtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg3OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTg4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NjQ2PXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF96b25lX21nbXQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjcwODpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTcwOS1cdFx0XHRcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTc3OD1zc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3ODU6XHRpZiAoIWRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjc4NjpcdFx0cHJfZXJyKFwmIzM0O251bGxfYmxrIGRldmljZSBpcyBub3Qgem9uZWRcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBab25lZCBCbG9jayBEZXZpY2UgU3VwcG9ydCoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBudWxsX2Jsa2Agc3VwcG9ydHMgem9uZWQgZGV2aWNlcyDigJMgdGhhdCYjMzk7cyBnb29kLiBJIHJlbWVtYmVyIGl0IHVzZXMgZWl0aGVyIHRoZSBgZ196b25lZGAgcGFyYW1ldGVyIG9yIGNvbmZpZ2ZzLCBzbyB0aGF0JiMzOTtzIHRoZSBhbmdsZS4gSSBzZWUgdGhlIGltcG9ydGFuY2Ugb2YgYEJMS19ERVZfTlVMTF9CTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgaW4gdGhlIGNvbmZpZy4KCkkgaGF2ZSB0byBjaGVjayBgQkxLX0RFVl9aT05FRF9MT09QYCBhZ2Fpbi4uLndhaXQsIGlzbiYjMzk7dCB0aGF0IG5vdCBtYWlubGluZT8gSG1tLCB0aGUgYGdyZXBgIHJlc3VsdHMgZnJvbSB0aGUgc291cmNlIHNheSBvdGhlcndpc2UuIE9oLCBJIHNlZSDigJMgaXQmIzM5O3MgdGhlcmUgaW4gdGhlIEtjb25maWcuIFJpZ2h0LCBgQkxLX0RFVl9aT05FRGAgaXMgdGhlIG1haW4gb25lLgoKTm93IEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBwYXRjaC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLCBzbyBJJiMzOTtsbCByZXZpZXcgdGhvc2U6CgoqICAgYGJkZXZfY2hlY2tfem9uZV9tZ210YAoqICAgYGRpc2tfem9uZV9zZXRfY29uZGAKKiAgIGBkaXNrX3pvbmVfZ2V0X3N0YXRlYAoqICAgYGRpc2tfem9uZV9nZXRfY29uZGAKKiAgIGBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seWAKKiAgIGBkaXNrX3pvbmVfaXNfc2VxYAoqICAgYGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWdgCiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YAoqICAgYGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlYAoqICAgYGJsa2Rldl9nZXRfem9uZV9pbmZvYAoqICAgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gCiogICBgYmxrX3pvbmVfd3BsdWdfcHJlcGFyZV9iaW9gCiogICBgYmxrX3pvbmVfd3BsdWdfaGFuZGxlX3dyaXRlYAoqICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgCiogICBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYAoqICAgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgCgpJIG5lZWQgdG8gZmlsdGVyIG91dCB0aGUgc3RhdGljIG9uZXMgdGhhdCBhcmUgaW5saW5lZCBvciBsZXNzIGFjY2Vzc2libGUsIGFsdGhvdWdoIHN5emthbGxlciBoYXMgYSBrbmFjayBmb3IgZmluZGluZyB0aGVtIGV2ZW4gaWYgdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuCgpMZXQmIzM5O3Mgc2VlLi4uIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFdoYXQgYWJvdXQgYGJsa2Rldl9nZXRfem9uZV9pbmZvYD8gTm8sIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgdGhvdWdoIGl0IGlzIHVzZWQgaW4gYGJsb2NrL2lvY3RsLmNgLiBBbmQgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGlzIGFsc28gZXhwb3J0ZWQuIFRoZSByZXN0IGFyZSBzdGF0aWM6IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AsIGBkaXNrX3pvbmVfd3BsdWdfYWJvcnRgLCBhbmQgYGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlYC4KCk9rYXksIHNvIEkgd2lsbCBub3cgZm9jdXMgb24gdGhvc2UgdGhhdCBhcmUgZWl0aGVyIG5vbi1zdGF0aWMsIG9yIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKC4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MjI0PWNvbnN0IGNoYXIgKmJsa196b25lX2NvbmRfc3RyKGVudW0gYmxrX3pvbmVfY29uZCB6b25lX2NvbmQpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjMyLX1cbmJsb2NrL2Jsay16b25lZC5jOjIzMzpFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9jb25kX3N0cik7XG5ibG9jay9ibGstem9uZWQuYy0yMzQtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MzAyPWJvb2wgYmRldl96b25lX2lzX3NlcShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMzA4LX1cbmJsb2NrL2Jsay16b25lZC5jOjMwOTpFWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcbmJsb2NrL2Jsay16b25lZC5jLTMxMC1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0zODA9aW50IGJsa2Rldl9yZXBvcnRfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTM4OS19XG5ibG9jay9ibGstem9uZWQuYzozOTA6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X3JlcG9ydF96b25lcyk7XG5ibG9jay9ibGstem9uZWQuYy0zOTEtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9NDE2PWludCBibGtkZXZfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGVudW0gcmVxX29wIG9wLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTQ2Ni19XG5ibG9jay9ibGstem9uZWQuYzo0Njc6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X3pvbmVfbWdtdCk7XG5ibG9jay9ibGstem9uZWQuYy00NjgtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MTAxMD1pbnQgZGlza19yZXBvcnRfem9uZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IGJsa196b25lICp6b25lLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTEwMzctfVxuYmxvY2svYmxrLXpvbmVkLmM6MTAzODpFWFBPUlRfU1lNQk9MX0dQTChkaXNrX3JlcG9ydF96b25lKTtcbmJsb2NrL2Jsay16b25lZC5jLTEwMzktXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MTA5Mz1pbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTExODUtfVxuYmxvY2svYmxrLXpvbmVkLmM6MTE4NjpFWFBPUlRfU1lNQk9MX0dQTChibGtkZXZfZ2V0X3pvbmVfaW5mbyk7XG5ibG9jay9ibGstem9uZWQuYy0xMTg3LVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTEyMDM9aW50IGJsa2Rldl9yZXBvcnRfem9uZXNfY2FjaGVkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xMjQzLX1cbmJsb2NrL2Jsay16b25lZC5jOjEyNDQ6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X3JlcG9ydF96b25lc19jYWNoZWQpO1xuYmxvY2svYmxrLXpvbmVkLmMtMTI0NS1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0xNzQ4PWJvb2wgYmxrX3pvbmVfcGx1Z19iaW8oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgbnJfc2Vncylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xNzg1LX1cbmJsb2NrL2Jsay16b25lZC5jOjE3ODY6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfcGx1Z19iaW8pO1xuYmxvY2svYmxrLXpvbmVkLmMtMTc4Ny1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0yNDk2PWludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTI1NTYtfVxuYmxvY2svYmxrLXpvbmVkLmM6MjU1NzpFWFBPUlRfU1lNQk9MX0dQTChibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKTtcbmJsb2NrL2Jsay16b25lZC5jLTI1NTgtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjU3MT1pbnQgYmxrX3pvbmVfaXNzdWVfemVyb291dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjU5OS19XG5ibG9jay9ibGstem9uZWQuYzoyNjAwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX2lzc3VlX3plcm9vdXQpO1xuYmxvY2svYmxrLXpvbmVkLmMtMjYwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMDAKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneTogWm9uZWQgQmxvY2sgRGV2aWNlIFJlZmFjdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBhc3BlY3RzIG9mIHRoZSB6b25lZCBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24sIHNvIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBpbml0aWFsIGdsYW5jZSBhdCB0aGUgZGlmZnMgaGlnaGxpZ2h0cyBzZXZlcmFsIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgYW5kIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgb25lcyBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gRmlyc3QsIEkgbm90aWNlZCBgYmRldl9jaGVja196b25lX21nbXRgIGlzIG5ld2x5IGludHJvZHVjZWQuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayBpdHMgdmlzaWJpbGl0eSwgYnV0IHNpbmNlIGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBibG9jayBsYXllciYjMzk7cyBidWlsdC1pbiBjb21wb25lbnRzLCBpdCBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGV4cG9ydGVkLiBUaGVuIHRoZXJlIGFyZSBzb21lIG90aGVyIGltcG9ydGFudCBmdW5jdGlvbnMgYGJsa2Rldl9nZXRfem9uZV9pbmZvYCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCBgZGlza19yZXBvcnRfem9uZWAgYW5kIHNvIG9uLCB3aGljaCBhcmUgb2J2aW91c2x5IGNvcmUuCgpNeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZTogYGJkZXZfY2hlY2tfem9uZV9tZ210YCwgYGJsa2Rldl9nZXRfem9uZV9pbmZvYCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCBhbmQgYGRpc2tfcmVwb3J0X3pvbmVgLCBidXQgSSYjMzk7bSByZWZpbmluZyB0aGF0IGxpc3QgYXMgSSBkaXZlIGRlZXBlci4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBhbmQgcmV0cmlldmluZyB6b25lIGluZm9ybWF0aW9uLiBJIGFsc28gaGFkIHRvIGtlZXAgaW4gbWluZCBgc3VibWl0X2Jpb19ub2FjY3RgIGFzIGl0JiMzOTtzIGEgaG90IHBhdGgsIGFuZCBhbnkgY2hhbmdlcyBoZXJlIG5lZWQgdmVyeSBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGVzcGVjaWFsbHkgd2l0aCB0aGUgdXNlIG9mIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAuIEkmIzM5O20gc2xpZ2h0bHkgaGVzaXRhbnQgdG8gZGlyZWN0bHkgdGFyZ2V0IGBzdWJtaXRfYmlvX25vYWNjdGAgZGlyZWN0bHkgaW4gZnV6emluZywgZ2l2ZW4gaXRzIGltcG9ydGFuY2UsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGltcGFjdGVkLgoKRGl2aW5nIGludG8gdGhlIHNvdXJjZSwgSSBjb25maXJtIHRoYXQgYGJkZXZfY2hlY2tfem9uZV9tZ210YCBpcyBpbmRlZWQgYSBgYm9vbGAgZnVuY3Rpb24sIHRha2luZyBgc3RydWN0IGJsb2NrX2RldmljZWAgYW5kIGBzZWN0b3JfdGAgYXMgYXJndW1lbnRzLiBJIGFsc28gdmVyaWZpZWQgdGhlIHNpZ25hdHVyZXMgb2YgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCB3aGljaCBpcyBgaW50YCByZXR1cm5pbmcgZnVuY3Rpb24gb24gYSBgZ2VuZGlza2AsIGFuZCBgYmxrZGV2X2dldF96b25lX2luZm9gLCB3aGljaCBpcyBgaW50YCB3aXRoIGEgYmxvY2sgZGV2aWNlLCBzZWN0b3IsIGFuZCBgYmxrX3pvbmVgIHN0cnVjdHVyZS4gSSYjMzk7bSBub3RpbmcgdGhlIHNpZ25hdHVyZXMgYmVjYXVzZSB0aGVzZSBhcmUgY3J1Y2lhbCBmb3IgY29uc3RydWN0aW5nIG1lYW5pbmdmdWwgZnV6eiBpbnB1dHMgbGF0ZXIuIEltcG9ydGFudGx5LCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfaW5pdF96b25lX3Jlc291cmNlc2AuIFRoZXNlIGFyZSB3b3J0aCBpbmNsdWRpbmcuIEkgYWxzbyBzZWUgdGhhdCBgZGlza196b25lX3dwbHVnX2Fib3J0YCwgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gLCBhbmQgYGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvYCBoYXZlIGFsbCBiZWVuIG1vZGlmaWVkLCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuCgpGb3IgZW5hYmxpbmcgdGhlIGFwcHJvcHJpYXRlIGVudmlyb25tZW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGggYEJMS19ERVZfWk9ORURgLCBgQkxLX0RFVl9OVUxMX0JMS2AsIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYC4gU2luY2UgYEJMS19ERVZfTlVMTF9CTEtgIGlzIHRyaXN0YXRlLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgaWYgSSB3YW50IGl0IGJ1aWx0LWluLCBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuCgpTdW1tYXJpemluZywgdGhlIHBhdGNoIGZvY3VzZXMgb24gcmVmYWN0b3Jpbmcgem9uZSBjb25kaXRpb24gdHJhY2tpbmcgd2l0aGluIHRoZSBibG9jayBsYXllciB1c2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBgem9uZXNfc3RhdGVgIGFycmF5LiBJdOKAmXMgdXBkYXRpbmcgem9uZSBtYW5hZ2VtZW50LCByZXZhbGlkYXRpb24sIGFuZCBpbmZvcm1hdGlvbiByZXRyaWV2YWwgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHBhcnRpdGlvbiBkaXNhYmxpbmcgb24gem9uZWQgZGV2aWNlcy4gTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlOgoKKiAgIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAKKiAgIGBibGtkZXZfZ2V0X3pvbmVfaW5mb2AKKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYAoqICAgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AKKiAgIGBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNgCgpJJiMzOTtsbCB1c2UgYEJMS19ERVZfWk9ORURgLCBgQkxLX0RFVl9OVUxMX0JMS2AsIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWdzLCBlbnN1cmluZyBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgZXhwbGljaXRseSBkZWZpbmVkIGlmIEkgd2FudCBpdCBidWlsdC1pbi4gVGhpcyBzaG91bGQgZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2Ugb2YgdGhlIHJlZmFjdG9yZWQgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBkZXRlY3QgYW55IHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgaGFuZGxpbmcgb3IgYmlvIHN1Ym1pc3Npb24uIEkgZmVlbCBjb25maWRlbnQgd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9jaGVja196b25lX21nbXQmIzM0OywKICAgICYjMzQ7YmxrZGV2X2dldF96b25lX2luZm8mIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgem9uZSBjb25kaXRpb25zIGFyZSB0cmFja2VkIGluIHRoZSBibG9jayBsYXllciwgaW50cm9kdWNpbmcgYGVudW0gYmxrX3pzdGF0ZWAgYW5kIGEgbmV3IGB6b25lc19zdGF0ZWAgYXJyYXkgdG8gcmVwbGFjZSBgem9uZXNfY29uZGAuIEl0IHVwZGF0ZXMgem9uZSBtYW5hZ2VtZW50IGNoZWNrcyAoYGJkZXZfY2hlY2tfem9uZV9tZ210YCksIHpvbmUgcmV2YWxpZGF0aW9uIChgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2ApLCBhbmQgem9uZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwgKGBibGtkZXZfZ2V0X3pvbmVfaW5mb2ApLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2FkZF9kaXNrYCB0byBkaXNhYmxlIHBhcnRpdGlvbnMgb24gem9uZWQgYmxvY2sgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBibG9jayBsYXllciYjMzk7cyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZGV2X2NoZWNrX3pvbmVfbWdtdCYjMzQ7LAogICAgJiMzNDtibGtkZXZfZ2V0X3pvbmVfaW5mbyYjMzQ7LAogICAgJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDssCiAgICAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB6b25lIGNvbmRpdGlvbnMgYXJlIHRyYWNrZWQgaW4gdGhlIGJsb2NrIGxheWVyLCBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBuZXcgYHpvbmVzX3N0YXRlYCBhcnJheSB0byByZXBsYWNlIGB6b25lc19jb25kYC4gSXQgdXBkYXRlcyB6b25lIG1hbmFnZW1lbnQgY2hlY2tzIChgYmRldl9jaGVja196b25lX21nbXRgKSwgem9uZSByZXZhbGlkYXRpb24gKGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCksIGFuZCB6b25lIGluZm9ybWF0aW9uIHJldHJpZXZhbCAoYGJsa2Rldl9nZXRfem9uZV9pbmZvYCkuIEl0IGFsc28gbW9kaWZpZXMgYF9fYWRkX2Rpc2tgIHRvIGRpc2FibGUgcGFydGl0aW9ucyBvbiB6b25lZCBibG9jayBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGJsb2NrIGxheWVyJiMzOTtzIHpvbmVkIHN0b3JhZ2Ugc3VwcG9ydCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gem9uZSBzdGF0ZSB0cmFja2luZyBvciBiaW8gc3VibWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI0Ljc1NDY5MDc2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzYxMjQ2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2hlY2tfem9uZV9tZ210XCIsXG4gICAgXCJibGtkZXZfZ2V0X3pvbmVfaW5mb1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHpvbmUgY29uZGl0aW9ucyBhcmUgdHJhY2tlZCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIG5ldyBgem9uZXNfc3RhdGVgIGFycmF5IHRvIHJlcGxhY2UgYHpvbmVzX2NvbmRgLiBJdCB1cGRhdGVzIHpvbmUgbWFuYWdlbWVudCBjaGVja3MgKGBiZGV2X2NoZWNrX3pvbmVfbWdtdGApLCB6b25lIHJldmFsaWRhdGlvbiAoYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgKSwgYW5kIHpvbmUgaW5mb3JtYXRpb24gcmV0cmlldmFsIChgYmxrZGV2X2dldF96b25lX2luZm9gKS4gSXQgYWxzbyBtb2RpZmllcyBgX19hZGRfZGlza2AgdG8gZGlzYWJsZSBwYXJ0aXRpb25zIG9uIHpvbmVkIGJsb2NrIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYmxvY2sgbGF5ZXIncyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI0Ljc1NDY5OTAyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTkyNjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwNTI4ZTY4ZTk3MDJlMWZmZGVmMWQyM2YyMWYyNzI0N2Q3ZTY3NGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxOTo0NjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xcbmluZGV4IDE5NmJjY2YyN2Y1OGQuLjgwYTRlMmJjYzNmMzQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5AQCAtOTAxLDggKzkwMSwxMSBAQCB2b2lkIHN1Ym1pdF9iaW9fbm9hY2N0KHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcXG4gXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG4gXFx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XFxuLVxcdFxcdC8qIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcy4gKi9cXG4tXFx0XFx0aWYgKCFiZGV2X3pvbmVfaXNfc2VxKGJpby1cXHUwMDNlYmlfYmRldiwgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvcikpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcyB0aGF0IGFyZVxcbitcXHRcXHQgKiBub3Qgb2ZmbGluZSBub3IgcmVhZC1vbmx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFiZGV2X2NoZWNrX3pvbmVfbWdtdChiZGV2LCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yKSlcXG4gXFx0XFx0XFx0Z290byBlbmRfaW87XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xcbmluZGV4IGE1YWZiODQyYmYzNWUuLmYxNzA2OTMwOWFjOWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLXpvbmVkLmNcXG4rKysgYi9ibG9jay9ibGstem9uZWQuY1xcbkBAIC0zOSw2ICszOSwxMDMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHpvbmVfY29uZF9uYW1lW10gPSB7XFxuIH07XFxuICN1bmRlZiBaT05FX0NPTkRfTkFNRVxcbiBcXG4rLypcXG4rICogSW50ZXJuYWwgYW5kIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgZW51bSBibGtfem9uZV9jb25kIHZhbHVlcyBmb3Igem9uZVxcbisgKiBjb25kaXRpb25zLiBBbGwgdGhlc2UgdmFsdWVzIGZpdCBpbnRvIDQtYml0cywgYWxsb3dpbmcgdXNpbmcgdGhlIGhpZ2ggb3JkZXJcXG4rICogYml0cyBhcyB0aGUgem9uZSB0eXBlLlxcbisgKi9cXG4rZW51bSBibGtfenN0YXRlIHtcXG4rXFx0QkxLX1pTVEFURV9OT1RfV1BcXHQ9IDB4MDAsXFxuK1xcdEJMS19aU1RBVEVfRU1QVFlcXHQ9IDB4MDEsXFxuK1xcdEJMS19aU1RBVEVfSU1QX09QRU5cXHQ9IDB4MDIsXFxuK1xcdEJMS19aU1RBVEVfRVhQX09QRU5cXHQ9IDB4MDMsXFxuK1xcdEJMS19aU1RBVEVfQ0xPU0VEXFx0PSAweDA0LFxcbitcXHRCTEtfWlNUQVRFX1JFQURPTkxZXFx0PSAweDA1LFxcbitcXHRCTEtfWlNUQVRFX0ZVTExcXHRcXHQ9IDB4MDYsXFxuK1xcdEJMS19aU1RBVEVfT0ZGTElORVxcdD0gMHgwNyxcXG4rXFx0QkxLX1pTVEFURV9BQ1RJVkVcXHQ9IDB4MDgsXFxuK1xcbitcXHRCTEtfWlNUQVRFX0NPTkRfTUFTS1xcdD0gMHgwRixcXG4rXFxuK1xcdC8qIENvbnZlbnRpb25hbCB6b25lLiAqL1xcbitcXHRCTEtfWkZMQUdfQ09OVlxcdFxcdD0gMHg4MCxcXG4rXFx0QkxLX1pTVEFURV9GTEFHU19NQVNLXFx0PSB+QkxLX1pTVEFURV9DT05EX01BU0ssXFxuK307XFxuK1xcbisvKlxcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGVudW0gYmxrX3pzdGF0ZSBjb25kaXRpb25zIGludG8gZW51bVxcbisgKiBibGtfem9uZV9jb25kaXRpb24gdmFsdWVzLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHU4IGJsa196c3RhdGUyemNvbmRbXSA9IHtcXG4rXFx0W0JMS19aU1RBVEVfTk9UX1dQXVxcdD0gQkxLX1pPTkVfQ09ORF9OT1RfV1AsXFxuK1xcdFtCTEtfWlNUQVRFX0VNUFRZXVxcdD0gQkxLX1pPTkVfQ09ORF9FTVBUWSxcXG4rXFx0W0JMS19aU1RBVEVfSU1QX09QRU5dXFx0PSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOLFxcbitcXHRbQkxLX1pTVEFURV9FWFBfT1BFTl1cXHQ9IEJMS19aT05FX0NPTkRfRVhQX09QRU4sXFxuK1xcdFtCTEtfWlNUQVRFX0NMT1NFRF1cXHQ9IEJMS19aT05FX0NPTkRfQ0xPU0VELFxcbitcXHRbQkxLX1pTVEFURV9SRUFET05MWV1cXHQ9IEJMS19aT05FX0NPTkRfUkVBRE9OTFksXFxuK1xcdFtCTEtfWlNUQVRFX0ZVTExdXFx0PSBCTEtfWk9ORV9DT05EX0ZVTEwsXFxuK1xcdFtCTEtfWlNUQVRFX09GRkxJTkVdXFx0PSBCTEtfWk9ORV9DT05EX09GRkxJTkUsXFxuK1xcdFtCTEtfWlNUQVRFX0FDVElWRV1cXHQ9IEJMS19aT05FX0NPTkRfQUNUSVZFLFxcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSBlbnVtIGJsa196b25lX2NvbmQgYmxrX3pzdGF0ZV90b196b25lX2NvbmQoZW51bSBibGtfenN0YXRlIHpzKVxcbit7XFxuK1xcdHU4IGlkeCA9IHpzIFxcdTAwMjYgQkxLX1pTVEFURV9DT05EX01BU0s7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcXHUwMDNlPSBBUlJBWV9TSVpFKGJsa196c3RhdGUyemNvbmQpKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gYmxrX3pzdGF0ZTJ6Y29uZFtpZHhdO1xcbit9XFxuK1xcbisvKlxcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGludG8gYW4gZW51bVxcbisgKiBibGtfenN0YXRlIGNvbmRpdGlvbiB2YWx1ZS4gVG8ga2VlcCB0aGUgbG9va3VwIHRhYmxlIHNtYWxsLCB0aGVcXG4rICogQkxLX1pPTkVfQ09ORF9BQ1RJVkUgY29uZGl0aW9uIGlzIG5vdCBhZGRlZCBhbmQgaGFuZGxlZCBzZXBhcmF0ZWx5LlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHU4IGJsa196Y29uZDJ6c3RhdGVbXSA9IHtcXG4rXFx0W0JMS19aT05FX0NPTkRfTk9UX1dQXVxcdFxcdD0gQkxLX1pTVEFURV9OT1RfV1AsXFxuK1xcdFtCTEtfWk9ORV9DT05EX0VNUFRZXVxcdFxcdD0gQkxLX1pTVEFURV9FTVBUWSxcXG4rXFx0W0JMS19aT05FX0NPTkRfSU1QX09QRU5dXFx0PSBCTEtfWlNUQVRFX0FDVElWRSxcXG4rXFx0W0JMS19aT05FX0NPTkRfRVhQX09QRU5dXFx0PSBCTEtfWlNUQVRFX0FDVElWRSxcXG4rXFx0W0JMS19aT05FX0NPTkRfQ0xPU0VEXVxcdFxcdD0gQkxLX1pTVEFURV9BQ1RJVkUsXFxuK1xcdFtCTEtfWk9ORV9DT05EX1JFQURPTkxZXVxcdD0gQkxLX1pTVEFURV9SRUFET05MWSxcXG4rXFx0W0JMS19aT05FX0NPTkRfRlVMTF1cXHRcXHQ9IEJMS19aU1RBVEVfRlVMTCxcXG4rXFx0W0JMS19aT05FX0NPTkRfT0ZGTElORV1cXHRcXHQ9IEJMS19aU1RBVEVfT0ZGTElORSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgZW51bSBibGtfenN0YXRlIGJsa196b25lX2NvbmRfdG9fenN0YXRlKGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxcbit7XFxuK1xcdGlmIChjb25kID09IEJMS19aT05FX0NPTkRfQUNUSVZFKVxcbitcXHRcXHRyZXR1cm4gQkxLX1pTVEFURV9BQ1RJVkU7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGNvbmQgXFx1MDAzZT0gQVJSQVlfU0laRShibGtfemNvbmQyenN0YXRlKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGJsa196Y29uZDJ6c3RhdGVbY29uZF07XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbWJpbmUgYW4gZW51bSBibGtfem9uZV9jb25kaXRpb24gYW5kIHpvbmUgZmxhZ3MgaW50byBhIHpvbmVzX3N0YXRlIGFycmF5XFxuKyAqIGVudHJ5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGJsa196c3RhdGVfc2V0KHU4ICp6b25lc19zdGF0ZSwgdW5zaWduZWQgaW50IHpubyxcXG4rXFx0XFx0XFx0XFx0ICBlbnVtIGJsa196b25lX2NvbmQgY29uZCwgdTggZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKHpvbmVzX3N0YXRlKVxcbitcXHRcXHR6b25lc19zdGF0ZVt6bm9dID0gZmxhZ3MgfCBibGtfem9uZV9jb25kX3RvX3pzdGF0ZShjb25kKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1OCBibGtfenN0YXRlX2ZsYWdzKGVudW0gYmxrX3pzdGF0ZSB6cylcXG4re1xcbitcXHRyZXR1cm4genMgXFx1MDAyNiBCTEtfWlNUQVRFX0ZMQUdTX01BU0s7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfenN0YXRlX2lzX2NvbnYoZW51bSBibGtfenN0YXRlIHpzKVxcbit7XFxuK1xcdHJldHVybiBibGtfenN0YXRlX2ZsYWdzKHpzKSBcXHUwMDI2IEJMS19aRkxBR19DT05WO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBQZXItem9uZSB3cml0ZSBwbHVnLlxcbiAgKiBAbm9kZTogaGxpc3Rfbm9kZSBzdHJ1Y3R1cmUgZm9yIG1hbmFnaW5nIHRoZSBwbHVnIHVzaW5nIGEgaGFzaCB0YWJsZS5cXG5AQCAtMTM1LDU1ICsyMzIsNjQgQEAgY29uc3QgY2hhciAqYmxrX3pvbmVfY29uZF9zdHIoZW51bSBibGtfem9uZV9jb25kIHpvbmVfY29uZClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9jb25kX3N0cik7XFxuIFxcbi1zdGF0aWMgdm9pZCBibGtfem9uZV9zZXRfY29uZCh1OCAqem9uZXNfY29uZCwgdW5zaWduZWQgaW50IHpubyxcXG4tXFx0XFx0XFx0ICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpXFxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxcbitcXHRcXHRcXHQgICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpXFxuIHtcXG4tXFx0aWYgKCF6b25lc19jb25kKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHVuc2lnbmVkIGludCB6bm8gPSBkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKTtcXG4rXFx0dTggKnpvbmVzX3N0YXRlO1xcbiBcXG4tXFx0c3dpdGNoIChjb25kKSB7XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9JTVBfT1BFTjpcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxcbi1cXHRcXHR6b25lc19jb25kW3pub10gPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfRU1QVFk6XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9GVUxMOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHR6b25lc19jb25kW3pub10gPSBjb25kO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVxcdTAwM2V6b25lc19zdGF0ZSk7XFxuK1xcdGlmIChsaWtlbHkoem9uZXNfc3RhdGUgXFx1MDAyNlxcdTAwMjYgem5vIFxcdTAwM2MgZGlzay1cXHUwMDNlbnJfem9uZXMpKVxcbitcXHRcXHRibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLFxcbitcXHRcXHRcXHQgICAgICAgYmxrX3pzdGF0ZV9mbGFncyh6b25lc19zdGF0ZVt6bm9dKSk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcXG4tXFx0XFx0XFx0ICAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxcbitzdGF0aWMgaW5saW5lIHU4IGRpc2tfem9uZV9nZXRfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcilcXG4ge1xcbi1cXHR1OCAqem9uZXNfY29uZDtcXG4rXFx0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xcbitcXHR1OCAqem9uZXNfc3RhdGUsIHpzO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXFx1MDAzZXpvbmVzX2NvbmQpO1xcbi1cXHRpZiAoem9uZXNfY29uZCkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBUaGUgY29uZGl0aW9uIG9mIGEgY29udmVudGlvbmFsLCByZWFkb25seSBhbmQgb2ZmbGluZSB6b25lc1xcbi1cXHRcXHQgKiBuZXZlciBjaGFuZ2VzLCBzbyBkbyBub3RoaW5nIGlmIHRoZSB0YXJnZXQgem9uZSBpcyBpbiBvbmUgb2ZcXG4tXFx0XFx0ICogdGhlc2UgY29uZGl0aW9ucy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHN3aXRjaCAoem9uZXNfY29uZFt6bm9dKSB7XFxuLVxcdFxcdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XFxuLVxcdFxcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcXG4tXFx0XFx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRibGtfem9uZV9zZXRfY29uZCh6b25lc19jb25kLCB6bm8sIGNvbmQpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXFx1MDAzZXpvbmVzX3N0YXRlKTtcXG4rXFx0aWYgKGxpa2VseSh6b25lc19zdGF0ZSBcXHUwMDI2XFx1MDAyNiB6bm8gXFx1MDAzYyBkaXNrLVxcdTAwM2Vucl96b25lcykpXFxuK1xcdFxcdHpzID0gem9uZXNfc3RhdGVbem5vXTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR6cyA9IDA7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHpzO1xcbit9XFxuK1xcbitzdGF0aWMgZW51bSBibGtfem9uZV9jb25kIGRpc2tfem9uZV9nZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XFxuK1xcbitcXHRyZXR1cm4gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4rZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShlbnVtIGJsa196b25lX2NvbmQgY29uZClcXG4re1xcbitcXHRyZXR1cm4gY29uZCA9PSBCTEtfWk9ORV9DT05EX1JFQURPTkxZIHx8XFxuK1xcdFxcdGNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZGlza196b25lX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQgPSBkaXNrX3pvbmVfZ2V0X2NvbmQoZGlzaywgc2VjdG9yKTtcXG4rXFxuK1xcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkaXNrX3pvbmVfaXNfc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XFxuK1xcbitcXHRyZXR1cm4gIWJsa196c3RhdGVfaXNfY29udih6cyk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xOTUsMjMgKzMwMSwzNiBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcXG4gICovXFxuIGJvb2wgYmRldl96b25lX2lzX3NlcShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXFxuIHtcXG4tXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LVxcdTAwM2ViZF9kaXNrO1xcbi1cXHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XFxuLVxcdGJvb2wgaXNfc2VxID0gZmFsc2U7XFxuLVxcdHU4ICp6b25lc19jb25kO1xcbitcXHRpZiAoIWJkZXZfaXNfem9uZWQoYmRldikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBkaXNrX3pvbmVfaXNfc2VxKGJkZXYtXFx1MDAzZWJkX2Rpc2ssIHNlY3Rvcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7XFxuK1xcbisvKipcXG4rICogYmRldl9jaGVja196b25lX21nbXQgLSBjaGVjayBpZiBhIHNlY3RvciBiZWxvbmdzIHRvIGEgdmFsaWQgc2VxdWVudGlhbCB6b25lXFxuKyAqIEBiZGV2OiAgICAgICBibG9jayBkZXZpY2UgdG8gY2hlY2tcXG4rICogQHNlY3RvcjogICAgIHNlY3RvciBudW1iZXJcXG4rICpcXG4rICogQ2hlY2sgaWYgQHNlY3RvciBvbiBAYmRldiBpcyBjb250YWluZWQgaW4gYSBzZXF1ZW50aWFsIHdyaXRlIHJlcXVpcmVkIHpvbmVcXG4rICogdGhhdCBpcyBub3Qgb2ZmbGluZSBub3IgcmVhZC1vbmx5LlxcbisgKi9cXG4rYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQ7XFxuK1xcdHU4IHpzO1xcbiBcXG4gXFx0aWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdHpvbmVzX2NvbmQgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cXHUwMDNlem9uZXNfY29uZCk7XFxuLVxcdGlmICh6b25lc19jb25kIFxcdTAwMjZcXHUwMDI2IHpubyBcXHUwMDNjIGRpc2stXFx1MDAzZW5yX3pvbmVzKVxcbi1cXHRcXHRpc19zZXEgPSB6b25lc19jb25kW3pub10gIT0gQkxLX1pPTkVfQ09ORF9OT1RfV1A7XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHR6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi1cXHUwMDNlYmRfZGlzaywgc2VjdG9yKTtcXG4rXFx0aWYgKGJsa196c3RhdGVfaXNfY29udih6cykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiBpc19zZXE7XFxuK1xcdGNvbmQgPSBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XFxuK1xcdHJldHVybiAhZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShjb25kKTtcXG4gfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcXG4gXFxuIC8qXFxuICAqIFpvbmUgcmVwb3J0IGFyZ3VtZW50cyBmb3IgYmxvY2sgZGV2aWNlIGRyaXZlcnMgcmVwb3J0X3pvbmVzIG9wZXJhdGlvbi5cXG5AQCAtNTAwLDEyICs2MTksMTcgQEAgc3RhdGljIGJvb2wgZGlza196b25lX3dwbHVnX2lzX2Z1bGwoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHJldHVybiB6d3BsdWctXFx1MDAzZXdwX29mZnNldCBcXHUwMDNlPSBkaXNrLVxcdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxcbit7XFxuK1xcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1Zy1cXHUwMDNlY29uZCk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxcbiB7XFxuIFxcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbGc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcdHU4ICp6b25lc19jb25kO1xcbitcXHR1OCAqem9uZXNfc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGludCBpZHggPVxcbiBcXHRcXHRoYXNoXzMyKHp3cGx1Zy1cXHUwMDNlem9uZV9ubywgZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9iaXRzKTtcXG4gXFxuQEAgLTUyNCwxNSArNjQ4LDE2IEBAIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFNldCB0aGUgem9uZSBjb25kaXRpb246IGlmIHdlIGRvIG5vdCB5ZXQgaGF2ZSBhIHpvbmVzX2NvbmQgYXJyYXlcXG4rXFx0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfc3RhdGUgYXJyYXlcXG4gXFx0ICogYXR0YWNoZWQgdG8gdGhlIGRpc2ssIHRoZW4gdGhpcyBpcyBhIHpvbmUgd3JpdGUgcGx1ZyBpbnNlcnQgZnJvbSB0aGVcXG4gXFx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcXG4gXFx0ICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLlxcbiBcXHQgKi9cXG4tXFx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVxcdTAwM2V6b25lc19jb25kLFxcbitcXHR6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVxcdTAwM2V6b25lc19zdGF0ZSxcXG4gXFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcXG4tXFx0aWYgKHpvbmVzX2NvbmQpXFxuLVxcdFxcdHp3cGx1Zy1cXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbendwbHVnLVxcdTAwM2V6b25lX25vXTtcXG4rXFx0aWYgKHpvbmVzX3N0YXRlKVxcbitcXHRcXHR6d3BsdWctXFx1MDAzZWNvbmQgPVxcbitcXHRcXHRcXHRibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6b25lc19zdGF0ZVt6d3BsdWctXFx1MDAzZXpvbmVfbm9dKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR6d3BsdWctXFx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcXG4gXFxuQEAgLTU3NCw2ICs2OTksMjYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKmRpc2tfZ2V0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHJldHVybiBkaXNrX2dldF9oYXNoZWRfem9uZV93cGx1ZyhkaXNrLCBzZWN0b3IpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgdm9pZCAoKmFjdG9yKShzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqKSxcXG4rXFx0XFx0XFx0XFx0ICAgICB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKykge1xcbitcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLCBcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaFtpXSxcXG4rXFx0XFx0XFx0XFx0XFx0IG5vZGUpXFxuK1xcdFxcdFxcdGFjdG9yKHp3cGx1ZywgZGF0YSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnID1cXG5AQCAtNTkyLDkgKzczNyw5IEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxcbiBcXHRXQVJOX09OX09OQ0UoIWJpb19saXN0X2VtcHR5KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWJpb19saXN0KSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XFxuLVxcdGJsa196b25lX3NldF9jb25kKHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVxcdTAwM2V6b25lc19jb25kLFxcbitcXHRibGtfenN0YXRlX3NldChyY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay1cXHUwMDNlem9uZXNfc3RhdGUsXFxuIFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKSksXFxuLVxcdFxcdFxcdCAgendwbHVnLVxcdTAwM2V6b25lX25vLCB6d3BsdWctXFx1MDAzZWNvbmQpO1xcbitcXHRcXHQgICAgICAgendwbHVnLVxcdTAwM2V6b25lX25vLCB6d3BsdWctXFx1MDAzZWNvbmQsIDApO1xcbiBcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbm9kZSk7XFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmRpc2stXFx1MDAzZW5yX3pvbmVfd3BsdWdzKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XFxuQEAgLTYwOCw2ICs3NTMsNTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc2tfcHV0X3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXFxuIFxcdFxcdGRpc2tfZnJlZV96b25lX3dwbHVnKHp3cGx1Zyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXFxuK3tcXG4rXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbitcXG4rXFx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XFxuK1xcdGJpb19pb19lcnJvcihiaW8pO1xcbitcXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XFxuK1xcdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xcbitcXHRibGtfcXVldWVfZXhpdChxKTtcXG4rfVxcbitcXG4rLypcXG4rICogQWJvcnQgKGZhaWwpIGFsbCBwbHVnZ2VkIEJJT3Mgb2YgYSB6b25lIHdyaXRlIHBsdWcuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfYWJvcnQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXFxuK3tcXG4rXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSB6d3BsdWctXFx1MDAzZWRpc2s7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbztcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoYmlvX2xpc3RfZW1wdHkoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlYmlvX2xpc3QpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCIlczogem9uZSAldTogQWJvcnRpbmcgcGx1Z2dlZCBCSU9zXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgendwbHVnLVxcdTAwM2VkaXNrLVxcdTAwM2VkaXNrX25hbWUsIHp3cGx1Zy1cXHUwMDNlem9uZV9ubyk7XFxuK1xcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWJpb19saXN0KSkpXFxuK1xcdFxcdGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcih6d3BsdWcsIGJpbyk7XFxuK1xcbitcXHR6d3BsdWctXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZVxcbitcXHQgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlXFxuK1xcdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay1cXHUwMDNlcXVldWUpKSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcXG4rXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KSkge1xcbitcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlblxcbiAgKiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGUgaGFzaCB0YWJsZS4gVGhlIHpvbmUgd3JpdGUgcGx1ZyB3aWxsIGJlXFxuQEAgLTYyNSw2ICs4MTcsMTIgQEAgc3RhdGljIHZvaWQgZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2NoZWNrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcXG4ge1xcbitcXHRpZiAoZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkge1xcbitcXHRcXHRkaXNrX3pvbmVfd3BsdWdfYWJvcnQoendwbHVnKTtcXG4rXFx0XFx0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCEoendwbHVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19aT05FX1dQTFVHX0RFQUQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC03MDgsNTMgKzkwNiw2IEBAIHN0YXRpYyBzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKmRpc2tfZ2V0X29yX2FsbG9jX3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHJldHVybiB6d3BsdWc7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXFxuLXtcXG4tXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbi1cXG4tXFx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XFxuLVxcdGJpb19pb19lcnJvcihiaW8pO1xcbi1cXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XFxuLVxcdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xcbi1cXHRibGtfcXVldWVfZXhpdChxKTtcXG4tfVxcbi1cXG4tLypcXG4tICogQWJvcnQgKGZhaWwpIGFsbCBwbHVnZ2VkIEJJT3Mgb2YgYSB6b25lIHdyaXRlIHBsdWcuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfYWJvcnQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXFxuLXtcXG4tXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSB6d3BsdWctXFx1MDAzZWRpc2s7XFxuLVxcdHN0cnVjdCBiaW8gKmJpbztcXG4tXFxuLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jayk7XFxuLVxcbi1cXHRpZiAoYmlvX2xpc3RfZW1wdHkoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlYmlvX2xpc3QpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCIlczogem9uZSAldTogQWJvcnRpbmcgcGx1Z2dlZCBCSU9zXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgendwbHVnLVxcdTAwM2VkaXNrLVxcdTAwM2VkaXNrX25hbWUsIHp3cGx1Zy1cXHUwMDNlem9uZV9ubyk7XFxuLVxcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWJpb19saXN0KSkpXFxuLVxcdFxcdGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcih6d3BsdWcsIGJpbyk7XFxuLVxcbi1cXHR6d3BsdWctXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZVxcbi1cXHQgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlXFxuLVxcdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXFxuLVxcdCAqL1xcbi1cXHRpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay1cXHUwMDNlcXVldWUpKSB7XFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcXG4tXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KSkge1xcbi1cXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KTtcXG4tXFx0XFx0XFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xcbi1cXHR9XFxuLX1cXG4tXFxuIC8qXFxuICAqIFVwZGF0ZSBhIHpvbmUgd3JpdGUgcGx1ZyBjb25kaXRpb24gYmFzZWQgb24gdGhlIHdyaXRlIHBvaW50ZXIgb2Zmc2V0LlxcbiAgKi9cXG5AQCAtNzg1LDggKzkzNiwxMCBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFxuIFxcdC8qIFVwZGF0ZSB0aGUgem9uZSB3cml0ZSBwb2ludGVyIGFuZCBhYm9ydCBhbGwgcGx1Z2dlZCBCSU9zLiAqL1xcbiBcXHR6d3BsdWctXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURTtcXG4tXFx0endwbHVnLVxcdTAwM2V3cF9vZmZzZXQgPSB3cF9vZmZzZXQ7XFxuLVxcdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xcbitcXHRpZiAoIWRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1ZykpIHtcXG4rXFx0XFx0endwbHVnLVxcdTAwM2V3cF9vZmZzZXQgPSB3cF9vZmZzZXQ7XFxuK1xcdFxcdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xcbitcXHR9XFxuIFxcbiBcXHRkaXNrX3pvbmVfd3BsdWdfYWJvcnQoendwbHVnKTtcXG4gXFx0aWYgKCF6d3BsdWctXFx1MDAzZXdwX29mZnNldCB8fCBkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpKVxcbkBAIC04MTYsOCArOTY5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBibGtfem9uZV93cF9vZmZzZXQoc3RydWN0IGJsa196b25lICp6b25lKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXFxuIHtcXG4gXFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XFxuIFxcdHVuc2lnbmVkIGludCB3cF9vZmZzZXQgPSBibGtfem9uZV93cF9vZmZzZXQoem9uZSk7XFxuQEAgLTgyOSw2ICs5ODIsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0aWYgKHp3cGx1Zy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURSlcXG4gXFx0XFx0XFx0ZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoZGlzaywgendwbHVnLCB3cF9vZmZzZXQpO1xcbitcXHRcXHRpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLVxcdTAwM2Vjb25kKSkge1xcbitcXHRcXHRcXHR6d3BsdWctXFx1MDAzZWNvbmQgPSB6b25lLVxcdTAwM2Vjb25kO1xcbitcXHRcXHRcXHRkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2endwbHVnLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTtcXG4gXFx0fVxcbkBAIC04NzEsNyArMTAyOCw3IEBAIGludCBkaXNrX3JlcG9ydF96b25lKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKVxcbi1cXHRcXHRkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XFxuK1xcdFxcdGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpO1xcbiBcXG4gXFx0aWYgKGFyZ3MgXFx1MDAyNlxcdTAwMjYgYXJncy1cXHUwMDNlY2IpXFxuIFxcdFxcdHJldHVybiBhcmdzLVxcdTAwM2VjYih6b25lLCBpZHgsIGFyZ3MtXFx1MDAzZWRhdGEpO1xcbkBAIC05NDAsNyArMTA5Nyw3IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuIFxcdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGJkZXZfem9uZV9zZWN0b3JzKGJkZXYpO1xcbiBcXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFx0dTggKnpvbmVzX2NvbmQ7XFxuK1xcdHU4ICp6b25lc19zdGF0ZSwgenM7XFxuIFxcbiBcXHRpZiAoIWJkZXZfaXNfem9uZWQoYmRldikpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtOTU1LDEyICsxMTEyLDE4IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuIFxcdFxcdHJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVxcdTAwM2V6b25lc19jb25kKTtcXG4tXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoIHx8ICF6b25lc19jb25kKSB7XFxuK1xcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXFx1MDAzZXpvbmVzX3N0YXRlKTtcXG4rXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoIHx8ICF6b25lc19zdGF0ZSkge1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0cmV0dXJuIGJsa2Rldl9yZXBvcnRfem9uZV9mYWxsYmFjayhiZGV2LCBzZWN0b3IsIHpvbmUpO1xcbiBcXHR9XFxuLVxcdHpvbmUtXFx1MDAzZWNvbmQgPSB6b25lc19jb25kW2Rpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpXTtcXG4rXFxuK1xcdHpzID0gem9uZXNfc3RhdGVbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildO1xcbitcXHR6b25lLVxcdTAwM2Vjb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xcbitcXHRpZiAoYmxrX3pzdGF0ZV9pc19jb252KHpzKSlcXG4rXFx0XFx0em9uZS1cXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMO1xcbitcXHRlbHNlXFxuK1xcdFxcdHpvbmUtXFx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHR6b25lLVxcdTAwM2VzdGFydCA9IHNlY3RvcjtcXG5AQCAtOTcwLDggKzExMzMsNyBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxcbiBcXHQgKiBJZiB0aGlzIGlzIGEgY29udmVudGlvbmFsIHpvbmUsIHdlIGRvIG5vdCBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIGFuZFxcbiBcXHQgKiBjYW4gcmVwb3J0IHRoZSB6b25lIGltbWVkaWF0ZWx5LlxcbiBcXHQgKi9cXG4tXFx0aWYgKHpvbmUtXFx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9OT1RfV1ApIHtcXG4tXFx0XFx0em9uZS1cXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMO1xcbitcXHRpZiAoem9uZS1cXHUwMDNldHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkge1xcbiBcXHRcXHR6b25lLVxcdTAwM2VjYXBhY2l0eSA9IHpvbmVfc2VjdG9ycztcXG4gXFx0XFx0em9uZS1cXHUwMDNld3AgPSBVTExPTkdfTUFYO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtOTgyLDE0ICsxMTQ0LDEyIEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuIFxcdCAqIG9mZmxpbmUsIG9ubHkgc2V0IHRoZSB6b25lIHdyaXRlIHBvaW50ZXIgdG8gYW4gaW52YWxpZCB2YWx1ZSBhbmRcXG4gXFx0ICogcmVwb3J0IHRoZSB6b25lLlxcbiBcXHQgKi9cXG4tXFx0em9uZS1cXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRO1xcbiBcXHRpZiAoZGlza196b25lX2lzX2xhc3QoZGlzaywgem9uZSkpXFxuIFxcdFxcdHpvbmUtXFx1MDAzZWNhcGFjaXR5ID0gZGlzay1cXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5O1xcbiBcXHRlbHNlXFxuIFxcdFxcdHpvbmUtXFx1MDAzZWNhcGFjaXR5ID0gZGlzay1cXHUwMDNlem9uZV9jYXBhY2l0eTtcXG4gXFxuLVxcdGlmICh6b25lLVxcdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHxcXG4tXFx0ICAgIHpvbmUtXFx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FKSB7XFxuK1xcdGlmIChkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHpvbmUtXFx1MDAzZWNvbmQpKSB7XFxuIFxcdFxcdHpvbmUtXFx1MDAzZXdwID0gVUxMT05HX01BWDtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG5AQCAtMTEwOCwzNCArMTI2OCwzMiBAQCBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9iaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19yZXNldF93cChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zywgdm9pZCAqZGF0YSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldCh6d3BsdWctXFx1MDAzZWRpc2ssIHp3cGx1ZywgMCk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9hbGxfYmlvX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzaztcXG4tXFx0c2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7XFxuLVxcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzZWN0b3JfdCBzZWN0b3I7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4tXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZkaXNrLVxcdTAwM2Vucl96b25lX3dwbHVncykpIHtcXG4tXFx0XFx0LyogVXBkYXRlIHRoZSBjb25kaXRpb24gb2YgYWxsIHpvbmUgd3JpdGUgcGx1Z3MuICovXFxuLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpKyspIHtcXG4tXFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgbm9kZSkge1xcbi1cXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2endwbHVnLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdFxcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KGRpc2ssIHp3cGx1ZywgMCk7XFxuLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdH1cXG4rXFx0LyogVXBkYXRlIHRoZSBjb25kaXRpb24gb2YgYWxsIHpvbmUgd3JpdGUgcGx1Z3MuICovXFxuK1xcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2ZGlzay1cXHUwMDNlbnJfem9uZV93cGx1Z3MpKVxcbitcXHRcXHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MoZGlzaywgZGlza196b25lX3dwbHVnX3Jlc2V0X3dwLCBOVUxMKTtcXG4gXFxuIFxcdC8qIFVwZGF0ZSB0aGUgY2FjaGVkIHpvbmUgY29uZGl0aW9ucy4gKi9cXG4tXFx0Zm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgXFx1MDAzYyBjYXBhY2l0eTtcXG4tXFx0ICAgICBzZWN0b3IgKz0gYmRldl96b25lX3NlY3RvcnMoYmlvLVxcdTAwM2ViaV9iZGV2KSlcXG4rXFx0Zm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgXFx1MDAzYyBnZXRfY2FwYWNpdHkoZGlzayk7XFxuK1xcdCAgICAgc2VjdG9yICs9IGJkZXZfem9uZV9zZWN0b3JzKGJpby1cXHUwMDNlYmlfYmRldikpIHtcXG4rXFx0XFx0aWYgKCFkaXNrX3pvbmVfaXNfc2VxKGRpc2ssIHNlY3RvcikgfHxcXG4rXFx0XFx0ICAgIGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGRpc2ssIHNlY3RvcikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRkaXNrX3pvbmVfc2V0X2NvbmQoZGlzaywgc2VjdG9yLCBCTEtfWk9ORV9DT05EX0VNUFRZKTtcXG4rXFx0fVxcbiBcXHRjbGVhcl9iaXQoR0RfWk9ORV9BUFBFTkRfVVNFRCwgXFx1MDAyNmRpc2stXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG5AQCAtMTM4MSwxMSArMTUzOSwxMiBAQCBzdGF0aWMgYm9vbCBibGtfem9uZV93cGx1Z19wcmVwYXJlX2JpbyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwgem9uZS5cXG4tXFx0ICogV2Uga25vdyBzdWNoIEJJTyB3aWxsIGZhaWwsIGFuZCB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93IG91clxcbi1cXHQgKiB3cml0ZSBwb2ludGVyIG9mZnNldCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgem9uZS5cXG4rXFx0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seVxcbitcXHQgKiBvciBvZmZsaW5lIHpvbmUuIFdlIGtub3cgc3VjaCBCSU9zIHdpbGwgZmFpbCwgc28gdGhlcmUgaXMgbm8gcG9pbnRcXG4rXFx0ICogaW4gaXNzdWluZyB0aGVtLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXFxuK1xcdGlmIChkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpIHx8XFxuK1xcdCAgICBkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAoYmlvX29wKGJpbykgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XFxuQEAgLTE0NDIsNyArMTYwMSw3IEBAIHN0YXRpYyBib29sIGJsa196b25lX3dwbHVnX2hhbmRsZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBucl9zZWdzKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb252ZW50aW9uYWwgem9uZXMgZG8gbm90IG5lZWQgd3JpdGUgcGx1Z2dpbmcuICovXFxuLVxcdGlmICghYmRldl96b25lX2lzX3NlcShiaW8tXFx1MDAzZWJpX2JkZXYsIHNlY3RvcikpIHtcXG4rXFx0aWYgKCFkaXNrX3pvbmVfaXNfc2VxKGRpc2ssIHNlY3RvcikpIHtcXG4gXFx0XFx0LyogWm9uZSBhcHBlbmQgdG8gY29udmVudGlvbmFsIHpvbmVzIGlzIG5vdCBhbGxvd2VkLiAqL1xcbiBcXHRcXHRpZiAoYmlvX29wKGJpbykgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XFxuIFxcdFxcdFxcdGJpb19pb19lcnJvcihiaW8pO1xcbkBAIC0xODU0LDEyICsyMDEzLDIwIEBAIHN0YXRpYyBpbnQgZGlza196b25lX3dwbHVnc193b3JrZXIodm9pZCAqZGF0YSlcXG4gXFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmRpc2stXFx1MDAzZW5yX3pvbmVfd3BsdWdzLCAwKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdCk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyX2Jpb19kb25lKTtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4re1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcXHUwMDI2ZGlzay1cXHUwMDNlcXVldWUtXFx1MDAzZWxpbWl0cztcXG4rXFxuK1xcdHJldHVybiBESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLVxcdTAwM2VjaHVua19zZWN0b3JzKTtcXG4rfVxcbitcXG4gLypcXG4gICogRm9yIHRoZSBzaXplIG9mIGEgZGlzayB6b25lIHdyaXRlIHBsdWcgaGFzaCB0YWJsZSwgdXNlIHRoZSBzaXplIG9mIHRoZVxcbiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmRcXG5AQCAtMTg2OSwxMyArMjAzNiwyMSBAQCB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gI2RlZmluZSBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTXFx0XFx0OVxcbiAjZGVmaW5lIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFXFx0MTI4XFxuIFxcbi1zdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZSlcXG4rc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcXHUwMDI2ZGlzay1cXHUwMDNlcXVldWUtXFx1MDAzZWxpbWl0cztcXG4rXFx0dW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XFxuK1xcdHVuc2lnbmVkIGludCBwb29sX3NpemUsIGk7XFxuIFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiBcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2ZGlzay1cXHUwMDNlbnJfem9uZV93cGx1Z3MsIDApO1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXFxuK1xcdCAqIHpvbmVzLCB1c2UgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUuXFxuK1xcdCAqL1xcbitcXHRwb29sX3NpemUgPSBtYXgobGltLVxcdTAwM2VtYXhfb3Blbl96b25lcywgbGltLVxcdTAwM2VtYXhfYWN0aXZlX3pvbmVzKTtcXG4rXFx0aWYgKCFwb29sX3NpemUpXFxuK1xcdFxcdHBvb2xfc2l6ZSA9IG1pbihCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSwgbnJfem9uZXMpO1xcbitcXG4gXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9iaXRzID1cXG4gXFx0XFx0bWluKGlsb2cyKHBvb2xfc2l6ZSkgKyAxLCBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTKTtcXG4gXFxuQEAgLTE4OTMsMjEgKzIwNjgsNiBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbClcXG4gXFx0XFx0Z290byBmcmVlX2hhc2g7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBtYXkgYWxyZWFkeSBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBhcyB0aGlzIGZ1bmN0aW9uIG1heVxcbi1cXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcXG4tXFx0ICogdGhlIHdvcmtxdWV1ZSAodGhlIHpvbmUgd3JpdGUgcGx1Z3Mgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBhdFxcbi1cXHQgKiBkaXNrX3JlbGVhc2UoKSB0aW1lKS5cXG4tXFx0ICovXFxuLVxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcXG4tXFx0XFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EgPVxcbi1cXHRcXHRcXHRhbGxvY193b3JrcXVldWUoXFxcIiVzX3p3cGx1Z3NcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXFxuLVxcdFxcdFxcdFxcdFxcdHBvb2xfc2l6ZSwgZGlzay1cXHUwMDNlZGlza19uYW1lKTtcXG4tXFx0XFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSlcXG4tXFx0XFx0XFx0Z290byBkZXN0cm95X3Bvb2w7XFxuLVxcdH1cXG4tXFxuIFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9XFxuIFxcdFxcdGt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLFxcbiBcXHRcXHRcXHQgICAgICAgXFxcIiVzX3p3cGx1Z3Nfd29ya2VyXFxcIiwgZGlzay1cXHUwMDNlZGlza19uYW1lKTtcXG5AQCAtMTkxOCw4ICsyMDc4LDE4IEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFx0fVxcbiBcXHR3YWtlX3VwX3Byb2Nlc3MoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcXG4gXFxuK1xcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxID1cXG4rXFx0XFx0YWxsb2Nfd29ya3F1ZXVlKFxcXCIlc196d3BsdWdzXFxcIixcXG4rXFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxcbitcXHRcXHRcXHRcXHRwb29sX3NpemUsIGRpc2stXFx1MDAzZWRpc2tfbmFtZSk7XFxuK1xcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpXFxuK1xcdFxcdGdvdG8gc3RvcF93b3JrZXI7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK3N0b3Bfd29ya2VyOlxcbitcXHRrdGhyZWFkX3N0b3AoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcXG4rXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcXG4gZGVzdHJveV9wb29sOlxcbiBcXHRtZW1wb29sX2Rlc3Ryb3koZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCk7XFxuIFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMO1xcbkBAIC0xOTYzLDE5ICsyMTMzLDE5IEBAIHN0YXRpYyB2b2lkIGRpc2tfZGVzdHJveV96b25lX3dwbHVnc19oYXNoX3RhYmxlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19wb29sID0gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZGlza19zZXRfem9uZXNfY29uZF9hcnJheShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggKnpvbmVzX2NvbmQpXFxuK3N0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfc3RhdGUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTtcXG4tXFx0em9uZXNfY29uZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay1cXHUwMDNlem9uZXNfY29uZCwgem9uZXNfY29uZCxcXG4rXFx0em9uZXNfc3RhdGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGRpc2stXFx1MDAzZXpvbmVzX3N0YXRlLCB6b25lc19zdGF0ZSxcXG4gXFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTtcXG4rXFx0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuIFxcdGlmIChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193b3JrZXIpIHtcXG4gXFx0XFx0a3RocmVhZF9zdG9wKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XFxuQEAgLTE5ODMsMzAgKzIxNTMsMjIgQEAgc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHR9XFxuIFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdCkpO1xcbiBcXG4tXFx0aWYgKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKVxcbi1cXHRcXHRkcmFpbl93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbitcXHRpZiAoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcXG4rXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbitcXHRcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XFxuK1xcdH1cXG4gXFxuIFxcdGRpc2tfZGVzdHJveV96b25lX3dwbHVnc19oYXNoX3RhYmxlKGRpc2spO1xcbiBcXG4tXFx0ZGlza19zZXRfem9uZXNfY29uZF9hcnJheShkaXNrLCBOVUxMKTtcXG4rXFx0ZGlza19zZXRfem9uZXNfc3RhdGVfYXJyYXkoZGlzaywgTlVMTCk7XFxuIFxcdGRpc2stXFx1MDAzZXpvbmVfY2FwYWNpdHkgPSAwO1xcbiBcXHRkaXNrLVxcdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSAwO1xcbiBcXHRkaXNrLVxcdTAwM2Vucl96b25lcyA9IDA7XFxuIH1cXG4gXFxuLXZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi17XFxuLVxcdGlmIChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSkge1xcbi1cXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSk7XFxuLVxcdFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbi19XFxuLVxcbiBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcXG4gXFx0c3RydWN0IGdlbmRpc2tcXHQqZGlzaztcXG4tXFx0dThcXHRcXHQqem9uZXNfY29uZDtcXG4rXFx0dThcXHRcXHQqem9uZXNfc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGludFxcdG5yX3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRucl9jb252X3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHR6b25lX2NhcGFjaXR5O1xcbkBAIC0yMDE0LDQ5ICsyMTc2LDI2IEBAIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xcbiBcXHRzZWN0b3JfdFxcdHNlY3RvcjtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbitzdGF0aWMgaW50IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltID0gXFx1MDAyNmRpc2stXFx1MDAzZXF1ZXVlLVxcdTAwM2VsaW1pdHM7XFxuLVxcdHVuc2lnbmVkIGludCBwb29sX3NpemU7XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXG4gXFx0YXJncy1cXHUwMDNlZGlzayA9IGRpc2s7XFxuLVxcdGFyZ3MtXFx1MDAzZW5yX3pvbmVzID1cXG4tXFx0XFx0RElWX1JPVU5EX1VQX1VMTChnZXRfY2FwYWNpdHkoZGlzayksIGxpbS1cXHUwMDNlY2h1bmtfc2VjdG9ycyk7XFxuK1xcdGFyZ3MtXFx1MDAzZW5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XFxuIFxcbiBcXHQvKiBDYWNoZWQgem9uZSBjb25kaXRpb25zOiAxIGJ5dGUgcGVyIHpvbmUgKi9cXG4tXFx0YXJncy1cXHUwMDNlem9uZXNfY29uZCA9IGt6YWxsb2MoYXJncy1cXHUwMDNlbnJfem9uZXMsIEdGUF9OT0lPKTtcXG4tXFx0aWYgKCFhcmdzLVxcdTAwM2V6b25lc19jb25kKVxcbitcXHRhcmdzLVxcdTAwM2V6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy1cXHUwMDNlbnJfem9uZXMsIEdGUF9OT0lPKTtcXG4rXFx0aWYgKCFhcmdzLVxcdTAwM2V6b25lc19zdGF0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRpZiAoIWRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXFxuLVxcdCAqIHpvbmVzLCB1c2UgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUuXFxuLVxcdCAqL1xcbi1cXHRwb29sX3NpemUgPSBtYXgobGltLVxcdTAwM2VtYXhfb3Blbl96b25lcywgbGltLVxcdTAwM2VtYXhfYWN0aXZlX3pvbmVzKTtcXG4tXFx0aWYgKCFwb29sX3NpemUpXFxuLVxcdFxcdHBvb2xfc2l6ZSA9XFxuLVxcdFxcdFxcdG1pbihCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSwgYXJncy1cXHUwMDNlbnJfem9uZXMpO1xcbi1cXG4tXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XFxuLVxcdFxcdHJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzaywgcG9vbF9zaXplKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0a2ZyZWUoYXJncy1cXHUwMDNlem9uZXNfY29uZCk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbi0gKiBVcGRhdGUgdGhlIGRpc2sgem9uZSByZXNvdXJjZXMgaW5mb3JtYXRpb24gYW5kIGRldmljZSBxdWV1ZSBsaW1pdHMuXFxuLSAqIFRoZSBkaXNrIHF1ZXVlIGlzIGZyb3plbiB3aGVuIHRoaXMgaXMgZXhlY3V0ZWQuXFxuKyAqIFJldmFsaWRhdGUgYW5kIHVwZGF0ZSB0aGUgZGlzayB6b25lIHJlc291cmNlcyBpbmZvcm1hdGlvbiBhbmQgZGV2aWNlIHF1ZXVlXFxuKyAqIGxpbWl0cy5cXG4gICovXFxuLXN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXFxuK3N0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLVxcdTAwM2VxdWV1ZTtcXG4gXFx0dW5zaWduZWQgaW50IG5yX3NlcV96b25lcztcXG5AQCAtMjA2NCwyMyArMjIwMywyOCBAQCBzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHkgaGFzIGJlZW4gY2hlY2tlZC4gKi9cXG4rXFx0aWYgKGFyZ3MtXFx1MDAzZXNlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IE1pc3Npbmcgem9uZXMgZnJvbSBzZWN0b3IgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCBhcmdzLVxcdTAwM2VzZWN0b3IpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFyZ3MtXFx1MDAzZW5yX2NvbnZfem9uZXMgXFx1MDAzZT0gYXJncy1cXHUwMDNlbnJfem9uZXMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIGFyZ3MtXFx1MDAzZW5yX2NvbnZfem9uZXMsIGFyZ3MtXFx1MDAzZW5yX3pvbmVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuIFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuIFxcbiBcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7XFxuIFxcbiBcXHRkaXNrLVxcdTAwM2Vucl96b25lcyA9IGFyZ3MtXFx1MDAzZW5yX3pvbmVzO1xcbi1cXHRpZiAoYXJncy1cXHUwMDNlbnJfY29udl96b25lcyBcXHUwMDNlPSBkaXNrLVxcdTAwM2Vucl96b25lcykge1xcbi1cXHRcXHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIGFyZ3MtXFx1MDAzZW5yX2NvbnZfem9uZXMsIGRpc2stXFx1MDAzZW5yX3pvbmVzKTtcXG4tXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4tXFx0XFx0Z290byB1bmZyZWV6ZTtcXG4tXFx0fVxcbi1cXG4gXFx0ZGlzay1cXHUwMDNlem9uZV9jYXBhY2l0eSA9IGFyZ3MtXFx1MDAzZXpvbmVfY2FwYWNpdHk7XFxuIFxcdGRpc2stXFx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eSA9IGFyZ3MtXFx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eTtcXG4tXFx0ZGlza19zZXRfem9uZXNfY29uZF9hcnJheShkaXNrLCBhcmdzLVxcdTAwM2V6b25lc19jb25kKTtcXG4tXFx0YXJncy1cXHUwMDNlem9uZXNfY29uZCA9IE5VTEw7XFxuK1xcdGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KGRpc2ssIGFyZ3MtXFx1MDAzZXpvbmVzX3N0YXRlKTtcXG4rXFx0YXJncy1cXHUwMDNlem9uZXNfc3RhdGUgPSBOVUxMO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU29tZSBkZXZpY2VzIGNhbiBhZHZlcnRpc2Ugem9uZSByZXNvdXJjZSBsaW1pdHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW5cXG5AQCAtMjEyMCw0OCArMjI2NCw1OSBAQCBzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbiBjb21taXQ6XFxuIFxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbiBcXG4tdW5mcmVlemU6XFxuIFxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZChzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXFxuLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxcbitzdGF0aWMgdm9pZCBkaXNrX2Ryb3Bfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zywgdm9pZCAqZGF0YSlcXG4ge1xcbi1cXHRlbnVtIGJsa196b25lX2NvbmQgY29uZCA9IHpvbmUtXFx1MDAzZWNvbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHQvKiBDaGVjayB0aGF0IHRoZSB6b25lIGNvbmRpdGlvbiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgdHlwZS4gKi9cXG4tXFx0c3dpdGNoIChjb25kKSB7XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XFxuLVxcdFxcdGlmICh6b25lLVxcdTAwM2V0eXBlICE9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMKVxcbi1cXHRcXHRcXHRnb3RvIGludmFsaWRfY29uZGl0aW9uO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9DTE9TRUQ6XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XFxuLVxcdFxcdGlmICh6b25lLVxcdTAwM2V0eXBlICE9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRKVxcbi1cXHRcXHRcXHRnb3RvIGludmFsaWRfY29uZGl0aW9uO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgem9uZSBjb25kaXRpb24gMHglWFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0YXJncy1cXHUwMDNlZGlzay1cXHUwMDNlZGlza19uYW1lLCBjb25kKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0ZGlza196b25lX3dwbHVnX2Fib3J0KHp3cGx1Zyk7XFxuK1xcdGRpc2tfbWFya196b25lX3dwbHVnX2RlYWQoendwbHVnKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2endwbHVnLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX2NhcGFjaXR5KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbit7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFxcdTAwMjZkaXNrLVxcdTAwM2VxdWV1ZS1cXHUwMDNlbGltaXRzO1xcbitcXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBsaW0tXFx1MDAzZWNodW5rX3NlY3RvcnM7XFxuK1xcdHVuc2lnbmVkIGludCBucl96b25lcyA9IGRpc2tfZ2V0X25yX3pvbmVzKGRpc2spO1xcbitcXHRpbnQgcmV0ID0gLUVOT0RFVjtcXG4rXFxuK1xcdGlmICghZ2V0X2NhcGFjaXR5KGRpc2spKVxcbitcXHRcXHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBDaGVja3MgdGhhdCB0aGUgZGV2aWNlIGRyaXZlciBpbmRpY2F0ZWQgYSB2YWxpZCB6b25lIHNpemUgYW5kIHRoYXRcXG4rXFx0ICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXpvbmVfc2VjdG9ycyB8fCAhaXNfcG93ZXJfb2ZfMih6b25lX3NlY3RvcnMpKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIiVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCB6b25lX3NlY3RvcnMpO1xcbitcXHRcXHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XFxuIFxcdH1cXG4gXFxuLVxcdGJsa196b25lX3NldF9jb25kKGFyZ3MtXFx1MDAzZXpvbmVzX2NvbmQsIGlkeCwgY29uZCk7XFxuK1xcdC8qXFxuK1xcdCAqIENoZWNrIGlmIHRoZSBjYXBhY2l0eSBoYXMgY2hhbmdlZC4gSWYgaXQgZGlkLCBhc3N1bWUgdGhhdCB0aGUgZGV2aWNlXFxuK1xcdCAqIHdhcyByZWZvcm1hdHRlZCBhbmQgdGhhdCBhbGwgc2VxdWVudGlhbCB6b25lcyBhcmUgbm93IGVtcHR5LiBTbyBkcm9wXFxuK1xcdCAqIGFsbCB6b25lIHdyaXRlIHBsdWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGlzay1cXHUwMDNlbnJfem9uZXMgXFx1MDAyNlxcdTAwMjYgZGlzay1cXHUwMDNlbnJfem9uZXMgIT0gbnJfem9uZXMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IE51bWJlciBvZiB6b25lcyBjaGFuZ2VkICgldSAtXFx1MDAzZSAldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGRpc2stXFx1MDAzZWRpc2tfbmFtZSwgZGlzay1cXHUwMDNlbnJfem9uZXMsIG5yX3pvbmVzKTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0Z290byBkcm9wX2FsbF96d3BsdWdzO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWludmFsaWRfY29uZGl0aW9uOlxcbi1cXHRwcl93YXJuKFxcXCIlczogSW52YWxpZCB6b25lIGNvbmRpdGlvbiAweCV4IGZvciB0eXBlIDB4JXhcXFxcblxcXCIsXFxuLVxcdFxcdGFyZ3MtXFx1MDAzZWRpc2stXFx1MDAzZWRpc2tfbmFtZSwgY29uZCwgem9uZS1cXHUwMDNldHlwZSk7XFxuK2Ryb3BfYWxsX3p3cGx1Z3M6XFxuK1xcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhkaXNrLCBkaXNrX2Ryb3Bfem9uZV93cGx1ZywgTlVMTCk7XFxuIFxcbi1cXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9jb252X3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxcbkBAIC0yMTY5LDEyICsyMzI0LDI2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFyZ3MtXFx1MDAzZWRpc2s7XFxuIFxcbitcXHQvKiBDaGVjayB0aGUgem9uZSBjb25kaXRpb24uICovXFxuK1xcdHN3aXRjaCAoem9uZS1cXHUwMDNlY29uZCkge1xcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgY29udi4gem9uZSBjb25kaXRpb24gMHglWCBhdCBzZWN0b3IgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCB6b25lLVxcdTAwM2Vjb25kLCB6b25lLVxcdTAwM2VzdGFydCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoem9uZS1cXHUwMDNlY2FwYWNpdHkgIT0gem9uZS1cXHUwMDNlbGVuKSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIiVzOiBJbnZhbGlkIGNvbnZlbnRpb25hbCB6b25lIGNhcGFjaXR5XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXG4rXFx0YmxrX3pzdGF0ZV9zZXQoYXJncy1cXHUwMDNlem9uZXNfc3RhdGUsIGlkeCwgem9uZS1cXHUwMDNlY29uZCwgQkxLX1pGTEFHX0NPTlYpO1xcbitcXG4gXFx0aWYgKGRpc2tfem9uZV9pc19sYXN0KGRpc2ssIHpvbmUpKVxcbiBcXHRcXHRhcmdzLVxcdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSB6b25lLVxcdTAwM2VjYXBhY2l0eTtcXG4gXFxuQEAgLTIxOTAsNiArMjM1OSwyNCBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4gXFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XFxuIFxcdHVuc2lnbmVkIGludCB3cF9vZmZzZXQ7XFxuIFxcbitcXHQvKiBDaGVjayB0aGUgem9uZSBjb25kaXRpb24uICovXFxuK1xcdHN3aXRjaCAoem9uZS1cXHUwMDNlY29uZCkge1xcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XFxuK1xcdGNhc2UgQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0VNUFRZOlxcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfRlVMTDpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XFxuK1xcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHByX3dhcm4oXFxcIiVzOiBJbnZhbGlkIHNlcS4gem9uZSBjb25kaXRpb24gMHglWCBhdCBzZWN0b3IgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCB6b25lLVxcdTAwM2Vjb25kLCB6b25lLVxcdTAwM2VzdGFydCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRibGtfenN0YXRlX3NldChhcmdzLVxcdTAwM2V6b25lc19zdGF0ZSwgaWR4LCB6b25lLVxcdTAwM2Vjb25kLCAwKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFJlbWVtYmVyIHRoZSBjYXBhY2l0eSBvZiB0aGUgZmlyc3Qgc2VxdWVudGlhbCB6b25lIGFuZCBjaGVja1xcbiBcXHQgKiBpZiBpdCBpcyBjb25zdGFudCBmb3IgYWxsIHpvbmVzLCBpZ25vcmluZyB0aGUgbGFzdCB6b25lIGFzIGl0IGNhbiBiZVxcbkBAIC0yMjE0LDcgKzI0MDEsNyBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4gXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3dwX29mZnNldChkaXNrLCB6b25lKTtcXG4rXFx0d3Bfb2Zmc2V0ID0gZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoZGlzaywgem9uZSk7XFxuIFxcdGlmICghd3Bfb2Zmc2V0IHx8IHdwX29mZnNldCBcXHUwMDNlPSB6b25lLVxcdTAwM2VjYXBhY2l0eSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0yMjcyLDExICsyNDU5LDYgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIENoZWNrIHpvbmUgY29uZGl0aW9uICovXFxuLVxcdHJldCA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZCh6b25lLCBpZHgsIGFyZ3MpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0LyogQ2hlY2sgem9uZSB0eXBlICovXFxuIFxcdHN3aXRjaCAoem9uZS1cXHUwMDNldHlwZSkge1xcbiBcXHRjYXNlIEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMOlxcbkBAIC0yMzEzLDM5ICsyNDk1LDM3IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXFxuICAqL1xcbiBpbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4ge1xcbi1cXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXFx1MDAzZXF1ZXVlO1xcbi1cXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBxLVxcdTAwM2VsaW1pdHMuY2h1bmtfc2VjdG9ycztcXG4tXFx0c2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7XFxuIFxcdHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgYXJncyA9IHsgfTtcXG4tXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzLCBub2lvX2ZsYWc7XFxuIFxcdHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgcmVwX2FyZ3MgPSB7XFxuIFxcdFxcdC5jYiA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY2IsXFxuIFxcdFxcdC5kYXRhID0gXFx1MDAyNmFyZ3MsXFxuIFxcdH07XFxuLVxcdGludCByZXQgPSAtRU5PTUVNO1xcbitcXHR1bnNpZ25lZCBpbnQgbm9pb19mbGFnO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghYmxrX3F1ZXVlX2lzX3pvbmVkKHEpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghYmxrX3F1ZXVlX2lzX3pvbmVkKGRpc2stXFx1MDAzZXF1ZXVlKSkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0aWYgKCFjYXBhY2l0eSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV9jYXBhY2l0eShkaXNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIENoZWNrcyB0aGF0IHRoZSBkZXZpY2UgZHJpdmVyIGluZGljYXRlZCBhIHZhbGlkIHpvbmUgc2l6ZSBhbmQgdGhhdFxcbi1cXHQgKiB0aGUgbWF4IHpvbmUgYXBwZW5kIGxpbWl0IGlzIHNldC5cXG4rXFx0ICogQWxsb2NhdGUgem9uZSByZXNvdXJjZXMgaWYgdGhleSBhcmUgbmVlZGVkIGFuZCB3ZSBoYXZlIG5vdCBkb25lXFxuK1xcdCAqIHNvIHlldCwgYW5kIGluaXRpYWxpemUgdGhlIHJldmFsaWRhdGlvbiBhcmd1bWVudHMgcGFzc2VkIHRvIHJlcG9ydFxcbitcXHQgKiB6b25lcy4gRW5zdXJlIHRoYXQgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIGRvbmUgYXNcXG4rXFx0ICogaWYgR0ZQX05PSU8gd2FzIHNwZWNpZmllZC5cXG4gXFx0ICovXFxuLVxcdGlmICghem9uZV9zZWN0b3JzIHx8ICFpc19wb3dlcl9vZl8yKHpvbmVfc2VjdG9ycykpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgbm9uIHBvd2VyIG9mIHR3byB6b25lIHNpemUgKCVsbHUpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIHpvbmVfc2VjdG9ycyk7XFxuLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHRub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcXG4rXFx0aWYgKGRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSBcXHUwMDI2XFx1MDAyNiAhZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaCkge1xcbitcXHRcXHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzIGlmXFxuLVxcdCAqIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuXFxuLVxcdCAqL1xcbi1cXHRub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcXG4tXFx0cmV0ID0gZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFxcdTAwMjZhcmdzKTtcXG4rXFx0cmV0ID0gZGlza19pbml0X3JldmFsaWRhdGVfYXJncyhkaXNrLCBcXHUwMDI2YXJncyk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTIzNTksMzIgKzI1MzksMTggQEAgaW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xcbiBcXG4gXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi1cXHRcXHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xcbitcXHRcXHRnb3RvIGZyZWVfYXJncztcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIElmIHpvbmVzIHdoZXJlIHJlcG9ydGVkLCBtYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHlcXG4tXFx0ICogaGFzIGJlZW4gY2hlY2tlZC5cXG4tXFx0ICovXFxuLVxcdGlmIChhcmdzLnNlY3RvciAhPSBjYXBhY2l0eSkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCIlczogTWlzc2luZyB6b25lcyBmcm9tIHNlY3RvciAlbGx1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIGFyZ3Muc2VjdG9yKTtcXG4tXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4tXFx0XFx0Z290byBmcmVlX3Jlc291cmNlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbitcXHRyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xcbitcXHRcXHRnb3RvIGZyZWVfYXJncztcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4tZnJlZV9yZXNvdXJjZXM6XFxuK2ZyZWVfYXJnczpcXG4gXFx0cHJfd2FybihcXFwiJXM6IGZhaWxlZCB0byByZXZhbGlkYXRlIHpvbmVzXFxcXG5cXFwiLCBkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbiBcXG4tXFx0a2ZyZWUoYXJncy56b25lc19jb25kKTtcXG4tXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbi1cXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XFxuLVxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XFxuK1xcdGtmcmVlKGFyZ3Muem9uZXNfc3RhdGUpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yNDM1LDggKzI2MDEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9pc3N1ZV96ZXJvb3V0KTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQkxLX0RFQlVHX0ZTXFxuIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuK1xcdFxcdFxcdFxcdCAgdm9pZCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBkYXRhO1xcbiBcXHR1bnNpZ25lZCBpbnQgendwX3dwX29mZnNldCwgendwX2ZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgendwX3pvbmVfbm8sIHp3cF9yZWY7XFxuIFxcdHVuc2lnbmVkIGludCB6d3BfYmlvX2xpc3Rfc2l6ZTtcXG5AQCAtMjQ2MSwxOSArMjYyOCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcXG4gaW50IHF1ZXVlX3pvbmVfd3BsdWdzX3Nob3codm9pZCAqZGF0YSwgc3RydWN0IHNlcV9maWxlICptKVxcbiB7XFxuIFxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGF0YTtcXG4tXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBxLVxcdTAwM2VkaXNrO1xcbi1cXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZztcXG4tXFx0dW5zaWduZWQgaW50IGk7XFxuLVxcbi1cXHRpZiAoIWRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpXFxuLVxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKylcXG4tXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywgXFx1MDAyNmRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdCBub2RlKVxcbi1cXHRcXHRcXHRxdWV1ZV96b25lX3dwbHVnX3Nob3coendwbHVnLCBtKTtcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhxLVxcdTAwM2VkaXNrLCBxdWV1ZV96b25lX3dwbHVnX3Nob3csIG0pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxcbmluZGV4IDUwYWJmZDkzMjg4NjEuLmNmZThkNDE4NWUyNWEgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLmhcXG4rKysgYi9ibG9jay9ibGsuaFxcbkBAIC01NzcsNiArNTc3LDcgQEAgaW50IGJsa2Rldl9yZXBvcnRfem9uZXNfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpO1xcbiBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG4rYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpO1xcbiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuQEAgLTYxOSw2ICs2MjAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xcbiBcXG4gc3RydWN0IGJsb2NrX2RldmljZSAqYmRldl9hbGxvYyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcXG5pbmRleCBlOGNlMGNhYmYzOTJjLi4zNGE2NDA3N2JhMDJjIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcXG4rKysgYi9ibG9jay9nZW5oZC5jXFxuQEAgLTQ0Nyw2ICs0NDcsMTMgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdGJkZXZfc2V0X2ZsYWcoZGlzay1cXHUwMDNlcGFydDAsIEJEX0hBU19TVUJNSVRfQklPKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogV2UgZG8gbm90IHN1cHBvcnQgcGFydGl0aW9ucyB3aXRoIHpvbmVkIGJsb2NrIGRldmljZXMsIHNvIGRvIG5vdCB0cnlcXG4rXFx0ICogdG8gc2NhbiB0aGUgcGFydGl0aW9ucyB0YWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChibGtfcXVldWVfaXNfem9uZWQoZGlzay1cXHUwMDNlcXVldWUpKVxcbitcXHRcXHRkaXNrLVxcdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9OT19QQVJUO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbiBleHBsaWNpdCBtYWpvciBudW1iZXIgaXQgYWxzbyBtdXN0IHByb3ZpZGVcXG4gXFx0ICogdGhlIG51bWJlciBvZiBtaW5vcnMgbnVtYmVycyBzdXBwb3J0ZWQsIGFuZCB0aG9zZSB3aWxsIGJlIHVzZWQgdG9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCAyMGNiOGVkN2Q5ODdhLi40ZmEwMDc1NzUyN2Q3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTIwMCw3ICsyMDAsNyBAQCBzdHJ1Y3QgZ2VuZGlzayB7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG5yX3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHR6b25lX2NhcGFjaXR5O1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRsYXN0X3pvbmVfY2FwYWNpdHk7XFxuLVxcdHU4IF9fcmN1XFx0XFx0KnpvbmVzX2NvbmQ7XFxuK1xcdHU4IF9fcmN1XFx0XFx0KnpvbmVzX3N0YXRlO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHR6b25lX3dwbHVnc19oYXNoX2JpdHM7XFxuIFxcdGF0b21pY190XFx0XFx0bnJfem9uZV93cGx1Z3M7XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHR6b25lX3dwbHVnc19oYXNoX2xvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI2LjE4NzcyOTgyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc1MzI4MTkxMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2hlY2tfem9uZV9tZ210XCIsXG4gICAgXCJibGtkZXZfZ2V0X3pvbmVfaW5mb1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHpvbmUgY29uZGl0aW9ucyBhcmUgdHJhY2tlZCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIG5ldyBgem9uZXNfc3RhdGVgIGFycmF5IHRvIHJlcGxhY2UgYHpvbmVzX2NvbmRgLiBJdCB1cGRhdGVzIHpvbmUgbWFuYWdlbWVudCBjaGVja3MgKGBiZGV2X2NoZWNrX3pvbmVfbWdtdGApLCB6b25lIHJldmFsaWRhdGlvbiAoYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgKSwgYW5kIHpvbmUgaW5mb3JtYXRpb24gcmV0cmlldmFsIChgYmxrZGV2X2dldF96b25lX2luZm9gKS4gSXQgYWxzbyBtb2RpZmllcyBgX19hZGRfZGlza2AgdG8gZGlzYWJsZSBwYXJ0aXRpb25zIG9uIHpvbmVkIGJsb2NrIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYmxvY2sgbGF5ZXIncyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwNTI4ZTY4ZTk3MDJlMWZmZGVmMWQyM2YyMWYyNzI0N2Q3ZTY3NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjQ2OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmNcbmluZGV4IDE5NmJjY2YyN2Y1OGQuLjgwYTRlMmJjYzNmMzQgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY29yZS5jXG4rKysgYi9ibG9jay9ibGstY29yZS5jXG5AQCAtOTAxLDggKzkwMSwxMSBAQCB2b2lkIHN1Ym1pdF9iaW9fbm9hY2N0KHN0cnVjdCBiaW8gKmJpbylcbiBcdGNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6XG4gXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUOlxuIFx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XG4tXHRcdC8qIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcy4gKi9cbi1cdFx0aWYgKCFiZGV2X3pvbmVfaXNfc2VxKGJpby1cdTAwM2ViaV9iZGV2LCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpKVxuK1x0XHQvKlxuK1x0XHQgKiBab25lIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyByZXF1aXJlIHNlcXVlbnRpYWwgem9uZXMgdGhhdCBhcmVcbitcdFx0ICogbm90IG9mZmxpbmUgbm9yIHJlYWQtb25seS5cbitcdFx0ICovXG4rXHRcdGlmICghYmRldl9jaGVja196b25lX21nbXQoYmRldiwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yKSlcbiBcdFx0XHRnb3RvIGVuZF9pbztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jXG5pbmRleCBhNWFmYjg0MmJmMzVlLi5mMTcwNjkzMDlhYzlkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXpvbmVkLmNcbisrKyBiL2Jsb2NrL2Jsay16b25lZC5jXG5AQCAtMzksNiArMzksMTAzIEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB6b25lX2NvbmRfbmFtZVtdID0ge1xuIH07XG4gI3VuZGVmIFpPTkVfQ09ORF9OQU1FXG4gXG4rLypcbisgKiBJbnRlcm5hbCBhbmQgY29tcGFjdCByZXByZXNlbnRhdGlvbiBvZiBlbnVtIGJsa196b25lX2NvbmQgdmFsdWVzIGZvciB6b25lXG4rICogY29uZGl0aW9ucy4gQWxsIHRoZXNlIHZhbHVlcyBmaXQgaW50byA0LWJpdHMsIGFsbG93aW5nIHVzaW5nIHRoZSBoaWdoIG9yZGVyXG4rICogYml0cyBhcyB0aGUgem9uZSB0eXBlLlxuKyAqL1xuK2VudW0gYmxrX3pzdGF0ZSB7XG4rXHRCTEtfWlNUQVRFX05PVF9XUFx0PSAweDAwLFxuK1x0QkxLX1pTVEFURV9FTVBUWVx0PSAweDAxLFxuK1x0QkxLX1pTVEFURV9JTVBfT1BFTlx0PSAweDAyLFxuK1x0QkxLX1pTVEFURV9FWFBfT1BFTlx0PSAweDAzLFxuK1x0QkxLX1pTVEFURV9DTE9TRURcdD0gMHgwNCxcbitcdEJMS19aU1RBVEVfUkVBRE9OTFlcdD0gMHgwNSxcbitcdEJMS19aU1RBVEVfRlVMTFx0XHQ9IDB4MDYsXG4rXHRCTEtfWlNUQVRFX09GRkxJTkVcdD0gMHgwNyxcbitcdEJMS19aU1RBVEVfQUNUSVZFXHQ9IDB4MDgsXG4rXG4rXHRCTEtfWlNUQVRFX0NPTkRfTUFTS1x0PSAweDBGLFxuK1xuK1x0LyogQ29udmVudGlvbmFsIHpvbmUuICovXG4rXHRCTEtfWkZMQUdfQ09OVlx0XHQ9IDB4ODAsXG4rXHRCTEtfWlNUQVRFX0ZMQUdTX01BU0tcdD0gfkJMS19aU1RBVEVfQ09ORF9NQVNLLFxuK307XG4rXG4rLypcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGVudW0gYmxrX3pzdGF0ZSBjb25kaXRpb25zIGludG8gZW51bVxuKyAqIGJsa196b25lX2NvbmRpdGlvbiB2YWx1ZXMuXG4rICovXG4rc3RhdGljIGNvbnN0IHU4IGJsa196c3RhdGUyemNvbmRbXSA9IHtcbitcdFtCTEtfWlNUQVRFX05PVF9XUF1cdD0gQkxLX1pPTkVfQ09ORF9OT1RfV1AsXG4rXHRbQkxLX1pTVEFURV9FTVBUWV1cdD0gQkxLX1pPTkVfQ09ORF9FTVBUWSxcbitcdFtCTEtfWlNUQVRFX0lNUF9PUEVOXVx0PSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOLFxuK1x0W0JMS19aU1RBVEVfRVhQX09QRU5dXHQ9IEJMS19aT05FX0NPTkRfRVhQX09QRU4sXG4rXHRbQkxLX1pTVEFURV9DTE9TRURdXHQ9IEJMS19aT05FX0NPTkRfQ0xPU0VELFxuK1x0W0JMS19aU1RBVEVfUkVBRE9OTFldXHQ9IEJMS19aT05FX0NPTkRfUkVBRE9OTFksXG4rXHRbQkxLX1pTVEFURV9GVUxMXVx0PSBCTEtfWk9ORV9DT05EX0ZVTEwsXG4rXHRbQkxLX1pTVEFURV9PRkZMSU5FXVx0PSBCTEtfWk9ORV9DT05EX09GRkxJTkUsXG4rXHRbQkxLX1pTVEFURV9BQ1RJVkVdXHQ9IEJMS19aT05FX0NPTkRfQUNUSVZFLFxuK307XG4rXG4rc3RhdGljIGlubGluZSBlbnVtIGJsa196b25lX2NvbmQgYmxrX3pzdGF0ZV90b196b25lX2NvbmQoZW51bSBibGtfenN0YXRlIHpzKVxuK3tcbitcdHU4IGlkeCA9IHpzIFx1MDAyNiBCTEtfWlNUQVRFX0NPTkRfTUFTSztcbitcbitcdGlmIChXQVJOX09OX09OQ0UoaWR4IFx1MDAzZT0gQVJSQVlfU0laRShibGtfenN0YXRlMnpjb25kKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGJsa196c3RhdGUyemNvbmRbaWR4XTtcbit9XG4rXG4rLypcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGludG8gYW4gZW51bVxuKyAqIGJsa196c3RhdGUgY29uZGl0aW9uIHZhbHVlLiBUbyBrZWVwIHRoZSBsb29rdXAgdGFibGUgc21hbGwsIHRoZVxuKyAqIEJMS19aT05FX0NPTkRfQUNUSVZFIGNvbmRpdGlvbiBpcyBub3QgYWRkZWQgYW5kIGhhbmRsZWQgc2VwYXJhdGVseS5cbisgKi9cbitzdGF0aWMgY29uc3QgdTggYmxrX3pjb25kMnpzdGF0ZVtdID0ge1xuK1x0W0JMS19aT05FX0NPTkRfTk9UX1dQXVx0XHQ9IEJMS19aU1RBVEVfTk9UX1dQLFxuK1x0W0JMS19aT05FX0NPTkRfRU1QVFldXHRcdD0gQkxLX1pTVEFURV9FTVBUWSxcbitcdFtCTEtfWk9ORV9DT05EX0lNUF9PUEVOXVx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbitcdFtCTEtfWk9ORV9DT05EX0VYUF9PUEVOXVx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbitcdFtCTEtfWk9ORV9DT05EX0NMT1NFRF1cdFx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbitcdFtCTEtfWk9ORV9DT05EX1JFQURPTkxZXVx0PSBCTEtfWlNUQVRFX1JFQURPTkxZLFxuK1x0W0JMS19aT05FX0NPTkRfRlVMTF1cdFx0PSBCTEtfWlNUQVRFX0ZVTEwsXG4rXHRbQkxLX1pPTkVfQ09ORF9PRkZMSU5FXVx0XHQ9IEJMS19aU1RBVEVfT0ZGTElORSxcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgZW51bSBibGtfenN0YXRlIGJsa196b25lX2NvbmRfdG9fenN0YXRlKGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuK3tcbitcdGlmIChjb25kID09IEJMS19aT05FX0NPTkRfQUNUSVZFKVxuK1x0XHRyZXR1cm4gQkxLX1pTVEFURV9BQ1RJVkU7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKGNvbmQgXHUwMDNlPSBBUlJBWV9TSVpFKGJsa196Y29uZDJ6c3RhdGUpKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gYmxrX3pjb25kMnpzdGF0ZVtjb25kXTtcbit9XG4rXG4rLypcbisgKiBDb21iaW5lIGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGFuZCB6b25lIGZsYWdzIGludG8gYSB6b25lc19zdGF0ZSBhcnJheVxuKyAqIGVudHJ5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfenN0YXRlX3NldCh1OCAqem9uZXNfc3RhdGUsIHVuc2lnbmVkIGludCB6bm8sXG4rXHRcdFx0XHQgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kLCB1OCBmbGFncylcbit7XG4rXHRpZiAoem9uZXNfc3RhdGUpXG4rXHRcdHpvbmVzX3N0YXRlW3pub10gPSBmbGFncyB8IGJsa196b25lX2NvbmRfdG9fenN0YXRlKGNvbmQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHU4IGJsa196c3RhdGVfZmxhZ3MoZW51bSBibGtfenN0YXRlIHpzKVxuK3tcbitcdHJldHVybiB6cyBcdTAwMjYgQkxLX1pTVEFURV9GTEFHU19NQVNLO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYmxrX3pzdGF0ZV9pc19jb252KGVudW0gYmxrX3pzdGF0ZSB6cylcbit7XG4rXHRyZXR1cm4gYmxrX3pzdGF0ZV9mbGFncyh6cykgXHUwMDI2IEJMS19aRkxBR19DT05WO1xuK31cbitcbiAvKlxuICAqIFBlci16b25lIHdyaXRlIHBsdWcuXG4gICogQG5vZGU6IGhsaXN0X25vZGUgc3RydWN0dXJlIGZvciBtYW5hZ2luZyB0aGUgcGx1ZyB1c2luZyBhIGhhc2ggdGFibGUuXG5AQCAtMTM1LDU1ICsyMzIsNjQgQEAgY29uc3QgY2hhciAqYmxrX3pvbmVfY29uZF9zdHIoZW51bSBibGtfem9uZV9jb25kIHpvbmVfY29uZClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfY29uZF9zdHIpO1xuIFxuLXN0YXRpYyB2b2lkIGJsa196b25lX3NldF9jb25kKHU4ICp6b25lc19jb25kLCB1bnNpZ25lZCBpbnQgem5vLFxuLVx0XHRcdCAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuK1x0XHRcdCAgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiB7XG4tXHRpZiAoIXpvbmVzX2NvbmQpXG4tXHRcdHJldHVybjtcbitcdHVuc2lnbmVkIGludCB6bm8gPSBkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKTtcbitcdHU4ICp6b25lc19zdGF0ZTtcbiBcbi1cdHN3aXRjaCAoY29uZCkge1xuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcbi1cdFx0em9uZXNfY29uZFt6bm9dID0gQkxLX1pPTkVfQ09ORF9BQ1RJVkU7XG4tXHRcdHJldHVybjtcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRU1QVFk6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRlVMTDpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxuLVx0ZGVmYXVsdDpcbi1cdFx0em9uZXNfY29uZFt6bm9dID0gY29uZDtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4rXHRpZiAobGlrZWx5KHpvbmVzX3N0YXRlIFx1MDAyNlx1MDAyNiB6bm8gXHUwMDNjIGRpc2stXHUwMDNlbnJfem9uZXMpKVxuK1x0XHRibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLFxuK1x0XHRcdCAgICAgICBibGtfenN0YXRlX2ZsYWdzKHpvbmVzX3N0YXRlW3pub10pKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3Rvcixcbi1cdFx0XHQgICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpXG4rc3RhdGljIGlubGluZSB1OCBkaXNrX3pvbmVfZ2V0X3N0YXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXG4ge1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4rXHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XG4rXHR1OCAqem9uZXNfc3RhdGUsIHpzO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0aWYgKHpvbmVzX2NvbmQpIHtcbi1cdFx0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBUaGUgY29uZGl0aW9uIG9mIGEgY29udmVudGlvbmFsLCByZWFkb25seSBhbmQgb2ZmbGluZSB6b25lc1xuLVx0XHQgKiBuZXZlciBjaGFuZ2VzLCBzbyBkbyBub3RoaW5nIGlmIHRoZSB0YXJnZXQgem9uZSBpcyBpbiBvbmUgb2Zcbi1cdFx0ICogdGhlc2UgY29uZGl0aW9ucy5cbi1cdFx0ICovXG4tXHRcdHN3aXRjaCAoem9uZXNfY29uZFt6bm9dKSB7XG4tXHRcdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XG4tXHRcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbi1cdFx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0YmxrX3pvbmVfc2V0X2NvbmQoem9uZXNfY29uZCwgem5vLCBjb25kKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0fVxuK1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4rXHRpZiAobGlrZWx5KHpvbmVzX3N0YXRlIFx1MDAyNlx1MDAyNiB6bm8gXHUwMDNjIGRpc2stXHUwMDNlbnJfem9uZXMpKVxuK1x0XHR6cyA9IHpvbmVzX3N0YXRlW3pub107XG4rXHRlbHNlXG4rXHRcdHpzID0gMDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHpzO1xuK31cbitcbitzdGF0aWMgZW51bSBibGtfem9uZV9jb25kIGRpc2tfem9uZV9nZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0ICAgICBzZWN0b3JfdCBzZWN0b3IpXG4re1xuK1x0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XG4rXG4rXHRyZXR1cm4gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2xcbitkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuK3tcbitcdHJldHVybiBjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHxcbitcdFx0Y29uZCA9PSBCTEtfWk9ORV9DT05EX09GRkxJTkU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0XHQgICAgc2VjdG9yX3Qgc2VjdG9yKVxuK3tcbitcdGVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gZGlza196b25lX2dldF9jb25kKGRpc2ssIHNlY3Rvcik7XG4rXG4rXHRyZXR1cm4gZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShjb25kKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZGlza196b25lX2lzX3NlcShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yKVxuK3tcbitcdHU4IHpzID0gZGlza196b25lX2dldF9zdGF0ZShkaXNrLCBzZWN0b3IpO1xuK1xuK1x0cmV0dXJuICFibGtfenN0YXRlX2lzX2NvbnYoenMpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTUsMjMgKzMwMSwzNiBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcbiAgKi9cbiBib29sIGJkZXZfem9uZV9pc19zZXEoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yKVxuIHtcbi1cdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi1cdTAwM2ViZF9kaXNrO1xuLVx0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xuLVx0Ym9vbCBpc19zZXEgPSBmYWxzZTtcbi1cdHU4ICp6b25lc19jb25kO1xuK1x0aWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gZGlza196b25lX2lzX3NlcShiZGV2LVx1MDAzZWJkX2Rpc2ssIHNlY3Rvcik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGJkZXZfem9uZV9pc19zZXEpO1xuK1xuKy8qKlxuKyAqIGJkZXZfY2hlY2tfem9uZV9tZ210IC0gY2hlY2sgaWYgYSBzZWN0b3IgYmVsb25ncyB0byBhIHZhbGlkIHNlcXVlbnRpYWwgem9uZVxuKyAqIEBiZGV2OiAgICAgICBibG9jayBkZXZpY2UgdG8gY2hlY2tcbisgKiBAc2VjdG9yOiAgICAgc2VjdG9yIG51bWJlclxuKyAqXG4rICogQ2hlY2sgaWYgQHNlY3RvciBvbiBAYmRldiBpcyBjb250YWluZWQgaW4gYSBzZXF1ZW50aWFsIHdyaXRlIHJlcXVpcmVkIHpvbmVcbisgKiB0aGF0IGlzIG5vdCBvZmZsaW5lIG5vciByZWFkLW9ubHkuXG4rICovXG4rYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXG4re1xuK1x0ZW51bSBibGtfem9uZV9jb25kIGNvbmQ7XG4rXHR1OCB6cztcbiBcbiBcdGlmICghYmRldl9pc196b25lZChiZGV2KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0aWYgKHpvbmVzX2NvbmQgXHUwMDI2XHUwMDI2IHpubyBcdTAwM2MgZGlzay1cdTAwM2Vucl96b25lcylcbi1cdFx0aXNfc2VxID0gem9uZXNfY29uZFt6bm9dICE9IEJMS19aT05FX0NPTkRfTk9UX1dQO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi1cdTAwM2ViZF9kaXNrLCBzZWN0b3IpO1xuK1x0aWYgKGJsa196c3RhdGVfaXNfY29udih6cykpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBpc19zZXE7XG4rXHRjb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xuK1x0cmV0dXJuICFkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcbiBcbiAvKlxuICAqIFpvbmUgcmVwb3J0IGFyZ3VtZW50cyBmb3IgYmxvY2sgZGV2aWNlIGRyaXZlcnMgcmVwb3J0X3pvbmVzIG9wZXJhdGlvbi5cbkBAIC01MDAsMTIgKzYxOSwxNyBAQCBzdGF0aWMgYm9vbCBkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHJldHVybiB6d3BsdWctXHUwMDNld3Bfb2Zmc2V0IFx1MDAzZT0gZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuK3tcbitcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1Zy1cdTAwM2Vjb25kKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZGlza19pbnNlcnRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdFx0XHRcdCAgIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIHtcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbGc7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4rXHR1OCAqem9uZXNfc3RhdGU7XG4gXHR1bnNpZ25lZCBpbnQgaWR4ID1cbiBcdFx0aGFzaF8zMih6d3BsdWctXHUwMDNlem9uZV9ubywgZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2JpdHMpO1xuIFxuQEAgLTUyNCwxNSArNjQ4LDE2IEBAIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfY29uZCBhcnJheVxuK1x0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfc3RhdGUgYXJyYXlcbiBcdCAqIGF0dGFjaGVkIHRvIHRoZSBkaXNrLCB0aGVuIHRoaXMgaXMgYSB6b25lIHdyaXRlIHBsdWcgaW5zZXJ0IGZyb20gdGhlXG4gXHQgKiBmaXJzdCBjYWxsIHRvIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSwgaW4gd2hpY2ggY2FzZSB0aGUgem9uZSBpc1xuIFx0ICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLlxuIFx0ICovXG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stXHUwMDNlem9uZXNfY29uZCxcbitcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stXHUwMDNlem9uZXNfc3RhdGUsXG4gXHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcbi1cdGlmICh6b25lc19jb25kKVxuLVx0XHR6d3BsdWctXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbendwbHVnLVx1MDAzZXpvbmVfbm9dO1xuK1x0aWYgKHpvbmVzX3N0YXRlKVxuK1x0XHR6d3BsdWctXHUwMDNlY29uZCA9XG4rXHRcdFx0YmxrX3pzdGF0ZV90b196b25lX2NvbmQoem9uZXNfc3RhdGVbendwbHVnLVx1MDAzZXpvbmVfbm9dKTtcbiBcdGVsc2VcbiBcdFx0endwbHVnLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcbiBcbkBAIC01NzQsNiArNjk5LDI2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa196b25lX3dwbHVnICpkaXNrX2dldF96b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIGRpc2tfZ2V0X2hhc2hlZF96b25lX3dwbHVnKGRpc2ssIHNlY3Rvcik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdCAgICAgdm9pZCAoKmFjdG9yKShzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKixcbitcdFx0XHRcdFx0XHQgICB2b2lkICopLFxuK1x0XHRcdFx0ICAgICB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKykge1xuK1x0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLCBcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0sXG4rXHRcdFx0XHRcdCBub2RlKVxuK1x0XHRcdGFjdG9yKHp3cGx1ZywgZGF0YSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfd3BsdWdfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4ge1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcgPVxuQEAgLTU5Miw5ICs3MzcsOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiBcdFdBUk5fT05fT05DRSghYmlvX2xpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuLVx0YmxrX3pvbmVfc2V0X2NvbmQocmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stXHUwMDNlem9uZXNfY29uZCxcbitcdGJsa196c3RhdGVfc2V0KHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVx1MDAzZXpvbmVzX3N0YXRlLFxuIFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKSksXG4tXHRcdFx0ICB6d3BsdWctXHUwMDNlem9uZV9ubywgendwbHVnLVx1MDAzZWNvbmQpO1xuK1x0XHQgICAgICAgendwbHVnLVx1MDAzZXpvbmVfbm8sIHp3cGx1Zy1cdTAwM2Vjb25kLCAwKTtcbiBcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ6d3BsdWctXHUwMDNlbm9kZSk7XG4gXHRhdG9taWNfZGVjKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuQEAgLTYwOCw2ICs3NTMsNTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc2tfcHV0X3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXG4gXHRcdGRpc2tfZnJlZV96b25lX3dwbHVnKHp3cGx1Zyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXG4re1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXHUwMDNlZGlzay1cdTAwM2VxdWV1ZTtcbitcbitcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpO1xuK1x0YmlvX2lvX2Vycm9yKGJpbyk7XG4rXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4rXHQvKiBEcm9wIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZGlza196b25lX3dwbHVnX2FkZF9iaW8oKS4gKi9cbitcdGJsa19xdWV1ZV9leGl0KHEpO1xuK31cbitcbisvKlxuKyAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zylcbit7XG4rXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHp3cGx1Zy1cdTAwM2VkaXNrO1xuK1x0c3RydWN0IGJpbyAqYmlvO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6d3BsdWctXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAoYmlvX2xpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJfd2Fybl9yYXRlbGltaXRlZChcIiVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcXG5cIixcbitcdFx0XHQgICAgendwbHVnLVx1MDAzZWRpc2stXHUwMDNlZGlza19uYW1lLCB6d3BsdWctXHUwMDNlem9uZV9ubyk7XG4rXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKSlcbitcdFx0YmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHp3cGx1ZywgYmlvKTtcbitcbitcdHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xuK1xuK1x0LypcbitcdCAqIElmIHdlIGFyZSB1c2luZyB0aGUgcGVyIGRpc2sgem9uZSB3cml0ZSBwbHVncyB3b3JrZXIgdGhyZWFkLCByZW1vdmVcbitcdCAqIHRoZSB6b25lIHdyaXRlIHBsdWcgZnJvbSB0aGUgd29yayBsaXN0IGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2VcbitcdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXG4rXHQgKi9cbitcdGlmIChibGtfcXVldWVfem9uZWRfcWQxX3dyaXRlcyhkaXNrLVx1MDAzZXF1ZXVlKSkge1xuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KSkge1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KTtcbitcdFx0XHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuK1x0fVxuK31cbitcbiAvKlxuICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlblxuICAqIHRoZSB6b25lIHdyaXRlIHBsdWcgd2FzIGFkZGVkIHRvIHRoZSBoYXNoIHRhYmxlLiBUaGUgem9uZSB3cml0ZSBwbHVnIHdpbGwgYmVcbkBAIC02MjUsNiArODE3LDEyIEBAIHN0YXRpYyB2b2lkIGRpc2tfbWFya196b25lX3dwbHVnX2RlYWQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGRpc2tfY2hlY2tfem9uZV93cGx1Z19kZWFkKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIHtcbitcdGlmIChkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKSB7XG4rXHRcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuK1x0XHRkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuIFx0aWYgKCEoendwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfWk9ORV9XUExVR19ERUFEKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTcwOCw1MyArOTA2LDYgQEAgc3RhdGljIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqZGlza19nZXRfb3JfYWxsb2Nfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHJldHVybiB6d3BsdWc7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4tXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXG4te1xuLVx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXHUwMDNlZGlzay1cdTAwM2VxdWV1ZTtcbi1cbi1cdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpO1xuLVx0YmlvX2lvX2Vycm9yKGJpbyk7XG4tXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4tXHQvKiBEcm9wIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZGlza196b25lX3dwbHVnX2FkZF9iaW8oKS4gKi9cbi1cdGJsa19xdWV1ZV9leGl0KHEpO1xuLX1cbi1cbi0vKlxuLSAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zylcbi17XG4tXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHp3cGx1Zy1cdTAwM2VkaXNrO1xuLVx0c3RydWN0IGJpbyAqYmlvO1xuLVxuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6d3BsdWctXHUwMDNlbG9jayk7XG4tXG4tXHRpZiAoYmlvX2xpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cHJfd2Fybl9yYXRlbGltaXRlZChcIiVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcXG5cIixcbi1cdFx0XHQgICAgendwbHVnLVx1MDAzZWRpc2stXHUwMDNlZGlza19uYW1lLCB6d3BsdWctXHUwMDNlem9uZV9ubyk7XG4tXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKSlcbi1cdFx0YmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHp3cGx1ZywgYmlvKTtcbi1cbi1cdHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xuLVxuLVx0Lypcbi1cdCAqIElmIHdlIGFyZSB1c2luZyB0aGUgcGVyIGRpc2sgem9uZSB3cml0ZSBwbHVncyB3b3JrZXIgdGhyZWFkLCByZW1vdmVcbi1cdCAqIHRoZSB6b25lIHdyaXRlIHBsdWcgZnJvbSB0aGUgd29yayBsaXN0IGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2Vcbi1cdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXG4tXHQgKi9cbi1cdGlmIChibGtfcXVldWVfem9uZWRfcWQxX3dyaXRlcyhkaXNrLVx1MDAzZXF1ZXVlKSkge1xuLVx0XHRzcGluX2xvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuLVx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KTtcbi1cdFx0XHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuLVx0fVxuLX1cbi1cbiAvKlxuICAqIFVwZGF0ZSBhIHpvbmUgd3JpdGUgcGx1ZyBjb25kaXRpb24gYmFzZWQgb24gdGhlIHdyaXRlIHBvaW50ZXIgb2Zmc2V0LlxuICAqL1xuQEAgLTc4NSw4ICs5MzYsMTAgQEAgc3RhdGljIHZvaWQgZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXG4gXHQvKiBVcGRhdGUgdGhlIHpvbmUgd3JpdGUgcG9pbnRlciBhbmQgYWJvcnQgYWxsIHBsdWdnZWQgQklPcy4gKi9cbiBcdHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURTtcbi1cdHp3cGx1Zy1cdTAwM2V3cF9vZmZzZXQgPSB3cF9vZmZzZXQ7XG4tXHRkaXNrX3pvbmVfd3BsdWdfdXBkYXRlX2NvbmQoZGlzaywgendwbHVnKTtcbitcdGlmICghZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkge1xuK1x0XHR6d3BsdWctXHUwMDNld3Bfb2Zmc2V0ID0gd3Bfb2Zmc2V0O1xuK1x0XHRkaXNrX3pvbmVfd3BsdWdfdXBkYXRlX2NvbmQoZGlzaywgendwbHVnKTtcbitcdH1cbiBcbiBcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuIFx0aWYgKCF6d3BsdWctXHUwMDNld3Bfb2Zmc2V0IHx8IGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXG5AQCAtODE2LDggKzk2OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmxrX3pvbmVfd3Bfb2Zmc2V0KHN0cnVjdCBibGtfem9uZSAqem9uZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tXHRcdFx0XHRcdFx0ICAgc3RydWN0IGJsa196b25lICp6b25lKVxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXG4ge1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XG4gXHR1bnNpZ25lZCBpbnQgd3Bfb2Zmc2V0ID0gYmxrX3pvbmVfd3Bfb2Zmc2V0KHpvbmUpO1xuQEAgLTgyOSw2ICs5ODIsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmICh6d3BsdWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19aT05FX1dQTFVHX05FRURfV1BfVVBEQVRFKVxuIFx0XHRcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KGRpc2ssIHp3cGx1Zywgd3Bfb2Zmc2V0KTtcbitcdFx0aWYgKGRpc2tfem9uZV9jb25kX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoem9uZS1cdTAwM2Vjb25kKSkge1xuK1x0XHRcdHp3cGx1Zy1cdTAwM2Vjb25kID0gem9uZS1cdTAwM2Vjb25kO1xuK1x0XHRcdGRpc2tfbWFya196b25lX3dwbHVnX2RlYWQoendwbHVnKTtcbitcdFx0fVxuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTtcbiBcdH1cbkBAIC04NzEsNyArMTAyOCw3IEBAIGludCBkaXNrX3JlcG9ydF96b25lKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsXG4gXHR9XG4gXG4gXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKVxuLVx0XHRkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XG4rXHRcdGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpO1xuIFxuIFx0aWYgKGFyZ3MgXHUwMDI2XHUwMDI2IGFyZ3MtXHUwMDNlY2IpXG4gXHRcdHJldHVybiBhcmdzLVx1MDAzZWNiKHpvbmUsIGlkeCwgYXJncy1cdTAwM2VkYXRhKTtcbkBAIC05NDAsNyArMTA5Nyw3IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXG4gXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBiZGV2X3pvbmVfc2VjdG9ycyhiZGV2KTtcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdHU4ICp6b25lc19jb25kO1xuK1x0dTggKnpvbmVzX3N0YXRlLCB6cztcbiBcbiBcdGlmICghYmRldl9pc196b25lZChiZGV2KSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTk1NSwxMiArMTExMiwxOCBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuIFx0XHRyZXR1cm4gYmxrZGV2X3JlcG9ydF96b25lX2ZhbGxiYWNrKGJkZXYsIHNlY3Rvciwgem9uZSk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfY29uZCk7XG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfY29uZCkge1xuK1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4rXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfc3RhdGUpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTtcbiBcdH1cbi1cdHpvbmUtXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildO1xuK1xuK1x0enMgPSB6b25lc19zdGF0ZVtkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKV07XG4rXHR6b25lLVx1MDAzZWNvbmQgPSBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XG4rXHRpZiAoYmxrX3pzdGF0ZV9pc19jb252KHpzKSlcbitcdFx0em9uZS1cdTAwM2V0eXBlID0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw7XG4rXHRlbHNlXG4rXHRcdHpvbmUtXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHR6b25lLVx1MDAzZXN0YXJ0ID0gc2VjdG9yO1xuQEAgLTk3MCw4ICsxMTMzLDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcbiBcdCAqIElmIHRoaXMgaXMgYSBjb252ZW50aW9uYWwgem9uZSwgd2UgZG8gbm90IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgYW5kXG4gXHQgKiBjYW4gcmVwb3J0IHRoZSB6b25lIGltbWVkaWF0ZWx5LlxuIFx0ICovXG4tXHRpZiAoem9uZS1cdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfTk9UX1dQKSB7XG4tXHRcdHpvbmUtXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMO1xuK1x0aWYgKHpvbmUtXHUwMDNldHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkge1xuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gem9uZV9zZWN0b3JzO1xuIFx0XHR6b25lLVx1MDAzZXdwID0gVUxMT05HX01BWDtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtOTgyLDE0ICsxMTQ0LDEyIEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXG4gXHQgKiBvZmZsaW5lLCBvbmx5IHNldCB0aGUgem9uZSB3cml0ZSBwb2ludGVyIHRvIGFuIGludmFsaWQgdmFsdWUgYW5kXG4gXHQgKiByZXBvcnQgdGhlIHpvbmUuXG4gXHQgKi9cbi1cdHpvbmUtXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRO1xuIFx0aWYgKGRpc2tfem9uZV9pc19sYXN0KGRpc2ssIHpvbmUpKVxuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHk7XG4gXHRlbHNlXG4gXHRcdHpvbmUtXHUwMDNlY2FwYWNpdHkgPSBkaXNrLVx1MDAzZXpvbmVfY2FwYWNpdHk7XG4gXG4tXHRpZiAoem9uZS1cdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHxcbi1cdCAgICB6b25lLVx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FKSB7XG4rXHRpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLVx1MDAzZWNvbmQpKSB7XG4gXHRcdHpvbmUtXHUwMDNld3AgPSBVTExPTkdfTUFYO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbkBAIC0xMTA4LDM0ICsxMjY4LDMyIEBAIHN0YXRpYyB2b2lkIGJsa196b25lX3Jlc2V0X2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19yZXNldF93cChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zywgdm9pZCAqZGF0YSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KHp3cGx1Zy1cdTAwM2VkaXNrLCB6d3BsdWcsIDApO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9hbGxfYmlvX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2s7XG4tXHRzZWN0b3JfdCBjYXBhY2l0eSA9IGdldF9jYXBhY2l0eShkaXNrKTtcbi1cdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHNlY3Rvcl90IHNlY3Rvcjtcbi1cdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpKSB7XG4tXHRcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpKyspIHtcbi1cdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLFxuLVx0XHRcdFx0XHRcdCBcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0sXG4tXHRcdFx0XHRcdFx0IG5vZGUpIHtcbi1cdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0XHRkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChkaXNrLCB6d3BsdWcsIDApO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdH1cbitcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpKVxuK1x0XHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MoZGlzaywgZGlza196b25lX3dwbHVnX3Jlc2V0X3dwLCBOVUxMKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgY2FjaGVkIHpvbmUgY29uZGl0aW9ucy4gKi9cbi1cdGZvciAoc2VjdG9yID0gMDsgc2VjdG9yIFx1MDAzYyBjYXBhY2l0eTtcbi1cdCAgICAgc2VjdG9yICs9IGJkZXZfem9uZV9zZWN0b3JzKGJpby1cdTAwM2ViaV9iZGV2KSlcbitcdGZvciAoc2VjdG9yID0gMDsgc2VjdG9yIFx1MDAzYyBnZXRfY2FwYWNpdHkoZGlzayk7XG4rXHQgICAgIHNlY3RvciArPSBiZGV2X3pvbmVfc2VjdG9ycyhiaW8tXHUwMDNlYmlfYmRldikpIHtcbitcdFx0aWYgKCFkaXNrX3pvbmVfaXNfc2VxKGRpc2ssIHNlY3RvcikgfHxcbitcdFx0ICAgIGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGRpc2ssIHNlY3RvcikpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGRpc2tfem9uZV9zZXRfY29uZChkaXNrLCBzZWN0b3IsIEJMS19aT05FX0NPTkRfRU1QVFkpO1xuK1x0fVxuIFx0Y2xlYXJfYml0KEdEX1pPTkVfQVBQRU5EX1VTRUQsIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuIH1cbiBcbkBAIC0xMzgxLDExICsxNTM5LDEyIEBAIHN0YXRpYyBib29sIGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwgem9uZS5cbi1cdCAqIFdlIGtub3cgc3VjaCBCSU8gd2lsbCBmYWlsLCBhbmQgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBvdmVyZmxvdyBvdXJcbi1cdCAqIHdyaXRlIHBvaW50ZXIgb2Zmc2V0IGJleW9uZCB0aGUgZW5kIG9mIHRoZSB6b25lLlxuK1x0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seVxuK1x0ICogb3Igb2ZmbGluZSB6b25lLiBXZSBrbm93IHN1Y2ggQklPcyB3aWxsIGZhaWwsIHNvIHRoZXJlIGlzIG5vIHBvaW50XG4rXHQgKiBpbiBpc3N1aW5nIHRoZW0uXG4gXHQgKi9cbi1cdGlmIChkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpKVxuK1x0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykgfHxcbitcdCAgICBkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoYmlvX29wKGJpbykgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XG5AQCAtMTQ0Miw3ICsxNjAxLDcgQEAgc3RhdGljIGJvb2wgYmxrX3pvbmVfd3BsdWdfaGFuZGxlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IG5yX3NlZ3MpXG4gXHR9XG4gXG4gXHQvKiBDb252ZW50aW9uYWwgem9uZXMgZG8gbm90IG5lZWQgd3JpdGUgcGx1Z2dpbmcuICovXG4tXHRpZiAoIWJkZXZfem9uZV9pc19zZXEoYmlvLVx1MDAzZWJpX2JkZXYsIHNlY3RvcikpIHtcbitcdGlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpKSB7XG4gXHRcdC8qIFpvbmUgYXBwZW5kIHRvIGNvbnZlbnRpb25hbCB6b25lcyBpcyBub3QgYWxsb3dlZC4gKi9cbiBcdFx0aWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuIFx0XHRcdGJpb19pb19lcnJvcihiaW8pO1xuQEAgLTE4NTQsMTIgKzIwMTMsMjAgQEAgc3RhdGljIGludCBkaXNrX3pvbmVfd3BsdWdzX3dvcmtlcih2b2lkICpkYXRhKVxuIFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbitcdGF0b21pY19zZXQoXHUwMDI2ZGlzay1cdTAwM2Vucl96b25lX3dwbHVncywgMCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3RfbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3QpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyX2Jpb19kb25lKTtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbit7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbitcbitcdHJldHVybiBESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLVx1MDAzZWNodW5rX3NlY3RvcnMpO1xuK31cbitcbiAvKlxuICAqIEZvciB0aGUgc2l6ZSBvZiBhIGRpc2sgem9uZSB3cml0ZSBwbHVnIGhhc2ggdGFibGUsIHVzZSB0aGUgc2l6ZSBvZiB0aGVcbiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmRcbkBAIC0xODY5LDEzICsyMDM2LDIxIEBAIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuICNkZWZpbmUgQkxLX1pPTkVfV1BMVUdfTUFYX0hBU0hfQklUU1x0XHQ5XG4gI2RlZmluZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRVx0MTI4XG4gXG4tc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxuK3N0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuK1x0dW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XG4rXHR1bnNpZ25lZCBpbnQgcG9vbF9zaXplLCBpO1xuIFx0aW50IHJldCA9IC1FTk9NRU07XG4gXG4tXHRhdG9taWNfc2V0KFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MsIDApO1xuK1x0LypcbitcdCAqIElmIHRoZSBkZXZpY2UgaGFzIG5vIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGFuZCBhY3RpdmVcbitcdCAqIHpvbmVzLCB1c2UgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUuXG4rXHQgKi9cbitcdHBvb2xfc2l6ZSA9IG1heChsaW0tXHUwMDNlbWF4X29wZW5fem9uZXMsIGxpbS1cdTAwM2VtYXhfYWN0aXZlX3pvbmVzKTtcbitcdGlmICghcG9vbF9zaXplKVxuK1x0XHRwb29sX3NpemUgPSBtaW4oQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsIG5yX3pvbmVzKTtcbitcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9iaXRzID1cbiBcdFx0bWluKGlsb2cyKHBvb2xfc2l6ZSkgKyAxLCBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTKTtcbiBcbkBAIC0xODkzLDIxICsyMDY4LDYgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4tXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbi1cdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcbi1cdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuLVx0ICovXG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4tXHRcdFx0YWxsb2Nfd29ya3F1ZXVlKFwiJXNfendwbHVnc1wiLFxuLVx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXG4tXHRcdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuLVx0XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4tXHRcdFx0Z290byBkZXN0cm95X3Bvb2w7XG4tXHR9XG4tXG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9XG4gXHRcdGt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLFxuIFx0XHRcdCAgICAgICBcIiVzX3p3cGx1Z3Nfd29ya2VyXCIsIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbkBAIC0xOTE4LDggKzIwNzgsMTggQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0fVxuIFx0d2FrZV91cF9wcm9jZXNzKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcbiBcbitcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPVxuK1x0XHRhbGxvY193b3JrcXVldWUoXCIlc196d3BsdWdzXCIsXG4rXHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXG4rXHRcdFx0XHRwb29sX3NpemUsIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbitcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbitcdFx0Z290byBzdG9wX3dvcmtlcjtcbitcbiBcdHJldHVybiAwO1xuIFxuK3N0b3Bfd29ya2VyOlxuK1x0a3RocmVhZF9zdG9wKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcbitcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcbiBkZXN0cm95X3Bvb2w6XG4gXHRtZW1wb29sX2Rlc3Ryb3koZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sKTtcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG5AQCAtMTk2MywxOSArMjEzMywxOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxuK3N0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfc3RhdGUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XG4tXHR6b25lc19jb25kID0gcmN1X3JlcGxhY2VfcG9pbnRlcihkaXNrLVx1MDAzZXpvbmVzX2NvbmQsIHpvbmVzX2NvbmQsXG4rXHR6b25lc19zdGF0ZSA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay1cdTAwM2V6b25lc19zdGF0ZSwgem9uZXNfc3RhdGUsXG4gXHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTtcbiBcbi1cdGtmcmVlX3JjdV9taWdodHNsZWVwKHpvbmVzX2NvbmQpO1xuK1x0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4ge1xuIFx0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKSB7XG4gXHRcdGt0aHJlYWRfc3RvcChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG5AQCAtMTk4MywzMCArMjE1MywyMiBAQCBzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHR9XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0KSk7XG4gXG4tXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbi1cdFx0ZHJhaW5fd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuK1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4rXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xuK1x0fVxuIFxuIFx0ZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7XG4gXG4tXHRkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIE5VTEwpO1xuK1x0ZGlza19zZXRfem9uZXNfc3RhdGVfYXJyYXkoZGlzaywgTlVMTCk7XG4gXHRkaXNrLVx1MDAzZXpvbmVfY2FwYWNpdHkgPSAwO1xuIFx0ZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSAwO1xuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IDA7XG4gfVxuIFxuLXZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLXtcbi1cdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XG4tXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuLVx0XHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcbi1cdH1cbi1cbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbi19XG4tXG4gc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0KmRpc2s7XG4tXHR1OFx0XHQqem9uZXNfY29uZDtcbitcdHU4XHRcdCp6b25lc19zdGF0ZTtcbiBcdHVuc2lnbmVkIGludFx0bnJfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdG5yX2NvbnZfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdHpvbmVfY2FwYWNpdHk7XG5AQCAtMjAxNCw0OSArMjE3NiwyNiBAQCBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbiBcdHNlY3Rvcl90XHRzZWN0b3I7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitzdGF0aWMgaW50IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdFx0XHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxuIHtcbi1cdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuLVx0dW5zaWduZWQgaW50IHBvb2xfc2l6ZTtcbi1cdGludCByZXQgPSAwO1xuLVxuIFx0YXJncy1cdTAwM2VkaXNrID0gZGlzaztcbi1cdGFyZ3MtXHUwMDNlbnJfem9uZXMgPVxuLVx0XHRESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLVx1MDAzZWNodW5rX3NlY3RvcnMpO1xuK1x0YXJncy1cdTAwM2Vucl96b25lcyA9IGRpc2tfZ2V0X25yX3pvbmVzKGRpc2spO1xuIFxuIFx0LyogQ2FjaGVkIHpvbmUgY29uZGl0aW9uczogMSBieXRlIHBlciB6b25lICovXG4tXHRhcmdzLVx1MDAzZXpvbmVzX2NvbmQgPSBremFsbG9jKGFyZ3MtXHUwMDNlbnJfem9uZXMsIEdGUF9OT0lPKTtcbi1cdGlmICghYXJncy1cdTAwM2V6b25lc19jb25kKVxuK1x0YXJncy1cdTAwM2V6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy1cdTAwM2Vucl96b25lcywgR0ZQX05PSU8pO1xuK1x0aWYgKCFhcmdzLVx1MDAzZXpvbmVzX3N0YXRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmICghZGlza19uZWVkX3pvbmVfcmVzb3VyY2VzKGRpc2spKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXG4tXHQgKiB6b25lcywgdXNlIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLlxuLVx0ICovXG4tXHRwb29sX3NpemUgPSBtYXgobGltLVx1MDAzZW1heF9vcGVuX3pvbmVzLCBsaW0tXHUwMDNlbWF4X2FjdGl2ZV96b25lcyk7XG4tXHRpZiAoIXBvb2xfc2l6ZSlcbi1cdFx0cG9vbF9zaXplID1cbi1cdFx0XHRtaW4oQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsIGFyZ3MtXHUwMDNlbnJfem9uZXMpO1xuLVxuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpIHtcbi1cdFx0cmV0ID0gZGlza19hbGxvY196b25lX3Jlc291cmNlcyhkaXNrLCBwb29sX3NpemUpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGtmcmVlKGFyZ3MtXHUwMDNlem9uZXNfY29uZCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG4tICogVXBkYXRlIHRoZSBkaXNrIHpvbmUgcmVzb3VyY2VzIGluZm9ybWF0aW9uIGFuZCBkZXZpY2UgcXVldWUgbGltaXRzLlxuLSAqIFRoZSBkaXNrIHF1ZXVlIGlzIGZyb3plbiB3aGVuIHRoaXMgaXMgZXhlY3V0ZWQuXG4rICogUmV2YWxpZGF0ZSBhbmQgdXBkYXRlIHRoZSBkaXNrIHpvbmUgcmVzb3VyY2VzIGluZm9ybWF0aW9uIGFuZCBkZXZpY2UgcXVldWVcbisgKiBsaW1pdHMuXG4gICovXG4tc3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXG4rc3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4rXHRcdFx0XHRcdCAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXHUwMDNlcXVldWU7XG4gXHR1bnNpZ25lZCBpbnQgbnJfc2VxX3pvbmVzO1xuQEAgLTIwNjQsMjMgKzIyMDMsMjggQEAgc3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0aW50IHJldCA9IDA7XG4gXG4rXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHkgaGFzIGJlZW4gY2hlY2tlZC4gKi9cbitcdGlmIChhcmdzLVx1MDAzZXNlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHtcbitcdFx0cHJfd2FybihcIiVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcXG5cIixcbitcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy1cdTAwM2VzZWN0b3IpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdGlmIChhcmdzLVx1MDAzZW5yX2NvbnZfem9uZXMgXHUwMDNlPSBhcmdzLVx1MDAzZW5yX3pvbmVzKSB7XG4rXHRcdHByX3dhcm4oXCIlczogSW52YWxpZCBudW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzICV1IC8gJXVcXG5cIixcbitcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy1cdTAwM2Vucl9jb252X3pvbmVzLCBhcmdzLVx1MDAzZW5yX3pvbmVzKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuIFxuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IGFyZ3MtXHUwMDNlbnJfem9uZXM7XG4tXHRpZiAoYXJncy1cdTAwM2Vucl9jb252X3pvbmVzIFx1MDAzZT0gZGlzay1cdTAwM2Vucl96b25lcykge1xuLVx0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcbi1cdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIG51bWJlciBvZiBjb252ZW50aW9uYWwgem9uZXMgJXUgLyAldVxcblwiLFxuLVx0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCBhcmdzLVx1MDAzZW5yX2NvbnZfem9uZXMsIGRpc2stXHUwMDNlbnJfem9uZXMpO1xuLVx0XHRyZXQgPSAtRU5PREVWO1xuLVx0XHRnb3RvIHVuZnJlZXplO1xuLVx0fVxuLVxuIFx0ZGlzay1cdTAwM2V6b25lX2NhcGFjaXR5ID0gYXJncy1cdTAwM2V6b25lX2NhcGFjaXR5O1xuIFx0ZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSBhcmdzLVx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eTtcbi1cdGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoZGlzaywgYXJncy1cdTAwM2V6b25lc19jb25kKTtcbi1cdGFyZ3MtXHUwMDNlem9uZXNfY29uZCA9IE5VTEw7XG4rXHRkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBhcmdzLVx1MDAzZXpvbmVzX3N0YXRlKTtcbitcdGFyZ3MtXHUwMDNlem9uZXNfc3RhdGUgPSBOVUxMO1xuIFxuIFx0LypcbiBcdCAqIFNvbWUgZGV2aWNlcyBjYW4gYWR2ZXJ0aXNlIHpvbmUgcmVzb3VyY2UgbGltaXRzIHRoYXQgYXJlIGxhcmdlciB0aGFuXG5AQCAtMjEyMCw0OCArMjI2NCw1OSBAQCBzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIGNvbW1pdDpcbiBcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFx1MDAyNmxpbSk7XG4gXG4tdW5mcmVlemU6XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NvbmQoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXG4rc3RhdGljIHZvaWQgZGlza19kcm9wX3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsIHZvaWQgKmRhdGEpXG4ge1xuLVx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQgPSB6b25lLVx1MDAzZWNvbmQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0LyogQ2hlY2sgdGhhdCB0aGUgem9uZSBjb25kaXRpb24gaXMgY29uc2lzdGVudCB3aXRoIHRoZSB6b25lIHR5cGUuICovXG4tXHRzd2l0Y2ggKGNvbmQpIHtcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XG4tXHRcdGlmICh6b25lLVx1MDAzZXR5cGUgIT0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUwpXG4tXHRcdFx0Z290byBpbnZhbGlkX2NvbmRpdGlvbjtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0VNUFRZOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbi1cdFx0aWYgKHpvbmUtXHUwMDNldHlwZSAhPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUSlcbi1cdFx0XHRnb3RvIGludmFsaWRfY29uZGl0aW9uO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCIlczogSW52YWxpZCB6b25lIGNvbmRpdGlvbiAweCVYXFxuXCIsXG4tXHRcdFx0YXJncy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgY29uZCk7XG4tXHRcdHJldHVybiAtRU5PREVWO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuK1x0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV9jYXBhY2l0eShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbit7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbitcdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGxpbS1cdTAwM2VjaHVua19zZWN0b3JzO1xuK1x0dW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XG4rXHRpbnQgcmV0ID0gLUVOT0RFVjtcbitcbitcdGlmICghZ2V0X2NhcGFjaXR5KGRpc2spKVxuK1x0XHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XG4rXG4rXHQvKlxuK1x0ICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0XG4rXHQgKiB0aGUgbWF4IHpvbmUgYXBwZW5kIGxpbWl0IGlzIHNldC5cbitcdCAqL1xuK1x0aWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkge1xuK1x0XHRwcl93YXJuKFwiJXM6IEludmFsaWQgbm9uIHBvd2VyIG9mIHR3byB6b25lIHNpemUgKCVsbHUpXFxuXCIsXG4rXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIHpvbmVfc2VjdG9ycyk7XG4rXHRcdGdvdG8gZHJvcF9hbGxfendwbHVncztcbiBcdH1cbiBcbi1cdGJsa196b25lX3NldF9jb25kKGFyZ3MtXHUwMDNlem9uZXNfY29uZCwgaWR4LCBjb25kKTtcbitcdC8qXG4rXHQgKiBDaGVjayBpZiB0aGUgY2FwYWNpdHkgaGFzIGNoYW5nZWQuIElmIGl0IGRpZCwgYXNzdW1lIHRoYXQgdGhlIGRldmljZVxuK1x0ICogd2FzIHJlZm9ybWF0dGVkIGFuZCB0aGF0IGFsbCBzZXF1ZW50aWFsIHpvbmVzIGFyZSBub3cgZW1wdHkuIFNvIGRyb3BcbitcdCAqIGFsbCB6b25lIHdyaXRlIHBsdWcuXG4rXHQgKi9cbitcdGlmIChkaXNrLVx1MDAzZW5yX3pvbmVzIFx1MDAyNlx1MDAyNiBkaXNrLVx1MDAzZW5yX3pvbmVzICE9IG5yX3pvbmVzKSB7XG4rXHRcdHByX3dhcm4oXCIlczogTnVtYmVyIG9mIHpvbmVzIGNoYW5nZWQgKCV1IC1cdTAwM2UgJXUpXFxuXCIsXG4rXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGRpc2stXHUwMDNlbnJfem9uZXMsIG5yX3pvbmVzKTtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBkcm9wX2FsbF96d3BsdWdzO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4taW52YWxpZF9jb25kaXRpb246XG4tXHRwcl93YXJuKFwiJXM6IEludmFsaWQgem9uZSBjb25kaXRpb24gMHgleCBmb3IgdHlwZSAweCV4XFxuXCIsXG4tXHRcdGFyZ3MtXHUwMDNlZGlzay1cdTAwM2VkaXNrX25hbWUsIGNvbmQsIHpvbmUtXHUwMDNldHlwZSk7XG4rZHJvcF9hbGxfendwbHVnczpcbitcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhkaXNrLCBkaXNrX2Ryb3Bfem9uZV93cGx1ZywgTlVMTCk7XG4gXG4tXHRyZXR1cm4gLUVOT0RFVjtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbkBAIC0yMTY5LDEyICsyMzI0LDI2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFyZ3MtXHUwMDNlZGlzaztcbiBcbitcdC8qIENoZWNrIHRoZSB6b25lIGNvbmRpdGlvbi4gKi9cbitcdHN3aXRjaCAoem9uZS1cdTAwM2Vjb25kKSB7XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxuK1x0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIGNvbnYuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcXG5cIixcbitcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgem9uZS1cdTAwM2Vjb25kLCB6b25lLVx1MDAzZXN0YXJ0KTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4gXHRpZiAoem9uZS1cdTAwM2VjYXBhY2l0eSAhPSB6b25lLVx1MDAzZWxlbikge1xuIFx0XHRwcl93YXJuKFwiJXM6IEludmFsaWQgY29udmVudGlvbmFsIHpvbmUgY2FwYWNpdHlcXG5cIixcbiBcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuK1x0YmxrX3pzdGF0ZV9zZXQoYXJncy1cdTAwM2V6b25lc19zdGF0ZSwgaWR4LCB6b25lLVx1MDAzZWNvbmQsIEJMS19aRkxBR19DT05WKTtcbitcbiBcdGlmIChkaXNrX3pvbmVfaXNfbGFzdChkaXNrLCB6b25lKSlcbiBcdFx0YXJncy1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSB6b25lLVx1MDAzZWNhcGFjaXR5O1xuIFxuQEAgLTIxOTAsNiArMjM1OSwyNCBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuIFx0dW5zaWduZWQgaW50IHdwX29mZnNldDtcbiBcbitcdC8qIENoZWNrIHRoZSB6b25lIGNvbmRpdGlvbi4gKi9cbitcdHN3aXRjaCAoem9uZS1cdTAwM2Vjb25kKSB7XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuK1x0Y2FzZSBCTEtfWk9ORV9DT05EX0VNUFRZOlxuK1x0Y2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbitcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwcl93YXJuKFwiJXM6IEludmFsaWQgc2VxLiB6b25lIGNvbmRpdGlvbiAweCVYIGF0IHNlY3RvciAlbGx1XFxuXCIsXG4rXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIHpvbmUtXHUwMDNlY29uZCwgem9uZS1cdTAwM2VzdGFydCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0YmxrX3pzdGF0ZV9zZXQoYXJncy1cdTAwM2V6b25lc19zdGF0ZSwgaWR4LCB6b25lLVx1MDAzZWNvbmQsIDApO1xuK1xuIFx0LypcbiBcdCAqIFJlbWVtYmVyIHRoZSBjYXBhY2l0eSBvZiB0aGUgZmlyc3Qgc2VxdWVudGlhbCB6b25lIGFuZCBjaGVja1xuIFx0ICogaWYgaXQgaXMgY29uc3RhbnQgZm9yIGFsbCB6b25lcywgaWdub3JpbmcgdGhlIGxhc3Qgem9uZSBhcyBpdCBjYW4gYmVcbkBAIC0yMjE0LDcgKzI0MDEsNyBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiBcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3dwX29mZnNldChkaXNrLCB6b25lKTtcbitcdHdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpO1xuIFx0aWYgKCF3cF9vZmZzZXQgfHwgd3Bfb2Zmc2V0IFx1MDAzZT0gem9uZS1cdTAwM2VjYXBhY2l0eSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjI3MiwxMSArMjQ1OSw2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0LyogQ2hlY2sgem9uZSBjb25kaXRpb24gKi9cbi1cdHJldCA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZCh6b25lLCBpZHgsIGFyZ3MpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdC8qIENoZWNrIHpvbmUgdHlwZSAqL1xuIFx0c3dpdGNoICh6b25lLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw6XG5AQCAtMjMxMywzOSArMjQ5NSwzNyBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY2Ioc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuICAqL1xuIGludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbi1cdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay1cdTAwM2VxdWV1ZTtcbi1cdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IHEtXHUwMDNlbGltaXRzLmNodW5rX3NlY3RvcnM7XG4tXHRzZWN0b3JfdCBjYXBhY2l0eSA9IGdldF9jYXBhY2l0eShkaXNrKTtcbiBcdHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgYXJncyA9IHsgfTtcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncywgbm9pb19mbGFnO1xuIFx0c3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyByZXBfYXJncyA9IHtcbiBcdFx0LmNiID0gYmxrX3JldmFsaWRhdGVfem9uZV9jYixcbiBcdFx0LmRhdGEgPSBcdTAwMjZhcmdzLFxuIFx0fTtcbi1cdGludCByZXQgPSAtRU5PTUVNO1xuK1x0dW5zaWduZWQgaW50IG5vaW9fZmxhZztcbitcdGludCByZXQ7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQocSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRSghYmxrX3F1ZXVlX2lzX3pvbmVkKGRpc2stXHUwMDNlcXVldWUpKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4tXHRpZiAoIWNhcGFjaXR5KVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbitcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV9jYXBhY2l0eShkaXNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKlxuLVx0ICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0XG4tXHQgKiB0aGUgbWF4IHpvbmUgYXBwZW5kIGxpbWl0IGlzIHNldC5cbitcdCAqIEFsbG9jYXRlIHpvbmUgcmVzb3VyY2VzIGlmIHRoZXkgYXJlIG5lZWRlZCBhbmQgd2UgaGF2ZSBub3QgZG9uZVxuK1x0ICogc28geWV0LCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmV2YWxpZGF0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gcmVwb3J0XG4rXHQgKiB6b25lcy4gRW5zdXJlIHRoYXQgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIGRvbmUgYXNcbitcdCAqIGlmIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuXG4gXHQgKi9cbi1cdGlmICghem9uZV9zZWN0b3JzIHx8ICFpc19wb3dlcl9vZl8yKHpvbmVfc2VjdG9ycykpIHtcbi1cdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxcblwiLFxuLVx0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lX3NlY3RvcnMpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbitcdG5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuK1x0aWYgKGRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSBcdTAwMjZcdTAwMjYgIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCkge1xuK1x0XHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzIGlmXG4tXHQgKiBHRlBfTk9JTyB3YXMgc3BlY2lmaWVkLlxuLVx0ICovXG4tXHRub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcbi1cdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhkaXNrLCBcdTAwMjZhcmdzKTtcbitcdHJldCA9IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3MoZGlzaywgXHUwMDI2YXJncyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNTksMzIgKzI1MzksMTggQEAgaW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFnKTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjPSAwKVxuLVx0XHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xuK1x0XHRnb3RvIGZyZWVfYXJncztcbiBcbi1cdC8qXG4tXHQgKiBJZiB6b25lcyB3aGVyZSByZXBvcnRlZCwgbWFrZSBzdXJlIHRoYXQgdGhlIGVudGlyZSBkaXNrIGNhcGFjaXR5XG4tXHQgKiBoYXMgYmVlbiBjaGVja2VkLlxuLVx0ICovXG4tXHRpZiAoYXJncy5zZWN0b3IgIT0gY2FwYWNpdHkpIHtcbi1cdFx0cHJfd2FybihcIiVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcXG5cIixcbi1cdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy5zZWN0b3IpO1xuLVx0XHRyZXQgPSAtRU5PREVWO1xuLVx0XHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xuLVx0fVxuLVxuLVx0cmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXHUwMDI2YXJncyk7XG4rXHRyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXHUwMDI2YXJncyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xuK1x0XHRnb3RvIGZyZWVfYXJncztcbiBcbiBcdHJldHVybiAwO1xuIFxuLWZyZWVfcmVzb3VyY2VzOlxuK2ZyZWVfYXJnczpcbiBcdHByX3dhcm4oXCIlczogZmFpbGVkIHRvIHJldmFsaWRhdGUgem9uZXNcXG5cIiwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuIFxuLVx0a2ZyZWUoYXJncy56b25lc19jb25kKTtcbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4rXHRrZnJlZShhcmdzLnpvbmVzX3N0YXRlKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI0MzUsOCArMjYwMSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX2lzc3VlX3plcm9vdXQpO1xuIFxuICNpZmRlZiBDT05GSUdfQkxLX0RFQlVHX0ZTXG4gc3RhdGljIHZvaWQgcXVldWVfem9uZV93cGx1Z19zaG93KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLFxuLVx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4rXHRcdFx0XHQgIHZvaWQgKmRhdGEpXG4ge1xuK1x0c3RydWN0IHNlcV9maWxlICptID0gZGF0YTtcbiBcdHVuc2lnbmVkIGludCB6d3Bfd3Bfb2Zmc2V0LCB6d3BfZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgendwX3pvbmVfbm8sIHp3cF9yZWY7XG4gXHR1bnNpZ25lZCBpbnQgendwX2Jpb19saXN0X3NpemU7XG5AQCAtMjQ2MSwxOSArMjYyOCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcbiBpbnQgcXVldWVfem9uZV93cGx1Z3Nfc2hvdyh2b2lkICpkYXRhLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4ge1xuIFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkYXRhO1xuLVx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBxLVx1MDAzZWRpc2s7XG4tXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zztcbi1cdHVuc2lnbmVkIGludCBpO1xuLVxuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpXG4tXHRcdHJldHVybiAwO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKylcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywgXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldLFxuLVx0XHRcdFx0XHQgbm9kZSlcbi1cdFx0XHRxdWV1ZV96b25lX3dwbHVnX3Nob3coendwbHVnLCBtKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0ZGlza19mb3JfYWxsX3pvbmVfd3BsdWdzKHEtXHUwMDNlZGlzaywgcXVldWVfem9uZV93cGx1Z19zaG93LCBtKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCA1MGFiZmQ5MzI4ODYxLi5jZmU4ZDQxODVlMjVhIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtNTc3LDYgKzU3Nyw3IEBAIGludCBibGtkZXZfcmVwb3J0X3pvbmVzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gXHRcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rvcik7XG4gI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbkBAIC02MTksNiArNjIwLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl96b25lX21nbXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4rc3RhdGljIGlubGluZSBib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4rXHRcdFx0XHRcdHNlY3Rvcl90IHNlY3Rvcilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xuIFxuIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXZfYWxsb2Moc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGU4Y2UwY2FiZjM5MmMuLjM0YTY0MDc3YmEwMmMgMTAwNjQ0XG4tLS0gYS9ibG9jay9nZW5oZC5jXG4rKysgYi9ibG9jay9nZW5oZC5jXG5AQCAtNDQ3LDYgKzQ0NywxMyBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdFx0YmRldl9zZXRfZmxhZyhkaXNrLVx1MDAzZXBhcnQwLCBCRF9IQVNfU1VCTUlUX0JJTyk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogV2UgZG8gbm90IHN1cHBvcnQgcGFydGl0aW9ucyB3aXRoIHpvbmVkIGJsb2NrIGRldmljZXMsIHNvIGRvIG5vdCB0cnlcbitcdCAqIHRvIHNjYW4gdGhlIHBhcnRpdGlvbnMgdGFibGUuXG4rXHQgKi9cbitcdGlmIChibGtfcXVldWVfaXNfem9uZWQoZGlzay1cdTAwM2VxdWV1ZSkpXG4rXHRcdGRpc2stXHUwMDNlZmxhZ3MgfD0gR0VOSERfRkxfTk9fUEFSVDtcbitcbiBcdC8qXG4gXHQgKiBJZiB0aGUgZHJpdmVyIHByb3ZpZGVzIGFuIGV4cGxpY2l0IG1ham9yIG51bWJlciBpdCBhbHNvIG11c3QgcHJvdmlkZVxuIFx0ICogdGhlIG51bWJlciBvZiBtaW5vcnMgbnVtYmVycyBzdXBwb3J0ZWQsIGFuZCB0aG9zZSB3aWxsIGJlIHVzZWQgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggMjBjYjhlZDdkOTg3YS4uNGZhMDA3NTc1MjdkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0yMDAsNyArMjAwLDcgQEAgc3RydWN0IGdlbmRpc2sge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX3pvbmVzO1xuIFx0dW5zaWduZWQgaW50XHRcdHpvbmVfY2FwYWNpdHk7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bGFzdF96b25lX2NhcGFjaXR5O1xuLVx0dTggX19yY3VcdFx0KnpvbmVzX2NvbmQ7XG4rXHR1OCBfX3JjdVx0XHQqem9uZXNfc3RhdGU7XG4gXHR1bnNpZ25lZCBpbnRcdFx0em9uZV93cGx1Z3NfaGFzaF9iaXRzO1xuIFx0YXRvbWljX3RcdFx0bnJfem9uZV93cGx1Z3M7XG4gXHRzcGlubG9ja190XHRcdHpvbmVfd3BsdWdzX2hhc2hfbG9jaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI2LjE4NzczMjI1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjY4NDIyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgRGV2aWNlIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQncyB0b3VjaGluZyB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSB0aGUgem9uZWQgYmxvY2sgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBXZSdyZSBsb29raW5nIGF0IGBibG9jay9ibGstem9uZWQuY2AsIGBibG9jay9ibGstY29yZS5jYCwgYGJsb2NrL2Jsay5oYCwgYGJsb2NrL2dlbmhkLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLiBTdHJhaWdodCBhd2F5LCBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBjaGFuZ2luZyBob3cgem9uZSBzdGF0ZXMgYXJlIHRyYWNrZWQuIEluc3RlYWQgb2YgYHpvbmVzX2NvbmRgLCB3ZSdyZSBub3cgZGVhbGluZyB3aXRoIGB6b25lc19zdGF0ZWAuIFRoaXMgaGFzIGEgaHVnZSBmdW5jdGlvbmFsIGltcGFjdC4gVGhpcyBpcyBhIGdvb2Qgc2lnbiBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBzdWJtaXRfYmlvX25vYWNjdGAgbm93IGNoZWNrcyB3aXRoIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAuIFRoYXQgb25lIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gVGhleSdyZSBiYXNpY2FsbHkgbWFraW5nIHN1cmUgem9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBvbiBzZXF1ZW50aWFsIHpvbmVzIHRoYXQgYXJlIG9ubGluZSBhbmQgbm90IHJlYWQtb25seS4gV2UgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyBgX19hZGRfZGlza2AgaXMgbW9kaWZpZWQgaW4gYGJsb2NrL2dlbmhkLmNgIHRvIHNldCBgR0VOSERfRkxfTk9fUEFSVGAgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuXG5cblNvLCBJJ20gdGhpbmtpbmcgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlc2UgbmV3IGNoZWNrcyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gQmFzZWQgb24gdGhhdCwgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHByaW1lIGZ1enppbmcgY2FuZGlkYXRlczpcblxuKiAgIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAgKGVzcGVjaWFsbHkgZ2l2ZW4gaXQncyBub3cgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBzdWJtaXRfYmlvX25vYWNjdGApXG4qICAgYGRpc2tfem9uZV9zZXRfY29uZGBcbiogICBgZGlza196b25lX2dldF9zdGF0ZWBcbiogICBgZGlza196b25lX2dldF9jb25kYFxuKiAgIGBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seWBcbiogICBgZGlza196b25lX2lzX3NlcWBcbiogICBgZGlza19pbnNlcnRfem9uZV93cGx1Z2BcbiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YFxuKiAgIGBkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZWBcbiogICBgYmxrZGV2X2dldF96b25lX2luZm9gXG4qICAgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gXG4qICAgYGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvYFxuKiAgIGBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGVgXG4qICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgXG4qICAgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2BcbiogICBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2BcblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcgZnVuY3Rpb25zIHdoaWNoIGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmc6XG5cbiogICBgYmRldl9jaGVja196b25lX21nbXRgIChzaW5jZSBpdCdzIGEgYm91bmRhcnkgZXhwb3NlZCB0byB0aGUgc3VibWl0IHBhdGgpLlxuKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCAobGlrZWx5IGludm9sdmVkIGluIGluaXRpYWwgZGlzayBzZXR1cCBvciB6b25lIHJldmFsaWRhdGlvbilcbiogICBgYmxrZGV2X2dldF96b25lX2luZm9gIChpZiBhbiBBUEksIGFuZCBjb21tb25seSB1c2VkIGl0IG1heSBiZSB2YWx1YWJsZSB0byBmdXp6KS5cbiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YCAoZXJyb3IgcmVjb3ZlcnkpLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBhY3R1YWxseSBlbmFibGVkLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhhdCB3aXRoIGBnaXQgZ3JlcGAgb3IgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBtYWtlIHN1cmUgd2UncmUgZGVhbGluZyB3aXRoIGEgYnVpbGQgdGhhdCdzIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjM2Ljg1NjE1OTA4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY1MDkxMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NjozOS4yMjEyNTkyNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIwMDc3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgZm9jdXMgaXMgb24gYEJMS19ERVZfWk9ORURgLiBUaGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIHpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0LCBuYXR1cmFsbHkuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaW5raW5nIG1vcmUgYnJvYWRseSwgSSB3b25kZXIuLi5gQkxLX0RFVl9aT05FRF9MT09QYCBjb3VsZCBiZSB1c2VmdWwsIGVzcGVjaWFsbHkgZm9yIGNyZWF0aW5nIGEgdmlydHVhbCBlbnZpcm9ubWVudCB0byB0ZXN0IHRoaW5ncyB3aXRob3V0IG5lZWRpbmcgcmVhbCBoYXJkd2FyZSwgdGhhdCBtaWdodCBiZSB1c2VmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NDUuNTQxMzM4MjM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjUyMzQ4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NDguMDA2NTc4OTY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0ODIyMTU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBgQkxLX0RFVl9aT05FRF9MT09QYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb246XG5cbioqRGl2aW5nIGludG8gQkxLX0RFVl9aT05FRF9MT09QIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIGFuZCBtb2R1bGVzIGFyZSBwcmVyZXF1aXNpdGVzIG9yIGFyZSByZWxhdGVkIHRvIGBCTEtfREVWX1pPTkVEX0xPT1BgLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHVzdWFsbHkgaW52b2x2ZXMgc2VhcmNoaW5nIGZvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyByZWxhdGVkIHRvIHRoaXMgb3B0aW9uLiBJ4oCZbGwgYmUgd2F0Y2hpbmcgb3V0IGZvciB0aGluZ3MgbGlrZSBzdG9yYWdlIHN0YWNrIGNvbXBvbmVudHMsIGJsb2NrIGRldmljZSBkcml2ZXJzLCBvciBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzLiBJdCBjb3VsZCBhbHNvIGRlcGVuZCBvbiBzb21lIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLCBvYnZpb3VzbHkuIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IGl0IHJlcXVpcmVzIGVuYWJsaW5nIGNlcnRhaW4ga2VybmVsIGFyY2hpdGVjdHVyZXMuIEkgYWxzbyB3aWxsIHdhbnQgdG8gc2VlIHdoaWNoIG90aGVyIG9wdGlvbnMgYXJlIGluY2x1ZGVkLCBhcyB0aGVzZSBvZnRlbiBpbXBseSB1c2FnZSBvZiB0aGUgb3B0aW9uLCB0aG91Z2ggbm90IGV4cGxpY2l0IGRlcGVuZGVuY3kuIEkgYWxzbyB3aWxsIG1ha2Ugbm90ZXMsIGFzIHdlbGwgYXMgdGVzdCBteSBjdXJyZW50IGtub3dsZWRnZSwgc28gSSBjYW4gc2VlIHdoaWNoIEkgbmVlZCB0byByZWZyZXNoIG9uLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3B0aW9ucyBvciBpbXBsaWNpdCBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NTIuODU0ODAzMjg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0ICBTYXkgTiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcXG4gMzUxOlxcdFxcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXFxuIDM1MjpcXHRcXHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuIDM1NTpcXHRcXG4gMzU2OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4gMzU3OlxcdFxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMzU4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcXG4gMzYxOlxcdFxcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcXG4gMzYyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXFxuIDM2MzpcXHRcXHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXFxuIDM2NDpcXHRcXHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcXG4gMzY1OlxcdFxcdCAgbGlrZTpcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbiAzNjg6XFx0XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuIDM2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NTIuODU0OTQ1MDI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyOTMyNzUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHByb2Nlc3MgdGhpc+KAplxuXG4qKlpvbmVkIEJsb2NrIERldmljZSBDb25mdXNpb24gLSBBIFF1aWNrIERpdmUqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLiAqQkxLX0RFVl9aT05FRF9MT09QKj8gSSBoYWRuJ3Qgc2VlbiB0aGF0IG9uZSBiZWZvcmUuIEknbSB1c3VhbGx5IHByZXR0eSB1cC10by1kYXRlIG9uIGJsb2NrIGRldmljZSBkZWZpbml0aW9ucywgYnV0IHRoaXMgY2F1Z2h0IG1lIG9mZiBndWFyZC4gV2FpdCwgaXNuJ3QgKkJMS19ERVZfWk9ORUQqIHRoZSBwcmltYXJ5IG9uZSBJJ2QgYmUgbG9va2luZyBhdD8gWWVhaCwgdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgbGV0J3MgdGhpbmvigKYgd2hhdCBhYm91dCAqTlVMTF9CTEtfWk9ORUQqPyBIbW0sIHRoYXQgY291bGQgYWN0dWFsbHkgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gKk5VTExfQkxLX1pPTkVEKiwgSSdsbCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBicm9hZGVyICpOVUxMX0JMSyogY29udGV4dC4gR290dGEgbWFrZSBzdXJlIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmlnaHQgYWJzdHJhY3Rpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTMyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0Njo1Ny41ODQyNzU0NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTY3MDc5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlVMTF9CTEtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjU5Ljg0MDk4OTg1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU3ODA5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYE5VTExfQkxLYCBab25lZCBTdXBwb3J0KipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcgYWJvdXQgYE5VTExfQkxLYCB6b25lZCBzdXBwb3J0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzdGFydCBieSB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgaGFuZGxlZCBhdCB0aGUgbG93ZXN0IGxldmVsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgaXQgd2lsbCBwZXJmb3JtIGluIGEgdHlwaWNhbCB3b3JrbG9hZC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGUgem9uZWQgY2hhcmFjdGVyaXN0aWNzIGFyZSBsZXZlcmFnZWQsIGFuZCB3aGVyZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBtYXkgYmUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9ucyBhbmQgY2FwYWJpbGl0aWVzLiBBcmUgd2UgZ2V0dGluZyBmdWxsIHV0aWxpemF0aW9uIG91dCBvZiB0aGlzIGZlYXR1cmU/IEFyZSB0aGVyZSBhbnkgdW5leHBlY3RlZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIHBlcmhhcHMgd2l0aCBzcGVjaWZpYyBjb250cm9sbGVycyBvciBkcml2ZSBtb2RlbHM/IE15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGUgZGV0YWlscyBvZiBibG9jayBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MDQuODk4ODAzOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IENPTkZJR0ZTX0ZTXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTlVMTF9CTEsgXFx1MDAyNlxcdTAwMjYgRkFVTFRfSU5KRUNUSU9OX0NPTkZJR0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ3OjA0Ljg5ODk1Mjg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMTg3OTg2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFpvbmVkIENvbmZpZ3VyYXRpb24gb2YgYG51bGxfYmxrYCoqXG5cbkhtbSwgaXQgc2VlbXMgbGlrZSBgbnVsbF9ibGtgIG1pZ2h0IG5vdCBoYXZlIGEgZGVkaWNhdGVkLCBzZXBhcmF0ZSB6b25lZCBjb25maWd1cmF0aW9uIGZpbGUuIFRoYXQncyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gY2xhcmlmeSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgIG9yLCBpZiBpdCBleGlzdHMsIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2Ugc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkxNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MTEuMDE3NzU1OTA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1OTMwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiem9uZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT0xMD1lbmRpZlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6MTE6bnVsbF9ibGstJChDT05GSUdfQkxLX0RFVl9aT05FRCkgKz0gem9uZWQub1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjM0PU1PRFVMRV9QQVJNX0RFU0MobWJwcywgXFxcIkxpbWl0IG1heGltdW0gYmFuZHdpZHRoIChpbiBNaUIvcykuIERlZmF1bHQ6IDAgKG5vIGxpbWl0KVxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIzNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzY6c3RhdGljIGJvb2wgZ196b25lZDtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzc6bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVkLCBnX3pvbmVkLCBib29sLCBTX0lSVUdPKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzg6TU9EVUxFX1BBUk1fREVTQyh6b25lZCwgXFxcIk1ha2UgZGV2aWNlIGFzIGEgaG9zdC1tYW5hZ2VkIHpvbmVkIGJsb2NrIGRldmljZS4gRGVmYXVsdDogZmFsc2VcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMzktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDE9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfc2l6ZSwgZ196b25lX3NpemUsIHVsb25nLCBTX0lSVUdPKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNDI6TU9EVUxFX1BBUk1fREVTQyh6b25lX3NpemUsIFxcXCJab25lIHNpemUgaW4gTUIgd2hlbiBibG9jayBkZXZpY2UgaXMgem9uZWQuIE11c3QgYmUgcG93ZXItb2YtdHdvOiBEZWZhdWx0OiAyNTZcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNDMtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDU9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfY2FwYWNpdHksIGdfem9uZV9jYXBhY2l0eSwgdWxvbmcsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI0NjpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfY2FwYWNpdHksIFxcXCJab25lIGNhcGFjaXR5IGluIE1CIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBDYW4gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHpvbmUgc2l6ZS4gRGVmYXVsdDogWm9uZSBzaXplXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjQ3LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjQ5PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX25yX2NvbnYsIGdfem9uZV9ucl9jb252LCB1aW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNTA6TU9EVUxFX1BBUk1fREVTQyh6b25lX25yX2NvbnYsIFxcXCJOdW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBEZWZhdWx0OiAwXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjUxLVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjUzPW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX21heF9vcGVuLCBnX3pvbmVfbWF4X29wZW4sIHVpbnQsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI1NDpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfbWF4X29wZW4sIFxcXCJNYXhpbXVtIG51bWJlciBvZiBvcGVuIHpvbmVzIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBEZWZhdWx0OiAwIChubyBsaW1pdClcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNTUtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNTc9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfbWF4X2FjdGl2ZSwgZ196b25lX21heF9hY3RpdmUsIHVpbnQsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI1ODpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfbWF4X2FjdGl2ZSwgXFxcIk1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSB6b25lcyB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gRGVmYXVsdDogMCAobm8gbGltaXQpXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjY2PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX2Z1bGwsIGdfem9uZV9mdWxsLCBib29sLCBTX0lSVUdPKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNjc6TU9EVUxFX1BBUk1fREVTQyh6b25lX2Z1bGwsIFxcXCJJbml0aWFsaXplIHRoZSBzZXF1ZW50aWFsIHdyaXRlIHJlcXVpcmVkIHpvbmVzIG9mIGEgem9uZWQgZGV2aWNlIHRvIGJlIGZ1bGwuIERlZmF1bHQ6IGZhbHNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjY4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NDYxPU5VTExCX0RFVklDRV9BVFRSKGNhY2hlX3NpemUsIHVsb25nLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NjI6TlVMTEJfREVWSUNFX0FUVFIoem9uZWQsIGJvb2wsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ2My1OVUxMQl9ERVZJQ0VfQVRUUih6b25lX3NpemUsIHVsb25nLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTU5Nj1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbnVsbGJfZGV2aWNlX2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02MzItXFx0XFx1MDAyNm51bGxiX2RldmljZV9hdHRyX3pvbmVfc2l6ZSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2MzM6XFx0XFx1MDAyNm51bGxiX2RldmljZV9hdHRyX3pvbmVkLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTYzNC1cXHROVUxMLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzc3PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODE1LVxcdGRldi1cXHUwMDNldXNlX3Blcl9ub2RlX2hjdHggPSBnX3VzZV9wZXJfbm9kZV9oY3R4O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjgxNjpcXHRkZXYtXFx1MDAzZXpvbmVkID0gZ196b25lZDtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MTctXFx0ZGV2LVxcdTAwM2V6b25lX3NpemUgPSBnX3pvbmVfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTgzND1zdGF0aWMgdm9pZCBudWxsX2ZyZWVfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgzOC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4Mzk6XFx0bnVsbF9mcmVlX3pvbmVkX2RldihkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTg0MC1cXHRiYWRibG9ja3NfZXhpdChcXHUwMDI2ZGV2LVxcdTAwM2ViYWRibG9ja3MpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTI0Mj1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfdHJhbnNmZXIoc3RydWN0IG51bGxiICpudWxsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMjUyLVxcdGlmICghaXNfd3JpdGUpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMjUzOlxcdFxcdGlmIChkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTI1NC1cXHRcXHRcXHR2YWxpZF9sZW4gPSBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4obnVsbGIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDQyPXN0YXRpYyB2b2lkIG51bGxfaGFuZGxlX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0NTMtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ1NDpcXHRpZiAoZGV2LVxcdTAwM2V6b25lZClcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDU1OlxcdFxcdHN0cyA9IG51bGxfcHJvY2Vzc196b25lZF9jbWQoY21kLCBvcCwgc2VjdG9yLCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDU2LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE2MTk9c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBudWxsX3RpbWVvdXRfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTYzOS1cXHQvKlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE2NDA6XFx0ICogSWYgdGhlIGRldmljZSBpcyBtYXJrZWQgYXMgYmxvY2tpbmcgKGkuZS4gbWVtb3J5IGJhY2tlZCBvciB6b25lZFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2NDEtXFx0ICogZGV2aWNlKSwgdGhlIHN1Ym1pc3Npb24gcGF0aCBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE3ODk9c3RhdGljIHZvaWQgbnVsbF9jb25maWdfZGlzY2FyZChzdHJ1Y3QgbnVsbGIgKm51bGxiLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNzk5LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE4MDA6XFx0aWYgKG51bGxiLVxcdTAwM2VkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTgwMS1cXHRcXHRudWxsYi1cXHUwMDNlZGV2LVxcdTAwM2VkaXNjYXJkID0gZmFsc2U7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTgwMjpcXHRcXHRwcl9pbmZvKFxcXCJkaXNjYXJkIG9wdGlvbiBpcyBpZ25vcmVkIGluIHpvbmVkIG1vZGVcXFxcblxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE4MDMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTg4NT1zdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTE4LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5MTk6XFx0aWYgKGRldi1cXHUwMDNlem9uZWQgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTIwLVxcdCAgICAoIWRldi1cXHUwMDNlem9uZV9zaXplIHx8ICFpc19wb3dlcl9vZl8yKGRldi1cXHUwMDNlem9uZV9zaXplKSkpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE5NTU9c3RhdGljIGludCBudWxsX2FkZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk5MS1cXHRudWxsX2NvbmZpZ19kaXNjYXJkKG51bGxiLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTkyOlxcdGlmIChkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk5MzpcXHRcXHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTk0LVxcdFxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNDUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjA0NjpcXHRpZiAobnVsbGItXFx1MDAzZWRldi1cXHUwMDNlem9uZWQpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMDQ3OlxcdFxcdHJ2ID0gbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYobnVsbGIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNDgtXFx0XFx0aWYgKHJ2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjA2Ni1vdXRfY2xlYW51cF96b25lOlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIwNjc6XFx0bnVsbF9mcmVlX3pvbmVkX2RldihkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNjgtb3V0X2NsZWFudXBfdGFnczpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC04MS1cXHR1bnNpZ25lZCBsb25nIGNhY2hlX3NpemU7IC8qIGRpc2sgY2FjaGUgc2l6ZSBpbiBNQiAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo4MjpcXHR1bnNpZ25lZCBsb25nIHpvbmVfc2l6ZTsgLyogem9uZSBzaXplIGluIE1CIGlmIGRldmljZSBpcyB6b25lZCAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo4MzpcXHR1bnNpZ25lZCBsb25nIHpvbmVfY2FwYWNpdHk7IC8qIHpvbmUgY2FwYWNpdHkgaW4gTUIgaWYgZGV2aWNlIGlzIHpvbmVkICovXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTg0LVxcdHVuc2lnbmVkIGludCB6b25lX25yX2NvbnY7IC8qIG51bWJlciBvZiBjb252ZW50aW9uYWwgem9uZXMgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMDQtXFx0Ym9vbCBkaXNjYXJkOyAvKiBpZiBzdXBwb3J0IGRpc2NhcmQgKi9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTA1OlxcdGJvb2wgem9uZWQ7IC8qIGlmIGRldmljZSBpcyB6b25lZCAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMDYtXFx0Ym9vbCB6b25lX2Z1bGw7IC8qIEluaXRpYWxpemUgem9uZXMgdG8gYmUgZnVsbCAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTEzOD1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfbWVtb3J5X2JhY2tlZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0MS0jaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORURcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQyOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ0OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNDUtaW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ3LVxcdFxcdCAgICAgIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDg6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc196b25lZF9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ5LVxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTE1Mj1zc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTU0LSNlbHNlXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE1NTpzdGF0aWMgaW5saW5lIGludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTU2LVxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNjAtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjE6c3RhdGljIGlubGluZSBpbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTYyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNjQtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjU6c3RhdGljIGlubGluZSB2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KSB7fVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjY6c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE2Ny1cXHRcXHRcXHRlbnVtIHJlcV9vcCBvcCwgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBudWxsX3VubG9ja196b25lKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01MC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NTE6aW50IG51bGxfaW5pdF96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01Mi1cXHRcXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzktXFx0ICogem9uZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHN1Y2ggem9uZSBjb25maWd1cmF0aW9uIGRvZXMgbm90IGNvcnJlc3BvbmRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6ODA6XFx0ICogdG8gYW55IHJlYWwgem9uZWQgZGV2aWNlLlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy04MS1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xNzQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE3NTppbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODYtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE4Nzp2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTY0Nj1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfem9uZV9tZ210KHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3MDg6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc196b25lZF9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA5LVxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9Nzc4PXNzaXplX3Qgem9uZV9jb25kX3N0b3JlKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03ODQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjc4NTpcXHRpZiAoIWRldi1cXHUwMDNlem9uZWQpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6Nzg2OlxcdFxcdHByX2VycihcXFwibnVsbF9ibGsgZGV2aWNlIGlzIG5vdCB6b25lZFxcXFxuXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MTEuMTIzMzUzNDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjA2NTg2MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBab25lZCBCbG9jayBEZXZpY2UgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYG51bGxfYmxrYCBzdXBwb3J0cyB6b25lZCBkZXZpY2VzIOKAkyB0aGF0J3MgZ29vZC4gSSByZW1lbWJlciBpdCB1c2VzIGVpdGhlciB0aGUgYGdfem9uZWRgIHBhcmFtZXRlciBvciBjb25maWdmcywgc28gdGhhdCdzIHRoZSBhbmdsZS4gSSBzZWUgdGhlIGltcG9ydGFuY2Ugb2YgYEJMS19ERVZfTlVMTF9CTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgaW4gdGhlIGNvbmZpZy5cblxuSSBoYXZlIHRvIGNoZWNrIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFnYWluLi4ud2FpdCwgaXNuJ3QgdGhhdCBub3QgbWFpbmxpbmU/IEhtbSwgdGhlIGBncmVwYCByZXN1bHRzIGZyb20gdGhlIHNvdXJjZSBzYXkgb3RoZXJ3aXNlLiBPaCwgSSBzZWUg4oCTIGl0J3MgdGhlcmUgaW4gdGhlIEtjb25maWcuIFJpZ2h0LCBgQkxLX0RFVl9aT05FRGAgaXMgdGhlIG1haW4gb25lLlxuXG5Ob3cgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGJsb2NrL2Jsay16b25lZC5jYCwgc28gSSdsbCByZXZpZXcgdGhvc2U6XG5cbiogICBgYmRldl9jaGVja196b25lX21nbXRgXG4qICAgYGRpc2tfem9uZV9zZXRfY29uZGBcbiogICBgZGlza196b25lX2dldF9zdGF0ZWBcbiogICBgZGlza196b25lX2dldF9jb25kYFxuKiAgIGBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seWBcbiogICBgZGlza196b25lX2lzX3NlcWBcbiogICBgZGlza19pbnNlcnRfem9uZV93cGx1Z2BcbiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YFxuKiAgIGBkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZWBcbiogICBgYmxrZGV2X2dldF96b25lX2luZm9gXG4qICAgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gXG4qICAgYGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvYFxuKiAgIGBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGVgXG4qICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgXG4qICAgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2BcbiogICBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2BcblxuSSBuZWVkIHRvIGZpbHRlciBvdXQgdGhlIHN0YXRpYyBvbmVzIHRoYXQgYXJlIGlubGluZWQgb3IgbGVzcyBhY2Nlc3NpYmxlLCBhbHRob3VnaCBzeXprYWxsZXIgaGFzIGEga25hY2sgZm9yIGZpbmRpbmcgdGhlbSBldmVuIGlmIHRoZXkncmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuXG5cbkxldCdzIHNlZS4uLiBgYmRldl9jaGVja196b25lX21nbXRgIGlzIGV4cG9ydGVkLCB0aGF0J3MgaW50ZXJlc3RpbmcuIFdoYXQgYWJvdXQgYGJsa2Rldl9nZXRfem9uZV9pbmZvYD8gTm8sIGl0J3Mgbm90IGV4cG9ydGVkLCB0aG91Z2ggaXQgaXMgdXNlZCBpbiBgYmxvY2svaW9jdGwuY2AuIEFuZCBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AgaXMgYWxzbyBleHBvcnRlZC4gVGhlIHJlc3QgYXJlIHN0YXRpYzogYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfem9uZV93cGx1Z19hYm9ydGAsIGFuZCBgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGVgLlxuXG5Pa2F5LCBzbyBJIHdpbGwgbm93IGZvY3VzIG9uIHRob3NlIHRoYXQgYXJlIGVpdGhlciBub24tc3RhdGljLCBvciBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MjEuMzI5OTQyNzc3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwODQ5NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXCguKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay16b25lZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTIyND1jb25zdCBjaGFyICpibGtfem9uZV9jb25kX3N0cihlbnVtIGJsa196b25lX2NvbmQgem9uZV9jb25kKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjMyLX1cXG5ibG9jay9ibGstem9uZWQuYzoyMzM6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfY29uZF9zdHIpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIzNC1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTMwMj1ib29sIGJkZXZfem9uZV9pc19zZXEoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMzA4LX1cXG5ibG9jay9ibGstem9uZWQuYzozMDk6RVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMzEwLVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MzgwPWludCBibGtkZXZfcmVwb3J0X3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTM4OS19XFxuYmxvY2svYmxrLXpvbmVkLmM6MzkwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl9yZXBvcnRfem9uZXMpO1xcbmJsb2NrL2Jsay16b25lZC5jLTM5MS1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTQxNj1pbnQgYmxrZGV2X3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBlbnVtIHJlcV9vcCBvcCxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTQ2Ni19XFxuYmxvY2svYmxrLXpvbmVkLmM6NDY3OkVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl96b25lX21nbXQpO1xcbmJsb2NrL2Jsay16b25lZC5jLTQ2OC1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTEwMTA9aW50IGRpc2tfcmVwb3J0X3pvbmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBibGtfem9uZSAqem9uZSxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTEwMzctfVxcbmJsb2NrL2Jsay16b25lZC5jOjEwMzg6RVhQT1JUX1NZTUJPTF9HUEwoZGlza19yZXBvcnRfem9uZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMTAzOS1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTEwOTM9aW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTExODUtfVxcbmJsb2NrL2Jsay16b25lZC5jOjExODY6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X2dldF96b25lX2luZm8pO1xcbmJsb2NrL2Jsay16b25lZC5jLTExODctXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYz0xMjAzPWludCBibGtkZXZfcmVwb3J0X3pvbmVzX2NhY2hlZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xMjQzLX1cXG5ibG9jay9ibGstem9uZWQuYzoxMjQ0OkVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl9yZXBvcnRfem9uZXNfY2FjaGVkKTtcXG5ibG9jay9ibGstem9uZWQuYy0xMjQ1LVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MTc0OD1ib29sIGJsa196b25lX3BsdWdfYmlvKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IG5yX3NlZ3MpXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xNzg1LX1cXG5ibG9jay9ibGstem9uZWQuYzoxNzg2OkVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX3BsdWdfYmlvKTtcXG5ibG9jay9ibGstem9uZWQuYy0xNzg3LVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjQ5Nj1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTI1NTYtfVxcbmJsb2NrL2Jsay16b25lZC5jOjI1NTc6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3JldmFsaWRhdGVfZGlza196b25lcyk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjU1OC1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTI1NzE9aW50IGJsa196b25lX2lzc3VlX3plcm9vdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjU5OS19XFxuYmxvY2svYmxrLXpvbmVkLmM6MjYwMDpFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9pc3N1ZV96ZXJvb3V0KTtcXG5ibG9jay9ibGstem9uZWQuYy0yNjAxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NzoyMi41NDA3OTcwMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg4MjM3MzA4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3k6IFpvbmVkIEJsb2NrIERldmljZSBSZWZhY3RvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGFzcGVjdHMgb2YgdGhlIHpvbmVkIGJsb2NrIGRldmljZSBpbXBsZW1lbnRhdGlvbiwgc28gd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gVGhlIGluaXRpYWwgZ2xhbmNlIGF0IHRoZSBkaWZmcyBoaWdobGlnaHRzIHNldmVyYWwgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLCBhbmQgSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IG9uZXMgZm9yIGZ1enppbmcgYW5kIHRlc3RpbmcuIEZpcnN0LCBJIG5vdGljZWQgYGJkZXZfY2hlY2tfem9uZV9tZ210YCBpcyBuZXdseSBpbnRyb2R1Y2VkLiBJIGhhZCB0byBkb3VibGUtY2hlY2sgaXRzIHZpc2liaWxpdHksIGJ1dCBzaW5jZSBpdCdzIHVzZWQgd2l0aGluIHRoZSBibG9jayBsYXllcidzIGJ1aWx0LWluIGNvbXBvbmVudHMsIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBleHBvcnRlZC4gVGhlbiB0aGVyZSBhcmUgc29tZSBvdGhlciBpbXBvcnRhbnQgZnVuY3Rpb25zIGBibGtkZXZfZ2V0X3pvbmVfaW5mb2AsIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCwgYGRpc2tfcmVwb3J0X3pvbmVgIGFuZCBzbyBvbiwgd2hpY2ggYXJlIG9idmlvdXNseSBjb3JlLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZTogYGJkZXZfY2hlY2tfem9uZV9tZ210YCwgYGJsa2Rldl9nZXRfem9uZV9pbmZvYCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCBhbmQgYGRpc2tfcmVwb3J0X3pvbmVgLCBidXQgSSdtIHJlZmluaW5nIHRoYXQgbGlzdCBhcyBJIGRpdmUgZGVlcGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIHpvbmUgaW5mb3JtYXRpb24uIEkgYWxzbyBoYWQgdG8ga2VlcCBpbiBtaW5kIGBzdWJtaXRfYmlvX25vYWNjdGAgYXMgaXQncyBhIGhvdCBwYXRoLCBhbmQgYW55IGNoYW5nZXMgaGVyZSBuZWVkIHZlcnkgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBlc3BlY2lhbGx5IHdpdGggdGhlIHVzZSBvZiBgYmRldl9jaGVja196b25lX21nbXRgLiBJJ20gc2xpZ2h0bHkgaGVzaXRhbnQgdG8gZGlyZWN0bHkgdGFyZ2V0IGBzdWJtaXRfYmlvX25vYWNjdGAgZGlyZWN0bHkgaW4gZnV6emluZywgZ2l2ZW4gaXRzIGltcG9ydGFuY2UsIGJ1dCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBhY3RlZC5cblxuRGl2aW5nIGludG8gdGhlIHNvdXJjZSwgSSBjb25maXJtIHRoYXQgYGJkZXZfY2hlY2tfem9uZV9tZ210YCBpcyBpbmRlZWQgYSBgYm9vbGAgZnVuY3Rpb24sIHRha2luZyBgc3RydWN0IGJsb2NrX2RldmljZWAgYW5kIGBzZWN0b3JfdGAgYXMgYXJndW1lbnRzLiBJIGFsc28gdmVyaWZpZWQgdGhlIHNpZ25hdHVyZXMgb2YgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCB3aGljaCBpcyBgaW50YCByZXR1cm5pbmcgZnVuY3Rpb24gb24gYSBgZ2VuZGlza2AsIGFuZCBgYmxrZGV2X2dldF96b25lX2luZm9gLCB3aGljaCBpcyBgaW50YCB3aXRoIGEgYmxvY2sgZGV2aWNlLCBzZWN0b3IsIGFuZCBgYmxrX3pvbmVgIHN0cnVjdHVyZS4gSSdtIG5vdGluZyB0aGUgc2lnbmF0dXJlcyBiZWNhdXNlIHRoZXNlIGFyZSBjcnVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgbWVhbmluZ2Z1bCBmdXp6IGlucHV0cyBsYXRlci4gSW1wb3J0YW50bHksIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGFuZCBgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzYC4gVGhlc2UgYXJlIHdvcnRoIGluY2x1ZGluZy4gSSBhbHNvIHNlZSB0aGF0IGBkaXNrX3pvbmVfd3BsdWdfYWJvcnRgLCBgYmxrX3pvbmVfcmVzZXRfYWxsX2Jpb19lbmRpb2AsIGFuZCBgYmxrX3pvbmVfd3BsdWdfcHJlcGFyZV9iaW9gIGhhdmUgYWxsIGJlZW4gbW9kaWZpZWQsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IGltcG9ydGFudC5cblxuRm9yIGVuYWJsaW5nIHRoZSBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoIGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFNpbmNlIGBCTEtfREVWX05VTExfQkxLYCBpcyB0cmlzdGF0ZSwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgaWYgSSB3YW50IGl0IGJ1aWx0LWluLCBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuXG5cblN1bW1hcml6aW5nLCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiByZWZhY3RvcmluZyB6b25lIGNvbmRpdGlvbiB0cmFja2luZyB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIHVzaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIGB6b25lc19zdGF0ZWAgYXJyYXkuIEl04oCZcyB1cGRhdGluZyB6b25lIG1hbmFnZW1lbnQsIHJldmFsaWRhdGlvbiwgYW5kIGluZm9ybWF0aW9uIHJldHJpZXZhbCBmdW5jdGlvbnMsIGFsb25nIHdpdGggcGFydGl0aW9uIGRpc2FibGluZyBvbiB6b25lZCBkZXZpY2VzLiBNeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmU6XG5cbiogICBgYmRldl9jaGVja196b25lX21nbXRgXG4qICAgYGJsa2Rldl9nZXRfem9uZV9pbmZvYFxuKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYFxuKiAgIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgXG4qICAgYGRpc2tfaW5pdF96b25lX3Jlc291cmNlc2BcblxuSSdsbCB1c2UgYEJMS19ERVZfWk9ORURgLCBgQkxLX0RFVl9OVUxMX0JMS2AsIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWdzLCBlbnN1cmluZyBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgZXhwbGljaXRseSBkZWZpbmVkIGlmIEkgd2FudCBpdCBidWlsdC1pbi4gVGhpcyBzaG91bGQgZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2Ugb2YgdGhlIHJlZmFjdG9yZWQgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBkZXRlY3QgYW55IHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgaGFuZGxpbmcgb3IgYmlvIHN1Ym1pc3Npb24uIEkgZmVlbCBjb25maWRlbnQgd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjAwLCJPdXRwdXRUb2tlbnMiOjI0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6NDEuMzY0NTMwNzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzg0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEXCIsXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2NoZWNrX3pvbmVfbWdtdFwiLFxuICAgIFwiYmxrZGV2X2dldF96b25lX2luZm9cIixcbiAgICBcImJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNcIixcbiAgICBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiZGlza19pbml0X3pvbmVfcmVzb3VyY2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB6b25lIGNvbmRpdGlvbnMgYXJlIHRyYWNrZWQgaW4gdGhlIGJsb2NrIGxheWVyLCBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBuZXcgYHpvbmVzX3N0YXRlYCBhcnJheSB0byByZXBsYWNlIGB6b25lc19jb25kYC4gSXQgdXBkYXRlcyB6b25lIG1hbmFnZW1lbnQgY2hlY2tzIChgYmRldl9jaGVja196b25lX21nbXRgKSwgem9uZSByZXZhbGlkYXRpb24gKGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCksIGFuZCB6b25lIGluZm9ybWF0aW9uIHJldHJpZXZhbCAoYGJsa2Rldl9nZXRfem9uZV9pbmZvYCkuIEl0IGFsc28gbW9kaWZpZXMgYF9fYWRkX2Rpc2tgIHRvIGRpc2FibGUgcGFydGl0aW9ucyBvbiB6b25lZCBibG9jayBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGJsb2NrIGxheWVyJ3Mgem9uZWQgc3RvcmFnZSBzdXBwb3J0IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB6b25lIHN0YXRlIHRyYWNraW5nIG9yIGJpbyBzdWJtaXNzaW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2hlY2tfem9uZV9tZ210XCIsXG4gICAgXCJibGtkZXZfZ2V0X3pvbmVfaW5mb1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHpvbmUgY29uZGl0aW9ucyBhcmUgdHJhY2tlZCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIG5ldyBgem9uZXNfc3RhdGVgIGFycmF5IHRvIHJlcGxhY2UgYHpvbmVzX2NvbmRgLiBJdCB1cGRhdGVzIHpvbmUgbWFuYWdlbWVudCBjaGVja3MgKGBiZGV2X2NoZWNrX3pvbmVfbWdtdGApLCB6b25lIHJldmFsaWRhdGlvbiAoYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgKSwgYW5kIHpvbmUgaW5mb3JtYXRpb24gcmV0cmlldmFsIChgYmxrZGV2X2dldF96b25lX2luZm9gKS4gSXQgYWxzbyBtb2RpZmllcyBgX19hZGRfZGlza2AgdG8gZGlzYWJsZSBwYXJ0aXRpb25zIG9uIHpvbmVkIGJsb2NrIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYmxvY2sgbGF5ZXIncyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmmmdd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-06 19:07:09 +0000 UTC FinishedAt: 2026-08-06 19:47:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_ZONED_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "7e05769f1a6cd14735f1702996eb2bbb161f41b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_ZONED", "BLK_DEV_NULL_BLK", "BLK_DEV_ZONED_LOOP" ], "series_id": "1be50f07-39b9-4eac-b405-3b3e95ebb2fc" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "bdev_check_zone_mgmt", "blkdev_get_zone_info", "blk_revalidate_disk_zones", "disk_release_zone_resources", "disk_init_zone_resources" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZGV2X2NoZWNrX3pvbmVfbWdtdCYjMzQ7LAogICAgJiMzNDtibGtkZXZfZ2V0X3pvbmVfaW5mbyYjMzQ7LAogICAgJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDssCiAgICAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB6b25lIGNvbmRpdGlvbnMgYXJlIHRyYWNrZWQgaW4gdGhlIGJsb2NrIGxheWVyLCBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBuZXcgYHpvbmVzX3N0YXRlYCBhcnJheSB0byByZXBsYWNlIGB6b25lc19jb25kYC4gSXQgdXBkYXRlcyB6b25lIG1hbmFnZW1lbnQgY2hlY2tzIChgYmRldl9jaGVja196b25lX21nbXRgKSwgem9uZSByZXZhbGlkYXRpb24gKGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCksIGFuZCB6b25lIGluZm9ybWF0aW9uIHJldHJpZXZhbCAoYGJsa2Rldl9nZXRfem9uZV9pbmZvYCkuIEl0IGFsc28gbW9kaWZpZXMgYF9fYWRkX2Rpc2tgIHRvIGRpc2FibGUgcGFydGl0aW9ucyBvbiB6b25lZCBibG9jayBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGJsb2NrIGxheWVyJiMzOTtzIHpvbmVkIHN0b3JhZ2Ugc3VwcG9ydCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gem9uZSBzdGF0ZSB0cmFja2luZyBvciBiaW8gc3VibWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGMwNTI4ZTY4ZTk3MDJlMWZmZGVmMWQyM2YyMWYyNzI0N2Q3ZTY3NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjQ2OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXG5pbmRleCAxOTZiY2NmMjdmNThkLi44MGE0ZTJiY2MzZjM0IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTkwMSw4ICYjNDM7OTAxLDExIEBAIHZvaWQgc3VibWl0X2Jpb19ub2FjY3Qoc3RydWN0IGJpbyAqYmlvKVxuIFx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcbiBcdGNhc2UgUkVRX09QX1pPTkVfUkVTRVQ6XG4gXHRjYXNlIFJFUV9PUF9aT05FX0ZJTklTSDpcbi1cdFx0LyogWm9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgcmVxdWlyZSBzZXF1ZW50aWFsIHpvbmVzLiAqL1xuLVx0XHRpZiAoIWJkZXZfem9uZV9pc19zZXEoYmlvLVx1MDAzZWJpX2JkZXYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcikpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogWm9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgcmVxdWlyZSBzZXF1ZW50aWFsIHpvbmVzIHRoYXQgYXJlXG4mIzQzO1x0XHQgKiBub3Qgb2ZmbGluZSBub3IgcmVhZC1vbmx5LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWJkZXZfY2hlY2tfem9uZV9tZ210KGJkZXYsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvcikpXG4gXHRcdFx0Z290byBlbmRfaW87XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVF9BTEw6XG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xuaW5kZXggYTVhZmI4NDJiZjM1ZS4uZjE3MDY5MzA5YWM5ZCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay16b25lZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9ibGstem9uZWQuY1xuQEAgLTM5LDYgJiM0MzszOSwxMDMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHpvbmVfY29uZF9uYW1lW10gPSB7XG4gfTtcbiAjdW5kZWYgWk9ORV9DT05EX05BTUVcbiBcbiYjNDM7LypcbiYjNDM7ICogSW50ZXJuYWwgYW5kIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgZW51bSBibGtfem9uZV9jb25kIHZhbHVlcyBmb3Igem9uZVxuJiM0MzsgKiBjb25kaXRpb25zLiBBbGwgdGhlc2UgdmFsdWVzIGZpdCBpbnRvIDQtYml0cywgYWxsb3dpbmcgdXNpbmcgdGhlIGhpZ2ggb3JkZXJcbiYjNDM7ICogYml0cyBhcyB0aGUgem9uZSB0eXBlLlxuJiM0MzsgKi9cbiYjNDM7ZW51bSBibGtfenN0YXRlIHtcbiYjNDM7XHRCTEtfWlNUQVRFX05PVF9XUFx0PSAweDAwLFxuJiM0MztcdEJMS19aU1RBVEVfRU1QVFlcdD0gMHgwMSxcbiYjNDM7XHRCTEtfWlNUQVRFX0lNUF9PUEVOXHQ9IDB4MDIsXG4mIzQzO1x0QkxLX1pTVEFURV9FWFBfT1BFTlx0PSAweDAzLFxuJiM0MztcdEJMS19aU1RBVEVfQ0xPU0VEXHQ9IDB4MDQsXG4mIzQzO1x0QkxLX1pTVEFURV9SRUFET05MWVx0PSAweDA1LFxuJiM0MztcdEJMS19aU1RBVEVfRlVMTFx0XHQ9IDB4MDYsXG4mIzQzO1x0QkxLX1pTVEFURV9PRkZMSU5FXHQ9IDB4MDcsXG4mIzQzO1x0QkxLX1pTVEFURV9BQ1RJVkVcdD0gMHgwOCxcbiYjNDM7XG4mIzQzO1x0QkxLX1pTVEFURV9DT05EX01BU0tcdD0gMHgwRixcbiYjNDM7XG4mIzQzO1x0LyogQ29udmVudGlvbmFsIHpvbmUuICovXG4mIzQzO1x0QkxLX1pGTEFHX0NPTlZcdFx0PSAweDgwLFxuJiM0MztcdEJMS19aU1RBVEVfRkxBR1NfTUFTS1x0PSB+QkxLX1pTVEFURV9DT05EX01BU0ssXG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGVudW0gYmxrX3pzdGF0ZSBjb25kaXRpb25zIGludG8gZW51bVxuJiM0MzsgKiBibGtfem9uZV9jb25kaXRpb24gdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGNvbnN0IHU4IGJsa196c3RhdGUyemNvbmRbXSA9IHtcbiYjNDM7XHRbQkxLX1pTVEFURV9OT1RfV1BdXHQ9IEJMS19aT05FX0NPTkRfTk9UX1dQLFxuJiM0MztcdFtCTEtfWlNUQVRFX0VNUFRZXVx0PSBCTEtfWk9ORV9DT05EX0VNUFRZLFxuJiM0MztcdFtCTEtfWlNUQVRFX0lNUF9PUEVOXVx0PSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOLFxuJiM0MztcdFtCTEtfWlNUQVRFX0VYUF9PUEVOXVx0PSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOLFxuJiM0MztcdFtCTEtfWlNUQVRFX0NMT1NFRF1cdD0gQkxLX1pPTkVfQ09ORF9DTE9TRUQsXG4mIzQzO1x0W0JMS19aU1RBVEVfUkVBRE9OTFldXHQ9IEJMS19aT05FX0NPTkRfUkVBRE9OTFksXG4mIzQzO1x0W0JMS19aU1RBVEVfRlVMTF1cdD0gQkxLX1pPTkVfQ09ORF9GVUxMLFxuJiM0MztcdFtCTEtfWlNUQVRFX09GRkxJTkVdXHQ9IEJMS19aT05FX0NPTkRfT0ZGTElORSxcbiYjNDM7XHRbQkxLX1pTVEFURV9BQ1RJVkVdXHQ9IEJMS19aT05FX0NPTkRfQUNUSVZFLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIGJsa196b25lX2NvbmQgYmxrX3pzdGF0ZV90b196b25lX2NvbmQoZW51bSBibGtfenN0YXRlIHpzKVxuJiM0Mzt7XG4mIzQzO1x0dTggaWR4ID0genMgXHUwMDI2IEJMS19aU1RBVEVfQ09ORF9NQVNLO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcdTAwM2U9IEFSUkFZX1NJWkUoYmxrX3pzdGF0ZTJ6Y29uZCkpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBibGtfenN0YXRlMnpjb25kW2lkeF07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIExvb2t1cCB0YWJsZSBhbmQgaGVscGVyIHRvIGNvbnZlcnQgYW4gZW51bSBibGtfem9uZV9jb25kaXRpb24gaW50byBhbiBlbnVtXG4mIzQzOyAqIGJsa196c3RhdGUgY29uZGl0aW9uIHZhbHVlLiBUbyBrZWVwIHRoZSBsb29rdXAgdGFibGUgc21hbGwsIHRoZVxuJiM0MzsgKiBCTEtfWk9ORV9DT05EX0FDVElWRSBjb25kaXRpb24gaXMgbm90IGFkZGVkIGFuZCBoYW5kbGVkIHNlcGFyYXRlbHkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgY29uc3QgdTggYmxrX3pjb25kMnpzdGF0ZVtdID0ge1xuJiM0MztcdFtCTEtfWk9ORV9DT05EX05PVF9XUF1cdFx0PSBCTEtfWlNUQVRFX05PVF9XUCxcbiYjNDM7XHRbQkxLX1pPTkVfQ09ORF9FTVBUWV1cdFx0PSBCTEtfWlNUQVRFX0VNUFRZLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX0lNUF9PUEVOXVx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbiYjNDM7XHRbQkxLX1pPTkVfQ09ORF9FWFBfT1BFTl1cdD0gQkxLX1pTVEFURV9BQ1RJVkUsXG4mIzQzO1x0W0JMS19aT05FX0NPTkRfQ0xPU0VEXVx0XHQ9IEJMS19aU1RBVEVfQUNUSVZFLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX1JFQURPTkxZXVx0PSBCTEtfWlNUQVRFX1JFQURPTkxZLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX0ZVTExdXHRcdD0gQkxLX1pTVEFURV9GVUxMLFxuJiM0MztcdFtCTEtfWk9ORV9DT05EX09GRkxJTkVdXHRcdD0gQkxLX1pTVEFURV9PRkZMSU5FLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBlbnVtIGJsa196c3RhdGUgYmxrX3pvbmVfY29uZF90b196c3RhdGUoZW51bSBibGtfem9uZV9jb25kIGNvbmQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY29uZCA9PSBCTEtfWk9ORV9DT05EX0FDVElWRSlcbiYjNDM7XHRcdHJldHVybiBCTEtfWlNUQVRFX0FDVElWRTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRShjb25kIFx1MDAzZT0gQVJSQVlfU0laRShibGtfemNvbmQyenN0YXRlKSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJsa196Y29uZDJ6c3RhdGVbY29uZF07XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbWJpbmUgYW4gZW51bSBibGtfem9uZV9jb25kaXRpb24gYW5kIHpvbmUgZmxhZ3MgaW50byBhIHpvbmVzX3N0YXRlIGFycmF5XG4mIzQzOyAqIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGJsa196c3RhdGVfc2V0KHU4ICp6b25lc19zdGF0ZSwgdW5zaWduZWQgaW50IHpubyxcbiYjNDM7XHRcdFx0XHQgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kLCB1OCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGlmICh6b25lc19zdGF0ZSlcbiYjNDM7XHRcdHpvbmVzX3N0YXRlW3pub10gPSBmbGFncyB8IGJsa196b25lX2NvbmRfdG9fenN0YXRlKGNvbmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHU4IGJsa196c3RhdGVfZmxhZ3MoZW51bSBibGtfenN0YXRlIHpzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHpzIFx1MDAyNiBCTEtfWlNUQVRFX0ZMQUdTX01BU0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfenN0YXRlX2lzX2NvbnYoZW51bSBibGtfenN0YXRlIHpzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJsa196c3RhdGVfZmxhZ3MoenMpIFx1MDAyNiBCTEtfWkZMQUdfQ09OVjtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFBlci16b25lIHdyaXRlIHBsdWcuXG4gICogQG5vZGU6IGhsaXN0X25vZGUgc3RydWN0dXJlIGZvciBtYW5hZ2luZyB0aGUgcGx1ZyB1c2luZyBhIGhhc2ggdGFibGUuXG5AQCAtMTM1LDU1ICYjNDM7MjMyLDY0IEBAIGNvbnN0IGNoYXIgKmJsa196b25lX2NvbmRfc3RyKGVudW0gYmxrX3pvbmVfY29uZCB6b25lX2NvbmQpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX2NvbmRfc3RyKTtcbiBcbi1zdGF0aWMgdm9pZCBibGtfem9uZV9zZXRfY29uZCh1OCAqem9uZXNfY29uZCwgdW5zaWduZWQgaW50IHpubyxcbi1cdFx0XHQgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiYjNDM7c3RhdGljIHZvaWQgZGlza196b25lX3NldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG4mIzQzO1x0XHRcdCAgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiB7XG4tXHRpZiAoIXpvbmVzX2NvbmQpXG4tXHRcdHJldHVybjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XG4mIzQzO1x0dTggKnpvbmVzX3N0YXRlO1xuIFxuLVx0c3dpdGNoIChjb25kKSB7XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuLVx0XHR6b25lc19jb25kW3pub10gPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcbi1cdFx0cmV0dXJuO1xuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX05PVF9XUDpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9GVUxMOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4tXHRkZWZhdWx0OlxuLVx0XHR6b25lc19jb25kW3pub10gPSBjb25kO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfc3RhdGUpO1xuJiM0MztcdGlmIChsaWtlbHkoem9uZXNfc3RhdGUgXHUwMDI2XHUwMDI2IHpubyBcdTAwM2MgZGlzay1cdTAwM2Vucl96b25lcykpXG4mIzQzO1x0XHRibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLFxuJiM0MztcdFx0XHQgICAgICAgYmxrX3pzdGF0ZV9mbGFncyh6b25lc19zdGF0ZVt6bm9dKSk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuLVx0XHRcdCAgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiYjNDM7c3RhdGljIGlubGluZSB1OCBkaXNrX3pvbmVfZ2V0X3N0YXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXG4ge1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xuJiM0MztcdHU4ICp6b25lc19zdGF0ZSwgenM7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfY29uZCk7XG4tXHRpZiAoem9uZXNfY29uZCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XG4tXG4tXHRcdC8qXG4tXHRcdCAqIFRoZSBjb25kaXRpb24gb2YgYSBjb252ZW50aW9uYWwsIHJlYWRvbmx5IGFuZCBvZmZsaW5lIHpvbmVzXG4tXHRcdCAqIG5ldmVyIGNoYW5nZXMsIHNvIGRvIG5vdGhpbmcgaWYgdGhlIHRhcmdldCB6b25lIGlzIGluIG9uZSBvZlxuLVx0XHQgKiB0aGVzZSBjb25kaXRpb25zLlxuLVx0XHQgKi9cbi1cdFx0c3dpdGNoICh6b25lc19jb25kW3pub10pIHtcbi1cdFx0Y2FzZSBCTEtfWk9ORV9DT05EX05PVF9XUDpcbi1cdFx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxuLVx0XHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbi1cdFx0XHRicmVhaztcbi1cdFx0ZGVmYXVsdDpcbi1cdFx0XHRibGtfem9uZV9zZXRfY29uZCh6b25lc19jb25kLCB6bm8sIGNvbmQpO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4mIzQzO1x0aWYgKGxpa2VseSh6b25lc19zdGF0ZSBcdTAwMjZcdTAwMjYgem5vIFx1MDAzYyBkaXNrLVx1MDAzZW5yX3pvbmVzKSlcbiYjNDM7XHRcdHpzID0gem9uZXNfc3RhdGVbem5vXTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR6cyA9IDA7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHpzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBibGtfem9uZV9jb25kIGRpc2tfem9uZV9nZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgc2VjdG9yX3Qgc2VjdG9yKVxuJiM0Mzt7XG4mIzQzO1x0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbFxuJiM0MztkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGNvbmQgPT0gQkxLX1pPTkVfQ09ORF9SRUFET05MWSB8fFxuJiM0MztcdFx0Y29uZCA9PSBCTEtfWk9ORV9DT05EX09GRkxJTkU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIHNlY3Rvcl90IHNlY3RvcilcbiYjNDM7e1xuJiM0MztcdGVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gZGlza196b25lX2dldF9jb25kKGRpc2ssIHNlY3Rvcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBkaXNrX3pvbmVfaXNfc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXG4mIzQzO3tcbiYjNDM7XHR1OCB6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoZGlzaywgc2VjdG9yKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuICFibGtfenN0YXRlX2lzX2NvbnYoenMpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTUsMjMgJiM0MzszMDEsMzYgQEAgc3RhdGljIHZvaWQgZGlza196b25lX3NldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG4gICovXG4gYm9vbCBiZGV2X3pvbmVfaXNfc2VxKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcilcbiB7XG4tXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtXHUwMDNlYmRfZGlzaztcbi1cdHVuc2lnbmVkIGludCB6bm8gPSBkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKTtcbi1cdGJvb2wgaXNfc2VxID0gZmFsc2U7XG4tXHR1OCAqem9uZXNfY29uZDtcbiYjNDM7XHRpZiAoIWJkZXZfaXNfem9uZWQoYmRldikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkaXNrX3pvbmVfaXNfc2VxKGJkZXYtXHUwMDNlYmRfZGlzaywgc2VjdG9yKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBiZGV2X2NoZWNrX3pvbmVfbWdtdCAtIGNoZWNrIGlmIGEgc2VjdG9yIGJlbG9uZ3MgdG8gYSB2YWxpZCBzZXF1ZW50aWFsIHpvbmVcbiYjNDM7ICogQGJkZXY6ICAgICAgIGJsb2NrIGRldmljZSB0byBjaGVja1xuJiM0MzsgKiBAc2VjdG9yOiAgICAgc2VjdG9yIG51bWJlclxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBpZiBAc2VjdG9yIG9uIEBiZGV2IGlzIGNvbnRhaW5lZCBpbiBhIHNlcXVlbnRpYWwgd3JpdGUgcmVxdWlyZWQgem9uZVxuJiM0MzsgKiB0aGF0IGlzIG5vdCBvZmZsaW5lIG5vciByZWFkLW9ubHkuXG4mIzQzOyAqL1xuJiM0Mztib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcilcbiYjNDM7e1xuJiM0MztcdGVudW0gYmxrX3pvbmVfY29uZCBjb25kO1xuJiM0MztcdHU4IHpzO1xuIFxuIFx0aWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfY29uZCk7XG4tXHRpZiAoem9uZXNfY29uZCBcdTAwMjZcdTAwMjYgem5vIFx1MDAzYyBkaXNrLVx1MDAzZW5yX3pvbmVzKVxuLVx0XHRpc19zZXEgPSB6b25lc19jb25kW3pub10gIT0gQkxLX1pPTkVfQ09ORF9OT1RfV1A7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHR6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi1cdTAwM2ViZF9kaXNrLCBzZWN0b3IpO1xuJiM0MztcdGlmIChibGtfenN0YXRlX2lzX2NvbnYoenMpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmV0dXJuIGlzX3NlcTtcbiYjNDM7XHRjb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xuJiM0MztcdHJldHVybiAhZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShjb25kKTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7XG4gXG4gLypcbiAgKiBab25lIHJlcG9ydCBhcmd1bWVudHMgZm9yIGJsb2NrIGRldmljZSBkcml2ZXJzIHJlcG9ydF96b25lcyBvcGVyYXRpb24uXG5AQCAtNTAwLDEyICYjNDM7NjE5LDE3IEBAIHN0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19mdWxsKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIHp3cGx1Zy1cdTAwM2V3cF9vZmZzZXQgXHUwMDNlPSBkaXNrLVx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGRpc2tfem9uZV9jb25kX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnLVx1MDAzZWNvbmQpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiB7XG4gXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGxnO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdHU4ICp6b25lc19jb25kO1xuJiM0MztcdHU4ICp6b25lc19zdGF0ZTtcbiBcdHVuc2lnbmVkIGludCBpZHggPVxuIFx0XHRoYXNoXzMyKHp3cGx1Zy1cdTAwM2V6b25lX25vLCBkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfYml0cyk7XG4gXG5AQCAtNTI0LDE1ICYjNDM7NjQ4LDE2IEBAIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfY29uZCBhcnJheVxuJiM0MztcdCAqIFNldCB0aGUgem9uZSBjb25kaXRpb246IGlmIHdlIGRvIG5vdCB5ZXQgaGF2ZSBhIHpvbmVzX3N0YXRlIGFycmF5XG4gXHQgKiBhdHRhY2hlZCB0byB0aGUgZGlzaywgdGhlbiB0aGlzIGlzIGEgem9uZSB3cml0ZSBwbHVnIGluc2VydCBmcm9tIHRoZVxuIFx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcbiBcdCAqIG5lY2Vzc2FyaWxseSBpbiB0aGUgYWN0aXZlIGNvbmRpdGlvbi5cbiBcdCAqL1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVx1MDAzZXpvbmVzX2NvbmQsXG4mIzQzO1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay1cdTAwM2V6b25lc19zdGF0ZSxcbiBcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaykpO1xuLVx0aWYgKHpvbmVzX2NvbmQpXG4tXHRcdHp3cGx1Zy1cdTAwM2Vjb25kID0gem9uZXNfY29uZFt6d3BsdWctXHUwMDNlem9uZV9ub107XG4mIzQzO1x0aWYgKHpvbmVzX3N0YXRlKVxuJiM0MztcdFx0endwbHVnLVx1MDAzZWNvbmQgPVxuJiM0MztcdFx0XHRibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6b25lc19zdGF0ZVt6d3BsdWctXHUwMDNlem9uZV9ub10pO1xuIFx0ZWxzZVxuIFx0XHR6d3BsdWctXHUwMDNlY29uZCA9IEJMS19aT05FX0NPTkRfQUNUSVZFO1xuIFxuQEAgLTU3NCw2ICYjNDM7Njk5LDI2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa196b25lX3dwbHVnICpkaXNrX2dldF96b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIGRpc2tfZ2V0X2hhc2hlZF96b25lX3dwbHVnKGRpc2ssIHNlY3Rvcik7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4mIzQzO1x0XHRcdFx0ICAgICB2b2lkICgqYWN0b3IpKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqLFxuJiM0MztcdFx0XHRcdFx0XHQgICB2b2lkICopLFxuJiM0MztcdFx0XHRcdCAgICAgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuJiM0MztcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywgXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldLFxuJiM0MztcdFx0XHRcdFx0IG5vZGUpXG4mIzQzO1x0XHRcdGFjdG9yKHp3cGx1ZywgZGF0YSk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuIHtcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnID1cbkBAIC01OTIsOSAmIzQzOzczNyw5IEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIFx0V0FSTl9PTl9PTkNFKCFiaW9fbGlzdF9lbXB0eShcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKTtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XG4tXHRibGtfem9uZV9zZXRfY29uZChyY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay1cdTAwM2V6b25lc19jb25kLFxuJiM0MztcdGJsa196c3RhdGVfc2V0KHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVx1MDAzZXpvbmVzX3N0YXRlLFxuIFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKSksXG4tXHRcdFx0ICB6d3BsdWctXHUwMDNlem9uZV9ubywgendwbHVnLVx1MDAzZWNvbmQpO1xuJiM0MztcdFx0ICAgICAgIHp3cGx1Zy1cdTAwM2V6b25lX25vLCB6d3BsdWctXHUwMDNlY29uZCwgMCk7XG4gXHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2endwbHVnLVx1MDAzZW5vZGUpO1xuIFx0YXRvbWljX2RlYyhcdTAwMjZkaXNrLVx1MDAzZW5yX3pvbmVfd3BsdWdzKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTtcbkBAIC02MDgsNiAmIzQzOzc1Myw1MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19wdXRfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiBcdFx0ZGlza19mcmVlX3pvbmVfd3BsdWcoendwbHVnKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgc3RydWN0IGJpbyAqYmlvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXHUwMDNlZGlzay1cdTAwM2VxdWV1ZTtcbiYjNDM7XG4mIzQzO1x0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XG4mIzQzO1x0YmlvX2lvX2Vycm9yKGJpbyk7XG4mIzQzO1x0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuJiM0MztcdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xuJiM0MztcdGJsa19xdWV1ZV9leGl0KHEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBYm9ydCAoZmFpbCkgYWxsIHBsdWdnZWQgQklPcyBvZiBhIHpvbmUgd3JpdGUgcGx1Zy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gendwbHVnLVx1MDAzZWRpc2s7XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGJpb19saXN0X2VtcHR5KFx1MDAyNnp3cGx1Zy1cdTAwM2ViaW9fbGlzdCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHByX3dhcm5fcmF0ZWxpbWl0ZWQoXCYjMzQ7JXM6IHpvbmUgJXU6IEFib3J0aW5nIHBsdWdnZWQgQklPc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIHp3cGx1Zy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgendwbHVnLVx1MDAzZXpvbmVfbm8pO1xuJiM0MztcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFx1MDAyNnp3cGx1Zy1cdTAwM2ViaW9fbGlzdCkpKVxuJiM0MztcdFx0YmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHp3cGx1ZywgYmlvKTtcbiYjNDM7XG4mIzQzO1x0endwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJMS19aT05FX1dQTFVHX1BMVUdHRUQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZVxuJiM0MztcdCAqIHRoZSB6b25lIHdyaXRlIHBsdWcgZnJvbSB0aGUgd29yayBsaXN0IGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2VcbiYjNDM7XHQgKiB0b29rIHdoZW4gdGhlIHpvbmUgd3JpdGUgcGx1ZyB3YXMgYWRkZWQgdG8gdGhhdCBsaXN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChibGtfcXVldWVfem9uZWRfcWQxX3dyaXRlcyhkaXNrLVx1MDAzZXF1ZXVlKSkge1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbiYjNDM7XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZ6d3BsdWctXHUwMDNlZW50cnkpKSB7XG4mIzQzO1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KTtcbiYjNDM7XHRcdFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlblxuICAqIHRoZSB6b25lIHdyaXRlIHBsdWcgd2FzIGFkZGVkIHRvIHRoZSBoYXNoIHRhYmxlLiBUaGUgem9uZSB3cml0ZSBwbHVnIHdpbGwgYmVcbkBAIC02MjUsNiAmIzQzOzgxNywxMiBAQCBzdGF0aWMgdm9pZCBkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2NoZWNrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiB7XG4mIzQzO1x0aWYgKGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1ZykpIHtcbiYjNDM7XHRcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuJiM0MztcdFx0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghKHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX1pPTkVfV1BMVUdfREVBRCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbkBAIC03MDgsNTMgJiM0Mzs5MDYsNiBAQCBzdGF0aWMgc3RydWN0IGJsa196b25lX3dwbHVnICpkaXNrX2dldF9vcl9hbGxvY196b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIHp3cGx1ZztcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcihzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zyxcbi1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiaW8gKmJpbylcbi17XG4tXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IHp3cGx1Zy1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuLVxuLVx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XG4tXHRiaW9faW9fZXJyb3IoYmlvKTtcbi1cdGRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTtcbi1cdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xuLVx0YmxrX3F1ZXVlX2V4aXQocSk7XG4tfVxuLVxuLS8qXG4tICogQWJvcnQgKGZhaWwpIGFsbCBwbHVnZ2VkIEJJT3Mgb2YgYSB6b25lIHdyaXRlIHBsdWcuXG4tICovXG4tc3RhdGljIHZvaWQgZGlza196b25lX3dwbHVnX2Fib3J0KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuLXtcbi1cdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gendwbHVnLVx1MDAzZWRpc2s7XG4tXHRzdHJ1Y3QgYmlvICpiaW87XG4tXG4tXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrKTtcbi1cbi1cdGlmIChiaW9fbGlzdF9lbXB0eShcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRwcl93YXJuX3JhdGVsaW1pdGVkKFwmIzM0OyVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcXG5cJiMzNDssXG4tXHRcdFx0ICAgIHp3cGx1Zy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgendwbHVnLVx1MDAzZXpvbmVfbm8pO1xuLVx0d2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSkpXG4tXHRcdGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcih6d3BsdWcsIGJpbyk7XG4tXG4tXHR6d3BsdWctXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QkxLX1pPTkVfV1BMVUdfUExVR0dFRDtcbi1cbi1cdC8qXG4tXHQgKiBJZiB3ZSBhcmUgdXNpbmcgdGhlIHBlciBkaXNrIHpvbmUgd3JpdGUgcGx1Z3Mgd29ya2VyIHRocmVhZCwgcmVtb3ZlXG4tXHQgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlXG4tXHQgKiB0b29rIHdoZW4gdGhlIHpvbmUgd3JpdGUgcGx1ZyB3YXMgYWRkZWQgdG8gdGhhdCBsaXN0LlxuLVx0ICovXG4tXHRpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay1cdTAwM2VxdWV1ZSkpIHtcbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnp3cGx1Zy1cdTAwM2VlbnRyeSkpIHtcbi1cdFx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnp3cGx1Zy1cdTAwM2VlbnRyeSk7XG4tXHRcdFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuLVx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbi1cdH1cbi19XG4tXG4gLypcbiAgKiBVcGRhdGUgYSB6b25lIHdyaXRlIHBsdWcgY29uZGl0aW9uIGJhc2VkIG9uIHRoZSB3cml0ZSBwb2ludGVyIG9mZnNldC5cbiAgKi9cbkBAIC03ODUsOCAmIzQzOzkzNiwxMCBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgem9uZSB3cml0ZSBwb2ludGVyIGFuZCBhYm9ydCBhbGwgcGx1Z2dlZCBCSU9zLiAqL1xuIFx0endwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJMS19aT05FX1dQTFVHX05FRURfV1BfVVBEQVRFO1xuLVx0endwbHVnLVx1MDAzZXdwX29mZnNldCA9IHdwX29mZnNldDtcbi1cdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xuJiM0MztcdGlmICghZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkge1xuJiM0MztcdFx0endwbHVnLVx1MDAzZXdwX29mZnNldCA9IHdwX29mZnNldDtcbiYjNDM7XHRcdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xuJiM0MztcdH1cbiBcbiBcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuIFx0aWYgKCF6d3BsdWctXHUwMDNld3Bfb2Zmc2V0IHx8IGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXG5AQCAtODE2LDggJiM0Mzs5NjksOCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGJsa196b25lX3dwX29mZnNldChzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLVx0XHRcdFx0XHRcdCAgIHN0cnVjdCBibGtfem9uZSAqem9uZSlcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXG4ge1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XG4gXHR1bnNpZ25lZCBpbnQgd3Bfb2Zmc2V0ID0gYmxrX3pvbmVfd3Bfb2Zmc2V0KHpvbmUpO1xuQEAgLTgyOSw2ICYjNDM7OTgyLDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRpZiAoendwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURSlcbiBcdFx0XHRkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChkaXNrLCB6d3BsdWcsIHdwX29mZnNldCk7XG4mIzQzO1x0XHRpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLVx1MDAzZWNvbmQpKSB7XG4mIzQzO1x0XHRcdHp3cGx1Zy1cdTAwM2Vjb25kID0gem9uZS1cdTAwM2Vjb25kO1xuJiM0MztcdFx0XHRkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7XG4mIzQzO1x0XHR9XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xuIFx0fVxuQEAgLTg3MSw3ICYjNDM7MTAyOCw3IEBAIGludCBkaXNrX3JlcG9ydF96b25lKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsXG4gXHR9XG4gXG4gXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKVxuLVx0XHRkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XG4mIzQzO1x0XHRkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZShkaXNrLCB6b25lKTtcbiBcbiBcdGlmIChhcmdzIFx1MDAyNlx1MDAyNiBhcmdzLVx1MDAzZWNiKVxuIFx0XHRyZXR1cm4gYXJncy1cdTAwM2VjYih6b25lLCBpZHgsIGFyZ3MtXHUwMDNlZGF0YSk7XG5AQCAtOTQwLDcgJiM0MzsxMDk3LDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcbiBcdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGJkZXZfem9uZV9zZWN0b3JzKGJkZXYpO1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4mIzQzO1x0dTggKnpvbmVzX3N0YXRlLCB6cztcbiBcbiBcdGlmICghYmRldl9pc196b25lZChiZGV2KSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTk1NSwxMiAmIzQzOzExMTIsMTggQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcbiBcdFx0cmV0dXJuIGJsa2Rldl9yZXBvcnRfem9uZV9mYWxsYmFjayhiZGV2LCBzZWN0b3IsIHpvbmUpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2ggfHwgIXpvbmVzX2NvbmQpIHtcbiYjNDM7XHR6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX3N0YXRlKTtcbiYjNDM7XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfc3RhdGUpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTtcbiBcdH1cbi1cdHpvbmUtXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildO1xuJiM0MztcbiYjNDM7XHR6cyA9IHpvbmVzX3N0YXRlW2Rpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpXTtcbiYjNDM7XHR6b25lLVx1MDAzZWNvbmQgPSBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XG4mIzQzO1x0aWYgKGJsa196c3RhdGVfaXNfY29udih6cykpXG4mIzQzO1x0XHR6b25lLVx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR6b25lLVx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0em9uZS1cdTAwM2VzdGFydCA9IHNlY3RvcjtcbkBAIC05NzAsOCAmIzQzOzExMzMsNyBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuIFx0ICogSWYgdGhpcyBpcyBhIGNvbnZlbnRpb25hbCB6b25lLCB3ZSBkbyBub3QgaGF2ZSBhIHpvbmUgd3JpdGUgcGx1ZyBhbmRcbiBcdCAqIGNhbiByZXBvcnQgdGhlIHpvbmUgaW1tZWRpYXRlbHkuXG4gXHQgKi9cbi1cdGlmICh6b25lLVx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9OT1RfV1ApIHtcbi1cdFx0em9uZS1cdTAwM2V0eXBlID0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw7XG4mIzQzO1x0aWYgKHpvbmUtXHUwMDNldHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkge1xuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gem9uZV9zZWN0b3JzO1xuIFx0XHR6b25lLVx1MDAzZXdwID0gVUxMT05HX01BWDtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtOTgyLDE0ICYjNDM7MTE0NCwxMiBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuIFx0ICogb2ZmbGluZSwgb25seSBzZXQgdGhlIHpvbmUgd3JpdGUgcG9pbnRlciB0byBhbiBpbnZhbGlkIHZhbHVlIGFuZFxuIFx0ICogcmVwb3J0IHRoZSB6b25lLlxuIFx0ICovXG4tXHR6b25lLVx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTtcbiBcdGlmIChkaXNrX3pvbmVfaXNfbGFzdChkaXNrLCB6b25lKSlcbiBcdFx0em9uZS1cdTAwM2VjYXBhY2l0eSA9IGRpc2stXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5O1xuIFx0ZWxzZVxuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gZGlzay1cdTAwM2V6b25lX2NhcGFjaXR5O1xuIFxuLVx0aWYgKHpvbmUtXHUwMDNlY29uZCA9PSBCTEtfWk9ORV9DT05EX1JFQURPTkxZIHx8XG4tXHQgICAgem9uZS1cdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfT0ZGTElORSkge1xuJiM0MztcdGlmIChkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHpvbmUtXHUwMDNlY29uZCkpIHtcbiBcdFx0em9uZS1cdTAwM2V3cCA9IFVMTE9OR19NQVg7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuQEAgLTExMDgsMzQgJiM0MzsxMjY4LDMyIEBAIHN0YXRpYyB2b2lkIGJsa196b25lX3Jlc2V0X2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfcmVzZXRfd3Aoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KHp3cGx1Zy1cdTAwM2VkaXNrLCB6d3BsdWcsIDApO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9hbGxfYmlvX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2s7XG4tXHRzZWN0b3JfdCBjYXBhY2l0eSA9IGdldF9jYXBhY2l0eShkaXNrKTtcbi1cdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHNlY3Rvcl90IHNlY3Rvcjtcbi1cdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpKSB7XG4tXHRcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh6d3BsdWcsXG4tXHRcdFx0XHRcdFx0IFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaFtpXSxcbi1cdFx0XHRcdFx0XHQgbm9kZSkge1xuLVx0XHRcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbi1cdFx0XHRcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KGRpc2ssIHp3cGx1ZywgMCk7XG4tXHRcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fVxuJiM0MztcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuJiM0MztcdGlmIChhdG9taWNfcmVhZChcdTAwMjZkaXNrLVx1MDAzZW5yX3pvbmVfd3BsdWdzKSlcbiYjNDM7XHRcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhkaXNrLCBkaXNrX3pvbmVfd3BsdWdfcmVzZXRfd3AsIE5VTEwpO1xuIFxuIFx0LyogVXBkYXRlIHRoZSBjYWNoZWQgem9uZSBjb25kaXRpb25zLiAqL1xuLVx0Zm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgXHUwMDNjIGNhcGFjaXR5O1xuLVx0ICAgICBzZWN0b3IgJiM0Mzs9IGJkZXZfem9uZV9zZWN0b3JzKGJpby1cdTAwM2ViaV9iZGV2KSlcbiYjNDM7XHRmb3IgKHNlY3RvciA9IDA7IHNlY3RvciBcdTAwM2MgZ2V0X2NhcGFjaXR5KGRpc2spO1xuJiM0MztcdCAgICAgc2VjdG9yICYjNDM7PSBiZGV2X3pvbmVfc2VjdG9ycyhiaW8tXHUwMDNlYmlfYmRldikpIHtcbiYjNDM7XHRcdGlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpIHx8XG4mIzQzO1x0XHQgICAgZGlza196b25lX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoZGlzaywgc2VjdG9yKSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdGRpc2tfem9uZV9zZXRfY29uZChkaXNrLCBzZWN0b3IsIEJMS19aT05FX0NPTkRfRU1QVFkpO1xuJiM0MztcdH1cbiBcdGNsZWFyX2JpdChHRF9aT05FX0FQUEVORF9VU0VELCBcdTAwMjZkaXNrLVx1MDAzZXN0YXRlKTtcbiB9XG4gXG5AQCAtMTM4MSwxMSAmIzQzOzE1MzksMTIgQEAgc3RhdGljIGJvb2wgYmxrX3pvbmVfd3BsdWdfcHJlcGFyZV9iaW8oc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdC8qXG4tXHQgKiBDaGVjayB0aGF0IHRoZSB1c2VyIGlzIG5vdCBhdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgZnVsbCB6b25lLlxuLVx0ICogV2Uga25vdyBzdWNoIEJJTyB3aWxsIGZhaWwsIGFuZCB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93IG91clxuLVx0ICogd3JpdGUgcG9pbnRlciBvZmZzZXQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHpvbmUuXG4mIzQzO1x0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seVxuJiM0MztcdCAqIG9yIG9mZmxpbmUgem9uZS4gV2Uga25vdyBzdWNoIEJJT3Mgd2lsbCBmYWlsLCBzbyB0aGVyZSBpcyBubyBwb2ludFxuJiM0MztcdCAqIGluIGlzc3VpbmcgdGhlbS5cbiBcdCAqL1xuLVx0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXG4mIzQzO1x0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykgfHxcbiYjNDM7XHQgICAgZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuQEAgLTE0NDIsNyAmIzQzOzE2MDEsNyBAQCBzdGF0aWMgYm9vbCBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgbnJfc2VncylcbiBcdH1cbiBcbiBcdC8qIENvbnZlbnRpb25hbCB6b25lcyBkbyBub3QgbmVlZCB3cml0ZSBwbHVnZ2luZy4gKi9cbi1cdGlmICghYmRldl96b25lX2lzX3NlcShiaW8tXHUwMDNlYmlfYmRldiwgc2VjdG9yKSkge1xuJiM0MztcdGlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpKSB7XG4gXHRcdC8qIFpvbmUgYXBwZW5kIHRvIGNvbnZlbnRpb25hbCB6b25lcyBpcyBub3QgYWxsb3dlZC4gKi9cbiBcdFx0aWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuIFx0XHRcdGJpb19pb19lcnJvcihiaW8pO1xuQEAgLTE4NTQsMTIgJiM0MzsyMDEzLDIwIEBAIHN0YXRpYyBpbnQgZGlza196b25lX3dwbHVnc193b3JrZXIodm9pZCAqZGF0YSlcbiBcbiB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZkaXNrLVx1MDAzZW5yX3pvbmVfd3BsdWdzLCAwKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfbGlzdCk7XG4gXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXJfYmlvX2RvbmUpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRElWX1JPVU5EX1VQX1VMTChnZXRfY2FwYWNpdHkoZGlzayksIGxpbS1cdTAwM2VjaHVua19zZWN0b3JzKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEZvciB0aGUgc2l6ZSBvZiBhIGRpc2sgem9uZSB3cml0ZSBwbHVnIGhhc2ggdGFibGUsIHVzZSB0aGUgc2l6ZSBvZiB0aGVcbiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmRcbkBAIC0xODY5LDEzICYjNDM7MjAzNiwyMSBAQCB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiAjZGVmaW5lIEJMS19aT05FX1dQTFVHX01BWF9IQVNIX0JJVFNcdFx0OVxuICNkZWZpbmUgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkVcdDEyOFxuIFxuLXN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZSlcbiYjNDM7c3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbi1cdHVuc2lnbmVkIGludCBpO1xuJiM0MztcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl96b25lcyA9IGRpc2tfZ2V0X25yX3pvbmVzKGRpc2spO1xuJiM0MztcdHVuc2lnbmVkIGludCBwb29sX3NpemUsIGk7XG4gXHRpbnQgcmV0ID0gLUVOT01FTTtcbiBcbi1cdGF0b21pY19zZXQoXHUwMDI2ZGlzay1cdTAwM2Vucl96b25lX3dwbHVncywgMCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXG4mIzQzO1x0ICogem9uZXMsIHVzZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRwb29sX3NpemUgPSBtYXgobGltLVx1MDAzZW1heF9vcGVuX3pvbmVzLCBsaW0tXHUwMDNlbWF4X2FjdGl2ZV96b25lcyk7XG4mIzQzO1x0aWYgKCFwb29sX3NpemUpXG4mIzQzO1x0XHRwb29sX3NpemUgPSBtaW4oQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsIG5yX3pvbmVzKTtcbiYjNDM7XG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfYml0cyA9XG4gXHRcdG1pbihpbG9nMihwb29sX3NpemUpICYjNDM7IDEsIEJMS19aT05FX1dQTFVHX01BWF9IQVNIX0JJVFMpO1xuIFxuQEAgLTE4OTMsMjEgJiM0MzsyMDY4LDYgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4tXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbi1cdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcbi1cdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuLVx0ICovXG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4tXHRcdFx0YWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3p3cGx1Z3NcJiMzNDssXG4tXHRcdFx0XHRcdFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSB8IFdRX1BFUkNQVSxcbi1cdFx0XHRcdFx0cG9vbF9zaXplLCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4tXHRcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbi1cdFx0XHRnb3RvIGRlc3Ryb3lfcG9vbDtcbi1cdH1cbi1cbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID1cbiBcdFx0a3RocmVhZF9jcmVhdGUoZGlza196b25lX3dwbHVnc193b3JrZXIsIGRpc2ssXG4gXHRcdFx0ICAgICAgIFwmIzM0OyVzX3p3cGx1Z3Nfd29ya2VyXCYjMzQ7LCBkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG5AQCAtMTkxOCw4ICYjNDM7MjA3OCwxOCBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHR9XG4gXHR3YWtlX3VwX3Byb2Nlc3MoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuIFxuJiM0MztcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPVxuJiM0MztcdFx0YWxsb2Nfd29ya3F1ZXVlKFwmIzM0OyVzX3p3cGx1Z3NcJiMzNDssXG4mIzQzO1x0XHRcdFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxuJiM0MztcdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuJiM0MztcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbiYjNDM7XHRcdGdvdG8gc3RvcF93b3JrZXI7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO3N0b3Bfd29ya2VyOlxuJiM0MztcdGt0aHJlYWRfc3RvcChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG4mIzQzO1x0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIgPSBOVUxMO1xuIGRlc3Ryb3lfcG9vbDpcbiBcdG1lbXBvb2xfZGVzdHJveShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpO1xuIFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sID0gTlVMTDtcbkBAIC0xOTYzLDE5ICYjNDM7MjEzMywxOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxuJiM0MztzdGF0aWMgdm9pZCBkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggKnpvbmVzX3N0YXRlKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay1cdTAwM2V6b25lc19jb25kLCB6b25lc19jb25kLFxuJiM0MztcdHpvbmVzX3N0YXRlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihkaXNrLVx1MDAzZXpvbmVzX3N0YXRlLCB6b25lc19zdGF0ZSxcbiBcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaykpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuIFxuLVx0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfY29uZCk7XG4mIzQzO1x0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4mIzQzO3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbiBcdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcikge1xuIFx0XHRrdGhyZWFkX3N0b3AoZGlzay1cdTAwM2V6b25lX3dwbHVnc193b3JrZXIpO1xuQEAgLTE5ODMsMzAgJiM0MzsyMTUzLDIyIEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdH1cbiBcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3QpKTtcbiBcbi1cdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKVxuLVx0XHRkcmFpbl93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbiYjNDM7XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuJiM0MztcdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4mIzQzO1x0fVxuIFxuIFx0ZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7XG4gXG4tXHRkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIE5VTEwpO1xuJiM0MztcdGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KGRpc2ssIE5VTEwpO1xuIFx0ZGlzay1cdTAwM2V6b25lX2NhcGFjaXR5ID0gMDtcbiBcdGRpc2stXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5ID0gMDtcbiBcdGRpc2stXHUwMDNlbnJfem9uZXMgPSAwO1xuIH1cbiBcbi12b2lkIGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbi17XG4tXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSkge1xuLVx0XHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKTtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XG4tXHR9XG4tXG4tXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XG4tfVxuLVxuIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xuIFx0c3RydWN0IGdlbmRpc2tcdCpkaXNrO1xuLVx0dThcdFx0KnpvbmVzX2NvbmQ7XG4mIzQzO1x0dThcdFx0KnpvbmVzX3N0YXRlO1xuIFx0dW5zaWduZWQgaW50XHRucl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0bnJfY29udl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0em9uZV9jYXBhY2l0eTtcbkBAIC0yMDE0LDQ5ICYjNDM7MjE3NiwyNiBAQCBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbiBcdHNlY3Rvcl90XHRzZWN0b3I7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7c3RhdGljIGludCBkaXNrX2luaXRfcmV2YWxpZGF0ZV9hcmdzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRcdFx0c3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiB7XG4tXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbi1cdHVuc2lnbmVkIGludCBwb29sX3NpemU7XG4tXHRpbnQgcmV0ID0gMDtcbi1cbiBcdGFyZ3MtXHUwMDNlZGlzayA9IGRpc2s7XG4tXHRhcmdzLVx1MDAzZW5yX3pvbmVzID1cbi1cdFx0RElWX1JPVU5EX1VQX1VMTChnZXRfY2FwYWNpdHkoZGlzayksIGxpbS1cdTAwM2VjaHVua19zZWN0b3JzKTtcbiYjNDM7XHRhcmdzLVx1MDAzZW5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XG4gXG4gXHQvKiBDYWNoZWQgem9uZSBjb25kaXRpb25zOiAxIGJ5dGUgcGVyIHpvbmUgKi9cbi1cdGFyZ3MtXHUwMDNlem9uZXNfY29uZCA9IGt6YWxsb2MoYXJncy1cdTAwM2Vucl96b25lcywgR0ZQX05PSU8pO1xuLVx0aWYgKCFhcmdzLVx1MDAzZXpvbmVzX2NvbmQpXG4mIzQzO1x0YXJncy1cdTAwM2V6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy1cdTAwM2Vucl96b25lcywgR0ZQX05PSU8pO1xuJiM0MztcdGlmICghYXJncy1cdTAwM2V6b25lc19zdGF0ZSlcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRpZiAoIWRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHQvKlxuLVx0ICogSWYgdGhlIGRldmljZSBoYXMgbm8gbGltaXQgb24gdGhlIG1heGltdW0gbnVtYmVyIG9mIG9wZW4gYW5kIGFjdGl2ZVxuLVx0ICogem9uZXMsIHVzZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRS5cbi1cdCAqL1xuLVx0cG9vbF9zaXplID0gbWF4KGxpbS1cdTAwM2VtYXhfb3Blbl96b25lcywgbGltLVx1MDAzZW1heF9hY3RpdmVfem9uZXMpO1xuLVx0aWYgKCFwb29sX3NpemUpXG4tXHRcdHBvb2xfc2l6ZSA9XG4tXHRcdFx0bWluKEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLCBhcmdzLVx1MDAzZW5yX3pvbmVzKTtcbi1cbi1cdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XG4tXHRcdHJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzaywgcG9vbF9zaXplKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRrZnJlZShhcmdzLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0fVxuLVxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gMDtcbiB9XG4gXG4gLypcbi0gKiBVcGRhdGUgdGhlIGRpc2sgem9uZSByZXNvdXJjZXMgaW5mb3JtYXRpb24gYW5kIGRldmljZSBxdWV1ZSBsaW1pdHMuXG4tICogVGhlIGRpc2sgcXVldWUgaXMgZnJvemVuIHdoZW4gdGhpcyBpcyBleGVjdXRlZC5cbiYjNDM7ICogUmV2YWxpZGF0ZSBhbmQgdXBkYXRlIHRoZSBkaXNrIHpvbmUgcmVzb3VyY2VzIGluZm9ybWF0aW9uIGFuZCBkZXZpY2UgcXVldWVcbiYjNDM7ICogbGltaXRzLlxuICAqL1xuLXN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tXHRcdFx0XHQgICAgICBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxuJiM0MztzdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXHUwMDNlcXVldWU7XG4gXHR1bnNpZ25lZCBpbnQgbnJfc2VxX3pvbmVzO1xuQEAgLTIwNjQsMjMgJiM0MzsyMjAzLDI4IEBAIHN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcbiBcdGludCByZXQgPSAwO1xuIFxuJiM0MztcdC8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBlbnRpcmUgZGlzayBjYXBhY2l0eSBoYXMgYmVlbiBjaGVja2VkLiAqL1xuJiM0MztcdGlmIChhcmdzLVx1MDAzZXNlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IE1pc3Npbmcgem9uZXMgZnJvbSBzZWN0b3IgJWxsdVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGFyZ3MtXHUwMDNlc2VjdG9yKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGFyZ3MtXHUwMDNlbnJfY29udl96b25lcyBcdTAwM2U9IGFyZ3MtXHUwMDNlbnJfem9uZXMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy1cdTAwM2Vucl9jb252X3pvbmVzLCBhcmdzLVx1MDAzZW5yX3pvbmVzKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuIFxuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IGFyZ3MtXHUwMDNlbnJfem9uZXM7XG4tXHRpZiAoYXJncy1cdTAwM2Vucl9jb252X3pvbmVzIFx1MDAzZT0gZGlzay1cdTAwM2Vucl96b25lcykge1xuLVx0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcbi1cdFx0cHJfd2FybihcJiMzNDslczogSW52YWxpZCBudW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzICV1IC8gJXVcXG5cJiMzNDssXG4tXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGFyZ3MtXHUwMDNlbnJfY29udl96b25lcywgZGlzay1cdTAwM2Vucl96b25lcyk7XG4tXHRcdHJldCA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gdW5mcmVlemU7XG4tXHR9XG4tXG4gXHRkaXNrLVx1MDAzZXpvbmVfY2FwYWNpdHkgPSBhcmdzLVx1MDAzZXpvbmVfY2FwYWNpdHk7XG4gXHRkaXNrLVx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eSA9IGFyZ3MtXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5O1xuLVx0ZGlza19zZXRfem9uZXNfY29uZF9hcnJheShkaXNrLCBhcmdzLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0YXJncy1cdTAwM2V6b25lc19jb25kID0gTlVMTDtcbiYjNDM7XHRkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBhcmdzLVx1MDAzZXpvbmVzX3N0YXRlKTtcbiYjNDM7XHRhcmdzLVx1MDAzZXpvbmVzX3N0YXRlID0gTlVMTDtcbiBcbiBcdC8qXG4gXHQgKiBTb21lIGRldmljZXMgY2FuIGFkdmVydGlzZSB6b25lIHJlc291cmNlIGxpbWl0cyB0aGF0IGFyZSBsYXJnZXIgdGhhblxuQEAgLTIxMjAsNDggJiM0MzsyMjY0LDU5IEBAIHN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gY29tbWl0OlxuIFx0cmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgXHUwMDI2bGltKTtcbiBcbi11bmZyZWV6ZTpcbiBcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZChzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4tXHRcdFx0XHQgICAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiYjNDM7c3RhdGljIHZvaWQgZGlza19kcm9wX3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsIHZvaWQgKmRhdGEpXG4ge1xuLVx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQgPSB6b25lLVx1MDAzZWNvbmQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbi1cdC8qIENoZWNrIHRoYXQgdGhlIHpvbmUgY29uZGl0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSB0eXBlLiAqL1xuLVx0c3dpdGNoIChjb25kKSB7XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxuLVx0XHRpZiAoem9uZS1cdTAwM2V0eXBlICE9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMKVxuLVx0XHRcdGdvdG8gaW52YWxpZF9jb25kaXRpb247XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9GVUxMOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4tXHRcdGlmICh6b25lLVx1MDAzZXR5cGUgIT0gQkxLX1pPTkVfVFlQRV9TRVFXUklURV9SRVEpXG4tXHRcdFx0Z290byBpbnZhbGlkX2NvbmRpdGlvbjtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JVhcXG5cJiMzNDssXG4tXHRcdFx0YXJncy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgY29uZCk7XG4tXHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0ZGlza196b25lX3dwbHVnX2Fib3J0KHp3cGx1Zyk7XG4mIzQzO1x0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfY2FwYWNpdHkoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbiYjNDM7XHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBsaW0tXHUwMDNlY2h1bmtfc2VjdG9ycztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbnJfem9uZXMgPSBkaXNrX2dldF9ucl96b25lcyhkaXNrKTtcbiYjNDM7XHRpbnQgcmV0ID0gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFnZXRfY2FwYWNpdHkoZGlzaykpXG4mIzQzO1x0XHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0XG4mIzQzO1x0ICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkge1xuJiM0MztcdFx0cHJfd2FybihcJiMzNDslczogSW52YWxpZCBub24gcG93ZXIgb2YgdHdvIHpvbmUgc2l6ZSAoJWxsdSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lX3NlY3RvcnMpO1xuJiM0MztcdFx0Z290byBkcm9wX2FsbF96d3BsdWdzO1xuIFx0fVxuIFxuLVx0YmxrX3pvbmVfc2V0X2NvbmQoYXJncy1cdTAwM2V6b25lc19jb25kLCBpZHgsIGNvbmQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQ2hlY2sgaWYgdGhlIGNhcGFjaXR5IGhhcyBjaGFuZ2VkLiBJZiBpdCBkaWQsIGFzc3VtZSB0aGF0IHRoZSBkZXZpY2VcbiYjNDM7XHQgKiB3YXMgcmVmb3JtYXR0ZWQgYW5kIHRoYXQgYWxsIHNlcXVlbnRpYWwgem9uZXMgYXJlIG5vdyBlbXB0eS4gU28gZHJvcFxuJiM0MztcdCAqIGFsbCB6b25lIHdyaXRlIHBsdWcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRpc2stXHUwMDNlbnJfem9uZXMgXHUwMDI2XHUwMDI2IGRpc2stXHUwMDNlbnJfem9uZXMgIT0gbnJfem9uZXMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7JXM6IE51bWJlciBvZiB6b25lcyBjaGFuZ2VkICgldSAtXHUwMDNlICV1KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGRpc2stXHUwMDNlbnJfem9uZXMsIG5yX3pvbmVzKTtcbiYjNDM7XHRcdHJldCA9IDA7XG4mIzQzO1x0XHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4taW52YWxpZF9jb25kaXRpb246XG4tXHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JXggZm9yIHR5cGUgMHgleFxcblwmIzM0Oyxcbi1cdFx0YXJncy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgY29uZCwgem9uZS1cdTAwM2V0eXBlKTtcbiYjNDM7ZHJvcF9hbGxfendwbHVnczpcbiYjNDM7XHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MoZGlzaywgZGlza19kcm9wX3pvbmVfd3BsdWcsIE5VTEwpO1xuIFxuLVx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9jb252X3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuQEAgLTIxNjksMTIgJiM0MzsyMzI0LDI2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFyZ3MtXHUwMDNlZGlzaztcbiBcbiYjNDM7XHQvKiBDaGVjayB0aGUgem9uZSBjb25kaXRpb24uICovXG4mIzQzO1x0c3dpdGNoICh6b25lLVx1MDAzZWNvbmQpIHtcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIGNvbnYuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lLVx1MDAzZWNvbmQsIHpvbmUtXHUwMDNlc3RhcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICh6b25lLVx1MDAzZWNhcGFjaXR5ICE9IHpvbmUtXHUwMDNlbGVuKSB7XG4gXHRcdHByX3dhcm4oXCYjMzQ7JXM6IEludmFsaWQgY29udmVudGlvbmFsIHpvbmUgY2FwYWNpdHlcXG5cJiMzNDssXG4gXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcdH1cbiBcbiYjNDM7XHRibGtfenN0YXRlX3NldChhcmdzLVx1MDAzZXpvbmVzX3N0YXRlLCBpZHgsIHpvbmUtXHUwMDNlY29uZCwgQkxLX1pGTEFHX0NPTlYpO1xuJiM0MztcbiBcdGlmIChkaXNrX3pvbmVfaXNfbGFzdChkaXNrLCB6b25lKSlcbiBcdFx0YXJncy1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSB6b25lLVx1MDAzZWNhcGFjaXR5O1xuIFxuQEAgLTIxOTAsNiAmIzQzOzIzNTksMjQgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9zZXFfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZztcbiBcdHVuc2lnbmVkIGludCB3cF9vZmZzZXQ7XG4gXG4mIzQzO1x0LyogQ2hlY2sgdGhlIHpvbmUgY29uZGl0aW9uLiAqL1xuJiM0MztcdHN3aXRjaCAoem9uZS1cdTAwM2Vjb25kKSB7XG4mIzQzO1x0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuJiM0MztcdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfRlVMTDpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbiYjNDM7XHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cHJfd2FybihcJiMzNDslczogSW52YWxpZCBzZXEuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lLVx1MDAzZWNvbmQsIHpvbmUtXHUwMDNlc3RhcnQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRibGtfenN0YXRlX3NldChhcmdzLVx1MDAzZXpvbmVzX3N0YXRlLCBpZHgsIHpvbmUtXHUwMDNlY29uZCwgMCk7XG4mIzQzO1xuIFx0LypcbiBcdCAqIFJlbWVtYmVyIHRoZSBjYXBhY2l0eSBvZiB0aGUgZmlyc3Qgc2VxdWVudGlhbCB6b25lIGFuZCBjaGVja1xuIFx0ICogaWYgaXQgaXMgY29uc3RhbnQgZm9yIGFsbCB6b25lcywgaWdub3JpbmcgdGhlIGxhc3Qgem9uZSBhcyBpdCBjYW4gYmVcbkBAIC0yMjE0LDcgJiM0MzsyNDAxLDcgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9zZXFfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHR3cF9vZmZzZXQgPSBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XG4mIzQzO1x0d3Bfb2Zmc2V0ID0gZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoZGlzaywgem9uZSk7XG4gXHRpZiAoIXdwX29mZnNldCB8fCB3cF9vZmZzZXQgXHUwMDNlPSB6b25lLVx1MDAzZWNhcGFjaXR5KVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMjcyLDExICYjNDM7MjQ1OSw2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0LyogQ2hlY2sgem9uZSBjb25kaXRpb24gKi9cbi1cdHJldCA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZCh6b25lLCBpZHgsIGFyZ3MpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdC8qIENoZWNrIHpvbmUgdHlwZSAqL1xuIFx0c3dpdGNoICh6b25lLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw6XG5AQCAtMjMxMywzOSAmIzQzOzI0OTUsMzcgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiAgKi9cbiBpbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXHUwMDNlcXVldWU7XG4tXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBxLVx1MDAzZWxpbWl0cy5jaHVua19zZWN0b3JzO1xuLVx0c2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7XG4gXHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIGFyZ3MgPSB7IH07XG4tXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3MsIG5vaW9fZmxhZztcbiBcdHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgcmVwX2FyZ3MgPSB7XG4gXHRcdC5jYiA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY2IsXG4gXHRcdC5kYXRhID0gXHUwMDI2YXJncyxcbiBcdH07XG4tXHRpbnQgcmV0ID0gLUVOT01FTTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbm9pb19mbGFnO1xuJiM0MztcdGludCByZXQ7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQocSkpKVxuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoIWJsa19xdWV1ZV9pc196b25lZChkaXNrLVx1MDAzZXF1ZXVlKSkpXG4gXHRcdHJldHVybiAtRUlPO1xuIFxuLVx0aWYgKCFjYXBhY2l0eSlcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0cmV0ID0gZGlza19yZXZhbGlkYXRlX2NhcGFjaXR5KGRpc2spO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFxuIFx0Lypcbi1cdCAqIENoZWNrcyB0aGF0IHRoZSBkZXZpY2UgZHJpdmVyIGluZGljYXRlZCBhIHZhbGlkIHpvbmUgc2l6ZSBhbmQgdGhhdFxuLVx0ICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuXG4mIzQzO1x0ICogQWxsb2NhdGUgem9uZSByZXNvdXJjZXMgaWYgdGhleSBhcmUgbmVlZGVkIGFuZCB3ZSBoYXZlIG5vdCBkb25lXG4mIzQzO1x0ICogc28geWV0LCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmV2YWxpZGF0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gcmVwb3J0XG4mIzQzO1x0ICogem9uZXMuIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzXG4mIzQzO1x0ICogaWYgR0ZQX05PSU8gd2FzIHNwZWNpZmllZC5cbiBcdCAqL1xuLVx0aWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkge1xuLVx0XHRwcl93YXJuKFwmIzM0OyVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxcblwmIzM0Oyxcbi1cdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgem9uZV9zZWN0b3JzKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0bm9pb19mbGFnID0gbWVtYWxsb2Nfbm9pb19zYXZlKCk7XG4mIzQzO1x0aWYgKGRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSBcdTAwMjZcdTAwMjYgIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCkge1xuJiM0MztcdFx0cmV0ID0gZGlza19hbGxvY196b25lX3Jlc291cmNlcyhkaXNrKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4tXHQvKlxuLVx0ICogRW5zdXJlIHRoYXQgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIGRvbmUgYXMgaWZcbi1cdCAqIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuXG4tXHQgKi9cbi1cdG5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuLVx0cmV0ID0gZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFx1MDAyNmFyZ3MpO1xuJiM0MztcdHJldCA9IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3MoZGlzaywgXHUwMDI2YXJncyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNTksMzIgJiM0MzsyNTM5LDE4IEBAIGludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XG4gXG4gXHRpZiAocmV0IFx1MDAzYz0gMClcbi1cdFx0Z290byBmcmVlX3Jlc291cmNlcztcbiYjNDM7XHRcdGdvdG8gZnJlZV9hcmdzO1xuIFxuLVx0Lypcbi1cdCAqIElmIHpvbmVzIHdoZXJlIHJlcG9ydGVkLCBtYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHlcbi1cdCAqIGhhcyBiZWVuIGNoZWNrZWQuXG4tXHQgKi9cbi1cdGlmIChhcmdzLnNlY3RvciAhPSBjYXBhY2l0eSkge1xuLVx0XHRwcl93YXJuKFwmIzM0OyVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcXG5cJiMzNDssXG4tXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGFyZ3Muc2VjdG9yKTtcbi1cdFx0cmV0ID0gLUVOT0RFVjtcbi1cdFx0Z290byBmcmVlX3Jlc291cmNlcztcbi1cdH1cbi1cbi1cdHJldCA9IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFx1MDAyNmFyZ3MpO1xuJiM0MztcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhkaXNrLCBcdTAwMjZhcmdzKTtcbiBcdGlmIChyZXQpXG4tXHRcdGdvdG8gZnJlZV9yZXNvdXJjZXM7XG4mIzQzO1x0XHRnb3RvIGZyZWVfYXJncztcbiBcbiBcdHJldHVybiAwO1xuIFxuLWZyZWVfcmVzb3VyY2VzOlxuJiM0MztmcmVlX2FyZ3M6XG4gXHRwcl93YXJuKFwmIzM0OyVzOiBmYWlsZWQgdG8gcmV2YWxpZGF0ZSB6b25lc1xcblwmIzM0OywgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuIFxuLVx0a2ZyZWUoYXJncy56b25lc19jb25kKTtcbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4mIzQzO1x0a2ZyZWUoYXJncy56b25lc19zdGF0ZSk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0yNDM1LDggJiM0MzsyNjAxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfaXNzdWVfemVyb291dCk7XG4gXG4gI2lmZGVmIENPTkZJR19CTEtfREVCVUdfRlNcbiBzdGF0aWMgdm9pZCBxdWV1ZV96b25lX3dwbHVnX3Nob3coc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4tXHRcdFx0XHQgIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiYjNDM7XHRcdFx0XHQgIHZvaWQgKmRhdGEpXG4ge1xuJiM0MztcdHN0cnVjdCBzZXFfZmlsZSAqbSA9IGRhdGE7XG4gXHR1bnNpZ25lZCBpbnQgendwX3dwX29mZnNldCwgendwX2ZsYWdzO1xuIFx0dW5zaWduZWQgaW50IHp3cF96b25lX25vLCB6d3BfcmVmO1xuIFx0dW5zaWduZWQgaW50IHp3cF9iaW9fbGlzdF9zaXplO1xuQEAgLTI0NjEsMTkgJiM0MzsyNjI4LDggQEAgc3RhdGljIHZvaWQgcXVldWVfem9uZV93cGx1Z19zaG93KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLFxuIGludCBxdWV1ZV96b25lX3dwbHVnc19zaG93KHZvaWQgKmRhdGEsIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRhdGE7XG4tXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHEtXHUwMDNlZGlzaztcbi1cdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuLVx0dW5zaWduZWQgaW50IGk7XG4tXG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbi1cdFx0cmV0dXJuIDA7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspXG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh6d3BsdWcsIFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaFtpXSxcbi1cdFx0XHRcdFx0IG5vZGUpXG4tXHRcdFx0cXVldWVfem9uZV93cGx1Z19zaG93KHp3cGx1ZywgbSk7XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MocS1cdTAwM2VkaXNrLCBxdWV1ZV96b25lX3dwbHVnX3Nob3csIG0pO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay5oIGIvYmxvY2svYmxrLmhcbmluZGV4IDUwYWJmZDkzMjg4NjEuLmNmZThkNDE4NWUyNWEgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLmhcbkBAIC01NzcsNiAmIzQzOzU3Nyw3IEBAIGludCBibGtkZXZfcmVwb3J0X3pvbmVzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gXHRcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbiYjNDM7Ym9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpO1xuICNlbHNlIC8qIENPTkZJR19CTEtfREVWX1pPTkVEICovXG4gc3RhdGljIGlubGluZSB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG5AQCAtNjE5LDYgJiM0Mzs2MjAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuIHtcbiBcdHJldHVybiAtRU5PVFRZO1xuIH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4mIzQzO1x0XHRcdFx0XHRzZWN0b3JfdCBzZWN0b3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cbiBcbiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2X2FsbG9jKHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pO1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jXG5pbmRleCBlOGNlMGNhYmYzOTJjLi4zNGE2NDA3N2JhMDJjIDEwMDY0NFxuLS0tIGEvYmxvY2svZ2VuaGQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svZ2VuaGQuY1xuQEAgLTQ0Nyw2ICYjNDM7NDQ3LDEzIEBAIHN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0XHRiZGV2X3NldF9mbGFnKGRpc2stXHUwMDNlcGFydDAsIEJEX0hBU19TVUJNSVRfQklPKTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdlIGRvIG5vdCBzdXBwb3J0IHBhcnRpdGlvbnMgd2l0aCB6b25lZCBibG9jayBkZXZpY2VzLCBzbyBkbyBub3QgdHJ5XG4mIzQzO1x0ICogdG8gc2NhbiB0aGUgcGFydGl0aW9ucyB0YWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYmxrX3F1ZXVlX2lzX3pvbmVkKGRpc2stXHUwMDNlcXVldWUpKVxuJiM0MztcdFx0ZGlzay1cdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9OT19QQVJUO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBJZiB0aGUgZHJpdmVyIHByb3ZpZGVzIGFuIGV4cGxpY2l0IG1ham9yIG51bWJlciBpdCBhbHNvIG11c3QgcHJvdmlkZVxuIFx0ICogdGhlIG51bWJlciBvZiBtaW5vcnMgbnVtYmVycyBzdXBwb3J0ZWQsIGFuZCB0aG9zZSB3aWxsIGJlIHVzZWQgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggMjBjYjhlZDdkOTg3YS4uNGZhMDA3NTc1MjdkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIHN0cnVjdCBnZW5kaXNrIHtcbiBcdHVuc2lnbmVkIGludFx0XHRucl96b25lcztcbiBcdHVuc2lnbmVkIGludFx0XHR6b25lX2NhcGFjaXR5O1xuIFx0dW5zaWduZWQgaW50XHRcdGxhc3Rfem9uZV9jYXBhY2l0eTtcbi1cdHU4IF9fcmN1XHRcdCp6b25lc19jb25kO1xuJiM0MztcdHU4IF9fcmN1XHRcdCp6b25lc19zdGF0ZTtcbiBcdHVuc2lnbmVkIGludFx0XHR6b25lX3dwbHVnc19oYXNoX2JpdHM7XG4gXHRhdG9taWNfdFx0XHRucl96b25lX3dwbHVncztcbiBcdHNwaW5sb2NrX3RcdFx0em9uZV93cGx1Z3NfaGFzaF9sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9jaGVja196b25lX21nbXQmIzM0OywKICAgICYjMzQ7YmxrZGV2X2dldF96b25lX2luZm8mIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgem9uZSBjb25kaXRpb25zIGFyZSB0cmFja2VkIGluIHRoZSBibG9jayBsYXllciwgaW50cm9kdWNpbmcgYGVudW0gYmxrX3pzdGF0ZWAgYW5kIGEgbmV3IGB6b25lc19zdGF0ZWAgYXJyYXkgdG8gcmVwbGFjZSBgem9uZXNfY29uZGAuIEl0IHVwZGF0ZXMgem9uZSBtYW5hZ2VtZW50IGNoZWNrcyAoYGJkZXZfY2hlY2tfem9uZV9tZ210YCksIHpvbmUgcmV2YWxpZGF0aW9uIChgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2ApLCBhbmQgem9uZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwgKGBibGtkZXZfZ2V0X3pvbmVfaW5mb2ApLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2FkZF9kaXNrYCB0byBkaXNhYmxlIHBhcnRpdGlvbnMgb24gem9uZWQgYmxvY2sgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBibG9jayBsYXllciYjMzk7cyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMDUyOGU2OGU5NzAyZTFmZmRlZjFkMjNmMjFmMjcyNDdkN2U2NzRhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgNiAxOTo0NjoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDE5NmJjY2YyN2Y1OGQuLjgwYTRlMmJjYzNmMzQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtOTAxLDggJiM0Mzs5MDEsMTEgQEAgdm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pCiAJY2FzZSBSRVFfT1BfWk9ORV9DTE9TRToKIAljYXNlIFJFUV9PUF9aT05FX1JFU0VUOgogCWNhc2UgUkVRX09QX1pPTkVfRklOSVNIOgotCQkvKiBab25lIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyByZXF1aXJlIHNlcXVlbnRpYWwgem9uZXMuICovCi0JCWlmICghYmRldl96b25lX2lzX3NlcShiaW8tJmd0O2JpX2JkZXYsIGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IpKQomIzQzOwkJLyoKJiM0MzsJCSAqIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcyB0aGF0IGFyZQomIzQzOwkJICogbm90IG9mZmxpbmUgbm9yIHJlYWQtb25seS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFiZGV2X2NoZWNrX3pvbmVfbWdtdChiZGV2LCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yKSkKIAkJCWdvdG8gZW5kX2lvOwogCQlicmVhazsKIAljYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDoKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay16b25lZC5jIGIvYmxvY2svYmxrLXpvbmVkLmMKaW5kZXggYTVhZmI4NDJiZjM1ZS4uZjE3MDY5MzA5YWM5ZCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXpvbmVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLXpvbmVkLmMKQEAgLTM5LDYgJiM0MzszOSwxMDMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHpvbmVfY29uZF9uYW1lW10gPSB7CiB9OwogI3VuZGVmIFpPTkVfQ09ORF9OQU1FCiAKJiM0MzsvKgomIzQzOyAqIEludGVybmFsIGFuZCBjb21wYWN0IHJlcHJlc2VudGF0aW9uIG9mIGVudW0gYmxrX3pvbmVfY29uZCB2YWx1ZXMgZm9yIHpvbmUKJiM0MzsgKiBjb25kaXRpb25zLiBBbGwgdGhlc2UgdmFsdWVzIGZpdCBpbnRvIDQtYml0cywgYWxsb3dpbmcgdXNpbmcgdGhlIGhpZ2ggb3JkZXIKJiM0MzsgKiBiaXRzIGFzIHRoZSB6b25lIHR5cGUuCiYjNDM7ICovCiYjNDM7ZW51bSBibGtfenN0YXRlIHsKJiM0MzsJQkxLX1pTVEFURV9OT1RfV1AJPSAweDAwLAomIzQzOwlCTEtfWlNUQVRFX0VNUFRZCT0gMHgwMSwKJiM0MzsJQkxLX1pTVEFURV9JTVBfT1BFTgk9IDB4MDIsCiYjNDM7CUJMS19aU1RBVEVfRVhQX09QRU4JPSAweDAzLAomIzQzOwlCTEtfWlNUQVRFX0NMT1NFRAk9IDB4MDQsCiYjNDM7CUJMS19aU1RBVEVfUkVBRE9OTFkJPSAweDA1LAomIzQzOwlCTEtfWlNUQVRFX0ZVTEwJCT0gMHgwNiwKJiM0MzsJQkxLX1pTVEFURV9PRkZMSU5FCT0gMHgwNywKJiM0MzsJQkxLX1pTVEFURV9BQ1RJVkUJPSAweDA4LAomIzQzOwomIzQzOwlCTEtfWlNUQVRFX0NPTkRfTUFTSwk9IDB4MEYsCiYjNDM7CiYjNDM7CS8qIENvbnZlbnRpb25hbCB6b25lLiAqLwomIzQzOwlCTEtfWkZMQUdfQ09OVgkJPSAweDgwLAomIzQzOwlCTEtfWlNUQVRFX0ZMQUdTX01BU0sJPSB+QkxLX1pTVEFURV9DT05EX01BU0ssCiYjNDM7fTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIExvb2t1cCB0YWJsZSBhbmQgaGVscGVyIHRvIGNvbnZlcnQgZW51bSBibGtfenN0YXRlIGNvbmRpdGlvbnMgaW50byBlbnVtCiYjNDM7ICogYmxrX3pvbmVfY29uZGl0aW9uIHZhbHVlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdTggYmxrX3pzdGF0ZTJ6Y29uZFtdID0gewomIzQzOwlbQkxLX1pTVEFURV9OT1RfV1BdCT0gQkxLX1pPTkVfQ09ORF9OT1RfV1AsCiYjNDM7CVtCTEtfWlNUQVRFX0VNUFRZXQk9IEJMS19aT05FX0NPTkRfRU1QVFksCiYjNDM7CVtCTEtfWlNUQVRFX0lNUF9PUEVOXQk9IEJMS19aT05FX0NPTkRfSU1QX09QRU4sCiYjNDM7CVtCTEtfWlNUQVRFX0VYUF9PUEVOXQk9IEJMS19aT05FX0NPTkRfRVhQX09QRU4sCiYjNDM7CVtCTEtfWlNUQVRFX0NMT1NFRF0JPSBCTEtfWk9ORV9DT05EX0NMT1NFRCwKJiM0MzsJW0JMS19aU1RBVEVfUkVBRE9OTFldCT0gQkxLX1pPTkVfQ09ORF9SRUFET05MWSwKJiM0MzsJW0JMS19aU1RBVEVfRlVMTF0JPSBCTEtfWk9ORV9DT05EX0ZVTEwsCiYjNDM7CVtCTEtfWlNUQVRFX09GRkxJTkVdCT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FLAomIzQzOwlbQkxLX1pTVEFURV9BQ1RJVkVdCT0gQkxLX1pPTkVfQ09ORF9BQ1RJVkUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGVudW0gYmxrX3pvbmVfY29uZCBibGtfenN0YXRlX3RvX3pvbmVfY29uZChlbnVtIGJsa196c3RhdGUgenMpCiYjNDM7ewomIzQzOwl1OCBpZHggPSB6cyAmYW1wOyBCTEtfWlNUQVRFX0NPTkRfTUFTSzsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShpZHggJmd0Oz0gQVJSQVlfU0laRShibGtfenN0YXRlMnpjb25kKSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJsa196c3RhdGUyemNvbmRbaWR4XTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGludG8gYW4gZW51bQomIzQzOyAqIGJsa196c3RhdGUgY29uZGl0aW9uIHZhbHVlLiBUbyBrZWVwIHRoZSBsb29rdXAgdGFibGUgc21hbGwsIHRoZQomIzQzOyAqIEJMS19aT05FX0NPTkRfQUNUSVZFIGNvbmRpdGlvbiBpcyBub3QgYWRkZWQgYW5kIGhhbmRsZWQgc2VwYXJhdGVseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgY29uc3QgdTggYmxrX3pjb25kMnpzdGF0ZVtdID0gewomIzQzOwlbQkxLX1pPTkVfQ09ORF9OT1RfV1BdCQk9IEJMS19aU1RBVEVfTk9UX1dQLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9FTVBUWV0JCT0gQkxLX1pTVEFURV9FTVBUWSwKJiM0MzsJW0JMS19aT05FX0NPTkRfSU1QX09QRU5dCT0gQkxLX1pTVEFURV9BQ1RJVkUsCiYjNDM7CVtCTEtfWk9ORV9DT05EX0VYUF9PUEVOXQk9IEJMS19aU1RBVEVfQUNUSVZFLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9DTE9TRURdCQk9IEJMS19aU1RBVEVfQUNUSVZFLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9SRUFET05MWV0JPSBCTEtfWlNUQVRFX1JFQURPTkxZLAomIzQzOwlbQkxLX1pPTkVfQ09ORF9GVUxMXQkJPSBCTEtfWlNUQVRFX0ZVTEwsCiYjNDM7CVtCTEtfWk9ORV9DT05EX09GRkxJTkVdCQk9IEJMS19aU1RBVEVfT0ZGTElORSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgZW51bSBibGtfenN0YXRlIGJsa196b25lX2NvbmRfdG9fenN0YXRlKGVudW0gYmxrX3pvbmVfY29uZCBjb25kKQomIzQzO3sKJiM0MzsJaWYgKGNvbmQgPT0gQkxLX1pPTkVfQ09ORF9BQ1RJVkUpCiYjNDM7CQlyZXR1cm4gQkxLX1pTVEFURV9BQ1RJVkU7CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0UoY29uZCAmZ3Q7PSBBUlJBWV9TSVpFKGJsa196Y29uZDJ6c3RhdGUpKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXR1cm4gYmxrX3pjb25kMnpzdGF0ZVtjb25kXTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb21iaW5lIGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGFuZCB6b25lIGZsYWdzIGludG8gYSB6b25lc19zdGF0ZSBhcnJheQomIzQzOyAqIGVudHJ5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfenN0YXRlX3NldCh1OCAqem9uZXNfc3RhdGUsIHVuc2lnbmVkIGludCB6bm8sCiYjNDM7CQkJCSAgZW51bSBibGtfem9uZV9jb25kIGNvbmQsIHU4IGZsYWdzKQomIzQzO3sKJiM0MzsJaWYgKHpvbmVzX3N0YXRlKQomIzQzOwkJem9uZXNfc3RhdGVbem5vXSA9IGZsYWdzIHwgYmxrX3pvbmVfY29uZF90b196c3RhdGUoY29uZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTggYmxrX3pzdGF0ZV9mbGFncyhlbnVtIGJsa196c3RhdGUgenMpCiYjNDM7ewomIzQzOwlyZXR1cm4genMgJmFtcDsgQkxLX1pTVEFURV9GTEFHU19NQVNLOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYmxrX3pzdGF0ZV9pc19jb252KGVudW0gYmxrX3pzdGF0ZSB6cykKJiM0Mzt7CiYjNDM7CXJldHVybiBibGtfenN0YXRlX2ZsYWdzKHpzKSAmYW1wOyBCTEtfWkZMQUdfQ09OVjsKJiM0Mzt9CiYjNDM7CiAvKgogICogUGVyLXpvbmUgd3JpdGUgcGx1Zy4KICAqIEBub2RlOiBobGlzdF9ub2RlIHN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgdGhlIHBsdWcgdXNpbmcgYSBoYXNoIHRhYmxlLgpAQCAtMTM1LDU1ICYjNDM7MjMyLDY0IEBAIGNvbnN0IGNoYXIgKmJsa196b25lX2NvbmRfc3RyKGVudW0gYmxrX3pvbmVfY29uZCB6b25lX2NvbmQpCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9jb25kX3N0cik7CiAKLXN0YXRpYyB2b2lkIGJsa196b25lX3NldF9jb25kKHU4ICp6b25lc19jb25kLCB1bnNpZ25lZCBpbnQgem5vLAotCQkJICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpCiYjNDM7c3RhdGljIHZvaWQgZGlza196b25lX3NldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsCiYjNDM7CQkJICAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKQogewotCWlmICghem9uZXNfY29uZCkKLQkJcmV0dXJuOwomIzQzOwl1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7CiYjNDM7CXU4ICp6b25lc19zdGF0ZTsKIAotCXN3aXRjaCAoY29uZCkgewotCWNhc2UgQkxLX1pPTkVfQ09ORF9JTVBfT1BFTjoKLQljYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46Ci0JY2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDoKLQkJem9uZXNfY29uZFt6bm9dID0gQkxLX1pPTkVfQ09ORF9BQ1RJVkU7Ci0JCXJldHVybjsKLQljYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOgotCWNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWToKLQljYXNlIEJMS19aT05FX0NPTkRfRlVMTDoKLQljYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORToKLQljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6Ci0JZGVmYXVsdDoKLQkJem9uZXNfY29uZFt6bm9dID0gY29uZDsKLQkJcmV0dXJuOwotCX0KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwl6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLSZndDt6b25lc19zdGF0ZSk7CiYjNDM7CWlmIChsaWtlbHkoem9uZXNfc3RhdGUgJmFtcDsmYW1wOyB6bm8gJmx0OyBkaXNrLSZndDtucl96b25lcykpCiYjNDM7CQlibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLAomIzQzOwkJCSAgICAgICBibGtfenN0YXRlX2ZsYWdzKHpvbmVzX3N0YXRlW3pub10pKTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLAotCQkJICAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKQomIzQzO3N0YXRpYyBpbmxpbmUgdTggZGlza196b25lX2dldF9zdGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yKQogewotCXU4ICp6b25lc19jb25kOwomIzQzOwl1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7CiYjNDM7CXU4ICp6b25lc19zdGF0ZSwgenM7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jem9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLSZndDt6b25lc19jb25kKTsKLQlpZiAoem9uZXNfY29uZCkgewotCQl1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7Ci0KLQkJLyoKLQkJICogVGhlIGNvbmRpdGlvbiBvZiBhIGNvbnZlbnRpb25hbCwgcmVhZG9ubHkgYW5kIG9mZmxpbmUgem9uZXMKLQkJICogbmV2ZXIgY2hhbmdlcywgc28gZG8gbm90aGluZyBpZiB0aGUgdGFyZ2V0IHpvbmUgaXMgaW4gb25lIG9mCi0JCSAqIHRoZXNlIGNvbmRpdGlvbnMuCi0JCSAqLwotCQlzd2l0Y2ggKHpvbmVzX2NvbmRbem5vXSkgewotCQljYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOgotCQljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6Ci0JCWNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlibGtfem9uZV9zZXRfY29uZCh6b25lc19jb25kLCB6bm8sIGNvbmQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9CiYjNDM7CXpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stJmd0O3pvbmVzX3N0YXRlKTsKJiM0MzsJaWYgKGxpa2VseSh6b25lc19zdGF0ZSAmYW1wOyZhbXA7IHpubyAmbHQ7IGRpc2stJmd0O25yX3pvbmVzKSkKJiM0MzsJCXpzID0gem9uZXNfc3RhdGVbem5vXTsKJiM0MzsJZWxzZQomIzQzOwkJenMgPSAwOwogCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4genM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBlbnVtIGJsa196b25lX2NvbmQgZGlza196b25lX2dldF9jb25kKHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzOwkJCQkJICAgICBzZWN0b3JfdCBzZWN0b3IpCiYjNDM7ewomIzQzOwl1OCB6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoZGlzaywgc2VjdG9yKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGJsa196c3RhdGVfdG9fem9uZV9jb25kKHpzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sCiYjNDM7ZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShlbnVtIGJsa196b25lX2NvbmQgY29uZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHwKJiM0MzsJCWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZGlza196b25lX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkJICAgIHNlY3Rvcl90IHNlY3RvcikKJiM0Mzt7CiYjNDM7CWVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gZGlza196b25lX2dldF9jb25kKGRpc2ssIHNlY3Rvcik7CiYjNDM7CiYjNDM7CXJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBkaXNrX3pvbmVfaXNfc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpCiYjNDM7ewomIzQzOwl1OCB6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoZGlzaywgc2VjdG9yKTsKJiM0MzsKJiM0MzsJcmV0dXJuICFibGtfenN0YXRlX2lzX2NvbnYoenMpOwogfQogCiAvKioKQEAgLTE5NSwyMyAmIzQzOzMwMSwzNiBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvciwKICAqLwogYm9vbCBiZGV2X3pvbmVfaXNfc2VxKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcikKIHsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtJmd0O2JkX2Rpc2s7Ci0JdW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpOwotCWJvb2wgaXNfc2VxID0gZmFsc2U7Ci0JdTggKnpvbmVzX2NvbmQ7CiYjNDM7CWlmICghYmRldl9pc196b25lZChiZGV2KSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGRpc2tfem9uZV9pc19zZXEoYmRldi0mZ3Q7YmRfZGlzaywgc2VjdG9yKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYmRldl9jaGVja196b25lX21nbXQgLSBjaGVjayBpZiBhIHNlY3RvciBiZWxvbmdzIHRvIGEgdmFsaWQgc2VxdWVudGlhbCB6b25lCiYjNDM7ICogQGJkZXY6ICAgICAgIGJsb2NrIGRldmljZSB0byBjaGVjawomIzQzOyAqIEBzZWN0b3I6ICAgICBzZWN0b3IgbnVtYmVyCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBpZiBAc2VjdG9yIG9uIEBiZGV2IGlzIGNvbnRhaW5lZCBpbiBhIHNlcXVlbnRpYWwgd3JpdGUgcmVxdWlyZWQgem9uZQomIzQzOyAqIHRoYXQgaXMgbm90IG9mZmxpbmUgbm9yIHJlYWQtb25seS4KJiM0MzsgKi8KJiM0Mztib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcikKJiM0Mzt7CiYjNDM7CWVudW0gYmxrX3pvbmVfY29uZCBjb25kOwomIzQzOwl1OCB6czsKIAogCWlmICghYmRldl9pc196b25lZChiZGV2KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCXpvbmVzX2NvbmQgPSByY3VfZGVyZWZlcmVuY2UoZGlzay0mZ3Q7em9uZXNfY29uZCk7Ci0JaWYgKHpvbmVzX2NvbmQgJmFtcDsmYW1wOyB6bm8gJmx0OyBkaXNrLSZndDtucl96b25lcykKLQkJaXNfc2VxID0gem9uZXNfY29uZFt6bm9dICE9IEJMS19aT05FX0NPTkRfTk9UX1dQOwotCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi0mZ3Q7YmRfZGlzaywgc2VjdG9yKTsKJiM0MzsJaWYgKGJsa196c3RhdGVfaXNfY29udih6cykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gaXNfc2VxOwomIzQzOwljb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpOwomIzQzOwlyZXR1cm4gIWRpc2tfem9uZV9jb25kX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoY29uZCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTsKIAogLyoKICAqIFpvbmUgcmVwb3J0IGFyZ3VtZW50cyBmb3IgYmxvY2sgZGV2aWNlIGRyaXZlcnMgcmVwb3J0X3pvbmVzIG9wZXJhdGlvbi4KQEAgLTUwMCwxMiAmIzQzOzYxOSwxNyBAQCBzdGF0aWMgYm9vbCBkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlyZXR1cm4gendwbHVnLSZndDt3cF9vZmZzZXQgJmd0Oz0gZGlzay0mZ3Q7bGFzdF96b25lX2NhcGFjaXR5OwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWctJmd0O2NvbmQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJCQkJICAgc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpCiB7CiAJc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4ICp6b25lc19jb25kOwomIzQzOwl1OCAqem9uZXNfc3RhdGU7CiAJdW5zaWduZWQgaW50IGlkeCA9CiAJCWhhc2hfMzIoendwbHVnLSZndDt6b25lX25vLCBkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoX2JpdHMpOwogCkBAIC01MjQsMTUgJiM0Mzs2NDgsMTYgQEAgc3RhdGljIGJvb2wgZGlza19pbnNlcnRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAl9CiAKIAkvKgotCSAqIFNldCB0aGUgem9uZSBjb25kaXRpb246IGlmIHdlIGRvIG5vdCB5ZXQgaGF2ZSBhIHpvbmVzX2NvbmQgYXJyYXkKJiM0MzsJICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfc3RhdGUgYXJyYXkKIAkgKiBhdHRhY2hlZCB0byB0aGUgZGlzaywgdGhlbiB0aGlzIGlzIGEgem9uZSB3cml0ZSBwbHVnIGluc2VydCBmcm9tIHRoZQogCSAqIGZpcnN0IGNhbGwgdG8gYmxrX3JldmFsaWRhdGVfZGlza196b25lcygpLCBpbiB3aGljaCBjYXNlIHRoZSB6b25lIGlzCiAJICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLgogCSAqLwotCXpvbmVzX2NvbmQgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay0mZ3Q7em9uZXNfY29uZCwKJiM0MzsJem9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay0mZ3Q7em9uZXNfc3RhdGUsCiAJCQkJbG9ja2RlcF9pc19oZWxkKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrKSk7Ci0JaWYgKHpvbmVzX2NvbmQpCi0JCXp3cGx1Zy0mZ3Q7Y29uZCA9IHpvbmVzX2NvbmRbendwbHVnLSZndDt6b25lX25vXTsKJiM0MzsJaWYgKHpvbmVzX3N0YXRlKQomIzQzOwkJendwbHVnLSZndDtjb25kID0KJiM0MzsJCQlibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6b25lc19zdGF0ZVt6d3BsdWctJmd0O3pvbmVfbm9dKTsKIAllbHNlCiAJCXp3cGx1Zy0mZ3Q7Y29uZCA9IEJMS19aT05FX0NPTkRfQUNUSVZFOwogCkBAIC01NzQsNiAmIzQzOzY5OSwyNiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqZGlza19nZXRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlyZXR1cm4gZGlza19nZXRfaGFzaGVkX3pvbmVfd3BsdWcoZGlzaywgc2VjdG9yKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKJiM0MzsJCQkJICAgICB2b2lkICgqYWN0b3IpKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqLAomIzQzOwkJCQkJCSAgIHZvaWQgKiksCiYjNDM7CQkJCSAgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKJiM0MzsJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBkaXNrX3pvbmVfd3BsdWdzX2hhc2hfc2l6ZShkaXNrKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh6d3BsdWcsICZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaFtpXSwKJiM0MzsJCQkJCSBub2RlKQomIzQzOwkJCWFjdG9yKHp3cGx1ZywgZGF0YSk7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfd3BsdWdfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpCiB7CiAJc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcgPQpAQCAtNTkyLDkgJiM0Mzs3MzcsOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKIAlXQVJOX09OX09OQ0UoIWJpb19saXN0X2VtcHR5KCZhbXA7endwbHVnLSZndDtiaW9fbGlzdCkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTsKLQlibGtfem9uZV9zZXRfY29uZChyY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay0mZ3Q7em9uZXNfY29uZCwKJiM0MzsJYmxrX3pzdGF0ZV9zZXQocmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stJmd0O3pvbmVzX3N0YXRlLAogCQkJCWxvY2tkZXBfaXNfaGVsZCgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hfbG9jaykpLAotCQkJICB6d3BsdWctJmd0O3pvbmVfbm8sIHp3cGx1Zy0mZ3Q7Y29uZCk7CiYjNDM7CQkgICAgICAgendwbHVnLSZndDt6b25lX25vLCB6d3BsdWctJmd0O2NvbmQsIDApOwogCWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3p3cGx1Zy0mZ3Q7bm9kZSk7CiAJYXRvbWljX2RlYygmYW1wO2Rpc2stJmd0O25yX3pvbmVfd3BsdWdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7CkBAIC02MDgsNiAmIzQzOzc1Myw1MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19wdXRfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKIAkJZGlza19mcmVlX3pvbmVfd3BsdWcoendwbHVnKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGJpbyAqYmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctJmd0O2Rpc2stJmd0O3F1ZXVlOwomIzQzOwomIzQzOwliaW9fY2xlYXJfZmxhZyhiaW8sIEJJT19aT05FX1dSSVRFX1BMVUdHSU5HKTsKJiM0MzsJYmlvX2lvX2Vycm9yKGJpbyk7CiYjNDM7CWRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTsKJiM0MzsJLyogRHJvcCB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGRpc2tfem9uZV93cGx1Z19hZGRfYmlvKCkuICovCiYjNDM7CWJsa19xdWV1ZV9leGl0KHEpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gendwbHVnLSZndDtkaXNrOwomIzQzOwlzdHJ1Y3QgYmlvICpiaW87CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDt6d3BsdWctJmd0O2xvY2spOwomIzQzOwomIzQzOwlpZiAoYmlvX2xpc3RfZW1wdHkoJmFtcDt6d3BsdWctJmd0O2Jpb19saXN0KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0OyVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcbiYjMzQ7LAomIzQzOwkJCSAgICB6d3BsdWctJmd0O2Rpc2stJmd0O2Rpc2tfbmFtZSwgendwbHVnLSZndDt6b25lX25vKTsKJiM0MzsJd2hpbGUgKChiaW8gPSBiaW9fbGlzdF9wb3AoJmFtcDt6d3BsdWctJmd0O2Jpb19saXN0KSkpCiYjNDM7CQlibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3IoendwbHVnLCBiaW8pOwomIzQzOwomIzQzOwl6d3BsdWctJmd0O2ZsYWdzICZhbXA7PSB+QkxLX1pPTkVfV1BMVUdfUExVR0dFRDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZQomIzQzOwkgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlCiYjNDM7CSAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay0mZ3Q7cXVldWUpKSB7CiYjNDM7CQlzcGluX2xvY2soJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0X2xvY2spOwomIzQzOwkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7endwbHVnLSZndDtlbnRyeSkpIHsKJiM0MzsJCQlsaXN0X2RlbF9pbml0KCZhbXA7endwbHVnLSZndDtlbnRyeSk7CiYjNDM7CQkJZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpOwomIzQzOwkJfQomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0X2xvY2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlbgogICogdGhlIHpvbmUgd3JpdGUgcGx1ZyB3YXMgYWRkZWQgdG8gdGhlIGhhc2ggdGFibGUuIFRoZSB6b25lIHdyaXRlIHBsdWcgd2lsbCBiZQpAQCAtNjI1LDYgJiM0Mzs4MTcsMTIgQEAgc3RhdGljIHZvaWQgZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZykKIAogc3RhdGljIGlubGluZSBib29sIGRpc2tfY2hlY2tfem9uZV93cGx1Z19kZWFkKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKQogewomIzQzOwlpZiAoZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkgewomIzQzOwkJZGlza196b25lX3dwbHVnX2Fib3J0KHp3cGx1Zyk7CiYjNDM7CQlkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7CiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwogCWlmICghKHp3cGx1Zy0mZ3Q7ZmxhZ3MgJmFtcDsgQkxLX1pPTkVfV1BMVUdfREVBRCkpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtNzA4LDUzICYjNDM7OTA2LDYgQEAgc3RhdGljIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqZGlza19nZXRfb3JfYWxsb2Nfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlyZXR1cm4gendwbHVnOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLAotCQkJCQkgICAgICAgc3RydWN0IGJpbyAqYmlvKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gendwbHVnLSZndDtkaXNrLSZndDtxdWV1ZTsKLQotCWJpb19jbGVhcl9mbGFnKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpOwotCWJpb19pb19lcnJvcihiaW8pOwotCWRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTsKLQkvKiBEcm9wIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZGlza196b25lX3dwbHVnX2FkZF9iaW8oKS4gKi8KLQlibGtfcXVldWVfZXhpdChxKTsKLX0KLQotLyoKLSAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLgotICovCi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfYWJvcnQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSB6d3BsdWctJmd0O2Rpc2s7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO3p3cGx1Zy0mZ3Q7bG9jayk7Ci0KLQlpZiAoYmlvX2xpc3RfZW1wdHkoJmFtcDt6d3BsdWctJmd0O2Jpb19saXN0KSkKLQkJcmV0dXJuOwotCi0JcHJfd2Fybl9yYXRlbGltaXRlZCgmIzM0OyVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcbiYjMzQ7LAotCQkJICAgIHp3cGx1Zy0mZ3Q7ZGlzay0mZ3Q7ZGlza19uYW1lLCB6d3BsdWctJmd0O3pvbmVfbm8pOwotCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZhbXA7endwbHVnLSZndDtiaW9fbGlzdCkpKQotCQlibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3IoendwbHVnLCBiaW8pOwotCi0JendwbHVnLSZndDtmbGFncyAmYW1wOz0gfkJMS19aT05FX1dQTFVHX1BMVUdHRUQ7Ci0KLQkvKgotCSAqIElmIHdlIGFyZSB1c2luZyB0aGUgcGVyIGRpc2sgem9uZSB3cml0ZSBwbHVncyB3b3JrZXIgdGhyZWFkLCByZW1vdmUKLQkgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlCi0JICogdG9vayB3aGVuIHRoZSB6b25lIHdyaXRlIHBsdWcgd2FzIGFkZGVkIHRvIHRoYXQgbGlzdC4KLQkgKi8KLQlpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay0mZ3Q7cXVldWUpKSB7Ci0JCXNwaW5fbG9jaygmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2xpc3RfbG9jayk7Ci0JCWlmICghbGlzdF9lbXB0eSgmYW1wO3p3cGx1Zy0mZ3Q7ZW50cnkpKSB7Ci0JCQlsaXN0X2RlbF9pbml0KCZhbXA7endwbHVnLSZndDtlbnRyeSk7Ci0JCQlkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0X2xvY2spOwotCX0KLX0KLQogLyoKICAqIFVwZGF0ZSBhIHpvbmUgd3JpdGUgcGx1ZyBjb25kaXRpb24gYmFzZWQgb24gdGhlIHdyaXRlIHBvaW50ZXIgb2Zmc2V0LgogICovCkBAIC03ODUsOCAmIzQzOzkzNiwxMCBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAogCS8qIFVwZGF0ZSB0aGUgem9uZSB3cml0ZSBwb2ludGVyIGFuZCBhYm9ydCBhbGwgcGx1Z2dlZCBCSU9zLiAqLwogCXp3cGx1Zy0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURTsKLQl6d3BsdWctJmd0O3dwX29mZnNldCA9IHdwX29mZnNldDsKLQlkaXNrX3pvbmVfd3BsdWdfdXBkYXRlX2NvbmQoZGlzaywgendwbHVnKTsKJiM0MzsJaWYgKCFkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKSB7CiYjNDM7CQl6d3BsdWctJmd0O3dwX29mZnNldCA9IHdwX29mZnNldDsKJiM0MzsJCWRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpOwomIzQzOwl9CiAKIAlkaXNrX3pvbmVfd3BsdWdfYWJvcnQoendwbHVnKTsKIAlpZiAoIXp3cGx1Zy0mZ3Q7d3Bfb2Zmc2V0IHx8IGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpCkBAIC04MTYsOCAmIzQzOzk2OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmxrX3pvbmVfd3Bfb2Zmc2V0KHN0cnVjdCBibGtfem9uZSAqem9uZSkKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLAotCQkJCQkJICAgc3RydWN0IGJsa196b25lICp6b25lKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkgICAgICAgc3RydWN0IGJsa196b25lICp6b25lKQogewogCXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwogCXVuc2lnbmVkIGludCB3cF9vZmZzZXQgPSBibGtfem9uZV93cF9vZmZzZXQoem9uZSk7CkBAIC04MjksNiAmIzQzOzk4MiwxMCBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRpc2tfem9uZV93cGx1Z19zeW5jX3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt6d3BsdWctJmd0O2xvY2ssIGZsYWdzKTsKIAkJaWYgKHp3cGx1Zy0mZ3Q7ZmxhZ3MgJmFtcDsgQkxLX1pPTkVfV1BMVUdfTkVFRF9XUF9VUERBVEUpCiAJCQlkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChkaXNrLCB6d3BsdWcsIHdwX29mZnNldCk7CiYjNDM7CQlpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLSZndDtjb25kKSkgewomIzQzOwkJCXp3cGx1Zy0mZ3Q7Y29uZCA9IHpvbmUtJmd0O2NvbmQ7CiYjNDM7CQkJZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpOwomIzQzOwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7CiAJCWRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTsKIAl9CkBAIC04NzEsNyAmIzQzOzEwMjgsNyBAQCBpbnQgZGlza19yZXBvcnRfem9uZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IGJsa196b25lICp6b25lLAogCX0KIAogCWlmIChkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoKQotCQlkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7CiYjNDM7CQlkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZShkaXNrLCB6b25lKTsKIAogCWlmIChhcmdzICZhbXA7JmFtcDsgYXJncy0mZ3Q7Y2IpCiAJCXJldHVybiBhcmdzLSZndDtjYih6b25lLCBpZHgsIGFyZ3MtJmd0O2RhdGEpOwpAQCAtOTQwLDcgJiM0MzsxMDk3LDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKIAlzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBiZGV2X3pvbmVfc2VjdG9ycyhiZGV2KTsKIAlzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4ICp6b25lc19jb25kOwomIzQzOwl1OCAqem9uZXNfc3RhdGUsIHpzOwogCiAJaWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC05NTUsMTIgJiM0MzsxMTEyLDE4IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsCiAJCXJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQl6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stJmd0O3pvbmVzX2NvbmQpOwotCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfY29uZCkgewomIzQzOwl6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLSZndDt6b25lc19zdGF0ZSk7CiYjNDM7CWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfc3RhdGUpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTsKIAl9Ci0Jem9uZS0mZ3Q7Y29uZCA9IHpvbmVzX2NvbmRbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildOwomIzQzOwomIzQzOwl6cyA9IHpvbmVzX3N0YXRlW2Rpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpXTsKJiM0MzsJem9uZS0mZ3Q7Y29uZCA9IGJsa196c3RhdGVfdG9fem9uZV9jb25kKHpzKTsKJiM0MzsJaWYgKGJsa196c3RhdGVfaXNfY29udih6cykpCiYjNDM7CQl6b25lLSZndDt0eXBlID0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw7CiYjNDM7CWVsc2UKJiM0MzsJCXpvbmUtJmd0O3R5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXpvbmUtJmd0O3N0YXJ0ID0gc2VjdG9yOwpAQCAtOTcwLDggJiM0MzsxMTMzLDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKIAkgKiBJZiB0aGlzIGlzIGEgY29udmVudGlvbmFsIHpvbmUsIHdlIGRvIG5vdCBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIGFuZAogCSAqIGNhbiByZXBvcnQgdGhlIHpvbmUgaW1tZWRpYXRlbHkuCiAJICovCi0JaWYgKHpvbmUtJmd0O2NvbmQgPT0gQkxLX1pPTkVfQ09ORF9OT1RfV1ApIHsKLQkJem9uZS0mZ3Q7dHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMOwomIzQzOwlpZiAoem9uZS0mZ3Q7dHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkgewogCQl6b25lLSZndDtjYXBhY2l0eSA9IHpvbmVfc2VjdG9yczsKIAkJem9uZS0mZ3Q7d3AgPSBVTExPTkdfTUFYOwogCQlyZXR1cm4gMDsKQEAgLTk4MiwxNCAmIzQzOzExNDQsMTIgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwKIAkgKiBvZmZsaW5lLCBvbmx5IHNldCB0aGUgem9uZSB3cml0ZSBwb2ludGVyIHRvIGFuIGludmFsaWQgdmFsdWUgYW5kCiAJICogcmVwb3J0IHRoZSB6b25lLgogCSAqLwotCXpvbmUtJmd0O3R5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTsKIAlpZiAoZGlza196b25lX2lzX2xhc3QoZGlzaywgem9uZSkpCiAJCXpvbmUtJmd0O2NhcGFjaXR5ID0gZGlzay0mZ3Q7bGFzdF96b25lX2NhcGFjaXR5OwogCWVsc2UKIAkJem9uZS0mZ3Q7Y2FwYWNpdHkgPSBkaXNrLSZndDt6b25lX2NhcGFjaXR5OwogCi0JaWYgKHpvbmUtJmd0O2NvbmQgPT0gQkxLX1pPTkVfQ09ORF9SRUFET05MWSB8fAotCSAgICB6b25lLSZndDtjb25kID09IEJMS19aT05FX0NPTkRfT0ZGTElORSkgewomIzQzOwlpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLSZndDtjb25kKSkgewogCQl6b25lLSZndDt3cCA9IFVMTE9OR19NQVg7CiAJCXJldHVybiAwOwogCX0KQEAgLTExMDgsMzQgJiM0MzsxMjY4LDMyIEBAIHN0YXRpYyB2b2lkIGJsa196b25lX3Jlc2V0X2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgZGlza196b25lX3dwbHVnX3Jlc2V0X3dwKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDt6d3BsdWctJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoendwbHVnLSZndDtkaXNrLCB6d3BsdWcsIDApOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgYmxrX3pvbmVfcmVzZXRfYWxsX2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiaW8tJmd0O2JpX2JkZXYtJmd0O2JkX2Rpc2s7Ci0Jc2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7Ci0Jc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzZWN0b3JfdCBzZWN0b3I7Ci0JdW5zaWduZWQgaW50IGk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmFtcDtkaXNrLSZndDtucl96b25lX3dwbHVncykpIHsKLQkJLyogVXBkYXRlIHRoZSBjb25kaXRpb24gb2YgYWxsIHpvbmUgd3JpdGUgcGx1Z3MuICovCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpJiM0MzsmIzQzOykgewotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywKLQkJCQkJCSAmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hbaV0sCi0JCQkJCQkgbm9kZSkgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7Ci0JCQkJZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoZGlzaywgendwbHVnLCAwKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7Ci0JCQl9Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQomIzQzOwkvKiBVcGRhdGUgdGhlIGNvbmRpdGlvbiBvZiBhbGwgem9uZSB3cml0ZSBwbHVncy4gKi8KJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7ZGlzay0mZ3Q7bnJfem9uZV93cGx1Z3MpKQomIzQzOwkJZGlza19mb3JfYWxsX3pvbmVfd3BsdWdzKGRpc2ssIGRpc2tfem9uZV93cGx1Z19yZXNldF93cCwgTlVMTCk7CiAKIAkvKiBVcGRhdGUgdGhlIGNhY2hlZCB6b25lIGNvbmRpdGlvbnMuICovCi0JZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgJmx0OyBjYXBhY2l0eTsKLQkgICAgIHNlY3RvciAmIzQzOz0gYmRldl96b25lX3NlY3RvcnMoYmlvLSZndDtiaV9iZGV2KSkKJiM0MzsJZm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgJmx0OyBnZXRfY2FwYWNpdHkoZGlzayk7CiYjNDM7CSAgICAgc2VjdG9yICYjNDM7PSBiZGV2X3pvbmVfc2VjdG9ycyhiaW8tJmd0O2JpX2JkZXYpKSB7CiYjNDM7CQlpZiAoIWRpc2tfem9uZV9pc19zZXEoZGlzaywgc2VjdG9yKSB8fAomIzQzOwkJICAgIGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGRpc2ssIHNlY3RvcikpCiYjNDM7CQkJY29udGludWU7CiAJCWRpc2tfem9uZV9zZXRfY29uZChkaXNrLCBzZWN0b3IsIEJMS19aT05FX0NPTkRfRU1QVFkpOwomIzQzOwl9CiAJY2xlYXJfYml0KEdEX1pPTkVfQVBQRU5EX1VTRUQsICZhbXA7ZGlzay0mZ3Q7c3RhdGUpOwogfQogCkBAIC0xMzgxLDExICYjNDM7MTUzOSwxMiBAQCBzdGF0aWMgYm9vbCBibGtfem9uZV93cGx1Z19wcmVwYXJlX2JpbyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZywKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IHRoZSB1c2VyIGlzIG5vdCBhdHRlbXB0aW5nIHRvIHdyaXRlIHRvIGEgZnVsbCB6b25lLgotCSAqIFdlIGtub3cgc3VjaCBCSU8gd2lsbCBmYWlsLCBhbmQgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBvdmVyZmxvdyBvdXIKLQkgKiB3cml0ZSBwb2ludGVyIG9mZnNldCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgem9uZS4KJiM0MzsJICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seQomIzQzOwkgKiBvciBvZmZsaW5lIHpvbmUuIFdlIGtub3cgc3VjaCBCSU9zIHdpbGwgZmFpbCwgc28gdGhlcmUgaXMgbm8gcG9pbnQKJiM0MzsJICogaW4gaXNzdWluZyB0aGVtLgogCSAqLwotCWlmIChkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpKQomIzQzOwlpZiAoZGlza196b25lX3dwbHVnX2lzX2Z1bGwoZGlzaywgendwbHVnKSB8fAomIzQzOwkgICAgZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkgewpAQCAtMTQ0Miw3ICYjNDM7MTYwMSw3IEBAIHN0YXRpYyBib29sIGJsa196b25lX3dwbHVnX2hhbmRsZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBucl9zZWdzKQogCX0KIAogCS8qIENvbnZlbnRpb25hbCB6b25lcyBkbyBub3QgbmVlZCB3cml0ZSBwbHVnZ2luZy4gKi8KLQlpZiAoIWJkZXZfem9uZV9pc19zZXEoYmlvLSZndDtiaV9iZGV2LCBzZWN0b3IpKSB7CiYjNDM7CWlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpKSB7CiAJCS8qIFpvbmUgYXBwZW5kIHRvIGNvbnZlbnRpb25hbCB6b25lcyBpcyBub3QgYWxsb3dlZC4gKi8KIAkJaWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkgewogCQkJYmlvX2lvX2Vycm9yKGJpbyk7CkBAIC0xODU0LDEyICYjNDM7MjAxMywyMCBAQCBzdGF0aWMgaW50IGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyKHZvaWQgKmRhdGEpCiAKIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewomIzQzOwlhdG9taWNfc2V0KCZhbXA7ZGlzay0mZ3Q7bnJfem9uZV93cGx1Z3MsIDApOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19saXN0KTsKIAlpbml0X2NvbXBsZXRpb24oJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc193b3JrZXJfYmlvX2RvbmUpOwogfQogCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9ICZhbXA7ZGlzay0mZ3Q7cXVldWUtJmd0O2xpbWl0czsKJiM0MzsKJiM0MzsJcmV0dXJuIERJVl9ST1VORF9VUF9VTEwoZ2V0X2NhcGFjaXR5KGRpc2spLCBsaW0tJmd0O2NodW5rX3NlY3RvcnMpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBGb3IgdGhlIHNpemUgb2YgYSBkaXNrIHpvbmUgd3JpdGUgcGx1ZyBoYXNoIHRhYmxlLCB1c2UgdGhlIHNpemUgb2YgdGhlCiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmQKQEAgLTE4NjksMTMgJiM0MzsyMDM2LDIxIEBAIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogI2RlZmluZSBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTCQk5CiAjZGVmaW5lIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFCTEyOAogCi1zdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKQomIzQzO3N0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKLQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltID0gJmFtcDtkaXNrLSZndDtxdWV1ZS0mZ3Q7bGltaXRzOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfem9uZXMgPSBkaXNrX2dldF9ucl96b25lcyhkaXNrKTsKJiM0MzsJdW5zaWduZWQgaW50IHBvb2xfc2l6ZSwgaTsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCWF0b21pY19zZXQoJmFtcDtkaXNrLSZndDtucl96b25lX3dwbHVncywgMCk7CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBkZXZpY2UgaGFzIG5vIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGFuZCBhY3RpdmUKJiM0MzsJICogem9uZXMsIHVzZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRS4KJiM0MzsJICovCiYjNDM7CXBvb2xfc2l6ZSA9IG1heChsaW0tJmd0O21heF9vcGVuX3pvbmVzLCBsaW0tJmd0O21heF9hY3RpdmVfem9uZXMpOwomIzQzOwlpZiAoIXBvb2xfc2l6ZSkKJiM0MzsJCXBvb2xfc2l6ZSA9IG1pbihCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSwgbnJfem9uZXMpOwomIzQzOwogCWRpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hfYml0cyA9CiAJCW1pbihpbG9nMihwb29sX3NpemUpICYjNDM7IDEsIEJMS19aT05FX1dQTFVHX01BWF9IQVNIX0JJVFMpOwogCkBAIC0xODkzLDIxICYjNDM7MjA2OCw2IEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpCiAJCWdvdG8gZnJlZV9oYXNoOwogCi0JLyoKLQkgKiBXZSBtYXkgYWxyZWFkeSBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBhcyB0aGlzIGZ1bmN0aW9uIG1heQotCSAqIGJlIGNhbGxlZCBhZnRlciBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoKSwgd2hpY2ggZG9lcyBub3QgZGVzdHJveQotCSAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXQKLQkgKiBkaXNrX3JlbGVhc2UoKSB0aW1lKS4KLQkgKi8KLQlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKSB7Ci0JCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxID0KLQkJCWFsbG9jX3dvcmtxdWV1ZSgmIzM0OyVzX3p3cGx1Z3MmIzM0OywKLQkJCQkJV1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLAotCQkJCQlwb29sX3NpemUsIGRpc2stJmd0O2Rpc2tfbmFtZSk7Ci0JCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpCi0JCQlnb3RvIGRlc3Ryb3lfcG9vbDsKLQl9Ci0KIAlkaXNrLSZndDt6b25lX3dwbHVnc193b3JrZXIgPQogCQlrdGhyZWFkX2NyZWF0ZShkaXNrX3pvbmVfd3BsdWdzX3dvcmtlciwgZGlzaywKIAkJCSAgICAgICAmIzM0OyVzX3p3cGx1Z3Nfd29ya2VyJiMzNDssIGRpc2stJmd0O2Rpc2tfbmFtZSk7CkBAIC0xOTE4LDggJiM0MzsyMDc4LDE4IEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAl9CiAJd2FrZV91cF9wcm9jZXNzKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcik7CiAKJiM0MzsJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPQomIzQzOwkJYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7JXNfendwbHVncyYjMzQ7LAomIzQzOwkJCQlXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsCiYjNDM7CQkJCXBvb2xfc2l6ZSwgZGlzay0mZ3Q7ZGlza19uYW1lKTsKJiM0MzsJaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc193cSkKJiM0MzsJCWdvdG8gc3RvcF93b3JrZXI7CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztzdG9wX3dvcmtlcjoKJiM0MzsJa3RocmVhZF9zdG9wKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcik7CiYjNDM7CWRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlciA9IE5VTEw7CiBkZXN0cm95X3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KGRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wpOwogCWRpc2stJmd0O3pvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMOwpAQCAtMTk2MywxOSAmIzQzOzIxMzMsMTkgQEAgc3RhdGljIHZvaWQgZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoc3RydWN0IGdlbmRpc2sgKmRpc2spCiAJZGlzay0mZ3Q7em9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKQomIzQzO3N0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfc3RhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7Ci0Jem9uZXNfY29uZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay0mZ3Q7em9uZXNfY29uZCwgem9uZXNfY29uZCwKJiM0MzsJem9uZXNfc3RhdGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGRpc2stJmd0O3pvbmVzX3N0YXRlLCB6b25lc19zdGF0ZSwKIAkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDtkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoX2xvY2spKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQlrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTsKJiM0MzsJa2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpOwogfQogCi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiYjNDM7dm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCiB7CiAJaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dvcmtlcikgewogCQlrdGhyZWFkX3N0b3AoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd29ya2VyKTsKQEAgLTE5ODMsMzAgJiM0MzsyMTUzLDIyIEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAl9CiAJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZhbXA7ZGlzay0mZ3Q7em9uZV93cGx1Z3NfbGlzdCkpOwogCi0JaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKQotCQlkcmFpbl93b3JrcXVldWUoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpOwomIzQzOwlpZiAoZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EpIHsKJiM0MzsJCWRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKTsKJiM0MzsJCWRpc2stJmd0O3pvbmVfd3BsdWdzX3dxID0gTlVMTDsKJiM0MzsJfQogCiAJZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7CiAKLQlkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIE5VTEwpOwomIzQzOwlkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBOVUxMKTsKIAlkaXNrLSZndDt6b25lX2NhcGFjaXR5ID0gMDsKIAlkaXNrLSZndDtsYXN0X3pvbmVfY2FwYWNpdHkgPSAwOwogCWRpc2stJmd0O25yX3pvbmVzID0gMDsKIH0KIAotdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spCi17Ci0JaWYgKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKSB7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stJmd0O3pvbmVfd3BsdWdzX3dxKTsKLQkJZGlzay0mZ3Q7em9uZV93cGx1Z3Nfd3EgPSBOVUxMOwotCX0KLQotCWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKLX0KLQogc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyB7CiAJc3RydWN0IGdlbmRpc2sJKmRpc2s7Ci0JdTgJCSp6b25lc19jb25kOwomIzQzOwl1OAkJKnpvbmVzX3N0YXRlOwogCXVuc2lnbmVkIGludAlucl96b25lczsKIAl1bnNpZ25lZCBpbnQJbnJfY29udl96b25lczsKIAl1bnNpZ25lZCBpbnQJem9uZV9jYXBhY2l0eTsKQEAgLTIwMTQsNDkgJiM0MzsyMTc2LDI2IEBAIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgewogCXNlY3Rvcl90CXNlY3RvcjsKIH07CiAKLXN0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAomIzQzO3N0YXRpYyBpbnQgZGlza19pbml0X3JldmFsaWRhdGVfYXJncyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJCQlzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKQogewotCXN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9ICZhbXA7ZGlzay0mZ3Q7cXVldWUtJmd0O2xpbWl0czsKLQl1bnNpZ25lZCBpbnQgcG9vbF9zaXplOwotCWludCByZXQgPSAwOwotCiAJYXJncy0mZ3Q7ZGlzayA9IGRpc2s7Ci0JYXJncy0mZ3Q7bnJfem9uZXMgPQotCQlESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLSZndDtjaHVua19zZWN0b3JzKTsKJiM0MzsJYXJncy0mZ3Q7bnJfem9uZXMgPSBkaXNrX2dldF9ucl96b25lcyhkaXNrKTsKIAogCS8qIENhY2hlZCB6b25lIGNvbmRpdGlvbnM6IDEgYnl0ZSBwZXIgem9uZSAqLwotCWFyZ3MtJmd0O3pvbmVzX2NvbmQgPSBremFsbG9jKGFyZ3MtJmd0O25yX3pvbmVzLCBHRlBfTk9JTyk7Ci0JaWYgKCFhcmdzLSZndDt6b25lc19jb25kKQomIzQzOwlhcmdzLSZndDt6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy0mZ3Q7bnJfem9uZXMsIEdGUF9OT0lPKTsKJiM0MzsJaWYgKCFhcmdzLSZndDt6b25lc19zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIWRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIElmIHRoZSBkZXZpY2UgaGFzIG5vIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGFuZCBhY3RpdmUKLQkgKiB6b25lcywgdXNlIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLgotCSAqLwotCXBvb2xfc2l6ZSA9IG1heChsaW0tJmd0O21heF9vcGVuX3pvbmVzLCBsaW0tJmd0O21heF9hY3RpdmVfem9uZXMpOwotCWlmICghcG9vbF9zaXplKQotCQlwb29sX3NpemUgPQotCQkJbWluKEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLCBhcmdzLSZndDtucl96b25lcyk7Ci0KLQlpZiAoIWRpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2gpIHsKLQkJcmV0ID0gZGlza19hbGxvY196b25lX3Jlc291cmNlcyhkaXNrLCBwb29sX3NpemUpOwotCQlpZiAocmV0KQotCQkJa2ZyZWUoYXJncy0mZ3Q7em9uZXNfY29uZCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBVcGRhdGUgdGhlIGRpc2sgem9uZSByZXNvdXJjZXMgaW5mb3JtYXRpb24gYW5kIGRldmljZSBxdWV1ZSBsaW1pdHMuCi0gKiBUaGUgZGlzayBxdWV1ZSBpcyBmcm96ZW4gd2hlbiB0aGlzIGlzIGV4ZWN1dGVkLgomIzQzOyAqIFJldmFsaWRhdGUgYW5kIHVwZGF0ZSB0aGUgZGlzayB6b25lIHJlc291cmNlcyBpbmZvcm1hdGlvbiBhbmQgZGV2aWNlIHF1ZXVlCiYjNDM7ICogbGltaXRzLgogICovCi1zdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLAotCQkJCSAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpCiYjNDM7c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiYjNDM7CQkJCQkgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpCiB7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLSZndDtxdWV1ZTsKIAl1bnNpZ25lZCBpbnQgbnJfc2VxX3pvbmVzOwpAQCAtMjA2NCwyMyAmIzQzOzIyMDMsMjggQEAgc3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTsKIAlpbnQgcmV0ID0gMDsKIAomIzQzOwkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHkgaGFzIGJlZW4gY2hlY2tlZC4gKi8KJiM0MzsJaWYgKGFyZ3MtJmd0O3NlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHsKJiM0MzsJCXByX3dhcm4oJiMzNDslczogTWlzc2luZyB6b25lcyBmcm9tIHNlY3RvciAlbGx1XG4mIzM0OywKJiM0MzsJCQlkaXNrLSZndDtkaXNrX25hbWUsIGFyZ3MtJmd0O3NlY3Rvcik7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoYXJncy0mZ3Q7bnJfY29udl96b25lcyAmZ3Q7PSBhcmdzLSZndDtucl96b25lcykgewomIzQzOwkJcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIG51bWJlciBvZiBjb252ZW50aW9uYWwgem9uZXMgJXUgLyAldVxuJiMzNDssCiYjNDM7CQkJZGlzay0mZ3Q7ZGlza19uYW1lLCBhcmdzLSZndDtucl9jb252X3pvbmVzLCBhcmdzLSZndDtucl96b25lcyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwogCWxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7CiAKIAltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7CiAKIAlkaXNrLSZndDtucl96b25lcyA9IGFyZ3MtJmd0O25yX3pvbmVzOwotCWlmIChhcmdzLSZndDtucl9jb252X3pvbmVzICZndDs9IGRpc2stJmd0O25yX3pvbmVzKSB7Ci0JCXF1ZXVlX2xpbWl0c19jYW5jZWxfdXBkYXRlKHEpOwotCQlwcl93YXJuKCYjMzQ7JXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XG4mIzM0OywKLQkJCWRpc2stJmd0O2Rpc2tfbmFtZSwgYXJncy0mZ3Q7bnJfY29udl96b25lcywgZGlzay0mZ3Q7bnJfem9uZXMpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIHVuZnJlZXplOwotCX0KLQogCWRpc2stJmd0O3pvbmVfY2FwYWNpdHkgPSBhcmdzLSZndDt6b25lX2NhcGFjaXR5OwogCWRpc2stJmd0O2xhc3Rfem9uZV9jYXBhY2l0eSA9IGFyZ3MtJmd0O2xhc3Rfem9uZV9jYXBhY2l0eTsKLQlkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIGFyZ3MtJmd0O3pvbmVzX2NvbmQpOwotCWFyZ3MtJmd0O3pvbmVzX2NvbmQgPSBOVUxMOwomIzQzOwlkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBhcmdzLSZndDt6b25lc19zdGF0ZSk7CiYjNDM7CWFyZ3MtJmd0O3pvbmVzX3N0YXRlID0gTlVMTDsKIAogCS8qCiAJICogU29tZSBkZXZpY2VzIGNhbiBhZHZlcnRpc2Ugem9uZSByZXNvdXJjZSBsaW1pdHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4KQEAgLTIxMjAsNDggJiM0MzsyMjY0LDU5IEBAIHN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssCiBjb21taXQ6CiAJcmV0ID0gcXVldWVfbGltaXRzX2NvbW1pdF91cGRhdGUocSwgJmFtcDtsaW0pOwogCi11bmZyZWV6ZToKIAlibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NvbmQoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LAotCQkJCSAgICBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKQomIzQzO3N0YXRpYyB2b2lkIGRpc2tfZHJvcF96b25lX3dwbHVnKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLCB2b2lkICpkYXRhKQogewotCWVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gem9uZS0mZ3Q7Y29uZDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIENoZWNrIHRoYXQgdGhlIHpvbmUgY29uZGl0aW9uIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgem9uZSB0eXBlLiAqLwotCXN3aXRjaCAoY29uZCkgewotCWNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6Ci0JCWlmICh6b25lLSZndDt0eXBlICE9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMKQotCQkJZ290byBpbnZhbGlkX2NvbmRpdGlvbjsKLQkJYnJlYWs7Ci0JY2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOgotCWNhc2UgQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjoKLQljYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOgotCWNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWToKLQljYXNlIEJMS19aT05FX0NPTkRfRlVMTDoKLQljYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORToKLQljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6Ci0JCWlmICh6b25lLSZndDt0eXBlICE9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRKQotCQkJZ290byBpbnZhbGlkX2NvbmRpdGlvbjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JVhcbiYjMzQ7LAotCQkJYXJncy0mZ3Q7ZGlzay0mZ3Q7ZGlza19uYW1lLCBjb25kKTsKLQkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7endwbHVnLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpOwomIzQzOwlkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt6d3BsdWctJmd0O2xvY2ssIGZsYWdzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfY2FwYWNpdHkoc3RydWN0IGdlbmRpc2sgKmRpc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSAmYW1wO2Rpc2stJmd0O3F1ZXVlLSZndDtsaW1pdHM7CiYjNDM7CXNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGxpbS0mZ3Q7Y2h1bmtfc2VjdG9yczsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7CiYjNDM7CWludCByZXQgPSAtRU5PREVWOwomIzQzOwomIzQzOwlpZiAoIWdldF9jYXBhY2l0eShkaXNrKSkKJiM0MzsJCWdvdG8gZHJvcF9hbGxfendwbHVnczsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0CiYjNDM7CSAqIHRoZSBtYXggem9uZSBhcHBlbmQgbGltaXQgaXMgc2V0LgomIzQzOwkgKi8KJiM0MzsJaWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkgewomIzQzOwkJcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxuJiMzNDssCiYjNDM7CQkJZGlzay0mZ3Q7ZGlza19uYW1lLCB6b25lX3NlY3RvcnMpOwomIzQzOwkJZ290byBkcm9wX2FsbF96d3BsdWdzOwogCX0KIAotCWJsa196b25lX3NldF9jb25kKGFyZ3MtJmd0O3pvbmVzX2NvbmQsIGlkeCwgY29uZCk7CiYjNDM7CS8qCiYjNDM7CSAqIENoZWNrIGlmIHRoZSBjYXBhY2l0eSBoYXMgY2hhbmdlZC4gSWYgaXQgZGlkLCBhc3N1bWUgdGhhdCB0aGUgZGV2aWNlCiYjNDM7CSAqIHdhcyByZWZvcm1hdHRlZCBhbmQgdGhhdCBhbGwgc2VxdWVudGlhbCB6b25lcyBhcmUgbm93IGVtcHR5LiBTbyBkcm9wCiYjNDM7CSAqIGFsbCB6b25lIHdyaXRlIHBsdWcuCiYjNDM7CSAqLwomIzQzOwlpZiAoZGlzay0mZ3Q7bnJfem9uZXMgJmFtcDsmYW1wOyBkaXNrLSZndDtucl96b25lcyAhPSBucl96b25lcykgewomIzQzOwkJcHJfd2FybigmIzM0OyVzOiBOdW1iZXIgb2Ygem9uZXMgY2hhbmdlZCAoJXUgLSZndDsgJXUpXG4mIzM0OywKJiM0MzsJCQlkaXNrLSZndDtkaXNrX25hbWUsIGRpc2stJmd0O25yX3pvbmVzLCBucl96b25lcyk7CiYjNDM7CQlyZXQgPSAwOwomIzQzOwkJZ290byBkcm9wX2FsbF96d3BsdWdzOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIAotaW52YWxpZF9jb25kaXRpb246Ci0JcHJfd2FybigmIzM0OyVzOiBJbnZhbGlkIHpvbmUgY29uZGl0aW9uIDB4JXggZm9yIHR5cGUgMHgleFxuJiMzNDssCi0JCWFyZ3MtJmd0O2Rpc2stJmd0O2Rpc2tfbmFtZSwgY29uZCwgem9uZS0mZ3Q7dHlwZSk7CiYjNDM7ZHJvcF9hbGxfendwbHVnczoKJiM0MzsJZGlza19mb3JfYWxsX3pvbmVfd3BsdWdzKGRpc2ssIGRpc2tfZHJvcF96b25lX3dwbHVnLCBOVUxMKTsKIAotCXJldHVybiAtRU5PREVWOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX2NvbnZfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsCkBAIC0yMTY5LDEyICYjNDM7MjMyNCwyNiBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX2NvbnZfem9uZShzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsCiB7CiAJc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBhcmdzLSZndDtkaXNrOwogCiYjNDM7CS8qIENoZWNrIHRoZSB6b25lIGNvbmRpdGlvbi4gKi8KJiM0MzsJc3dpdGNoICh6b25lLSZndDtjb25kKSB7CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOgomIzQzOwljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXByX3dhcm4oJiMzNDslczogSW52YWxpZCBjb252LiB6b25lIGNvbmRpdGlvbiAweCVYIGF0IHNlY3RvciAlbGx1XG4mIzM0OywKJiM0MzsJCQlkaXNrLSZndDtkaXNrX25hbWUsIHpvbmUtJmd0O2NvbmQsIHpvbmUtJmd0O3N0YXJ0KTsKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiAJaWYgKHpvbmUtJmd0O2NhcGFjaXR5ICE9IHpvbmUtJmd0O2xlbikgewogCQlwcl93YXJuKCYjMzQ7JXM6IEludmFsaWQgY29udmVudGlvbmFsIHpvbmUgY2FwYWNpdHlcbiYjMzQ7LAogCQkJZGlzay0mZ3Q7ZGlza19uYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiYjNDM7CWJsa196c3RhdGVfc2V0KGFyZ3MtJmd0O3pvbmVzX3N0YXRlLCBpZHgsIHpvbmUtJmd0O2NvbmQsIEJMS19aRkxBR19DT05WKTsKJiM0MzsKIAlpZiAoZGlza196b25lX2lzX2xhc3QoZGlzaywgem9uZSkpCiAJCWFyZ3MtJmd0O2xhc3Rfem9uZV9jYXBhY2l0eSA9IHpvbmUtJmd0O2NhcGFjaXR5OwogCkBAIC0yMTkwLDYgJiM0MzsyMzU5LDI0IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfc2VxX3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LAogCXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwogCXVuc2lnbmVkIGludCB3cF9vZmZzZXQ7CiAKJiM0MzsJLyogQ2hlY2sgdGhlIHpvbmUgY29uZGl0aW9uLiAqLwomIzQzOwlzd2l0Y2ggKHpvbmUtJmd0O2NvbmQpIHsKJiM0MzsJY2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOgomIzQzOwljYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9DTE9TRUQ6CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWToKJiM0MzsJY2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6CiYjNDM7CWNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOgomIzQzOwljYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXByX3dhcm4oJiMzNDslczogSW52YWxpZCBzZXEuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcbiYjMzQ7LAomIzQzOwkJCWRpc2stJmd0O2Rpc2tfbmFtZSwgem9uZS0mZ3Q7Y29uZCwgem9uZS0mZ3Q7c3RhcnQpOwomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYmxrX3pzdGF0ZV9zZXQoYXJncy0mZ3Q7em9uZXNfc3RhdGUsIGlkeCwgem9uZS0mZ3Q7Y29uZCwgMCk7CiYjNDM7CiAJLyoKIAkgKiBSZW1lbWJlciB0aGUgY2FwYWNpdHkgb2YgdGhlIGZpcnN0IHNlcXVlbnRpYWwgem9uZSBhbmQgY2hlY2sKIAkgKiBpZiBpdCBpcyBjb25zdGFudCBmb3IgYWxsIHpvbmVzLCBpZ25vcmluZyB0aGUgbGFzdCB6b25lIGFzIGl0IGNhbiBiZQpAQCAtMjIxNCw3ICYjNDM7MjQwMSw3IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfc2VxX3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LAogCWlmICghZGlzay0mZ3Q7em9uZV93cGx1Z3NfaGFzaCkKIAkJcmV0dXJuIDA7CiAKLQl3cF9vZmZzZXQgPSBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7CiYjNDM7CXdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpOwogCWlmICghd3Bfb2Zmc2V0IHx8IHdwX29mZnNldCAmZ3Q7PSB6b25lLSZndDtjYXBhY2l0eSkKIAkJcmV0dXJuIDA7CiAKQEAgLTIyNzIsMTEgJiM0MzsyNDU5LDYgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCwKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JLyogQ2hlY2sgem9uZSBjb25kaXRpb24gKi8KLQlyZXQgPSBibGtfcmV2YWxpZGF0ZV96b25lX2NvbmQoem9uZSwgaWR4LCBhcmdzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJLyogQ2hlY2sgem9uZSB0eXBlICovCiAJc3dpdGNoICh6b25lLSZndDt0eXBlKSB7CiAJY2FzZSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTDoKQEAgLTIzMTMsMzkgJiM0MzsyNDk1LDM3IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsCiAgKi8KIGludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay0mZ3Q7cXVldWU7Ci0Jc2VjdG9yX3Qgem9uZV9zZWN0b3JzID0gcS0mZ3Q7bGltaXRzLmNodW5rX3NlY3RvcnM7Ci0Jc2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7CiAJc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyBhcmdzID0geyB9OwotCXVuc2lnbmVkIGludCBtZW1mbGFncywgbm9pb19mbGFnOwogCXN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgcmVwX2FyZ3MgPSB7CiAJCS5jYiA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY2IsCiAJCS5kYXRhID0gJmFtcDthcmdzLAogCX07Ci0JaW50IHJldCA9IC1FTk9NRU07CiYjNDM7CXVuc2lnbmVkIGludCBub2lvX2ZsYWc7CiYjNDM7CWludCByZXQ7CiAKLQlpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQocSkpKQomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQoZGlzay0mZ3Q7cXVldWUpKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoIWNhcGFjaXR5KQotCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJcmV0ID0gZGlza19yZXZhbGlkYXRlX2NhcGFjaXR5KGRpc2spOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAogCS8qCi0JICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0Ci0JICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuCiYjNDM7CSAqIEFsbG9jYXRlIHpvbmUgcmVzb3VyY2VzIGlmIHRoZXkgYXJlIG5lZWRlZCBhbmQgd2UgaGF2ZSBub3QgZG9uZQomIzQzOwkgKiBzbyB5ZXQsIGFuZCBpbml0aWFsaXplIHRoZSByZXZhbGlkYXRpb24gYXJndW1lbnRzIHBhc3NlZCB0byByZXBvcnQKJiM0MzsJICogem9uZXMuIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzCiYjNDM7CSAqIGlmIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuCiAJICovCi0JaWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkgewotCQlwcl93YXJuKCYjMzQ7JXM6IEludmFsaWQgbm9uIHBvd2VyIG9mIHR3byB6b25lIHNpemUgKCVsbHUpXG4mIzM0OywKLQkJCWRpc2stJmd0O2Rpc2tfbmFtZSwgem9uZV9zZWN0b3JzKTsKLQkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CW5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpOwomIzQzOwlpZiAoZGlza19uZWVkX3pvbmVfcmVzb3VyY2VzKGRpc2spICZhbXA7JmFtcDsgIWRpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2gpIHsKJiM0MzsJCXJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzayk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJbWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KIAl9CiAKLQkvKgotCSAqIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzIGlmCi0JICogR0ZQX05PSU8gd2FzIHNwZWNpZmllZC4KLQkgKi8KLQlub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTsKLQlyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgJmFtcDthcmdzKTsKJiM0MzsJcmV0ID0gZGlza19pbml0X3JldmFsaWRhdGVfYXJncyhkaXNrLCAmYW1wO2FyZ3MpOwogCWlmIChyZXQpIHsKIAkJbWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7CiAJCXJldHVybiByZXQ7CkBAIC0yMzU5LDMyICYjNDM7MjUzOSwxOCBAQCBpbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAltZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFnKTsKIAogCWlmIChyZXQgJmx0Oz0gMCkKLQkJZ290byBmcmVlX3Jlc291cmNlczsKJiM0MzsJCWdvdG8gZnJlZV9hcmdzOwogCi0JLyoKLQkgKiBJZiB6b25lcyB3aGVyZSByZXBvcnRlZCwgbWFrZSBzdXJlIHRoYXQgdGhlIGVudGlyZSBkaXNrIGNhcGFjaXR5Ci0JICogaGFzIGJlZW4gY2hlY2tlZC4KLQkgKi8KLQlpZiAoYXJncy5zZWN0b3IgIT0gY2FwYWNpdHkpIHsKLQkJcHJfd2FybigmIzM0OyVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcbiYjMzQ7LAotCQkJZGlzay0mZ3Q7ZGlza19uYW1lLCBhcmdzLnNlY3Rvcik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZnJlZV9yZXNvdXJjZXM7Ci0JfQotCi0JcmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgJmFtcDthcmdzKTsKJiM0MzsJcmV0ID0gZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssICZhbXA7YXJncyk7CiAJaWYgKHJldCkKLQkJZ290byBmcmVlX3Jlc291cmNlczsKJiM0MzsJCWdvdG8gZnJlZV9hcmdzOwogCiAJcmV0dXJuIDA7CiAKLWZyZWVfcmVzb3VyY2VzOgomIzQzO2ZyZWVfYXJnczoKIAlwcl93YXJuKCYjMzQ7JXM6IGZhaWxlZCB0byByZXZhbGlkYXRlIHpvbmVzXG4mIzM0OywgZGlzay0mZ3Q7ZGlza19uYW1lKTsKIAotCWtmcmVlKGFyZ3Muem9uZXNfY29uZCk7Ci0JbWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpOwotCWRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTsKLQlibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpOwomIzQzOwlrZnJlZShhcmdzLnpvbmVzX3N0YXRlKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNDM1LDggJiM0MzsyNjAxLDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfaXNzdWVfemVyb291dCk7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFQlVHX0ZTCiBzdGF0aWMgdm9pZCBxdWV1ZV96b25lX3dwbHVnX3Nob3coc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsCi0JCQkJICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiYjNDM7CQkJCSAgdm9pZCAqZGF0YSkKIHsKJiM0MzsJc3RydWN0IHNlcV9maWxlICptID0gZGF0YTsKIAl1bnNpZ25lZCBpbnQgendwX3dwX29mZnNldCwgendwX2ZsYWdzOwogCXVuc2lnbmVkIGludCB6d3Bfem9uZV9ubywgendwX3JlZjsKIAl1bnNpZ25lZCBpbnQgendwX2Jpb19saXN0X3NpemU7CkBAIC0yNDYxLDE5ICYjNDM7MjYyOCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZywKIGludCBxdWV1ZV96b25lX3dwbHVnc19zaG93KHZvaWQgKmRhdGEsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRhdGE7Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBxLSZndDtkaXNrOwotCXN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKCFkaXNrLSZndDt6b25lX3dwbHVnc19oYXNoKQotCQlyZXR1cm4gMDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkmIzQzOyYjNDM7KQotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLCAmYW1wO2Rpc2stJmd0O3pvbmVfd3BsdWdzX2hhc2hbaV0sCi0JCQkJCSBub2RlKQotCQkJcXVldWVfem9uZV93cGx1Z19zaG93KHp3cGx1ZywgbSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CWRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhxLSZndDtkaXNrLCBxdWV1ZV96b25lX3dwbHVnX3Nob3csIG0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oCmluZGV4IDUwYWJmZDkzMjg4NjEuLmNmZThkNDE4NWUyNWEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay5oCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay5oCkBAIC01NzcsNiAmIzQzOzU3Nyw3IEBAIGludCBibGtkZXZfcmVwb3J0X3pvbmVzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBjbWQsCiAJCXVuc2lnbmVkIGxvbmcgYXJnKTsKIGludCBibGtkZXZfem9uZV9tZ210X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwKIAkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwomIzQzO2Jvb2wgYmRldl9jaGVja196b25lX21nbXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yKTsKICNlbHNlIC8qIENPTkZJR19CTEtfREVWX1pPTkVEICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogewpAQCAtNjE5LDYgJiM0Mzs2MjAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAogewogCXJldHVybiAtRU5PVFRZOwogfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAomIzQzOwkJCQkJc2VjdG9yX3Qgc2VjdG9yKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqLwogCiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2X2FsbG9jKHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pOwpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggZThjZTBjYWJmMzkyYy4uMzRhNjQwNzdiYTAyYyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9nZW5oZC5jCkBAIC00NDcsNiAmIzQzOzQ0NywxMyBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzaywKIAkJYmRldl9zZXRfZmxhZyhkaXNrLSZndDtwYXJ0MCwgQkRfSEFTX1NVQk1JVF9CSU8pOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBXZSBkbyBub3Qgc3VwcG9ydCBwYXJ0aXRpb25zIHdpdGggem9uZWQgYmxvY2sgZGV2aWNlcywgc28gZG8gbm90IHRyeQomIzQzOwkgKiB0byBzY2FuIHRoZSBwYXJ0aXRpb25zIHRhYmxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJsa19xdWV1ZV9pc196b25lZChkaXNrLSZndDtxdWV1ZSkpCiYjNDM7CQlkaXNrLSZndDtmbGFncyB8PSBHRU5IRF9GTF9OT19QQVJUOwomIzQzOwogCS8qCiAJICogSWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbiBleHBsaWNpdCBtYWpvciBudW1iZXIgaXQgYWxzbyBtdXN0IHByb3ZpZGUKIAkgKiB0aGUgbnVtYmVyIG9mIG1pbm9ycyBudW1iZXJzIHN1cHBvcnRlZCwgYW5kIHRob3NlIHdpbGwgYmUgdXNlZCB0bwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggMjBjYjhlZDdkOTg3YS4uNGZhMDA3NTc1MjdkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0yMDAsNyAmIzQzOzIwMCw3IEBAIHN0cnVjdCBnZW5kaXNrIHsKIAl1bnNpZ25lZCBpbnQJCW5yX3pvbmVzOwogCXVuc2lnbmVkIGludAkJem9uZV9jYXBhY2l0eTsKIAl1bnNpZ25lZCBpbnQJCWxhc3Rfem9uZV9jYXBhY2l0eTsKLQl1OCBfX3JjdQkJKnpvbmVzX2NvbmQ7CiYjNDM7CXU4IF9fcmN1CQkqem9uZXNfc3RhdGU7CiAJdW5zaWduZWQgaW50CQl6b25lX3dwbHVnc19oYXNoX2JpdHM7CiAJYXRvbWljX3QJCW5yX3pvbmVfd3BsdWdzOwogCXNwaW5sb2NrX3QJCXpvbmVfd3BsdWdzX2hhc2hfbG9jazsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3NTMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA1NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBab25lZCBCbG9jayBEZXZpY2UgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2gg4oCTIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBibG9jayBsYXllciwgc3BlY2lmaWNhbGx5IHRoZSB6b25lZCBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGBibG9jay9ibGstem9uZWQuY2AsIGBibG9jay9ibGstY29yZS5jYCwgYGJsb2NrL2Jsay5oYCwgYGJsb2NrL2dlbmhkLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLiBTdHJhaWdodCBhd2F5LCBJIHNlZSB0aGV5JiMzOTtyZSBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgY2hhbmdpbmcgaG93IHpvbmUgc3RhdGVzIGFyZSB0cmFja2VkLiBJbnN0ZWFkIG9mIGB6b25lc19jb25kYCwgd2UmIzM5O3JlIG5vdyBkZWFsaW5nIHdpdGggYHpvbmVzX3N0YXRlYC4gVGhpcyBoYXMgYSBodWdlIGZ1bmN0aW9uYWwgaW1wYWN0LiBUaGlzIGlzIGEgZ29vZCBzaWduIGZvciBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBzdWJtaXRfYmlvX25vYWNjdGAgbm93IGNoZWNrcyB3aXRoIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAuIFRoYXQgb25lIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gVGhleSYjMzk7cmUgYmFzaWNhbGx5IG1ha2luZyBzdXJlIHpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIGFyZSBvbmx5IGFsbG93ZWQgb24gc2VxdWVudGlhbCB6b25lcyB0aGF0IGFyZSBvbmxpbmUgYW5kIG5vdCByZWFkLW9ubHkuIFdlIGFsc28gbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiBob3cgYF9fYWRkX2Rpc2tgIGlzIG1vZGlmaWVkIGluIGBibG9jay9nZW5oZC5jYCB0byBzZXQgYEdFTkhEX0ZMX05PX1BBUlRgIGZvciB6b25lZCBibG9jayBkZXZpY2VzLgoKU28sIEkmIzM5O20gdGhpbmtpbmcgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlc2UgbmV3IGNoZWNrcyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gQmFzZWQgb24gdGhhdCwgSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBwcmltZSBmdXp6aW5nIGNhbmRpZGF0ZXM6CgoqICAgYGJkZXZfY2hlY2tfem9uZV9tZ210YCAoZXNwZWNpYWxseSBnaXZlbiBpdCYjMzk7cyBub3cgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBzdWJtaXRfYmlvX25vYWNjdGApCiogICBgZGlza196b25lX3NldF9jb25kYAoqICAgYGRpc2tfem9uZV9nZXRfc3RhdGVgCiogICBgZGlza196b25lX2dldF9jb25kYAoqICAgYGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5YAoqICAgYGRpc2tfem9uZV9pc19zZXFgCiogICBgZGlza19pbnNlcnRfem9uZV93cGx1Z2AKKiAgIGBkaXNrX3pvbmVfd3BsdWdfYWJvcnRgCiogICBgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGVgCiogICBgYmxrZGV2X2dldF96b25lX2luZm9gCiogICBgYmxrX3pvbmVfcmVzZXRfYWxsX2Jpb19lbmRpb2AKKiAgIGBibGtfem9uZV93cGx1Z19wcmVwYXJlX2Jpb2AKKiAgIGBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGVgCiogICBgZGlza19hbGxvY196b25lX3Jlc291cmNlc2AKKiAgIGBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXNgCiogICBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AKCkkmIzM5O20gemVyb2luZyBpbiBvbiBhIGZldyBmdW5jdGlvbnMgd2hpY2ggYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZzoKCiogICBgYmRldl9jaGVja196b25lX21nbXRgIChzaW5jZSBpdCYjMzk7cyBhIGJvdW5kYXJ5IGV4cG9zZWQgdG8gdGhlIHN1Ym1pdCBwYXRoKS4KKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCAobGlrZWx5IGludm9sdmVkIGluIGluaXRpYWwgZGlzayBzZXR1cCBvciB6b25lIHJldmFsaWRhdGlvbikKKiAgIGBibGtkZXZfZ2V0X3pvbmVfaW5mb2AgKGlmIGFuIEFQSSwgYW5kIGNvbW1vbmx5IHVzZWQgaXQgbWF5IGJlIHZhbHVhYmxlIHRvIGZ1enopLgoqICAgYGRpc2tfem9uZV93cGx1Z19hYm9ydGAgKGVycm9yIHJlY292ZXJ5KS4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBhY3R1YWxseSBlbmFibGVkLiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoYXQgd2l0aCBgZ2l0IGdyZXBgIG9yIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBidWlsZCB0aGF0JiMzOTtzIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBCTEtfREVWX1pPTkVEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxuLS1cbmJsb2NrL0tjb25maWctOTYtXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXG5ibG9jay9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjM1Njpjb25maWcgQkxLX0RFVl9aT05FRF9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVx0dHJpc3RhdGUgXCYjMzQ7Wm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIGZvY3VzIGlzIG9uIGBCTEtfREVWX1pPTkVEYC4gVGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBmb3Igem9uZWQgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIG5hdHVyYWxseS4gSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaW5raW5nIG1vcmUgYnJvYWRseSwgSSB3b25kZXIuLi5gQkxLX0RFVl9aT05FRF9MT09QYCBjb3VsZCBiZSB1c2VmdWwsIGVzcGVjaWFsbHkgZm9yIGNyZWF0aW5nIGEgdmlydHVhbCBlbnZpcm9ubWVudCB0byB0ZXN0IHRoaW5ncyB3aXRob3V0IG5lZWRpbmcgcmVhbCBoYXJkd2FyZSwgdGhhdCBtaWdodCBiZSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1Ny1cdHRyaXN0YXRlIFwmIzM0O1pvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NjYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYEJMS19ERVZfWk9ORURfTE9PUGAga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgoKKipEaXZpbmcgaW50byBCTEtfREVWX1pPTkVEX0xPT1AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIGFuZCBtb2R1bGVzIGFyZSBwcmVyZXF1aXNpdGVzIG9yIGFyZSByZWxhdGVkIHRvIGBCTEtfREVWX1pPTkVEX0xPT1BgLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IHRyZWUuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHVzdWFsbHkgaW52b2x2ZXMgc2VhcmNoaW5nIGZvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyByZWxhdGVkIHRvIHRoaXMgb3B0aW9uLiBJ4oCZbGwgYmUgd2F0Y2hpbmcgb3V0IGZvciB0aGluZ3MgbGlrZSBzdG9yYWdlIHN0YWNrIGNvbXBvbmVudHMsIGJsb2NrIGRldmljZSBkcml2ZXJzLCBvciBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzLiBJdCBjb3VsZCBhbHNvIGRlcGVuZCBvbiBzb21lIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLCBvYnZpb3VzbHkuIEl0JiMzOTtzIGFsc28gcG9zc2libGUgdGhhdCBpdCByZXF1aXJlcyBlbmFibGluZyBjZXJ0YWluIGtlcm5lbCBhcmNoaXRlY3R1cmVzLiBJIGFsc28gd2lsbCB3YW50IHRvIHNlZSB3aGljaCBvdGhlciBvcHRpb25zIGFyZSBpbmNsdWRlZCwgYXMgdGhlc2Ugb2Z0ZW4gaW1wbHkgdXNhZ2Ugb2YgdGhlIG9wdGlvbiwgdGhvdWdoIG5vdCBleHBsaWNpdCBkZXBlbmRlbmN5LiBJIGFsc28gd2lsbCBtYWtlIG5vdGVzLCBhcyB3ZWxsIGFzIHRlc3QgbXkgY3VycmVudCBrbm93bGVkZ2UsIHNvIEkgY2FuIHNlZSB3aGljaCBJIG5lZWQgdG8gcmVmcmVzaCBvbi4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBwb3RlbnRpYWxseSBjb25mbGljdGluZyBvcHRpb25zIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzUwOlx0XHQgIFNheSBOIGlmIHlvdSBkb24mIzM5O3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcbiAzNTE6XHRcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXG4gMzUyOlx0XHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXG4gMzUzOlx0XG4gMzU0Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvYmxvY2svcm5iZC9LY29uZmlnXCYjMzQ7XG4gMzU1Olx0XG4gMzU2Olx0Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxuIDM1NzpcdFx0dHJpc3RhdGUgXCYjMzQ7Wm9uZWQgbG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAzNTg6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuIDM1OTpcdFx0aGVscFxuIDM2MDpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcbiAzNjE6XHRcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcbiAzNjI6XHRcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXG4gMzYzOlx0XHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXG4gMzY0Olx0XHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcbiAzNjU6XHRcdCAgbGlrZTpcbiAzNjY6XHRcbiAzNjc6XHRcdCAgZWNobyBcJiMzNDthZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcJiMzNDsgXHUwMDNlIFxcXG4gMzY4Olx0XHRcdC9kZXYvemxvb3AtY29udHJvbFxuIDM2OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTMyCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBwcm9jZXNzIHRoaXPigKYKCioqWm9uZWQgQmxvY2sgRGV2aWNlIENvbmZ1c2lvbiAtIEEgUXVpY2sgRGl2ZSoqCgpIb2xkIG9uIGEgc2Vjb25kLiAqQkxLX0RFVl9aT05FRF9MT09QKj8gSSBoYWRuJiMzOTt0IHNlZW4gdGhhdCBvbmUgYmVmb3JlLiBJJiMzOTttIHVzdWFsbHkgcHJldHR5IHVwLXRvLWRhdGUgb24gYmxvY2sgZGV2aWNlIGRlZmluaXRpb25zLCBidXQgdGhpcyBjYXVnaHQgbWUgb2ZmIGd1YXJkLiBXYWl0LCBpc24mIzM5O3QgKkJMS19ERVZfWk9ORUQqIHRoZSBwcmltYXJ5IG9uZSBJJiMzOTtkIGJlIGxvb2tpbmcgYXQ/IFllYWgsIHRoYXQgcmluZ3MgYSBiZWxsLiBOb3csIGxldCYjMzk7cyB0aGlua+KApiB3aGF0IGFib3V0ICpOVUxMX0JMS19aT05FRCo/IEhtbSwgdGhhdCBjb3VsZCBhY3R1YWxseSBiZSByZWxldmFudCB0byBteSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byAqTlVMTF9CTEtfWk9ORUQqLCBJJiMzOTtsbCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBicm9hZGVyICpOVUxMX0JMSyogY29udGV4dC4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHJpZ2h0IGFic3RyYWN0aW9ucyBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkxLX0RFVl9OVUxMX0JMSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX05VTExfQkxLXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O051bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctOS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1MzUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYE5VTExfQkxLYCBab25lZCBTdXBwb3J0KioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYE5VTExfQkxLYCB6b25lZCBzdXBwb3J0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzdGFydCBieSB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQgYXQgdGhlIGxvd2VzdCBsZXZlbC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGtub3cgaG93IGl0IHdpbGwgcGVyZm9ybSBpbiBhIHR5cGljYWwgd29ya2xvYWQuCgpJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgaG93IHRoZSB6b25lZCBjaGFyYWN0ZXJpc3RpY3MgYXJlIGxldmVyYWdlZCwgYW5kIHdoZXJlIHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG1heSBiZSBhdmFpbGFibGUgd2l0aGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25zIGFuZCBjYXBhYmlsaXRpZXMuIEFyZSB3ZSBnZXR0aW5nIGZ1bGwgdXRpbGl6YXRpb24gb3V0IG9mIHRoaXMgZmVhdHVyZT8gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBjb21wYXRpYmlsaXR5IGlzc3VlcyBJIHNob3VsZCBiZSBhd2FyZSBvZiwgcGVyaGFwcyB3aXRoIHNwZWNpZmljIGNvbnRyb2xsZXJzIG9yIGRyaXZlIG1vZGVscz8gTXkgZm9jdXMgaGFzIHRvIGJlIG9uIHRoZSBkZXRhaWxzIG9mIGJsb2NrIG1hbmFnZW1lbnQuIEkgbmVlZCB0byBnZXQgdGhpcyByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O051bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBDT05GSUdGU19GU1xuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxuICAxMTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclwmIzM0O1xuICAxMjpcdFx0ZGVwZW5kcyBvbiBCTEtfREVWX05VTExfQkxLIFx1MDAyNlx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MTUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4uLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBab25lZCBDb25maWd1cmF0aW9uIG9mIGBudWxsX2Jsa2AqKgoKSG1tLCBpdCBzZWVtcyBsaWtlIGBudWxsX2Jsa2AgbWlnaHQgbm90IGhhdmUgYSBkZWRpY2F0ZWQsIHNlcGFyYXRlIHpvbmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhhdCYjMzk7cyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gY2xhcmlmeSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgIG9yLCBpZiBpdCBleGlzdHMsIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2Ugc3BlY2lmaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6b25lZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU9MTA9ZW5kaWZcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6MTE6bnVsbF9ibGstJChDT05GSUdfQkxLX0RFVl9aT05FRCkgJiM0Mzs9IHpvbmVkLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMzQ9TU9EVUxFX1BBUk1fREVTQyhtYnBzLCBcJiMzNDtMaW1pdCBtYXhpbXVtIGJhbmR3aWR0aCAoaW4gTWlCL3MpLiBEZWZhdWx0OiAwIChubyBsaW1pdClcJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjM1LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjM2OnN0YXRpYyBib29sIGdfem9uZWQ7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzc6bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVkLCBnX3pvbmVkLCBib29sLCBTX0lSVUdPKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIzODpNT0RVTEVfUEFSTV9ERVNDKHpvbmVkLCBcJiMzNDtNYWtlIGRldmljZSBhcyBhIGhvc3QtbWFuYWdlZCB6b25lZCBibG9jayBkZXZpY2UuIERlZmF1bHQ6IGZhbHNlXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIzOS1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDE9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfc2l6ZSwgZ196b25lX3NpemUsIHVsb25nLCBTX0lSVUdPKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI0MjpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfc2l6ZSwgXCYjMzQ7Wm9uZSBzaXplIGluIE1CIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBNdXN0IGJlIHBvd2VyLW9mLXR3bzogRGVmYXVsdDogMjU2XCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI0My1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDU9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfY2FwYWNpdHksIGdfem9uZV9jYXBhY2l0eSwgdWxvbmcsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjQ2Ok1PRFVMRV9QQVJNX0RFU0Moem9uZV9jYXBhY2l0eSwgXCYjMzQ7Wm9uZSBjYXBhY2l0eSBpbiBNQiB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gQ2FuIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6b25lIHNpemUuIERlZmF1bHQ6IFpvbmUgc2l6ZVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNDctXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjQ5PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX25yX2NvbnYsIGdfem9uZV9ucl9jb252LCB1aW50LCAwNDQ0KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI1MDpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfbnJfY29udiwgXCYjMzQ7TnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gRGVmYXVsdDogMFwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNTEtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjUzPW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX21heF9vcGVuLCBnX3pvbmVfbWF4X29wZW4sIHVpbnQsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjU0Ok1PRFVMRV9QQVJNX0RFU0Moem9uZV9tYXhfb3BlbiwgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2Ygb3BlbiB6b25lcyB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gRGVmYXVsdDogMCAobm8gbGltaXQpXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI1NS1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNTc9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfbWF4X2FjdGl2ZSwgZ196b25lX21heF9hY3RpdmUsIHVpbnQsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjU4Ok1PRFVMRV9QQVJNX0RFU0Moem9uZV9tYXhfYWN0aXZlLCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiBhY3RpdmUgem9uZXMgd2hlbiBibG9jayBkZXZpY2UgaXMgem9uZWQuIERlZmF1bHQ6IDAgKG5vIGxpbWl0KVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNTktXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjY2PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX2Z1bGwsIGdfem9uZV9mdWxsLCBib29sLCBTX0lSVUdPKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI2NzpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfZnVsbCwgXCYjMzQ7SW5pdGlhbGl6ZSB0aGUgc2VxdWVudGlhbCB3cml0ZSByZXF1aXJlZCB6b25lcyBvZiBhIHpvbmVkIGRldmljZSB0byBiZSBmdWxsLiBEZWZhdWx0OiBmYWxzZVwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNjgtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NDYxPU5VTExCX0RFVklDRV9BVFRSKGNhY2hlX3NpemUsIHVsb25nLCBOVUxMKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ2MjpOVUxMQl9ERVZJQ0VfQVRUUih6b25lZCwgYm9vbCwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy00NjMtTlVMTEJfREVWSUNFX0FUVFIoem9uZV9zaXplLCB1bG9uZywgTlVMTCk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTk2PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICpudWxsYl9kZXZpY2VfYXR0cnNbXSA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02MzItXHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl96b25lX3NpemUsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2MzM6XHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl96b25lZCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTYzNC1cdE5VTEwsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzc3PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgxNS1cdGRldi1cdTAwM2V1c2VfcGVyX25vZGVfaGN0eCA9IGdfdXNlX3Blcl9ub2RlX2hjdHg7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4MTY6XHRkZXYtXHUwMDNlem9uZWQgPSBnX3pvbmVkO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODE3LVx0ZGV2LVx1MDAzZXpvbmVfc2l6ZSA9IGdfem9uZV9zaXplO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTgzND1zdGF0aWMgdm9pZCBudWxsX2ZyZWVfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MzgtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4Mzk6XHRudWxsX2ZyZWVfem9uZWRfZGV2KGRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04NDAtXHRiYWRibG9ja3NfZXhpdChcdTAwMjZkZXYtXHUwMDNlYmFkYmxvY2tzKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMjQyPXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF90cmFuc2ZlcihzdHJ1Y3QgbnVsbGIgKm51bGxiLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMjUyLVx0aWYgKCFpc193cml0ZSkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTI1MzpcdFx0aWYgKGRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTI1NC1cdFx0XHR2YWxpZF9sZW4gPSBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4obnVsbGIsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTQ0Mj1zdGF0aWMgdm9pZCBudWxsX2hhbmRsZV9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ1My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0NTQ6XHRpZiAoZGV2LVx1MDAzZXpvbmVkKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ1NTpcdFx0c3RzID0gbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChjbWQsIG9wLCBzZWN0b3IsIG5yX3NlY3RvcnMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQ1Ni1cdGVsc2Vcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNjE5PXN0YXRpYyBlbnVtIGJsa19laF90aW1lcl9yZXR1cm4gbnVsbF90aW1lb3V0X3JxKHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNjM5LVx0LypcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE2NDA6XHQgKiBJZiB0aGUgZGV2aWNlIGlzIG1hcmtlZCBhcyBibG9ja2luZyAoaS5lLiBtZW1vcnkgYmFja2VkIG9yIHpvbmVkXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNjQxLVx0ICogZGV2aWNlKSwgdGhlIHN1Ym1pc3Npb24gcGF0aCBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciByZXNvdXJjZXNcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNzg5PXN0YXRpYyB2b2lkIG51bGxfY29uZmlnX2Rpc2NhcmQoc3RydWN0IG51bGxiICpudWxsYiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE3OTktXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxODAwOlx0aWYgKG51bGxiLVx1MDAzZWRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTgwMS1cdFx0bnVsbGItXHUwMDNlZGV2LVx1MDAzZWRpc2NhcmQgPSBmYWxzZTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE4MDI6XHRcdHByX2luZm8oXCYjMzQ7ZGlzY2FyZCBvcHRpb24gaXMgaWdub3JlZCBpbiB6b25lZCBtb2RlXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE4MDMtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xODg1PXN0YXRpYyBpbnQgbnVsbF92YWxpZGF0ZV9jb25mKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTE4LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTkxOTpcdGlmIChkZXYtXHUwMDNlem9uZWQgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTIwLVx0ICAgICghZGV2LVx1MDAzZXpvbmVfc2l6ZSB8fCAhaXNfcG93ZXJfb2ZfMihkZXYtXHUwMDNlem9uZV9zaXplKSkpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTU1PXN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTkxLVx0bnVsbF9jb25maWdfZGlzY2FyZChudWxsYiwgXHUwMDI2bGltKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5OTI6XHRpZiAoZGV2LVx1MDAzZXpvbmVkKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTkzOlx0XHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcdTAwMjZsaW0pO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk5NC1cdFx0aWYgKHJ2KVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNDUtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMDQ2Olx0aWYgKG51bGxiLVx1MDAzZWRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjA0NzpcdFx0cnYgPSBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihudWxsYik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMDQ4LVx0XHRpZiAocnYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjA2Ni1vdXRfY2xlYW51cF96b25lOlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjA2NzpcdG51bGxfZnJlZV96b25lZF9kZXYoZGV2KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNjgtb3V0X2NsZWFudXBfdGFnczpcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9NTM9c3RydWN0IG51bGxiX2RldmljZSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTgxLVx0dW5zaWduZWQgbG9uZyBjYWNoZV9zaXplOyAvKiBkaXNrIGNhY2hlIHNpemUgaW4gTUIgKi9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo4MjpcdHVuc2lnbmVkIGxvbmcgem9uZV9zaXplOyAvKiB6b25lIHNpemUgaW4gTUIgaWYgZGV2aWNlIGlzIHpvbmVkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6ODM6XHR1bnNpZ25lZCBsb25nIHpvbmVfY2FwYWNpdHk7IC8qIHpvbmUgY2FwYWNpdHkgaW4gTUIgaWYgZGV2aWNlIGlzIHpvbmVkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtODQtXHR1bnNpZ25lZCBpbnQgem9uZV9ucl9jb252OyAvKiBudW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzICovXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEwNC1cdGJvb2wgZGlzY2FyZDsgLyogaWYgc3VwcG9ydCBkaXNjYXJkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTA1Olx0Ym9vbCB6b25lZDsgLyogaWYgZGV2aWNlIGlzIHpvbmVkICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTA2LVx0Ym9vbCB6b25lX2Z1bGw7IC8qIEluaXRpYWxpemUgem9uZXMgdG8gYmUgZnVsbCAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD0xMzg9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX21lbW9yeV9iYWNrZWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQxLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE0MjppbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDQ6dm9pZCBudWxsX2ZyZWVfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ1LWludCBudWxsX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNDctXHRcdCAgICAgIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE0ODpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0OS1cdFx0XHRcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD0xNTI9c3NpemVfdCB6b25lX2NvbmRfc3RvcmUoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNTQtI2Vsc2VcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNTU6c3RhdGljIGlubGluZSBpbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTU2LVx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE2MC19XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTYxOnN0YXRpYyBpbmxpbmUgaW50IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTYyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTY0LX1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjU6c3RhdGljIGlubGluZSB2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KSB7fVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE2NjpzdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3Nfem9uZWRfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNjctXHRcdFx0ZW51bSByZXFfb3Agb3AsIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycylcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NDI9c3RhdGljIGlubGluZSB2b2lkIG51bGxfdW5sb2NrX3pvbmUoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01MC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo1MTppbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNTItXHRcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03OS1cdCAqIHpvbmUgYXQgdGhlIHNhbWUgdGltZSBhcyBzdWNoIHpvbmUgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBjb3JyZXNwb25kXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6ODA6XHQgKiB0byBhbnkgcmVhbCB6b25lZCBkZXZpY2UuXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtODEtXHQgKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTc0LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE3NTppbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xNzYte1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODYtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg3OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTg4LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NjQ2PXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF96b25lX21nbXQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjcwODpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTcwOS1cdFx0XHRcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTc3OD1zc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3ODU6XHRpZiAoIWRldi1cdTAwM2V6b25lZCkge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjc4NjpcdFx0cHJfZXJyKFwmIzM0O251bGxfYmxrIGRldmljZSBpcyBub3Qgem9uZWRcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MDgyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBab25lZCBCbG9jayBEZXZpY2UgU3VwcG9ydCoqCgpPa2F5LCBzbyBpdCBsb29rcyBsaWtlIGBudWxsX2Jsa2Agc3VwcG9ydHMgem9uZWQgZGV2aWNlcyDigJMgdGhhdCYjMzk7cyBnb29kLiBJIHJlbWVtYmVyIGl0IHVzZXMgZWl0aGVyIHRoZSBgZ196b25lZGAgcGFyYW1ldGVyIG9yIGNvbmZpZ2ZzLCBzbyB0aGF0JiMzOTtzIHRoZSBhbmdsZS4gSSBzZWUgdGhlIGltcG9ydGFuY2Ugb2YgYEJMS19ERVZfTlVMTF9CTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgaW4gdGhlIGNvbmZpZy4KCkkgaGF2ZSB0byBjaGVjayBgQkxLX0RFVl9aT05FRF9MT09QYCBhZ2Fpbi4uLndhaXQsIGlzbiYjMzk7dCB0aGF0IG5vdCBtYWlubGluZT8gSG1tLCB0aGUgYGdyZXBgIHJlc3VsdHMgZnJvbSB0aGUgc291cmNlIHNheSBvdGhlcndpc2UuIE9oLCBJIHNlZSDigJMgaXQmIzM5O3MgdGhlcmUgaW4gdGhlIEtjb25maWcuIFJpZ2h0LCBgQkxLX0RFVl9aT05FRGAgaXMgdGhlIG1haW4gb25lLgoKTm93IEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGluIHRoZSBwYXRjaC4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgYmxvY2svYmxrLXpvbmVkLmNgLCBzbyBJJiMzOTtsbCByZXZpZXcgdGhvc2U6CgoqICAgYGJkZXZfY2hlY2tfem9uZV9tZ210YAoqICAgYGRpc2tfem9uZV9zZXRfY29uZGAKKiAgIGBkaXNrX3pvbmVfZ2V0X3N0YXRlYAoqICAgYGRpc2tfem9uZV9nZXRfY29uZGAKKiAgIGBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seWAKKiAgIGBkaXNrX3pvbmVfaXNfc2VxYAoqICAgYGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWdgCiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YAoqICAgYGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlYAoqICAgYGJsa2Rldl9nZXRfem9uZV9pbmZvYAoqICAgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gCiogICBgYmxrX3pvbmVfd3BsdWdfcHJlcGFyZV9iaW9gCiogICBgYmxrX3pvbmVfd3BsdWdfaGFuZGxlX3dyaXRlYAoqICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgCiogICBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYAoqICAgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgCgpJIG5lZWQgdG8gZmlsdGVyIG91dCB0aGUgc3RhdGljIG9uZXMgdGhhdCBhcmUgaW5saW5lZCBvciBsZXNzIGFjY2Vzc2libGUsIGFsdGhvdWdoIHN5emthbGxlciBoYXMgYSBrbmFjayBmb3IgZmluZGluZyB0aGVtIGV2ZW4gaWYgdGhleSYjMzk7cmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuCgpMZXQmIzM5O3Mgc2VlLi4uIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAgaXMgZXhwb3J0ZWQsIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFdoYXQgYWJvdXQgYGJsa2Rldl9nZXRfem9uZV9pbmZvYD8gTm8sIGl0JiMzOTtzIG5vdCBleHBvcnRlZCwgdGhvdWdoIGl0IGlzIHVzZWQgaW4gYGJsb2NrL2lvY3RsLmNgLiBBbmQgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgIGlzIGFsc28gZXhwb3J0ZWQuIFRoZSByZXN0IGFyZSBzdGF0aWM6IGBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2AsIGBkaXNrX3pvbmVfd3BsdWdfYWJvcnRgLCBhbmQgYGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlYC4KCk9rYXksIHNvIEkgd2lsbCBub3cgZm9jdXMgb24gdGhvc2UgdGhhdCBhcmUgZWl0aGVyIG5vbi1zdGF0aWMsIG9yIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNiAxOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MX0dQTFxcKC4qXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLXpvbmVkLmM9MjI0PWNvbnN0IGNoYXIgKmJsa196b25lX2NvbmRfc3RyKGVudW0gYmxrX3pvbmVfY29uZCB6b25lX2NvbmQpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjMyLX1cbmJsb2NrL2Jsay16b25lZC5jOjIzMzpFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9jb25kX3N0cik7XG5ibG9jay9ibGstem9uZWQuYy0yMzQtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MzAyPWJvb2wgYmRldl96b25lX2lzX3NlcShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMzA4LX1cbmJsb2NrL2Jsay16b25lZC5jOjMwOTpFWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcbmJsb2NrL2Jsay16b25lZC5jLTMxMC1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0zODA9aW50IGJsa2Rldl9yZXBvcnRfem9uZXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTM4OS19XG5ibG9jay9ibGstem9uZWQuYzozOTA6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X3JlcG9ydF96b25lcyk7XG5ibG9jay9ibGstem9uZWQuYy0zOTEtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9NDE2PWludCBibGtkZXZfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGVudW0gcmVxX29wIG9wLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTQ2Ni19XG5ibG9jay9ibGstem9uZWQuYzo0Njc6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X3pvbmVfbWdtdCk7XG5ibG9jay9ibGstem9uZWQuYy00NjgtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MTAxMD1pbnQgZGlza19yZXBvcnRfem9uZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc3RydWN0IGJsa196b25lICp6b25lLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTEwMzctfVxuYmxvY2svYmxrLXpvbmVkLmM6MTAzODpFWFBPUlRfU1lNQk9MX0dQTChkaXNrX3JlcG9ydF96b25lKTtcbmJsb2NrL2Jsay16b25lZC5jLTEwMzktXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MTA5Mz1pbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTExODUtfVxuYmxvY2svYmxrLXpvbmVkLmM6MTE4NjpFWFBPUlRfU1lNQk9MX0dQTChibGtkZXZfZ2V0X3pvbmVfaW5mbyk7XG5ibG9jay9ibGstem9uZWQuYy0xMTg3LVxuLS1cbmJsb2NrL2Jsay16b25lZC5jPTEyMDM9aW50IGJsa2Rldl9yZXBvcnRfem9uZXNfY2FjaGVkKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xMjQzLX1cbmJsb2NrL2Jsay16b25lZC5jOjEyNDQ6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X3JlcG9ydF96b25lc19jYWNoZWQpO1xuYmxvY2svYmxrLXpvbmVkLmMtMTI0NS1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0xNzQ4PWJvb2wgYmxrX3pvbmVfcGx1Z19iaW8oc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgbnJfc2Vncylcbi0tXG5ibG9jay9ibGstem9uZWQuYy0xNzg1LX1cbmJsb2NrL2Jsay16b25lZC5jOjE3ODY6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfcGx1Z19iaW8pO1xuYmxvY2svYmxrLXpvbmVkLmMtMTc4Ny1cbi0tXG5ibG9jay9ibGstem9uZWQuYz0yNDk2PWludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLS1cbmJsb2NrL2Jsay16b25lZC5jLTI1NTYtfVxuYmxvY2svYmxrLXpvbmVkLmM6MjU1NzpFWFBPUlRfU1lNQk9MX0dQTChibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKTtcbmJsb2NrL2Jsay16b25lZC5jLTI1NTgtXG4tLVxuYmxvY2svYmxrLXpvbmVkLmM9MjU3MT1pbnQgYmxrX3pvbmVfaXNzdWVfemVyb291dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuYmxvY2svYmxrLXpvbmVkLmMtMjU5OS19XG5ibG9jay9ibGstem9uZWQuYzoyNjAwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX2lzc3VlX3plcm9vdXQpO1xuYmxvY2svYmxrLXpvbmVkLmMtMjYwMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDYgMTk6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMDAKCQkJCQkJCW91dHB1dDogMjQ0CgkJCQkJCQl0aG91Z2h0czogMTM1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpcyBhbmQgRnV6emluZyBTdHJhdGVneTogWm9uZWQgQmxvY2sgRGV2aWNlIFJlZmFjdG9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBhc3BlY3RzIG9mIHRoZSB6b25lZCBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24sIHNvIHdlIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBpbml0aWFsIGdsYW5jZSBhdCB0aGUgZGlmZnMgaGlnaGxpZ2h0cyBzZXZlcmFsIGZ1bmN0aW9ucyBiZWluZyBtb2RpZmllZCwgYW5kIEkmIzM5O20gaG9uaW5nIGluIG9uIHRoZSBrZXkgb25lcyBmb3IgZnV6emluZyBhbmQgdGVzdGluZy4gRmlyc3QsIEkgbm90aWNlZCBgYmRldl9jaGVja196b25lX21nbXRgIGlzIG5ld2x5IGludHJvZHVjZWQuIEkgaGFkIHRvIGRvdWJsZS1jaGVjayBpdHMgdmlzaWJpbGl0eSwgYnV0IHNpbmNlIGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBibG9jayBsYXllciYjMzk7cyBidWlsdC1pbiBjb21wb25lbnRzLCBpdCBkb2VzbiYjMzk7dCBuZWVkIHRvIGJlIGV4cG9ydGVkLiBUaGVuIHRoZXJlIGFyZSBzb21lIG90aGVyIGltcG9ydGFudCBmdW5jdGlvbnMgYGJsa2Rldl9nZXRfem9uZV9pbmZvYCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCBgZGlza19yZXBvcnRfem9uZWAgYW5kIHNvIG9uLCB3aGljaCBhcmUgb2J2aW91c2x5IGNvcmUuCgpNeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZTogYGJkZXZfY2hlY2tfem9uZV9tZ210YCwgYGJsa2Rldl9nZXRfem9uZV9pbmZvYCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCBhbmQgYGRpc2tfcmVwb3J0X3pvbmVgLCBidXQgSSYjMzk7bSByZWZpbmluZyB0aGF0IGxpc3QgYXMgSSBkaXZlIGRlZXBlci4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBsb2dpYyByZXZvbHZlcyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBhbmQgcmV0cmlldmluZyB6b25lIGluZm9ybWF0aW9uLiBJIGFsc28gaGFkIHRvIGtlZXAgaW4gbWluZCBgc3VibWl0X2Jpb19ub2FjY3RgIGFzIGl0JiMzOTtzIGEgaG90IHBhdGgsIGFuZCBhbnkgY2hhbmdlcyBoZXJlIG5lZWQgdmVyeSBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIGVzcGVjaWFsbHkgd2l0aCB0aGUgdXNlIG9mIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAuIEkmIzM5O20gc2xpZ2h0bHkgaGVzaXRhbnQgdG8gZGlyZWN0bHkgdGFyZ2V0IGBzdWJtaXRfYmlvX25vYWNjdGAgZGlyZWN0bHkgaW4gZnV6emluZywgZ2l2ZW4gaXRzIGltcG9ydGFuY2UsIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGltcGFjdGVkLgoKRGl2aW5nIGludG8gdGhlIHNvdXJjZSwgSSBjb25maXJtIHRoYXQgYGJkZXZfY2hlY2tfem9uZV9tZ210YCBpcyBpbmRlZWQgYSBgYm9vbGAgZnVuY3Rpb24sIHRha2luZyBgc3RydWN0IGJsb2NrX2RldmljZWAgYW5kIGBzZWN0b3JfdGAgYXMgYXJndW1lbnRzLiBJIGFsc28gdmVyaWZpZWQgdGhlIHNpZ25hdHVyZXMgb2YgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCB3aGljaCBpcyBgaW50YCByZXR1cm5pbmcgZnVuY3Rpb24gb24gYSBgZ2VuZGlza2AsIGFuZCBgYmxrZGV2X2dldF96b25lX2luZm9gLCB3aGljaCBpcyBgaW50YCB3aXRoIGEgYmxvY2sgZGV2aWNlLCBzZWN0b3IsIGFuZCBgYmxrX3pvbmVgIHN0cnVjdHVyZS4gSSYjMzk7bSBub3RpbmcgdGhlIHNpZ25hdHVyZXMgYmVjYXVzZSB0aGVzZSBhcmUgY3J1Y2lhbCBmb3IgY29uc3RydWN0aW5nIG1lYW5pbmdmdWwgZnV6eiBpbnB1dHMgbGF0ZXIuIEltcG9ydGFudGx5LCBJIHdpbGwgbmVlZCB0byBjb25zaWRlciBgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzYCBhbmQgYGRpc2tfaW5pdF96b25lX3Jlc291cmNlc2AuIFRoZXNlIGFyZSB3b3J0aCBpbmNsdWRpbmcuIEkgYWxzbyBzZWUgdGhhdCBgZGlza196b25lX3dwbHVnX2Fib3J0YCwgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gLCBhbmQgYGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvYCBoYXZlIGFsbCBiZWVuIG1vZGlmaWVkLCBzbyB0aG9zZSBhcmUgZGVmaW5pdGVseSBpbXBvcnRhbnQuCgpGb3IgZW5hYmxpbmcgdGhlIGFwcHJvcHJpYXRlIGVudmlyb25tZW50LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRvIGNvbmZpZ3VyZSB0aGUga2VybmVsIHdpdGggYEJMS19ERVZfWk9ORURgLCBgQkxLX0RFVl9OVUxMX0JMS2AsIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYC4gU2luY2UgYEJMS19ERVZfTlVMTF9CTEtgIGlzIHRyaXN0YXRlLCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgaWYgSSB3YW50IGl0IGJ1aWx0LWluLCBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuCgpTdW1tYXJpemluZywgdGhlIHBhdGNoIGZvY3VzZXMgb24gcmVmYWN0b3Jpbmcgem9uZSBjb25kaXRpb24gdHJhY2tpbmcgd2l0aGluIHRoZSBibG9jayBsYXllciB1c2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBgem9uZXNfc3RhdGVgIGFycmF5LiBJdOKAmXMgdXBkYXRpbmcgem9uZSBtYW5hZ2VtZW50LCByZXZhbGlkYXRpb24sIGFuZCBpbmZvcm1hdGlvbiByZXRyaWV2YWwgZnVuY3Rpb25zLCBhbG9uZyB3aXRoIHBhcnRpdGlvbiBkaXNhYmxpbmcgb24gem9uZWQgZGV2aWNlcy4gTXkgcHJpbWFyeSBmb2N1cyBmb3IgZnV6emluZyB3aWxsIGJlOgoKKiAgIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAKKiAgIGBibGtkZXZfZ2V0X3pvbmVfaW5mb2AKKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYAoqICAgYGRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc2AKKiAgIGBkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNgCgpJJiMzOTtsbCB1c2UgYEJMS19ERVZfWk9ORURgLCBgQkxLX0RFVl9OVUxMX0JMS2AsIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWdzLCBlbnN1cmluZyBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgZXhwbGljaXRseSBkZWZpbmVkIGlmIEkgd2FudCBpdCBidWlsdC1pbi4gVGhpcyBzaG91bGQgZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2Ugb2YgdGhlIHJlZmFjdG9yZWQgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBkZXRlY3QgYW55IHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgaGFuZGxpbmcgb3IgYmlvIHN1Ym1pc3Npb24uIEkgZmVlbCBjb25maWRlbnQgd2l0aCB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA2IDE5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX1pPTkVEJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9aT05FRF9MT09QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmRldl9jaGVja196b25lX21nbXQmIzM0OywKICAgICYjMzQ7YmxrZGV2X2dldF96b25lX2luZm8mIzM0OywKICAgICYjMzQ7YmxrX3JldmFsaWRhdGVfZGlza196b25lcyYjMzQ7LAogICAgJiMzNDtkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMmIzM0OywKICAgICYjMzQ7ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBob3cgem9uZSBjb25kaXRpb25zIGFyZSB0cmFja2VkIGluIHRoZSBibG9jayBsYXllciwgaW50cm9kdWNpbmcgYGVudW0gYmxrX3pzdGF0ZWAgYW5kIGEgbmV3IGB6b25lc19zdGF0ZWAgYXJyYXkgdG8gcmVwbGFjZSBgem9uZXNfY29uZGAuIEl0IHVwZGF0ZXMgem9uZSBtYW5hZ2VtZW50IGNoZWNrcyAoYGJkZXZfY2hlY2tfem9uZV9tZ210YCksIHpvbmUgcmV2YWxpZGF0aW9uIChgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2ApLCBhbmQgem9uZSBpbmZvcm1hdGlvbiByZXRyaWV2YWwgKGBibGtkZXZfZ2V0X3pvbmVfaW5mb2ApLiBJdCBhbHNvIG1vZGlmaWVzIGBfX2FkZF9kaXNrYCB0byBkaXNhYmxlIHBhcnRpdGlvbnMgb24gem9uZWQgYmxvY2sgZGV2aWNlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBibG9jayBsYXllciYjMzk7cyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfWk9ORUQmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9OVUxMX0JMSyYjMzQ7LAogICAgJiMzNDtCTEtfREVWX1pPTkVEX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiZGV2X2NoZWNrX3pvbmVfbWdtdCYjMzQ7LAogICAgJiMzNDtibGtkZXZfZ2V0X3pvbmVfaW5mbyYjMzQ7LAogICAgJiMzNDtibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzJiMzNDssCiAgICAmIzM0O2Rpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlcyYjMzQ7LAogICAgJiMzNDtkaXNrX2luaXRfem9uZV9yZXNvdXJjZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB6b25lIGNvbmRpdGlvbnMgYXJlIHRyYWNrZWQgaW4gdGhlIGJsb2NrIGxheWVyLCBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBuZXcgYHpvbmVzX3N0YXRlYCBhcnJheSB0byByZXBsYWNlIGB6b25lc19jb25kYC4gSXQgdXBkYXRlcyB6b25lIG1hbmFnZW1lbnQgY2hlY2tzIChgYmRldl9jaGVja196b25lX21nbXRgKSwgem9uZSByZXZhbGlkYXRpb24gKGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCksIGFuZCB6b25lIGluZm9ybWF0aW9uIHJldHJpZXZhbCAoYGJsa2Rldl9nZXRfem9uZV9pbmZvYCkuIEl0IGFsc28gbW9kaWZpZXMgYF9fYWRkX2Rpc2tgIHRvIGRpc2FibGUgcGFydGl0aW9ucyBvbiB6b25lZCBibG9jayBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGJsb2NrIGxheWVyJiMzOTtzIHpvbmVkIHN0b3JhZ2Ugc3VwcG9ydCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gem9uZSBzdGF0ZSB0cmFja2luZyBvciBiaW8gc3VibWlzc2lvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI0Ljc1NDY5MDc2M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NzYxMjQ2MTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2hlY2tfem9uZV9tZ210XCIsXG4gICAgXCJibGtkZXZfZ2V0X3pvbmVfaW5mb1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHpvbmUgY29uZGl0aW9ucyBhcmUgdHJhY2tlZCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIG5ldyBgem9uZXNfc3RhdGVgIGFycmF5IHRvIHJlcGxhY2UgYHpvbmVzX2NvbmRgLiBJdCB1cGRhdGVzIHpvbmUgbWFuYWdlbWVudCBjaGVja3MgKGBiZGV2X2NoZWNrX3pvbmVfbWdtdGApLCB6b25lIHJldmFsaWRhdGlvbiAoYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgKSwgYW5kIHpvbmUgaW5mb3JtYXRpb24gcmV0cmlldmFsIChgYmxrZGV2X2dldF96b25lX2luZm9gKS4gSXQgYWxzbyBtb2RpZmllcyBgX19hZGRfZGlza2AgdG8gZGlzYWJsZSBwYXJ0aXRpb25zIG9uIHpvbmVkIGJsb2NrIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYmxvY2sgbGF5ZXIncyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI0Ljc1NDY5OTAyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzMTkyNjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGMwNTI4ZTY4ZTk3MDJlMWZmZGVmMWQyM2YyMWYyNzI0N2Q3ZTY3NGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgNiAxOTo0NjoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xcbmluZGV4IDE5NmJjY2YyN2Y1OGQuLjgwYTRlMmJjYzNmMzQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5AQCAtOTAxLDggKzkwMSwxMSBAQCB2b2lkIHN1Ym1pdF9iaW9fbm9hY2N0KHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0Y2FzZSBSRVFfT1BfWk9ORV9DTE9TRTpcXG4gXFx0Y2FzZSBSRVFfT1BfWk9ORV9SRVNFVDpcXG4gXFx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XFxuLVxcdFxcdC8qIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcy4gKi9cXG4tXFx0XFx0aWYgKCFiZGV2X3pvbmVfaXNfc2VxKGJpby1cXHUwMDNlYmlfYmRldiwgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvcikpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcyB0aGF0IGFyZVxcbitcXHRcXHQgKiBub3Qgb2ZmbGluZSBub3IgcmVhZC1vbmx5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFiZGV2X2NoZWNrX3pvbmVfbWdtdChiZGV2LCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yKSlcXG4gXFx0XFx0XFx0Z290byBlbmRfaW87XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXpvbmVkLmMgYi9ibG9jay9ibGstem9uZWQuY1xcbmluZGV4IGE1YWZiODQyYmYzNWUuLmYxNzA2OTMwOWFjOWQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLXpvbmVkLmNcXG4rKysgYi9ibG9jay9ibGstem9uZWQuY1xcbkBAIC0zOSw2ICszOSwxMDMgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHpvbmVfY29uZF9uYW1lW10gPSB7XFxuIH07XFxuICN1bmRlZiBaT05FX0NPTkRfTkFNRVxcbiBcXG4rLypcXG4rICogSW50ZXJuYWwgYW5kIGNvbXBhY3QgcmVwcmVzZW50YXRpb24gb2YgZW51bSBibGtfem9uZV9jb25kIHZhbHVlcyBmb3Igem9uZVxcbisgKiBjb25kaXRpb25zLiBBbGwgdGhlc2UgdmFsdWVzIGZpdCBpbnRvIDQtYml0cywgYWxsb3dpbmcgdXNpbmcgdGhlIGhpZ2ggb3JkZXJcXG4rICogYml0cyBhcyB0aGUgem9uZSB0eXBlLlxcbisgKi9cXG4rZW51bSBibGtfenN0YXRlIHtcXG4rXFx0QkxLX1pTVEFURV9OT1RfV1BcXHQ9IDB4MDAsXFxuK1xcdEJMS19aU1RBVEVfRU1QVFlcXHQ9IDB4MDEsXFxuK1xcdEJMS19aU1RBVEVfSU1QX09QRU5cXHQ9IDB4MDIsXFxuK1xcdEJMS19aU1RBVEVfRVhQX09QRU5cXHQ9IDB4MDMsXFxuK1xcdEJMS19aU1RBVEVfQ0xPU0VEXFx0PSAweDA0LFxcbitcXHRCTEtfWlNUQVRFX1JFQURPTkxZXFx0PSAweDA1LFxcbitcXHRCTEtfWlNUQVRFX0ZVTExcXHRcXHQ9IDB4MDYsXFxuK1xcdEJMS19aU1RBVEVfT0ZGTElORVxcdD0gMHgwNyxcXG4rXFx0QkxLX1pTVEFURV9BQ1RJVkVcXHQ9IDB4MDgsXFxuK1xcbitcXHRCTEtfWlNUQVRFX0NPTkRfTUFTS1xcdD0gMHgwRixcXG4rXFxuK1xcdC8qIENvbnZlbnRpb25hbCB6b25lLiAqL1xcbitcXHRCTEtfWkZMQUdfQ09OVlxcdFxcdD0gMHg4MCxcXG4rXFx0QkxLX1pTVEFURV9GTEFHU19NQVNLXFx0PSB+QkxLX1pTVEFURV9DT05EX01BU0ssXFxuK307XFxuK1xcbisvKlxcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGVudW0gYmxrX3pzdGF0ZSBjb25kaXRpb25zIGludG8gZW51bVxcbisgKiBibGtfem9uZV9jb25kaXRpb24gdmFsdWVzLlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHU4IGJsa196c3RhdGUyemNvbmRbXSA9IHtcXG4rXFx0W0JMS19aU1RBVEVfTk9UX1dQXVxcdD0gQkxLX1pPTkVfQ09ORF9OT1RfV1AsXFxuK1xcdFtCTEtfWlNUQVRFX0VNUFRZXVxcdD0gQkxLX1pPTkVfQ09ORF9FTVBUWSxcXG4rXFx0W0JMS19aU1RBVEVfSU1QX09QRU5dXFx0PSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOLFxcbitcXHRbQkxLX1pTVEFURV9FWFBfT1BFTl1cXHQ9IEJMS19aT05FX0NPTkRfRVhQX09QRU4sXFxuK1xcdFtCTEtfWlNUQVRFX0NMT1NFRF1cXHQ9IEJMS19aT05FX0NPTkRfQ0xPU0VELFxcbitcXHRbQkxLX1pTVEFURV9SRUFET05MWV1cXHQ9IEJMS19aT05FX0NPTkRfUkVBRE9OTFksXFxuK1xcdFtCTEtfWlNUQVRFX0ZVTExdXFx0PSBCTEtfWk9ORV9DT05EX0ZVTEwsXFxuK1xcdFtCTEtfWlNUQVRFX09GRkxJTkVdXFx0PSBCTEtfWk9ORV9DT05EX09GRkxJTkUsXFxuK1xcdFtCTEtfWlNUQVRFX0FDVElWRV1cXHQ9IEJMS19aT05FX0NPTkRfQUNUSVZFLFxcbit9O1xcbitcXG4rc3RhdGljIGlubGluZSBlbnVtIGJsa196b25lX2NvbmQgYmxrX3pzdGF0ZV90b196b25lX2NvbmQoZW51bSBibGtfenN0YXRlIHpzKVxcbit7XFxuK1xcdHU4IGlkeCA9IHpzIFxcdTAwMjYgQkxLX1pTVEFURV9DT05EX01BU0s7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGlkeCBcXHUwMDNlPSBBUlJBWV9TSVpFKGJsa196c3RhdGUyemNvbmQpKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gYmxrX3pzdGF0ZTJ6Y29uZFtpZHhdO1xcbit9XFxuK1xcbisvKlxcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGludG8gYW4gZW51bVxcbisgKiBibGtfenN0YXRlIGNvbmRpdGlvbiB2YWx1ZS4gVG8ga2VlcCB0aGUgbG9va3VwIHRhYmxlIHNtYWxsLCB0aGVcXG4rICogQkxLX1pPTkVfQ09ORF9BQ1RJVkUgY29uZGl0aW9uIGlzIG5vdCBhZGRlZCBhbmQgaGFuZGxlZCBzZXBhcmF0ZWx5LlxcbisgKi9cXG4rc3RhdGljIGNvbnN0IHU4IGJsa196Y29uZDJ6c3RhdGVbXSA9IHtcXG4rXFx0W0JMS19aT05FX0NPTkRfTk9UX1dQXVxcdFxcdD0gQkxLX1pTVEFURV9OT1RfV1AsXFxuK1xcdFtCTEtfWk9ORV9DT05EX0VNUFRZXVxcdFxcdD0gQkxLX1pTVEFURV9FTVBUWSxcXG4rXFx0W0JMS19aT05FX0NPTkRfSU1QX09QRU5dXFx0PSBCTEtfWlNUQVRFX0FDVElWRSxcXG4rXFx0W0JMS19aT05FX0NPTkRfRVhQX09QRU5dXFx0PSBCTEtfWlNUQVRFX0FDVElWRSxcXG4rXFx0W0JMS19aT05FX0NPTkRfQ0xPU0VEXVxcdFxcdD0gQkxLX1pTVEFURV9BQ1RJVkUsXFxuK1xcdFtCTEtfWk9ORV9DT05EX1JFQURPTkxZXVxcdD0gQkxLX1pTVEFURV9SRUFET05MWSxcXG4rXFx0W0JMS19aT05FX0NPTkRfRlVMTF1cXHRcXHQ9IEJMS19aU1RBVEVfRlVMTCxcXG4rXFx0W0JMS19aT05FX0NPTkRfT0ZGTElORV1cXHRcXHQ9IEJMS19aU1RBVEVfT0ZGTElORSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgZW51bSBibGtfenN0YXRlIGJsa196b25lX2NvbmRfdG9fenN0YXRlKGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxcbit7XFxuK1xcdGlmIChjb25kID09IEJMS19aT05FX0NPTkRfQUNUSVZFKVxcbitcXHRcXHRyZXR1cm4gQkxLX1pTVEFURV9BQ1RJVkU7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKGNvbmQgXFx1MDAzZT0gQVJSQVlfU0laRShibGtfemNvbmQyenN0YXRlKSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIGJsa196Y29uZDJ6c3RhdGVbY29uZF07XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbWJpbmUgYW4gZW51bSBibGtfem9uZV9jb25kaXRpb24gYW5kIHpvbmUgZmxhZ3MgaW50byBhIHpvbmVzX3N0YXRlIGFycmF5XFxuKyAqIGVudHJ5LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSB2b2lkIGJsa196c3RhdGVfc2V0KHU4ICp6b25lc19zdGF0ZSwgdW5zaWduZWQgaW50IHpubyxcXG4rXFx0XFx0XFx0XFx0ICBlbnVtIGJsa196b25lX2NvbmQgY29uZCwgdTggZmxhZ3MpXFxuK3tcXG4rXFx0aWYgKHpvbmVzX3N0YXRlKVxcbitcXHRcXHR6b25lc19zdGF0ZVt6bm9dID0gZmxhZ3MgfCBibGtfem9uZV9jb25kX3RvX3pzdGF0ZShjb25kKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1OCBibGtfenN0YXRlX2ZsYWdzKGVudW0gYmxrX3pzdGF0ZSB6cylcXG4re1xcbitcXHRyZXR1cm4genMgXFx1MDAyNiBCTEtfWlNUQVRFX0ZMQUdTX01BU0s7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBibGtfenN0YXRlX2lzX2NvbnYoZW51bSBibGtfenN0YXRlIHpzKVxcbit7XFxuK1xcdHJldHVybiBibGtfenN0YXRlX2ZsYWdzKHpzKSBcXHUwMDI2IEJMS19aRkxBR19DT05WO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBQZXItem9uZSB3cml0ZSBwbHVnLlxcbiAgKiBAbm9kZTogaGxpc3Rfbm9kZSBzdHJ1Y3R1cmUgZm9yIG1hbmFnaW5nIHRoZSBwbHVnIHVzaW5nIGEgaGFzaCB0YWJsZS5cXG5AQCAtMTM1LDU1ICsyMzIsNjQgQEAgY29uc3QgY2hhciAqYmxrX3pvbmVfY29uZF9zdHIoZW51bSBibGtfem9uZV9jb25kIHpvbmVfY29uZClcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9jb25kX3N0cik7XFxuIFxcbi1zdGF0aWMgdm9pZCBibGtfem9uZV9zZXRfY29uZCh1OCAqem9uZXNfY29uZCwgdW5zaWduZWQgaW50IHpubyxcXG4tXFx0XFx0XFx0ICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpXFxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxcbitcXHRcXHRcXHQgICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpXFxuIHtcXG4tXFx0aWYgKCF6b25lc19jb25kKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHVuc2lnbmVkIGludCB6bm8gPSBkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKTtcXG4rXFx0dTggKnpvbmVzX3N0YXRlO1xcbiBcXG4tXFx0c3dpdGNoIChjb25kKSB7XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9JTVBfT1BFTjpcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxcbi1cXHRcXHR6b25lc19jb25kW3pub10gPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfRU1QVFk6XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9GVUxMOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHR6b25lc19jb25kW3pub10gPSBjb25kO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHR6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVxcdTAwM2V6b25lc19zdGF0ZSk7XFxuK1xcdGlmIChsaWtlbHkoem9uZXNfc3RhdGUgXFx1MDAyNlxcdTAwMjYgem5vIFxcdTAwM2MgZGlzay1cXHUwMDNlbnJfem9uZXMpKVxcbitcXHRcXHRibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLFxcbitcXHRcXHRcXHQgICAgICAgYmxrX3pzdGF0ZV9mbGFncyh6b25lc19zdGF0ZVt6bm9dKSk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcXG4tXFx0XFx0XFx0ICAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxcbitzdGF0aWMgaW5saW5lIHU4IGRpc2tfem9uZV9nZXRfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcilcXG4ge1xcbi1cXHR1OCAqem9uZXNfY29uZDtcXG4rXFx0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xcbitcXHR1OCAqem9uZXNfc3RhdGUsIHpzO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXFx1MDAzZXpvbmVzX2NvbmQpO1xcbi1cXHRpZiAoem9uZXNfY29uZCkge1xcbi1cXHRcXHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XFxuLVxcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBUaGUgY29uZGl0aW9uIG9mIGEgY29udmVudGlvbmFsLCByZWFkb25seSBhbmQgb2ZmbGluZSB6b25lc1xcbi1cXHRcXHQgKiBuZXZlciBjaGFuZ2VzLCBzbyBkbyBub3RoaW5nIGlmIHRoZSB0YXJnZXQgem9uZSBpcyBpbiBvbmUgb2ZcXG4tXFx0XFx0ICogdGhlc2UgY29uZGl0aW9ucy5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdHN3aXRjaCAoem9uZXNfY29uZFt6bm9dKSB7XFxuLVxcdFxcdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XFxuLVxcdFxcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcXG4tXFx0XFx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRibGtfem9uZV9zZXRfY29uZCh6b25lc19jb25kLCB6bm8sIGNvbmQpO1xcbi1cXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXFx1MDAzZXpvbmVzX3N0YXRlKTtcXG4rXFx0aWYgKGxpa2VseSh6b25lc19zdGF0ZSBcXHUwMDI2XFx1MDAyNiB6bm8gXFx1MDAzYyBkaXNrLVxcdTAwM2Vucl96b25lcykpXFxuK1xcdFxcdHpzID0gem9uZXNfc3RhdGVbem5vXTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR6cyA9IDA7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHpzO1xcbit9XFxuK1xcbitzdGF0aWMgZW51bSBibGtfem9uZV9jb25kIGRpc2tfem9uZV9nZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XFxuK1xcbitcXHRyZXR1cm4gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2xcXG4rZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShlbnVtIGJsa196b25lX2NvbmQgY29uZClcXG4re1xcbitcXHRyZXR1cm4gY29uZCA9PSBCTEtfWk9ORV9DT05EX1JFQURPTkxZIHx8XFxuK1xcdFxcdGNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZGlza196b25lX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQgPSBkaXNrX3pvbmVfZ2V0X2NvbmQoZGlzaywgc2VjdG9yKTtcXG4rXFxuK1xcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBkaXNrX3pvbmVfaXNfc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XFxuK1xcbitcXHRyZXR1cm4gIWJsa196c3RhdGVfaXNfY29udih6cyk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC0xOTUsMjMgKzMwMSwzNiBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcXG4gICovXFxuIGJvb2wgYmRldl96b25lX2lzX3NlcShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXFxuIHtcXG4tXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBiZGV2LVxcdTAwM2ViZF9kaXNrO1xcbi1cXHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XFxuLVxcdGJvb2wgaXNfc2VxID0gZmFsc2U7XFxuLVxcdHU4ICp6b25lc19jb25kO1xcbitcXHRpZiAoIWJkZXZfaXNfem9uZWQoYmRldikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBkaXNrX3pvbmVfaXNfc2VxKGJkZXYtXFx1MDAzZWJkX2Rpc2ssIHNlY3Rvcik7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7XFxuK1xcbisvKipcXG4rICogYmRldl9jaGVja196b25lX21nbXQgLSBjaGVjayBpZiBhIHNlY3RvciBiZWxvbmdzIHRvIGEgdmFsaWQgc2VxdWVudGlhbCB6b25lXFxuKyAqIEBiZGV2OiAgICAgICBibG9jayBkZXZpY2UgdG8gY2hlY2tcXG4rICogQHNlY3RvcjogICAgIHNlY3RvciBudW1iZXJcXG4rICpcXG4rICogQ2hlY2sgaWYgQHNlY3RvciBvbiBAYmRldiBpcyBjb250YWluZWQgaW4gYSBzZXF1ZW50aWFsIHdyaXRlIHJlcXVpcmVkIHpvbmVcXG4rICogdGhhdCBpcyBub3Qgb2ZmbGluZSBub3IgcmVhZC1vbmx5LlxcbisgKi9cXG4rYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQ7XFxuK1xcdHU4IHpzO1xcbiBcXG4gXFx0aWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdHpvbmVzX2NvbmQgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cXHUwMDNlem9uZXNfY29uZCk7XFxuLVxcdGlmICh6b25lc19jb25kIFxcdTAwMjZcXHUwMDI2IHpubyBcXHUwMDNjIGRpc2stXFx1MDAzZW5yX3pvbmVzKVxcbi1cXHRcXHRpc19zZXEgPSB6b25lc19jb25kW3pub10gIT0gQkxLX1pPTkVfQ09ORF9OT1RfV1A7XFxuLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHR6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi1cXHUwMDNlYmRfZGlzaywgc2VjdG9yKTtcXG4rXFx0aWYgKGJsa196c3RhdGVfaXNfY29udih6cykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdHJldHVybiBpc19zZXE7XFxuK1xcdGNvbmQgPSBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XFxuK1xcdHJldHVybiAhZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShjb25kKTtcXG4gfVxcbi1FWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcXG4gXFxuIC8qXFxuICAqIFpvbmUgcmVwb3J0IGFyZ3VtZW50cyBmb3IgYmxvY2sgZGV2aWNlIGRyaXZlcnMgcmVwb3J0X3pvbmVzIG9wZXJhdGlvbi5cXG5AQCAtNTAwLDEyICs2MTksMTcgQEAgc3RhdGljIGJvb2wgZGlza196b25lX3dwbHVnX2lzX2Z1bGwoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHJldHVybiB6d3BsdWctXFx1MDAzZXdwX29mZnNldCBcXHUwMDNlPSBkaXNrLVxcdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxcbit7XFxuK1xcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1Zy1cXHUwMDNlY29uZCk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxcbiB7XFxuIFxcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbGc7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuLVxcdHU4ICp6b25lc19jb25kO1xcbitcXHR1OCAqem9uZXNfc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGludCBpZHggPVxcbiBcXHRcXHRoYXNoXzMyKHp3cGx1Zy1cXHUwMDNlem9uZV9ubywgZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9iaXRzKTtcXG4gXFxuQEAgLTUyNCwxNSArNjQ4LDE2IEBAIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuLVxcdCAqIFNldCB0aGUgem9uZSBjb25kaXRpb246IGlmIHdlIGRvIG5vdCB5ZXQgaGF2ZSBhIHpvbmVzX2NvbmQgYXJyYXlcXG4rXFx0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfc3RhdGUgYXJyYXlcXG4gXFx0ICogYXR0YWNoZWQgdG8gdGhlIGRpc2ssIHRoZW4gdGhpcyBpcyBhIHpvbmUgd3JpdGUgcGx1ZyBpbnNlcnQgZnJvbSB0aGVcXG4gXFx0ICogZmlyc3QgY2FsbCB0byBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKCksIGluIHdoaWNoIGNhc2UgdGhlIHpvbmUgaXNcXG4gXFx0ICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLlxcbiBcXHQgKi9cXG4tXFx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVxcdTAwM2V6b25lc19jb25kLFxcbitcXHR6b25lc19zdGF0ZSA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVxcdTAwM2V6b25lc19zdGF0ZSxcXG4gXFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcXG4tXFx0aWYgKHpvbmVzX2NvbmQpXFxuLVxcdFxcdHp3cGx1Zy1cXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbendwbHVnLVxcdTAwM2V6b25lX25vXTtcXG4rXFx0aWYgKHpvbmVzX3N0YXRlKVxcbitcXHRcXHR6d3BsdWctXFx1MDAzZWNvbmQgPVxcbitcXHRcXHRcXHRibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6b25lc19zdGF0ZVt6d3BsdWctXFx1MDAzZXpvbmVfbm9dKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHR6d3BsdWctXFx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcXG4gXFxuQEAgLTU3NCw2ICs2OTksMjYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKmRpc2tfZ2V0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHJldHVybiBkaXNrX2dldF9oYXNoZWRfem9uZV93cGx1ZyhkaXNrLCBzZWN0b3IpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgdm9pZCAoKmFjdG9yKShzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgdm9pZCAqKSxcXG4rXFx0XFx0XFx0XFx0ICAgICB2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFxuK1xcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKykge1xcbitcXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLCBcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaFtpXSxcXG4rXFx0XFx0XFx0XFx0XFx0IG5vZGUpXFxuK1xcdFxcdFxcdGFjdG9yKHp3cGx1ZywgZGF0YSk7XFxuK1xcdH1cXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxcbiB7XFxuIFxcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnID1cXG5AQCAtNTkyLDkgKzczNyw5IEBAIHN0YXRpYyB2b2lkIGRpc2tfZnJlZV96b25lX3dwbHVnKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxcbiBcXHRXQVJOX09OX09OQ0UoIWJpb19saXN0X2VtcHR5KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWJpb19saXN0KSk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XFxuLVxcdGJsa196b25lX3NldF9jb25kKHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVxcdTAwM2V6b25lc19jb25kLFxcbitcXHRibGtfenN0YXRlX3NldChyY3VfZGVyZWZlcmVuY2VfY2hlY2soZGlzay1cXHUwMDNlem9uZXNfc3RhdGUsXFxuIFxcdFxcdFxcdFxcdGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKSksXFxuLVxcdFxcdFxcdCAgendwbHVnLVxcdTAwM2V6b25lX25vLCB6d3BsdWctXFx1MDAzZWNvbmQpO1xcbitcXHRcXHQgICAgICAgendwbHVnLVxcdTAwM2V6b25lX25vLCB6d3BsdWctXFx1MDAzZWNvbmQsIDApO1xcbiBcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbm9kZSk7XFxuIFxcdGF0b21pY19kZWMoXFx1MDAyNmRpc2stXFx1MDAzZW5yX3pvbmVfd3BsdWdzKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XFxuQEAgLTYwOCw2ICs3NTMsNTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc2tfcHV0X3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXFxuIFxcdFxcdGRpc2tfZnJlZV96b25lX3dwbHVnKHp3cGx1Zyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXFxuK3tcXG4rXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbitcXG4rXFx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XFxuK1xcdGJpb19pb19lcnJvcihiaW8pO1xcbitcXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XFxuK1xcdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xcbitcXHRibGtfcXVldWVfZXhpdChxKTtcXG4rfVxcbitcXG4rLypcXG4rICogQWJvcnQgKGZhaWwpIGFsbCBwbHVnZ2VkIEJJT3Mgb2YgYSB6b25lIHdyaXRlIHBsdWcuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfYWJvcnQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXFxuK3tcXG4rXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSB6d3BsdWctXFx1MDAzZWRpc2s7XFxuK1xcdHN0cnVjdCBiaW8gKmJpbztcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRpZiAoYmlvX2xpc3RfZW1wdHkoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlYmlvX2xpc3QpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCIlczogem9uZSAldTogQWJvcnRpbmcgcGx1Z2dlZCBCSU9zXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgendwbHVnLVxcdTAwM2VkaXNrLVxcdTAwM2VkaXNrX25hbWUsIHp3cGx1Zy1cXHUwMDNlem9uZV9ubyk7XFxuK1xcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWJpb19saXN0KSkpXFxuK1xcdFxcdGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcih6d3BsdWcsIGJpbyk7XFxuK1xcbitcXHR6d3BsdWctXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZVxcbitcXHQgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlXFxuK1xcdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay1cXHUwMDNlcXVldWUpKSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcXG4rXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KSkge1xcbitcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KTtcXG4rXFx0XFx0XFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xcbitcXHR9XFxuK31cXG4rXFxuIC8qXFxuICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlblxcbiAgKiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGUgaGFzaCB0YWJsZS4gVGhlIHpvbmUgd3JpdGUgcGx1ZyB3aWxsIGJlXFxuQEAgLTYyNSw2ICs4MTcsMTIgQEAgc3RhdGljIHZvaWQgZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX2NoZWNrX3pvbmVfd3BsdWdfZGVhZChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcXG4ge1xcbitcXHRpZiAoZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkge1xcbitcXHRcXHRkaXNrX3pvbmVfd3BsdWdfYWJvcnQoendwbHVnKTtcXG4rXFx0XFx0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCEoendwbHVnLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19aT05FX1dQTFVHX0RFQUQpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbkBAIC03MDgsNTMgKzkwNiw2IEBAIHN0YXRpYyBzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKmRpc2tfZ2V0X29yX2FsbG9jX3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdHJldHVybiB6d3BsdWc7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXFxuLXtcXG4tXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbi1cXG4tXFx0YmlvX2NsZWFyX2ZsYWcoYmlvLCBCSU9fWk9ORV9XUklURV9QTFVHR0lORyk7XFxuLVxcdGJpb19pb19lcnJvcihiaW8pO1xcbi1cXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XFxuLVxcdC8qIERyb3AgdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBkaXNrX3pvbmVfd3BsdWdfYWRkX2JpbygpLiAqL1xcbi1cXHRibGtfcXVldWVfZXhpdChxKTtcXG4tfVxcbi1cXG4tLypcXG4tICogQWJvcnQgKGZhaWwpIGFsbCBwbHVnZ2VkIEJJT3Mgb2YgYSB6b25lIHdyaXRlIHBsdWcuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfYWJvcnQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXFxuLXtcXG4tXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSB6d3BsdWctXFx1MDAzZWRpc2s7XFxuLVxcdHN0cnVjdCBiaW8gKmJpbztcXG4tXFxuLVxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jayk7XFxuLVxcbi1cXHRpZiAoYmlvX2xpc3RfZW1wdHkoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlYmlvX2xpc3QpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHRwcl93YXJuX3JhdGVsaW1pdGVkKFxcXCIlczogem9uZSAldTogQWJvcnRpbmcgcGx1Z2dlZCBCSU9zXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgendwbHVnLVxcdTAwM2VkaXNrLVxcdTAwM2VkaXNrX25hbWUsIHp3cGx1Zy1cXHUwMDNlem9uZV9ubyk7XFxuLVxcdHdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWJpb19saXN0KSkpXFxuLVxcdFxcdGJsa196b25lX3dwbHVnX2Jpb19pb19lcnJvcih6d3BsdWcsIGJpbyk7XFxuLVxcbi1cXHR6d3BsdWctXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogSWYgd2UgYXJlIHVzaW5nIHRoZSBwZXIgZGlzayB6b25lIHdyaXRlIHBsdWdzIHdvcmtlciB0aHJlYWQsIHJlbW92ZVxcbi1cXHQgKiB0aGUgem9uZSB3cml0ZSBwbHVnIGZyb20gdGhlIHdvcmsgbGlzdCBhbmQgZHJvcCB0aGUgcmVmZXJlbmNlIHdlXFxuLVxcdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXFxuLVxcdCAqL1xcbi1cXHRpZiAoYmxrX3F1ZXVlX3pvbmVkX3FkMV93cml0ZXMoZGlzay1cXHUwMDNlcXVldWUpKSB7XFxuLVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdF9sb2NrKTtcXG4tXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KSkge1xcbi1cXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZ6d3BsdWctXFx1MDAzZWVudHJ5KTtcXG4tXFx0XFx0XFx0ZGlza19wdXRfem9uZV93cGx1Zyh6d3BsdWcpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xcbi1cXHR9XFxuLX1cXG4tXFxuIC8qXFxuICAqIFVwZGF0ZSBhIHpvbmUgd3JpdGUgcGx1ZyBjb25kaXRpb24gYmFzZWQgb24gdGhlIHdyaXRlIHBvaW50ZXIgb2Zmc2V0LlxcbiAgKi9cXG5AQCAtNzg1LDggKzkzNiwxMCBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFxuIFxcdC8qIFVwZGF0ZSB0aGUgem9uZSB3cml0ZSBwb2ludGVyIGFuZCBhYm9ydCBhbGwgcGx1Z2dlZCBCSU9zLiAqL1xcbiBcXHR6d3BsdWctXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURTtcXG4tXFx0endwbHVnLVxcdTAwM2V3cF9vZmZzZXQgPSB3cF9vZmZzZXQ7XFxuLVxcdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xcbitcXHRpZiAoIWRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1ZykpIHtcXG4rXFx0XFx0endwbHVnLVxcdTAwM2V3cF9vZmZzZXQgPSB3cF9vZmZzZXQ7XFxuK1xcdFxcdGRpc2tfem9uZV93cGx1Z191cGRhdGVfY29uZChkaXNrLCB6d3BsdWcpO1xcbitcXHR9XFxuIFxcbiBcXHRkaXNrX3pvbmVfd3BsdWdfYWJvcnQoendwbHVnKTtcXG4gXFx0aWYgKCF6d3BsdWctXFx1MDAzZXdwX29mZnNldCB8fCBkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpKVxcbkBAIC04MTYsOCArOTY5LDggQEAgc3RhdGljIHVuc2lnbmVkIGludCBibGtfem9uZV93cF9vZmZzZXQoc3RydWN0IGJsa196b25lICp6b25lKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfd3Bfb2Zmc2V0KHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXFxuIHtcXG4gXFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XFxuIFxcdHVuc2lnbmVkIGludCB3cF9vZmZzZXQgPSBibGtfem9uZV93cF9vZmZzZXQoem9uZSk7XFxuQEAgLTgyOSw2ICs5ODIsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0aWYgKHp3cGx1Zy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURSlcXG4gXFx0XFx0XFx0ZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoZGlzaywgendwbHVnLCB3cF9vZmZzZXQpO1xcbitcXHRcXHRpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLVxcdTAwM2Vjb25kKSkge1xcbitcXHRcXHRcXHR6d3BsdWctXFx1MDAzZWNvbmQgPSB6b25lLVxcdTAwM2Vjb25kO1xcbitcXHRcXHRcXHRkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7XFxuK1xcdFxcdH1cXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2endwbHVnLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcdFxcdGRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTtcXG4gXFx0fVxcbkBAIC04NzEsNyArMTAyOCw3IEBAIGludCBkaXNrX3JlcG9ydF96b25lKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsXFxuIFxcdH1cXG4gXFxuIFxcdGlmIChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKVxcbi1cXHRcXHRkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XFxuK1xcdFxcdGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpO1xcbiBcXG4gXFx0aWYgKGFyZ3MgXFx1MDAyNlxcdTAwMjYgYXJncy1cXHUwMDNlY2IpXFxuIFxcdFxcdHJldHVybiBhcmdzLVxcdTAwM2VjYih6b25lLCBpZHgsIGFyZ3MtXFx1MDAzZWRhdGEpO1xcbkBAIC05NDAsNyArMTA5Nyw3IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuIFxcdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGJkZXZfem9uZV9zZWN0b3JzKGJkZXYpO1xcbiBcXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZztcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFx0dTggKnpvbmVzX2NvbmQ7XFxuK1xcdHU4ICp6b25lc19zdGF0ZSwgenM7XFxuIFxcbiBcXHRpZiAoIWJkZXZfaXNfem9uZWQoYmRldikpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5AQCAtOTU1LDEyICsxMTEyLDE4IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuIFxcdFxcdHJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTtcXG4gXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVxcdTAwM2V6b25lc19jb25kKTtcXG4tXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoIHx8ICF6b25lc19jb25kKSB7XFxuK1xcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXFx1MDAzZXpvbmVzX3N0YXRlKTtcXG4rXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoIHx8ICF6b25lc19zdGF0ZSkge1xcbiBcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFx0XFx0cmV0dXJuIGJsa2Rldl9yZXBvcnRfem9uZV9mYWxsYmFjayhiZGV2LCBzZWN0b3IsIHpvbmUpO1xcbiBcXHR9XFxuLVxcdHpvbmUtXFx1MDAzZWNvbmQgPSB6b25lc19jb25kW2Rpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpXTtcXG4rXFxuK1xcdHpzID0gem9uZXNfc3RhdGVbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildO1xcbitcXHR6b25lLVxcdTAwM2Vjb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xcbitcXHRpZiAoYmxrX3pzdGF0ZV9pc19jb252KHpzKSlcXG4rXFx0XFx0em9uZS1cXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMO1xcbitcXHRlbHNlXFxuK1xcdFxcdHpvbmUtXFx1MDAzZXR5cGUgPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHR6b25lLVxcdTAwM2VzdGFydCA9IHNlY3RvcjtcXG5AQCAtOTcwLDggKzExMzMsNyBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxcbiBcXHQgKiBJZiB0aGlzIGlzIGEgY29udmVudGlvbmFsIHpvbmUsIHdlIGRvIG5vdCBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIGFuZFxcbiBcXHQgKiBjYW4gcmVwb3J0IHRoZSB6b25lIGltbWVkaWF0ZWx5LlxcbiBcXHQgKi9cXG4tXFx0aWYgKHpvbmUtXFx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9OT1RfV1ApIHtcXG4tXFx0XFx0em9uZS1cXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMO1xcbitcXHRpZiAoem9uZS1cXHUwMDNldHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkge1xcbiBcXHRcXHR6b25lLVxcdTAwM2VjYXBhY2l0eSA9IHpvbmVfc2VjdG9ycztcXG4gXFx0XFx0em9uZS1cXHUwMDNld3AgPSBVTExPTkdfTUFYO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG5AQCAtOTgyLDE0ICsxMTQ0LDEyIEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuIFxcdCAqIG9mZmxpbmUsIG9ubHkgc2V0IHRoZSB6b25lIHdyaXRlIHBvaW50ZXIgdG8gYW4gaW52YWxpZCB2YWx1ZSBhbmRcXG4gXFx0ICogcmVwb3J0IHRoZSB6b25lLlxcbiBcXHQgKi9cXG4tXFx0em9uZS1cXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRO1xcbiBcXHRpZiAoZGlza196b25lX2lzX2xhc3QoZGlzaywgem9uZSkpXFxuIFxcdFxcdHpvbmUtXFx1MDAzZWNhcGFjaXR5ID0gZGlzay1cXHUwMDNlbGFzdF96b25lX2NhcGFjaXR5O1xcbiBcXHRlbHNlXFxuIFxcdFxcdHpvbmUtXFx1MDAzZWNhcGFjaXR5ID0gZGlzay1cXHUwMDNlem9uZV9jYXBhY2l0eTtcXG4gXFxuLVxcdGlmICh6b25lLVxcdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHxcXG4tXFx0ICAgIHpvbmUtXFx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FKSB7XFxuK1xcdGlmIChkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHpvbmUtXFx1MDAzZWNvbmQpKSB7XFxuIFxcdFxcdHpvbmUtXFx1MDAzZXdwID0gVUxMT05HX01BWDtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG5AQCAtMTEwOCwzNCArMTI2OCwzMiBAQCBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9iaW9fZW5kaW8oc3RydWN0IGJpbyAqYmlvKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19yZXNldF93cChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zywgdm9pZCAqZGF0YSlcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldCh6d3BsdWctXFx1MDAzZWRpc2ssIHp3cGx1ZywgMCk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9hbGxfYmlvX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJpby1cXHUwMDNlYmlfYmRldi1cXHUwMDNlYmRfZGlzaztcXG4tXFx0c2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7XFxuLVxcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xcbi1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHRzZWN0b3JfdCBzZWN0b3I7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4tXFx0aWYgKGF0b21pY19yZWFkKFxcdTAwMjZkaXNrLVxcdTAwM2Vucl96b25lX3dwbHVncykpIHtcXG4tXFx0XFx0LyogVXBkYXRlIHRoZSBjb25kaXRpb24gb2YgYWxsIHpvbmUgd3JpdGUgcGx1Z3MuICovXFxuLVxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpKyspIHtcXG4tXFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgbm9kZSkge1xcbi1cXHRcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2endwbHVnLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuLVxcdFxcdFxcdFxcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KGRpc2ssIHp3cGx1ZywgMCk7XFxuLVxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnp3cGx1Zy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLVxcdH1cXG4rXFx0LyogVXBkYXRlIHRoZSBjb25kaXRpb24gb2YgYWxsIHpvbmUgd3JpdGUgcGx1Z3MuICovXFxuK1xcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2ZGlzay1cXHUwMDNlbnJfem9uZV93cGx1Z3MpKVxcbitcXHRcXHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MoZGlzaywgZGlza196b25lX3dwbHVnX3Jlc2V0X3dwLCBOVUxMKTtcXG4gXFxuIFxcdC8qIFVwZGF0ZSB0aGUgY2FjaGVkIHpvbmUgY29uZGl0aW9ucy4gKi9cXG4tXFx0Zm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgXFx1MDAzYyBjYXBhY2l0eTtcXG4tXFx0ICAgICBzZWN0b3IgKz0gYmRldl96b25lX3NlY3RvcnMoYmlvLVxcdTAwM2ViaV9iZGV2KSlcXG4rXFx0Zm9yIChzZWN0b3IgPSAwOyBzZWN0b3IgXFx1MDAzYyBnZXRfY2FwYWNpdHkoZGlzayk7XFxuK1xcdCAgICAgc2VjdG9yICs9IGJkZXZfem9uZV9zZWN0b3JzKGJpby1cXHUwMDNlYmlfYmRldikpIHtcXG4rXFx0XFx0aWYgKCFkaXNrX3pvbmVfaXNfc2VxKGRpc2ssIHNlY3RvcikgfHxcXG4rXFx0XFx0ICAgIGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGRpc2ssIHNlY3RvcikpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRkaXNrX3pvbmVfc2V0X2NvbmQoZGlzaywgc2VjdG9yLCBCTEtfWk9ORV9DT05EX0VNUFRZKTtcXG4rXFx0fVxcbiBcXHRjbGVhcl9iaXQoR0RfWk9ORV9BUFBFTkRfVVNFRCwgXFx1MDAyNmRpc2stXFx1MDAzZXN0YXRlKTtcXG4gfVxcbiBcXG5AQCAtMTM4MSwxMSArMTUzOSwxMiBAQCBzdGF0aWMgYm9vbCBibGtfem9uZV93cGx1Z19wcmVwYXJlX2JpbyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwgem9uZS5cXG4tXFx0ICogV2Uga25vdyBzdWNoIEJJTyB3aWxsIGZhaWwsIGFuZCB0aGF0IHdvdWxkIHBvdGVudGlhbGx5IG92ZXJmbG93IG91clxcbi1cXHQgKiB3cml0ZSBwb2ludGVyIG9mZnNldCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgem9uZS5cXG4rXFx0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seVxcbitcXHQgKiBvciBvZmZsaW5lIHpvbmUuIFdlIGtub3cgc3VjaCBCSU9zIHdpbGwgZmFpbCwgc28gdGhlcmUgaXMgbm8gcG9pbnRcXG4rXFx0ICogaW4gaXNzdWluZyB0aGVtLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXFxuK1xcdGlmIChkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpIHx8XFxuK1xcdCAgICBkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAoYmlvX29wKGJpbykgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XFxuQEAgLTE0NDIsNyArMTYwMSw3IEBAIHN0YXRpYyBib29sIGJsa196b25lX3dwbHVnX2hhbmRsZV93cml0ZShzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBucl9zZWdzKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBDb252ZW50aW9uYWwgem9uZXMgZG8gbm90IG5lZWQgd3JpdGUgcGx1Z2dpbmcuICovXFxuLVxcdGlmICghYmRldl96b25lX2lzX3NlcShiaW8tXFx1MDAzZWJpX2JkZXYsIHNlY3RvcikpIHtcXG4rXFx0aWYgKCFkaXNrX3pvbmVfaXNfc2VxKGRpc2ssIHNlY3RvcikpIHtcXG4gXFx0XFx0LyogWm9uZSBhcHBlbmQgdG8gY29udmVudGlvbmFsIHpvbmVzIGlzIG5vdCBhbGxvd2VkLiAqL1xcbiBcXHRcXHRpZiAoYmlvX29wKGJpbykgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XFxuIFxcdFxcdFxcdGJpb19pb19lcnJvcihiaW8pO1xcbkBAIC0xODU0LDEyICsyMDEzLDIwIEBAIHN0YXRpYyBpbnQgZGlza196b25lX3dwbHVnc193b3JrZXIodm9pZCAqZGF0YSlcXG4gXFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNmRpc2stXFx1MDAzZW5yX3pvbmVfd3BsdWdzLCAwKTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdCk7XFxuIFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyX2Jpb19kb25lKTtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4re1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcXHUwMDI2ZGlzay1cXHUwMDNlcXVldWUtXFx1MDAzZWxpbWl0cztcXG4rXFxuK1xcdHJldHVybiBESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLVxcdTAwM2VjaHVua19zZWN0b3JzKTtcXG4rfVxcbitcXG4gLypcXG4gICogRm9yIHRoZSBzaXplIG9mIGEgZGlzayB6b25lIHdyaXRlIHBsdWcgaGFzaCB0YWJsZSwgdXNlIHRoZSBzaXplIG9mIHRoZVxcbiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmRcXG5AQCAtMTg2OSwxMyArMjAzNiwyMSBAQCB2b2lkIGRpc2tfaW5pdF96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4gI2RlZmluZSBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTXFx0XFx0OVxcbiAjZGVmaW5lIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFXFx0MTI4XFxuIFxcbi1zdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZSlcXG4rc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbitcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcXHUwMDI2ZGlzay1cXHUwMDNlcXVldWUtXFx1MDAzZWxpbWl0cztcXG4rXFx0dW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XFxuK1xcdHVuc2lnbmVkIGludCBwb29sX3NpemUsIGk7XFxuIFxcdGludCByZXQgPSAtRU5PTUVNO1xcbiBcXG4tXFx0YXRvbWljX3NldChcXHUwMDI2ZGlzay1cXHUwMDNlbnJfem9uZV93cGx1Z3MsIDApO1xcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXFxuK1xcdCAqIHpvbmVzLCB1c2UgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUuXFxuK1xcdCAqL1xcbitcXHRwb29sX3NpemUgPSBtYXgobGltLVxcdTAwM2VtYXhfb3Blbl96b25lcywgbGltLVxcdTAwM2VtYXhfYWN0aXZlX3pvbmVzKTtcXG4rXFx0aWYgKCFwb29sX3NpemUpXFxuK1xcdFxcdHBvb2xfc2l6ZSA9IG1pbihCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSwgbnJfem9uZXMpO1xcbitcXG4gXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9iaXRzID1cXG4gXFx0XFx0bWluKGlsb2cyKHBvb2xfc2l6ZSkgKyAxLCBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTKTtcXG4gXFxuQEAgLTE4OTMsMjEgKzIwNjgsNiBAQCBzdGF0aWMgaW50IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbClcXG4gXFx0XFx0Z290byBmcmVlX2hhc2g7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBtYXkgYWxyZWFkeSBoYXZlIGEgem9uZSB3cml0ZSBwbHVnIHdvcmtxdWV1ZSBhcyB0aGlzIGZ1bmN0aW9uIG1heVxcbi1cXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcXG4tXFx0ICogdGhlIHdvcmtxdWV1ZSAodGhlIHpvbmUgd3JpdGUgcGx1Z3Mgd29ya3F1ZXVlIGlzIGRlc3Ryb3llZCBhdFxcbi1cXHQgKiBkaXNrX3JlbGVhc2UoKSB0aW1lKS5cXG4tXFx0ICovXFxuLVxcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcXG4tXFx0XFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EgPVxcbi1cXHRcXHRcXHRhbGxvY193b3JrcXVldWUoXFxcIiVzX3p3cGx1Z3NcXFwiLFxcbi1cXHRcXHRcXHRcXHRcXHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXFxuLVxcdFxcdFxcdFxcdFxcdHBvb2xfc2l6ZSwgZGlzay1cXHUwMDNlZGlza19uYW1lKTtcXG4tXFx0XFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSlcXG4tXFx0XFx0XFx0Z290byBkZXN0cm95X3Bvb2w7XFxuLVxcdH1cXG4tXFxuIFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9XFxuIFxcdFxcdGt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLFxcbiBcXHRcXHRcXHQgICAgICAgXFxcIiVzX3p3cGx1Z3Nfd29ya2VyXFxcIiwgZGlzay1cXHUwMDNlZGlza19uYW1lKTtcXG5AQCAtMTkxOCw4ICsyMDc4LDE4IEBAIHN0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcXG4gXFx0fVxcbiBcXHR3YWtlX3VwX3Byb2Nlc3MoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcXG4gXFxuK1xcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxID1cXG4rXFx0XFx0YWxsb2Nfd29ya3F1ZXVlKFxcXCIlc196d3BsdWdzXFxcIixcXG4rXFx0XFx0XFx0XFx0V1FfTUVNX1JFQ0xBSU0gfCBXUV9ISUdIUFJJIHwgV1FfUEVSQ1BVLFxcbitcXHRcXHRcXHRcXHRwb29sX3NpemUsIGRpc2stXFx1MDAzZWRpc2tfbmFtZSk7XFxuK1xcdGlmICghZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpXFxuK1xcdFxcdGdvdG8gc3RvcF93b3JrZXI7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK3N0b3Bfd29ya2VyOlxcbitcXHRrdGhyZWFkX3N0b3AoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcXG4rXFx0ZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcXG4gZGVzdHJveV9wb29sOlxcbiBcXHRtZW1wb29sX2Rlc3Ryb3koZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfcG9vbCk7XFxuIFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wgPSBOVUxMO1xcbkBAIC0xOTYzLDE5ICsyMTMzLDE5IEBAIHN0YXRpYyB2b2lkIGRpc2tfZGVzdHJveV96b25lX3dwbHVnc19oYXNoX3RhYmxlKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19wb29sID0gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgZGlza19zZXRfem9uZXNfY29uZF9hcnJheShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggKnpvbmVzX2NvbmQpXFxuK3N0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfc3RhdGUpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTtcXG4tXFx0em9uZXNfY29uZCA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay1cXHUwMDNlem9uZXNfY29uZCwgem9uZXNfY29uZCxcXG4rXFx0em9uZXNfc3RhdGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGRpc2stXFx1MDAzZXpvbmVzX3N0YXRlLCB6b25lc19zdGF0ZSxcXG4gXFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcXG4gXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRrZnJlZV9yY3VfbWlnaHRzbGVlcCh6b25lc19jb25kKTtcXG4rXFx0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuK3ZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuIFxcdGlmIChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193b3JrZXIpIHtcXG4gXFx0XFx0a3RocmVhZF9zdG9wKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XFxuQEAgLTE5ODMsMzAgKzIxNTMsMjIgQEAgc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiBcXHR9XFxuIFxcdFdBUk5fT05fT05DRSghbGlzdF9lbXB0eShcXHUwMDI2ZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfbGlzdCkpO1xcbiBcXG4tXFx0aWYgKGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxKVxcbi1cXHRcXHRkcmFpbl93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbitcXHRpZiAoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcXG4rXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xcbitcXHRcXHRkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSA9IE5VTEw7XFxuK1xcdH1cXG4gXFxuIFxcdGRpc2tfZGVzdHJveV96b25lX3dwbHVnc19oYXNoX3RhYmxlKGRpc2spO1xcbiBcXG4tXFx0ZGlza19zZXRfem9uZXNfY29uZF9hcnJheShkaXNrLCBOVUxMKTtcXG4rXFx0ZGlza19zZXRfem9uZXNfc3RhdGVfYXJyYXkoZGlzaywgTlVMTCk7XFxuIFxcdGRpc2stXFx1MDAzZXpvbmVfY2FwYWNpdHkgPSAwO1xcbiBcXHRkaXNrLVxcdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSAwO1xcbiBcXHRkaXNrLVxcdTAwM2Vucl96b25lcyA9IDA7XFxuIH1cXG4gXFxuLXZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbi17XFxuLVxcdGlmIChkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSkge1xcbi1cXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShkaXNrLVxcdTAwM2V6b25lX3dwbHVnc193cSk7XFxuLVxcdFxcdGRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4tXFx0ZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbi19XFxuLVxcbiBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcXG4gXFx0c3RydWN0IGdlbmRpc2tcXHQqZGlzaztcXG4tXFx0dThcXHRcXHQqem9uZXNfY29uZDtcXG4rXFx0dThcXHRcXHQqem9uZXNfc3RhdGU7XFxuIFxcdHVuc2lnbmVkIGludFxcdG5yX3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRucl9jb252X3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHR6b25lX2NhcGFjaXR5O1xcbkBAIC0yMDE0LDQ5ICsyMTc2LDI2IEBAIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3Mge1xcbiBcXHRzZWN0b3JfdFxcdHNlY3RvcjtcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbitzdGF0aWMgaW50IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltID0gXFx1MDAyNmRpc2stXFx1MDAzZXF1ZXVlLVxcdTAwM2VsaW1pdHM7XFxuLVxcdHVuc2lnbmVkIGludCBwb29sX3NpemU7XFxuLVxcdGludCByZXQgPSAwO1xcbi1cXG4gXFx0YXJncy1cXHUwMDNlZGlzayA9IGRpc2s7XFxuLVxcdGFyZ3MtXFx1MDAzZW5yX3pvbmVzID1cXG4tXFx0XFx0RElWX1JPVU5EX1VQX1VMTChnZXRfY2FwYWNpdHkoZGlzayksIGxpbS1cXHUwMDNlY2h1bmtfc2VjdG9ycyk7XFxuK1xcdGFyZ3MtXFx1MDAzZW5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XFxuIFxcbiBcXHQvKiBDYWNoZWQgem9uZSBjb25kaXRpb25zOiAxIGJ5dGUgcGVyIHpvbmUgKi9cXG4tXFx0YXJncy1cXHUwMDNlem9uZXNfY29uZCA9IGt6YWxsb2MoYXJncy1cXHUwMDNlbnJfem9uZXMsIEdGUF9OT0lPKTtcXG4tXFx0aWYgKCFhcmdzLVxcdTAwM2V6b25lc19jb25kKVxcbitcXHRhcmdzLVxcdTAwM2V6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy1cXHUwMDNlbnJfem9uZXMsIEdGUF9OT0lPKTtcXG4rXFx0aWYgKCFhcmdzLVxcdTAwM2V6b25lc19zdGF0ZSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRpZiAoIWRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXFxuLVxcdCAqIHpvbmVzLCB1c2UgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUuXFxuLVxcdCAqL1xcbi1cXHRwb29sX3NpemUgPSBtYXgobGltLVxcdTAwM2VtYXhfb3Blbl96b25lcywgbGltLVxcdTAwM2VtYXhfYWN0aXZlX3pvbmVzKTtcXG4tXFx0aWYgKCFwb29sX3NpemUpXFxuLVxcdFxcdHBvb2xfc2l6ZSA9XFxuLVxcdFxcdFxcdG1pbihCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRSwgYXJncy1cXHUwMDNlbnJfem9uZXMpO1xcbi1cXG4tXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKSB7XFxuLVxcdFxcdHJldCA9IGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXMoZGlzaywgcG9vbF9zaXplKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0a2ZyZWUoYXJncy1cXHUwMDNlem9uZXNfY29uZCk7XFxuLVxcdH1cXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiAvKlxcbi0gKiBVcGRhdGUgdGhlIGRpc2sgem9uZSByZXNvdXJjZXMgaW5mb3JtYXRpb24gYW5kIGRldmljZSBxdWV1ZSBsaW1pdHMuXFxuLSAqIFRoZSBkaXNrIHF1ZXVlIGlzIGZyb3plbiB3aGVuIHRoaXMgaXMgZXhlY3V0ZWQuXFxuKyAqIFJldmFsaWRhdGUgYW5kIHVwZGF0ZSB0aGUgZGlzayB6b25lIHJlc291cmNlcyBpbmZvcm1hdGlvbiBhbmQgZGV2aWNlIHF1ZXVlXFxuKyAqIGxpbWl0cy5cXG4gICovXFxuLXN0YXRpYyBpbnQgZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXFxuK3N0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbitcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkaXNrLVxcdTAwM2VxdWV1ZTtcXG4gXFx0dW5zaWduZWQgaW50IG5yX3NlcV96b25lcztcXG5AQCAtMjA2NCwyMyArMjIwMywyOCBAQCBzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbiBcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbTtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbitcXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHkgaGFzIGJlZW4gY2hlY2tlZC4gKi9cXG4rXFx0aWYgKGFyZ3MtXFx1MDAzZXNlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IE1pc3Npbmcgem9uZXMgZnJvbSBzZWN0b3IgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCBhcmdzLVxcdTAwM2VzZWN0b3IpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGFyZ3MtXFx1MDAzZW5yX2NvbnZfem9uZXMgXFx1MDAzZT0gYXJncy1cXHUwMDNlbnJfem9uZXMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIGFyZ3MtXFx1MDAzZW5yX2NvbnZfem9uZXMsIGFyZ3MtXFx1MDAzZW5yX3pvbmVzKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuIFxcdGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUocSk7XFxuIFxcbiBcXHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUocSk7XFxuIFxcbiBcXHRkaXNrLVxcdTAwM2Vucl96b25lcyA9IGFyZ3MtXFx1MDAzZW5yX3pvbmVzO1xcbi1cXHRpZiAoYXJncy1cXHUwMDNlbnJfY29udl96b25lcyBcXHUwMDNlPSBkaXNrLVxcdTAwM2Vucl96b25lcykge1xcbi1cXHRcXHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgbnVtYmVyIG9mIGNvbnZlbnRpb25hbCB6b25lcyAldSAvICV1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIGFyZ3MtXFx1MDAzZW5yX2NvbnZfem9uZXMsIGRpc2stXFx1MDAzZW5yX3pvbmVzKTtcXG4tXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4tXFx0XFx0Z290byB1bmZyZWV6ZTtcXG4tXFx0fVxcbi1cXG4gXFx0ZGlzay1cXHUwMDNlem9uZV9jYXBhY2l0eSA9IGFyZ3MtXFx1MDAzZXpvbmVfY2FwYWNpdHk7XFxuIFxcdGRpc2stXFx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eSA9IGFyZ3MtXFx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eTtcXG4tXFx0ZGlza19zZXRfem9uZXNfY29uZF9hcnJheShkaXNrLCBhcmdzLVxcdTAwM2V6b25lc19jb25kKTtcXG4tXFx0YXJncy1cXHUwMDNlem9uZXNfY29uZCA9IE5VTEw7XFxuK1xcdGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KGRpc2ssIGFyZ3MtXFx1MDAzZXpvbmVzX3N0YXRlKTtcXG4rXFx0YXJncy1cXHUwMDNlem9uZXNfc3RhdGUgPSBOVUxMO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogU29tZSBkZXZpY2VzIGNhbiBhZHZlcnRpc2Ugem9uZSByZXNvdXJjZSBsaW1pdHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW5cXG5AQCAtMjEyMCw0OCArMjI2NCw1OSBAQCBzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbiBjb21taXQ6XFxuIFxcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFxcdTAwMjZsaW0pO1xcbiBcXG4tdW5mcmVlemU6XFxuIFxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZChzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXFxuLVxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxcbitzdGF0aWMgdm9pZCBkaXNrX2Ryb3Bfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zywgdm9pZCAqZGF0YSlcXG4ge1xcbi1cXHRlbnVtIGJsa196b25lX2NvbmQgY29uZCA9IHpvbmUtXFx1MDAzZWNvbmQ7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcbi1cXHQvKiBDaGVjayB0aGF0IHRoZSB6b25lIGNvbmRpdGlvbiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHpvbmUgdHlwZS4gKi9cXG4tXFx0c3dpdGNoIChjb25kKSB7XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XFxuLVxcdFxcdGlmICh6b25lLVxcdTAwM2V0eXBlICE9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMKVxcbi1cXHRcXHRcXHRnb3RvIGludmFsaWRfY29uZGl0aW9uO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9DTE9TRUQ6XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9FTVBUWTpcXG4tXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6XFxuLVxcdGNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOlxcbi1cXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XFxuLVxcdFxcdGlmICh6b25lLVxcdTAwM2V0eXBlICE9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRKVxcbi1cXHRcXHRcXHRnb3RvIGludmFsaWRfY29uZGl0aW9uO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0ZGVmYXVsdDpcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgem9uZSBjb25kaXRpb24gMHglWFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0YXJncy1cXHUwMDNlZGlzay1cXHUwMDNlZGlza19uYW1lLCBjb25kKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ6d3BsdWctXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0ZGlza196b25lX3dwbHVnX2Fib3J0KHp3cGx1Zyk7XFxuK1xcdGRpc2tfbWFya196b25lX3dwbHVnX2RlYWQoendwbHVnKTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2endwbHVnLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZGlza19yZXZhbGlkYXRlX2NhcGFjaXR5KHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbit7XFxuK1xcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFxcdTAwMjZkaXNrLVxcdTAwM2VxdWV1ZS1cXHUwMDNlbGltaXRzO1xcbitcXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBsaW0tXFx1MDAzZWNodW5rX3NlY3RvcnM7XFxuK1xcdHVuc2lnbmVkIGludCBucl96b25lcyA9IGRpc2tfZ2V0X25yX3pvbmVzKGRpc2spO1xcbitcXHRpbnQgcmV0ID0gLUVOT0RFVjtcXG4rXFxuK1xcdGlmICghZ2V0X2NhcGFjaXR5KGRpc2spKVxcbitcXHRcXHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBDaGVja3MgdGhhdCB0aGUgZGV2aWNlIGRyaXZlciBpbmRpY2F0ZWQgYSB2YWxpZCB6b25lIHNpemUgYW5kIHRoYXRcXG4rXFx0ICogdGhlIG1heCB6b25lIGFwcGVuZCBsaW1pdCBpcyBzZXQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXpvbmVfc2VjdG9ycyB8fCAhaXNfcG93ZXJfb2ZfMih6b25lX3NlY3RvcnMpKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIiVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCB6b25lX3NlY3RvcnMpO1xcbitcXHRcXHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XFxuIFxcdH1cXG4gXFxuLVxcdGJsa196b25lX3NldF9jb25kKGFyZ3MtXFx1MDAzZXpvbmVzX2NvbmQsIGlkeCwgY29uZCk7XFxuK1xcdC8qXFxuK1xcdCAqIENoZWNrIGlmIHRoZSBjYXBhY2l0eSBoYXMgY2hhbmdlZC4gSWYgaXQgZGlkLCBhc3N1bWUgdGhhdCB0aGUgZGV2aWNlXFxuK1xcdCAqIHdhcyByZWZvcm1hdHRlZCBhbmQgdGhhdCBhbGwgc2VxdWVudGlhbCB6b25lcyBhcmUgbm93IGVtcHR5LiBTbyBkcm9wXFxuK1xcdCAqIGFsbCB6b25lIHdyaXRlIHBsdWcuXFxuK1xcdCAqL1xcbitcXHRpZiAoZGlzay1cXHUwMDNlbnJfem9uZXMgXFx1MDAyNlxcdTAwMjYgZGlzay1cXHUwMDNlbnJfem9uZXMgIT0gbnJfem9uZXMpIHtcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IE51bWJlciBvZiB6b25lcyBjaGFuZ2VkICgldSAtXFx1MDAzZSAldSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGRpc2stXFx1MDAzZWRpc2tfbmFtZSwgZGlzay1cXHUwMDNlbnJfem9uZXMsIG5yX3pvbmVzKTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0Z290byBkcm9wX2FsbF96d3BsdWdzO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuLWludmFsaWRfY29uZGl0aW9uOlxcbi1cXHRwcl93YXJuKFxcXCIlczogSW52YWxpZCB6b25lIGNvbmRpdGlvbiAweCV4IGZvciB0eXBlIDB4JXhcXFxcblxcXCIsXFxuLVxcdFxcdGFyZ3MtXFx1MDAzZWRpc2stXFx1MDAzZWRpc2tfbmFtZSwgY29uZCwgem9uZS1cXHUwMDNldHlwZSk7XFxuK2Ryb3BfYWxsX3p3cGx1Z3M6XFxuK1xcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhkaXNrLCBkaXNrX2Ryb3Bfem9uZV93cGx1ZywgTlVMTCk7XFxuIFxcbi1cXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV9jb252X3pvbmUoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxcbkBAIC0yMTY5LDEyICsyMzI0LDI2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFyZ3MtXFx1MDAzZWRpc2s7XFxuIFxcbitcXHQvKiBDaGVjayB0aGUgem9uZSBjb25kaXRpb24uICovXFxuK1xcdHN3aXRjaCAoem9uZS1cXHUwMDNlY29uZCkge1xcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgY29udi4gem9uZSBjb25kaXRpb24gMHglWCBhdCBzZWN0b3IgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCB6b25lLVxcdTAwM2Vjb25kLCB6b25lLVxcdTAwM2VzdGFydCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoem9uZS1cXHUwMDNlY2FwYWNpdHkgIT0gem9uZS1cXHUwMDNlbGVuKSB7XFxuIFxcdFxcdHByX3dhcm4oXFxcIiVzOiBJbnZhbGlkIGNvbnZlbnRpb25hbCB6b25lIGNhcGFjaXR5XFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFx0fVxcbiBcXG4rXFx0YmxrX3pzdGF0ZV9zZXQoYXJncy1cXHUwMDNlem9uZXNfc3RhdGUsIGlkeCwgem9uZS1cXHUwMDNlY29uZCwgQkxLX1pGTEFHX0NPTlYpO1xcbitcXG4gXFx0aWYgKGRpc2tfem9uZV9pc19sYXN0KGRpc2ssIHpvbmUpKVxcbiBcXHRcXHRhcmdzLVxcdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSB6b25lLVxcdTAwM2VjYXBhY2l0eTtcXG4gXFxuQEAgLTIxOTAsNiArMjM1OSwyNCBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4gXFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XFxuIFxcdHVuc2lnbmVkIGludCB3cF9vZmZzZXQ7XFxuIFxcbitcXHQvKiBDaGVjayB0aGUgem9uZSBjb25kaXRpb24uICovXFxuK1xcdHN3aXRjaCAoem9uZS1cXHUwMDNlY29uZCkge1xcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XFxuK1xcdGNhc2UgQkxLX1pPTkVfQ09ORF9FWFBfT1BFTjpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX0VNUFRZOlxcbitcXHRjYXNlIEJMS19aT05FX0NPTkRfRlVMTDpcXG4rXFx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XFxuK1xcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHByX3dhcm4oXFxcIiVzOiBJbnZhbGlkIHNlcS4gem9uZSBjb25kaXRpb24gMHglWCBhdCBzZWN0b3IgJWxsdVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZGlzay1cXHUwMDNlZGlza19uYW1lLCB6b25lLVxcdTAwM2Vjb25kLCB6b25lLVxcdTAwM2VzdGFydCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcbitcXHRibGtfenN0YXRlX3NldChhcmdzLVxcdTAwM2V6b25lc19zdGF0ZSwgaWR4LCB6b25lLVxcdTAwM2Vjb25kLCAwKTtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFJlbWVtYmVyIHRoZSBjYXBhY2l0eSBvZiB0aGUgZmlyc3Qgc2VxdWVudGlhbCB6b25lIGFuZCBjaGVja1xcbiBcXHQgKiBpZiBpdCBpcyBjb25zdGFudCBmb3IgYWxsIHpvbmVzLCBpZ25vcmluZyB0aGUgbGFzdCB6b25lIGFzIGl0IGNhbiBiZVxcbkBAIC0yMjE0LDcgKzI0MDEsNyBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4gXFx0aWYgKCFkaXNrLVxcdTAwM2V6b25lX3dwbHVnc19oYXNoKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3dwX29mZnNldChkaXNrLCB6b25lKTtcXG4rXFx0d3Bfb2Zmc2V0ID0gZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoZGlzaywgem9uZSk7XFxuIFxcdGlmICghd3Bfb2Zmc2V0IHx8IHdwX29mZnNldCBcXHUwMDNlPSB6b25lLVxcdTAwM2VjYXBhY2l0eSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0yMjcyLDExICsyNDU5LDYgQEAgc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NiKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIENoZWNrIHpvbmUgY29uZGl0aW9uICovXFxuLVxcdHJldCA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZCh6b25lLCBpZHgsIGFyZ3MpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4gXFx0LyogQ2hlY2sgem9uZSB0eXBlICovXFxuIFxcdHN3aXRjaCAoem9uZS1cXHUwMDNldHlwZSkge1xcbiBcXHRjYXNlIEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMOlxcbkBAIC0yMzEzLDM5ICsyNDk1LDM3IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXFxuICAqL1xcbiBpbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4ge1xcbi1cXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXFx1MDAzZXF1ZXVlO1xcbi1cXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBxLVxcdTAwM2VsaW1pdHMuY2h1bmtfc2VjdG9ycztcXG4tXFx0c2VjdG9yX3QgY2FwYWNpdHkgPSBnZXRfY2FwYWNpdHkoZGlzayk7XFxuIFxcdHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgYXJncyA9IHsgfTtcXG4tXFx0dW5zaWduZWQgaW50IG1lbWZsYWdzLCBub2lvX2ZsYWc7XFxuIFxcdHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgcmVwX2FyZ3MgPSB7XFxuIFxcdFxcdC5jYiA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY2IsXFxuIFxcdFxcdC5kYXRhID0gXFx1MDAyNmFyZ3MsXFxuIFxcdH07XFxuLVxcdGludCByZXQgPSAtRU5PTUVNO1xcbitcXHR1bnNpZ25lZCBpbnQgbm9pb19mbGFnO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRSghYmxrX3F1ZXVlX2lzX3pvbmVkKHEpKSlcXG4rXFx0aWYgKFdBUk5fT05fT05DRSghYmxrX3F1ZXVlX2lzX3pvbmVkKGRpc2stXFx1MDAzZXF1ZXVlKSkpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0aWYgKCFjYXBhY2l0eSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV9jYXBhY2l0eShkaXNrKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIENoZWNrcyB0aGF0IHRoZSBkZXZpY2UgZHJpdmVyIGluZGljYXRlZCBhIHZhbGlkIHpvbmUgc2l6ZSBhbmQgdGhhdFxcbi1cXHQgKiB0aGUgbWF4IHpvbmUgYXBwZW5kIGxpbWl0IGlzIHNldC5cXG4rXFx0ICogQWxsb2NhdGUgem9uZSByZXNvdXJjZXMgaWYgdGhleSBhcmUgbmVlZGVkIGFuZCB3ZSBoYXZlIG5vdCBkb25lXFxuK1xcdCAqIHNvIHlldCwgYW5kIGluaXRpYWxpemUgdGhlIHJldmFsaWRhdGlvbiBhcmd1bWVudHMgcGFzc2VkIHRvIHJlcG9ydFxcbitcXHQgKiB6b25lcy4gRW5zdXJlIHRoYXQgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIGRvbmUgYXNcXG4rXFx0ICogaWYgR0ZQX05PSU8gd2FzIHNwZWNpZmllZC5cXG4gXFx0ICovXFxuLVxcdGlmICghem9uZV9zZWN0b3JzIHx8ICFpc19wb3dlcl9vZl8yKHpvbmVfc2VjdG9ycykpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IEludmFsaWQgbm9uIHBvd2VyIG9mIHR3byB6b25lIHNpemUgKCVsbHUpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIHpvbmVfc2VjdG9ycyk7XFxuLVxcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHRub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcXG4rXFx0aWYgKGRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSBcXHUwMDI2XFx1MDAyNiAhZGlzay1cXHUwMDNlem9uZV93cGx1Z3NfaGFzaCkge1xcbitcXHRcXHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdC8qXFxuLVxcdCAqIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzIGlmXFxuLVxcdCAqIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuXFxuLVxcdCAqL1xcbi1cXHRub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcXG4tXFx0cmV0ID0gZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzKGRpc2ssIFxcdTAwMjZhcmdzKTtcXG4rXFx0cmV0ID0gZGlza19pbml0X3JldmFsaWRhdGVfYXJncyhkaXNrLCBcXHUwMDI2YXJncyk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuQEAgLTIzNTksMzIgKzI1MzksMTggQEAgaW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xcbiBcXG4gXFx0aWYgKHJldCBcXHUwMDNjPSAwKVxcbi1cXHRcXHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xcbitcXHRcXHRnb3RvIGZyZWVfYXJncztcXG4gXFxuLVxcdC8qXFxuLVxcdCAqIElmIHpvbmVzIHdoZXJlIHJlcG9ydGVkLCBtYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHlcXG4tXFx0ICogaGFzIGJlZW4gY2hlY2tlZC5cXG4tXFx0ICovXFxuLVxcdGlmIChhcmdzLnNlY3RvciAhPSBjYXBhY2l0eSkge1xcbi1cXHRcXHRwcl93YXJuKFxcXCIlczogTWlzc2luZyB6b25lcyBmcm9tIHNlY3RvciAlbGx1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRkaXNrLVxcdTAwM2VkaXNrX25hbWUsIGFyZ3Muc2VjdG9yKTtcXG4tXFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4tXFx0XFx0Z290byBmcmVlX3Jlc291cmNlcztcXG4tXFx0fVxcbi1cXG4tXFx0cmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbitcXHRyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXFx1MDAyNmFyZ3MpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xcbitcXHRcXHRnb3RvIGZyZWVfYXJncztcXG4gXFxuIFxcdHJldHVybiAwO1xcbiBcXG4tZnJlZV9yZXNvdXJjZXM6XFxuK2ZyZWVfYXJnczpcXG4gXFx0cHJfd2FybihcXFwiJXM6IGZhaWxlZCB0byByZXZhbGlkYXRlIHpvbmVzXFxcXG5cXFwiLCBkaXNrLVxcdTAwM2VkaXNrX25hbWUpO1xcbiBcXG4tXFx0a2ZyZWUoYXJncy56b25lc19jb25kKTtcXG4tXFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xcbi1cXHRkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoZGlzayk7XFxuLVxcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XFxuK1xcdGtmcmVlKGFyZ3Muem9uZXNfc3RhdGUpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yNDM1LDggKzI2MDEsOSBAQCBFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9pc3N1ZV96ZXJvb3V0KTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQkxLX0RFQlVHX0ZTXFxuIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcXG4tXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuK1xcdFxcdFxcdFxcdCAgdm9pZCAqZGF0YSlcXG4ge1xcbitcXHRzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBkYXRhO1xcbiBcXHR1bnNpZ25lZCBpbnQgendwX3dwX29mZnNldCwgendwX2ZsYWdzO1xcbiBcXHR1bnNpZ25lZCBpbnQgendwX3pvbmVfbm8sIHp3cF9yZWY7XFxuIFxcdHVuc2lnbmVkIGludCB6d3BfYmlvX2xpc3Rfc2l6ZTtcXG5AQCAtMjQ2MSwxOSArMjYyOCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcXG4gaW50IHF1ZXVlX3pvbmVfd3BsdWdzX3Nob3codm9pZCAqZGF0YSwgc3RydWN0IHNlcV9maWxlICptKVxcbiB7XFxuIFxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGF0YTtcXG4tXFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBxLVxcdTAwM2VkaXNrO1xcbi1cXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZztcXG4tXFx0dW5zaWduZWQgaW50IGk7XFxuLVxcbi1cXHRpZiAoIWRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpXFxuLVxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKylcXG4tXFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywgXFx1MDAyNmRpc2stXFx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0sXFxuLVxcdFxcdFxcdFxcdFxcdCBub2RlKVxcbi1cXHRcXHRcXHRxdWV1ZV96b25lX3dwbHVnX3Nob3coendwbHVnLCBtKTtcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhxLVxcdTAwM2VkaXNrLCBxdWV1ZV96b25lX3dwbHVnX3Nob3csIG0pO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaFxcbmluZGV4IDUwYWJmZDkzMjg4NjEuLmNmZThkNDE4NWUyNWEgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLmhcXG4rKysgYi9ibG9jay9ibGsuaFxcbkBAIC01NzcsNiArNTc3LDcgQEAgaW50IGJsa2Rldl9yZXBvcnRfem9uZXNfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBhcmcpO1xcbiBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcXG4rYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpO1xcbiAjZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbiB7XFxuQEAgLTYxOSw2ICs2MjAsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRzZWN0b3JfdCBzZWN0b3IpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xcbiBcXG4gc3RydWN0IGJsb2NrX2RldmljZSAqYmRldl9hbGxvYyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgdTggcGFydG5vKTtcXG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcXG5pbmRleCBlOGNlMGNhYmYzOTJjLi4zNGE2NDA3N2JhMDJjIDEwMDY0NFxcbi0tLSBhL2Jsb2NrL2dlbmhkLmNcXG4rKysgYi9ibG9jay9nZW5oZC5jXFxuQEAgLTQ0Nyw2ICs0NDcsMTMgQEAgc3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuIFxcdFxcdGJkZXZfc2V0X2ZsYWcoZGlzay1cXHUwMDNlcGFydDAsIEJEX0hBU19TVUJNSVRfQklPKTtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogV2UgZG8gbm90IHN1cHBvcnQgcGFydGl0aW9ucyB3aXRoIHpvbmVkIGJsb2NrIGRldmljZXMsIHNvIGRvIG5vdCB0cnlcXG4rXFx0ICogdG8gc2NhbiB0aGUgcGFydGl0aW9ucyB0YWJsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChibGtfcXVldWVfaXNfem9uZWQoZGlzay1cXHUwMDNlcXVldWUpKVxcbitcXHRcXHRkaXNrLVxcdTAwM2VmbGFncyB8PSBHRU5IRF9GTF9OT19QQVJUO1xcbitcXG4gXFx0LypcXG4gXFx0ICogSWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbiBleHBsaWNpdCBtYWpvciBudW1iZXIgaXQgYWxzbyBtdXN0IHByb3ZpZGVcXG4gXFx0ICogdGhlIG51bWJlciBvZiBtaW5vcnMgbnVtYmVycyBzdXBwb3J0ZWQsIGFuZCB0aG9zZSB3aWxsIGJlIHVzZWQgdG9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCAyMGNiOGVkN2Q5ODdhLi40ZmEwMDc1NzUyN2Q3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTIwMCw3ICsyMDAsNyBAQCBzdHJ1Y3QgZ2VuZGlzayB7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdG5yX3pvbmVzO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHR6b25lX2NhcGFjaXR5O1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHRsYXN0X3pvbmVfY2FwYWNpdHk7XFxuLVxcdHU4IF9fcmN1XFx0XFx0KnpvbmVzX2NvbmQ7XFxuK1xcdHU4IF9fcmN1XFx0XFx0KnpvbmVzX3N0YXRlO1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRcXHR6b25lX3dwbHVnc19oYXNoX2JpdHM7XFxuIFxcdGF0b21pY190XFx0XFx0bnJfem9uZV93cGx1Z3M7XFxuIFxcdHNwaW5sb2NrX3RcXHRcXHR6b25lX3dwbHVnc19oYXNoX2xvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI2LjE4NzcyOTgyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc1MzI4MTkxMDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2hlY2tfem9uZV9tZ210XCIsXG4gICAgXCJibGtkZXZfZ2V0X3pvbmVfaW5mb1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHpvbmUgY29uZGl0aW9ucyBhcmUgdHJhY2tlZCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIG5ldyBgem9uZXNfc3RhdGVgIGFycmF5IHRvIHJlcGxhY2UgYHpvbmVzX2NvbmRgLiBJdCB1cGRhdGVzIHpvbmUgbWFuYWdlbWVudCBjaGVja3MgKGBiZGV2X2NoZWNrX3pvbmVfbWdtdGApLCB6b25lIHJldmFsaWRhdGlvbiAoYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgKSwgYW5kIHpvbmUgaW5mb3JtYXRpb24gcmV0cmlldmFsIChgYmxrZGV2X2dldF96b25lX2luZm9gKS4gSXQgYWxzbyBtb2RpZmllcyBgX19hZGRfZGlza2AgdG8gZGlzYWJsZSBwYXJ0aXRpb25zIG9uIHpvbmVkIGJsb2NrIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYmxvY2sgbGF5ZXIncyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGMwNTI4ZTY4ZTk3MDJlMWZmZGVmMWQyM2YyMWYyNzI0N2Q3ZTY3NGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyA2IDE5OjQ2OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmNcbmluZGV4IDE5NmJjY2YyN2Y1OGQuLjgwYTRlMmJjYzNmMzQgMTAwNjQ0XG4tLS0gYS9ibG9jay9ibGstY29yZS5jXG4rKysgYi9ibG9jay9ibGstY29yZS5jXG5AQCAtOTAxLDggKzkwMSwxMSBAQCB2b2lkIHN1Ym1pdF9iaW9fbm9hY2N0KHN0cnVjdCBiaW8gKmJpbylcbiBcdGNhc2UgUkVRX09QX1pPTkVfQ0xPU0U6XG4gXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUOlxuIFx0Y2FzZSBSRVFfT1BfWk9ORV9GSU5JU0g6XG4tXHRcdC8qIFpvbmUgbWFuYWdlbWVudCBvcGVyYXRpb25zIHJlcXVpcmUgc2VxdWVudGlhbCB6b25lcy4gKi9cbi1cdFx0aWYgKCFiZGV2X3pvbmVfaXNfc2VxKGJpby1cdTAwM2ViaV9iZGV2LCBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IpKVxuK1x0XHQvKlxuK1x0XHQgKiBab25lIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyByZXF1aXJlIHNlcXVlbnRpYWwgem9uZXMgdGhhdCBhcmVcbitcdFx0ICogbm90IG9mZmxpbmUgbm9yIHJlYWQtb25seS5cbitcdFx0ICovXG4rXHRcdGlmICghYmRldl9jaGVja196b25lX21nbXQoYmRldiwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yKSlcbiBcdFx0XHRnb3RvIGVuZF9pbztcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIFJFUV9PUF9aT05FX1JFU0VUX0FMTDpcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstem9uZWQuYyBiL2Jsb2NrL2Jsay16b25lZC5jXG5pbmRleCBhNWFmYjg0MmJmMzVlLi5mMTcwNjkzMDlhYzlkIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLXpvbmVkLmNcbisrKyBiL2Jsb2NrL2Jsay16b25lZC5jXG5AQCAtMzksNiArMzksMTAzIEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB6b25lX2NvbmRfbmFtZVtdID0ge1xuIH07XG4gI3VuZGVmIFpPTkVfQ09ORF9OQU1FXG4gXG4rLypcbisgKiBJbnRlcm5hbCBhbmQgY29tcGFjdCByZXByZXNlbnRhdGlvbiBvZiBlbnVtIGJsa196b25lX2NvbmQgdmFsdWVzIGZvciB6b25lXG4rICogY29uZGl0aW9ucy4gQWxsIHRoZXNlIHZhbHVlcyBmaXQgaW50byA0LWJpdHMsIGFsbG93aW5nIHVzaW5nIHRoZSBoaWdoIG9yZGVyXG4rICogYml0cyBhcyB0aGUgem9uZSB0eXBlLlxuKyAqL1xuK2VudW0gYmxrX3pzdGF0ZSB7XG4rXHRCTEtfWlNUQVRFX05PVF9XUFx0PSAweDAwLFxuK1x0QkxLX1pTVEFURV9FTVBUWVx0PSAweDAxLFxuK1x0QkxLX1pTVEFURV9JTVBfT1BFTlx0PSAweDAyLFxuK1x0QkxLX1pTVEFURV9FWFBfT1BFTlx0PSAweDAzLFxuK1x0QkxLX1pTVEFURV9DTE9TRURcdD0gMHgwNCxcbitcdEJMS19aU1RBVEVfUkVBRE9OTFlcdD0gMHgwNSxcbitcdEJMS19aU1RBVEVfRlVMTFx0XHQ9IDB4MDYsXG4rXHRCTEtfWlNUQVRFX09GRkxJTkVcdD0gMHgwNyxcbitcdEJMS19aU1RBVEVfQUNUSVZFXHQ9IDB4MDgsXG4rXG4rXHRCTEtfWlNUQVRFX0NPTkRfTUFTS1x0PSAweDBGLFxuK1xuK1x0LyogQ29udmVudGlvbmFsIHpvbmUuICovXG4rXHRCTEtfWkZMQUdfQ09OVlx0XHQ9IDB4ODAsXG4rXHRCTEtfWlNUQVRFX0ZMQUdTX01BU0tcdD0gfkJMS19aU1RBVEVfQ09ORF9NQVNLLFxuK307XG4rXG4rLypcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGVudW0gYmxrX3pzdGF0ZSBjb25kaXRpb25zIGludG8gZW51bVxuKyAqIGJsa196b25lX2NvbmRpdGlvbiB2YWx1ZXMuXG4rICovXG4rc3RhdGljIGNvbnN0IHU4IGJsa196c3RhdGUyemNvbmRbXSA9IHtcbitcdFtCTEtfWlNUQVRFX05PVF9XUF1cdD0gQkxLX1pPTkVfQ09ORF9OT1RfV1AsXG4rXHRbQkxLX1pTVEFURV9FTVBUWV1cdD0gQkxLX1pPTkVfQ09ORF9FTVBUWSxcbitcdFtCTEtfWlNUQVRFX0lNUF9PUEVOXVx0PSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOLFxuK1x0W0JMS19aU1RBVEVfRVhQX09QRU5dXHQ9IEJMS19aT05FX0NPTkRfRVhQX09QRU4sXG4rXHRbQkxLX1pTVEFURV9DTE9TRURdXHQ9IEJMS19aT05FX0NPTkRfQ0xPU0VELFxuK1x0W0JMS19aU1RBVEVfUkVBRE9OTFldXHQ9IEJMS19aT05FX0NPTkRfUkVBRE9OTFksXG4rXHRbQkxLX1pTVEFURV9GVUxMXVx0PSBCTEtfWk9ORV9DT05EX0ZVTEwsXG4rXHRbQkxLX1pTVEFURV9PRkZMSU5FXVx0PSBCTEtfWk9ORV9DT05EX09GRkxJTkUsXG4rXHRbQkxLX1pTVEFURV9BQ1RJVkVdXHQ9IEJMS19aT05FX0NPTkRfQUNUSVZFLFxuK307XG4rXG4rc3RhdGljIGlubGluZSBlbnVtIGJsa196b25lX2NvbmQgYmxrX3pzdGF0ZV90b196b25lX2NvbmQoZW51bSBibGtfenN0YXRlIHpzKVxuK3tcbitcdHU4IGlkeCA9IHpzIFx1MDAyNiBCTEtfWlNUQVRFX0NPTkRfTUFTSztcbitcbitcdGlmIChXQVJOX09OX09OQ0UoaWR4IFx1MDAzZT0gQVJSQVlfU0laRShibGtfenN0YXRlMnpjb25kKSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0dXJuIGJsa196c3RhdGUyemNvbmRbaWR4XTtcbit9XG4rXG4rLypcbisgKiBMb29rdXAgdGFibGUgYW5kIGhlbHBlciB0byBjb252ZXJ0IGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGludG8gYW4gZW51bVxuKyAqIGJsa196c3RhdGUgY29uZGl0aW9uIHZhbHVlLiBUbyBrZWVwIHRoZSBsb29rdXAgdGFibGUgc21hbGwsIHRoZVxuKyAqIEJMS19aT05FX0NPTkRfQUNUSVZFIGNvbmRpdGlvbiBpcyBub3QgYWRkZWQgYW5kIGhhbmRsZWQgc2VwYXJhdGVseS5cbisgKi9cbitzdGF0aWMgY29uc3QgdTggYmxrX3pjb25kMnpzdGF0ZVtdID0ge1xuK1x0W0JMS19aT05FX0NPTkRfTk9UX1dQXVx0XHQ9IEJMS19aU1RBVEVfTk9UX1dQLFxuK1x0W0JMS19aT05FX0NPTkRfRU1QVFldXHRcdD0gQkxLX1pTVEFURV9FTVBUWSxcbitcdFtCTEtfWk9ORV9DT05EX0lNUF9PUEVOXVx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbitcdFtCTEtfWk9ORV9DT05EX0VYUF9PUEVOXVx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbitcdFtCTEtfWk9ORV9DT05EX0NMT1NFRF1cdFx0PSBCTEtfWlNUQVRFX0FDVElWRSxcbitcdFtCTEtfWk9ORV9DT05EX1JFQURPTkxZXVx0PSBCTEtfWlNUQVRFX1JFQURPTkxZLFxuK1x0W0JMS19aT05FX0NPTkRfRlVMTF1cdFx0PSBCTEtfWlNUQVRFX0ZVTEwsXG4rXHRbQkxLX1pPTkVfQ09ORF9PRkZMSU5FXVx0XHQ9IEJMS19aU1RBVEVfT0ZGTElORSxcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgZW51bSBibGtfenN0YXRlIGJsa196b25lX2NvbmRfdG9fenN0YXRlKGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuK3tcbitcdGlmIChjb25kID09IEJMS19aT05FX0NPTkRfQUNUSVZFKVxuK1x0XHRyZXR1cm4gQkxLX1pTVEFURV9BQ1RJVkU7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKGNvbmQgXHUwMDNlPSBBUlJBWV9TSVpFKGJsa196Y29uZDJ6c3RhdGUpKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRyZXR1cm4gYmxrX3pjb25kMnpzdGF0ZVtjb25kXTtcbit9XG4rXG4rLypcbisgKiBDb21iaW5lIGFuIGVudW0gYmxrX3pvbmVfY29uZGl0aW9uIGFuZCB6b25lIGZsYWdzIGludG8gYSB6b25lc19zdGF0ZSBhcnJheVxuKyAqIGVudHJ5LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfenN0YXRlX3NldCh1OCAqem9uZXNfc3RhdGUsIHVuc2lnbmVkIGludCB6bm8sXG4rXHRcdFx0XHQgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kLCB1OCBmbGFncylcbit7XG4rXHRpZiAoem9uZXNfc3RhdGUpXG4rXHRcdHpvbmVzX3N0YXRlW3pub10gPSBmbGFncyB8IGJsa196b25lX2NvbmRfdG9fenN0YXRlKGNvbmQpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHU4IGJsa196c3RhdGVfZmxhZ3MoZW51bSBibGtfenN0YXRlIHpzKVxuK3tcbitcdHJldHVybiB6cyBcdTAwMjYgQkxLX1pTVEFURV9GTEFHU19NQVNLO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYmxrX3pzdGF0ZV9pc19jb252KGVudW0gYmxrX3pzdGF0ZSB6cylcbit7XG4rXHRyZXR1cm4gYmxrX3pzdGF0ZV9mbGFncyh6cykgXHUwMDI2IEJMS19aRkxBR19DT05WO1xuK31cbitcbiAvKlxuICAqIFBlci16b25lIHdyaXRlIHBsdWcuXG4gICogQG5vZGU6IGhsaXN0X25vZGUgc3RydWN0dXJlIGZvciBtYW5hZ2luZyB0aGUgcGx1ZyB1c2luZyBhIGhhc2ggdGFibGUuXG5AQCAtMTM1LDU1ICsyMzIsNjQgQEAgY29uc3QgY2hhciAqYmxrX3pvbmVfY29uZF9zdHIoZW51bSBibGtfem9uZV9jb25kIHpvbmVfY29uZClcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfY29uZF9zdHIpO1xuIFxuLXN0YXRpYyB2b2lkIGJsa196b25lX3NldF9jb25kKHU4ICp6b25lc19jb25kLCB1bnNpZ25lZCBpbnQgem5vLFxuLVx0XHRcdCAgICAgIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV9zZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuK1x0XHRcdCAgICAgICBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiB7XG4tXHRpZiAoIXpvbmVzX2NvbmQpXG4tXHRcdHJldHVybjtcbitcdHVuc2lnbmVkIGludCB6bm8gPSBkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKTtcbitcdHU4ICp6b25lc19zdGF0ZTtcbiBcbi1cdHN3aXRjaCAoY29uZCkge1xuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0lNUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0VYUF9PUEVOOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0NMT1NFRDpcbi1cdFx0em9uZXNfY29uZFt6bm9dID0gQkxLX1pPTkVfQ09ORF9BQ1RJVkU7XG4tXHRcdHJldHVybjtcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRU1QVFk6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRlVMTDpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9PRkZMSU5FOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX1JFQURPTkxZOlxuLVx0ZGVmYXVsdDpcbi1cdFx0em9uZXNfY29uZFt6bm9dID0gY29uZDtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4rXHRpZiAobGlrZWx5KHpvbmVzX3N0YXRlIFx1MDAyNlx1MDAyNiB6bm8gXHUwMDNjIGRpc2stXHUwMDNlbnJfem9uZXMpKVxuK1x0XHRibGtfenN0YXRlX3NldCh6b25lc19zdGF0ZSwgem5vLCBjb25kLFxuK1x0XHRcdCAgICAgICBibGtfenN0YXRlX2ZsYWdzKHpvbmVzX3N0YXRlW3pub10pKTtcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3Rvcixcbi1cdFx0XHQgICAgICAgZW51bSBibGtfem9uZV9jb25kIGNvbmQpXG4rc3RhdGljIGlubGluZSB1OCBkaXNrX3pvbmVfZ2V0X3N0YXRlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IpXG4ge1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4rXHR1bnNpZ25lZCBpbnQgem5vID0gZGlza196b25lX25vKGRpc2ssIHNlY3Rvcik7XG4rXHR1OCAqem9uZXNfc3RhdGUsIHpzO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0aWYgKHpvbmVzX2NvbmQpIHtcbi1cdFx0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xuLVxuLVx0XHQvKlxuLVx0XHQgKiBUaGUgY29uZGl0aW9uIG9mIGEgY29udmVudGlvbmFsLCByZWFkb25seSBhbmQgb2ZmbGluZSB6b25lc1xuLVx0XHQgKiBuZXZlciBjaGFuZ2VzLCBzbyBkbyBub3RoaW5nIGlmIHRoZSB0YXJnZXQgem9uZSBpcyBpbiBvbmUgb2Zcbi1cdFx0ICogdGhlc2UgY29uZGl0aW9ucy5cbi1cdFx0ICovXG4tXHRcdHN3aXRjaCAoem9uZXNfY29uZFt6bm9dKSB7XG4tXHRcdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XG4tXHRcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbi1cdFx0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4tXHRcdFx0YnJlYWs7XG4tXHRcdGRlZmF1bHQ6XG4tXHRcdFx0YmxrX3pvbmVfc2V0X2NvbmQoem9uZXNfY29uZCwgem5vLCBjb25kKTtcbi1cdFx0XHRicmVhaztcbi1cdFx0fVxuLVx0fVxuK1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4rXHRpZiAobGlrZWx5KHpvbmVzX3N0YXRlIFx1MDAyNlx1MDAyNiB6bm8gXHUwMDNjIGRpc2stXHUwMDNlbnJfem9uZXMpKVxuK1x0XHR6cyA9IHpvbmVzX3N0YXRlW3pub107XG4rXHRlbHNlXG4rXHRcdHpzID0gMDtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIHpzO1xuK31cbitcbitzdGF0aWMgZW51bSBibGtfem9uZV9jb25kIGRpc2tfem9uZV9nZXRfY29uZChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0ICAgICBzZWN0b3JfdCBzZWN0b3IpXG4re1xuK1x0dTggenMgPSBkaXNrX3pvbmVfZ2V0X3N0YXRlKGRpc2ssIHNlY3Rvcik7XG4rXG4rXHRyZXR1cm4gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2xcbitkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGVudW0gYmxrX3pvbmVfY29uZCBjb25kKVxuK3tcbitcdHJldHVybiBjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHxcbitcdFx0Y29uZCA9PSBCTEtfWk9ORV9DT05EX09GRkxJTkU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seShzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdFx0XHQgICAgc2VjdG9yX3Qgc2VjdG9yKVxuK3tcbitcdGVudW0gYmxrX3pvbmVfY29uZCBjb25kID0gZGlza196b25lX2dldF9jb25kKGRpc2ssIHNlY3Rvcik7XG4rXG4rXHRyZXR1cm4gZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seShjb25kKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgZGlza196b25lX2lzX3NlcShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yKVxuK3tcbitcdHU4IHpzID0gZGlza196b25lX2dldF9zdGF0ZShkaXNrLCBzZWN0b3IpO1xuK1xuK1x0cmV0dXJuICFibGtfenN0YXRlX2lzX2NvbnYoenMpO1xuIH1cbiBcbiAvKipcbkBAIC0xOTUsMjMgKzMwMSwzNiBAQCBzdGF0aWMgdm9pZCBkaXNrX3pvbmVfc2V0X2NvbmQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcixcbiAgKi9cbiBib29sIGJkZXZfem9uZV9pc19zZXEoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yKVxuIHtcbi1cdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi1cdTAwM2ViZF9kaXNrO1xuLVx0dW5zaWduZWQgaW50IHpubyA9IGRpc2tfem9uZV9ubyhkaXNrLCBzZWN0b3IpO1xuLVx0Ym9vbCBpc19zZXEgPSBmYWxzZTtcbi1cdHU4ICp6b25lc19jb25kO1xuK1x0aWYgKCFiZGV2X2lzX3pvbmVkKGJkZXYpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gZGlza196b25lX2lzX3NlcShiZGV2LVx1MDAzZWJkX2Rpc2ssIHNlY3Rvcik7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGJkZXZfem9uZV9pc19zZXEpO1xuK1xuKy8qKlxuKyAqIGJkZXZfY2hlY2tfem9uZV9tZ210IC0gY2hlY2sgaWYgYSBzZWN0b3IgYmVsb25ncyB0byBhIHZhbGlkIHNlcXVlbnRpYWwgem9uZVxuKyAqIEBiZGV2OiAgICAgICBibG9jayBkZXZpY2UgdG8gY2hlY2tcbisgKiBAc2VjdG9yOiAgICAgc2VjdG9yIG51bWJlclxuKyAqXG4rICogQ2hlY2sgaWYgQHNlY3RvciBvbiBAYmRldiBpcyBjb250YWluZWQgaW4gYSBzZXF1ZW50aWFsIHdyaXRlIHJlcXVpcmVkIHpvbmVcbisgKiB0aGF0IGlzIG5vdCBvZmZsaW5lIG5vciByZWFkLW9ubHkuXG4rICovXG4rYm9vbCBiZGV2X2NoZWNrX3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IpXG4re1xuK1x0ZW51bSBibGtfem9uZV9jb25kIGNvbmQ7XG4rXHR1OCB6cztcbiBcbiBcdGlmICghYmRldl9pc196b25lZChiZGV2KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0em9uZXNfY29uZCA9IHJjdV9kZXJlZmVyZW5jZShkaXNrLVx1MDAzZXpvbmVzX2NvbmQpO1xuLVx0aWYgKHpvbmVzX2NvbmQgXHUwMDI2XHUwMDI2IHpubyBcdTAwM2MgZGlzay1cdTAwM2Vucl96b25lcylcbi1cdFx0aXNfc2VxID0gem9uZXNfY29uZFt6bm9dICE9IEJMS19aT05FX0NPTkRfTk9UX1dQO1xuLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR6cyA9IGRpc2tfem9uZV9nZXRfc3RhdGUoYmRldi1cdTAwM2ViZF9kaXNrLCBzZWN0b3IpO1xuK1x0aWYgKGJsa196c3RhdGVfaXNfY29udih6cykpXG4rXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBpc19zZXE7XG4rXHRjb25kID0gYmxrX3pzdGF0ZV90b196b25lX2NvbmQoenMpO1xuK1x0cmV0dXJuICFkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGNvbmQpO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChiZGV2X3pvbmVfaXNfc2VxKTtcbiBcbiAvKlxuICAqIFpvbmUgcmVwb3J0IGFyZ3VtZW50cyBmb3IgYmxvY2sgZGV2aWNlIGRyaXZlcnMgcmVwb3J0X3pvbmVzIG9wZXJhdGlvbi5cbkBAIC01MDAsMTIgKzYxOSwxNyBAQCBzdGF0aWMgYm9vbCBkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHJldHVybiB6d3BsdWctXHUwMDNld3Bfb2Zmc2V0IFx1MDAzZT0gZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRpc2tfem9uZV93cGx1Z19pc19vZmZsaW5lX29yX3JlYWRvbmx5KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuK3tcbitcdHJldHVybiBkaXNrX3pvbmVfY29uZF9pc19vZmZsaW5lX29yX3JlYWRvbmx5KHp3cGx1Zy1cdTAwM2Vjb25kKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgZGlza19pbnNlcnRfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdFx0XHRcdCAgIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIHtcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbGc7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0dTggKnpvbmVzX2NvbmQ7XG4rXHR1OCAqem9uZXNfc3RhdGU7XG4gXHR1bnNpZ25lZCBpbnQgaWR4ID1cbiBcdFx0aGFzaF8zMih6d3BsdWctXHUwMDNlem9uZV9ubywgZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2JpdHMpO1xuIFxuQEAgLTUyNCwxNSArNjQ4LDE2IEBAIHN0YXRpYyBib29sIGRpc2tfaW5zZXJ0X3pvbmVfd3BsdWcoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHR9XG4gXG4gXHQvKlxuLVx0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfY29uZCBhcnJheVxuK1x0ICogU2V0IHRoZSB6b25lIGNvbmRpdGlvbjogaWYgd2UgZG8gbm90IHlldCBoYXZlIGEgem9uZXNfc3RhdGUgYXJyYXlcbiBcdCAqIGF0dGFjaGVkIHRvIHRoZSBkaXNrLCB0aGVuIHRoaXMgaXMgYSB6b25lIHdyaXRlIHBsdWcgaW5zZXJ0IGZyb20gdGhlXG4gXHQgKiBmaXJzdCBjYWxsIHRvIGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoKSwgaW4gd2hpY2ggY2FzZSB0aGUgem9uZSBpc1xuIFx0ICogbmVjZXNzYXJpbGx5IGluIHRoZSBhY3RpdmUgY29uZGl0aW9uLlxuIFx0ICovXG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stXHUwMDNlem9uZXNfY29uZCxcbitcdHpvbmVzX3N0YXRlID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stXHUwMDNlem9uZXNfc3RhdGUsXG4gXHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcbi1cdGlmICh6b25lc19jb25kKVxuLVx0XHR6d3BsdWctXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbendwbHVnLVx1MDAzZXpvbmVfbm9dO1xuK1x0aWYgKHpvbmVzX3N0YXRlKVxuK1x0XHR6d3BsdWctXHUwMDNlY29uZCA9XG4rXHRcdFx0YmxrX3pzdGF0ZV90b196b25lX2NvbmQoem9uZXNfc3RhdGVbendwbHVnLVx1MDAzZXpvbmVfbm9dKTtcbiBcdGVsc2VcbiBcdFx0endwbHVnLVx1MDAzZWNvbmQgPSBCTEtfWk9ORV9DT05EX0FDVElWRTtcbiBcbkBAIC01NzQsNiArNjk5LDI2IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGJsa196b25lX3dwbHVnICpkaXNrX2dldF96b25lX3dwbHVnKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0cmV0dXJuIGRpc2tfZ2V0X2hhc2hlZF96b25lX3dwbHVnKGRpc2ssIHNlY3Rvcik7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitcdFx0XHRcdCAgICAgdm9pZCAoKmFjdG9yKShzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKixcbitcdFx0XHRcdFx0XHQgICB2b2lkICopLFxuK1x0XHRcdFx0ICAgICB2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaClcbitcdFx0cmV0dXJuO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKykge1xuK1x0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLCBcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0sXG4rXHRcdFx0XHRcdCBub2RlKVxuK1x0XHRcdGFjdG9yKHp3cGx1ZywgZGF0YSk7XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgZGlza19mcmVlX3pvbmVfd3BsdWdfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXG4ge1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcgPVxuQEAgLTU5Miw5ICs3MzcsOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV93cGx1ZyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZylcbiBcdFdBUk5fT05fT05DRSghYmlvX2xpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSk7XG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuLVx0YmxrX3pvbmVfc2V0X2NvbmQocmN1X2RlcmVmZXJlbmNlX2NoZWNrKGRpc2stXHUwMDNlem9uZXNfY29uZCxcbitcdGJsa196c3RhdGVfc2V0KHJjdV9kZXJlZmVyZW5jZV9jaGVjayhkaXNrLVx1MDAzZXpvbmVzX3N0YXRlLFxuIFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrKSksXG4tXHRcdFx0ICB6d3BsdWctXHUwMDNlem9uZV9ubywgendwbHVnLVx1MDAzZWNvbmQpO1xuK1x0XHQgICAgICAgendwbHVnLVx1MDAzZXpvbmVfbm8sIHp3cGx1Zy1cdTAwM2Vjb25kLCAwKTtcbiBcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZ6d3BsdWctXHUwMDNlbm9kZSk7XG4gXHRhdG9taWNfZGVjKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpO1xuIFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jaywgZmxhZ3MpO1xuQEAgLTYwOCw2ICs3NTMsNTMgQEAgc3RhdGljIGlubGluZSB2b2lkIGRpc2tfcHV0X3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXG4gXHRcdGRpc2tfZnJlZV96b25lX3dwbHVnKHp3cGx1Zyk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXG4re1xuK1x0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXHUwMDNlZGlzay1cdTAwM2VxdWV1ZTtcbitcbitcdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpO1xuK1x0YmlvX2lvX2Vycm9yKGJpbyk7XG4rXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4rXHQvKiBEcm9wIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZGlza196b25lX3dwbHVnX2FkZF9iaW8oKS4gKi9cbitcdGJsa19xdWV1ZV9leGl0KHEpO1xuK31cbitcbisvKlxuKyAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zylcbit7XG4rXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHp3cGx1Zy1cdTAwM2VkaXNrO1xuK1x0c3RydWN0IGJpbyAqYmlvO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6d3BsdWctXHUwMDNlbG9jayk7XG4rXG4rXHRpZiAoYmlvX2xpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0cHJfd2Fybl9yYXRlbGltaXRlZChcIiVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcXG5cIixcbitcdFx0XHQgICAgendwbHVnLVx1MDAzZWRpc2stXHUwMDNlZGlza19uYW1lLCB6d3BsdWctXHUwMDNlem9uZV9ubyk7XG4rXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKSlcbitcdFx0YmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHp3cGx1ZywgYmlvKTtcbitcbitcdHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xuK1xuK1x0LypcbitcdCAqIElmIHdlIGFyZSB1c2luZyB0aGUgcGVyIGRpc2sgem9uZSB3cml0ZSBwbHVncyB3b3JrZXIgdGhyZWFkLCByZW1vdmVcbitcdCAqIHRoZSB6b25lIHdyaXRlIHBsdWcgZnJvbSB0aGUgd29yayBsaXN0IGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2VcbitcdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXG4rXHQgKi9cbitcdGlmIChibGtfcXVldWVfem9uZWRfcWQxX3dyaXRlcyhkaXNrLVx1MDAzZXF1ZXVlKSkge1xuK1x0XHRzcGluX2xvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuK1x0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KSkge1xuK1x0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KTtcbitcdFx0XHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuK1x0fVxuK31cbitcbiAvKlxuICAqIEZsYWcgdGhlIHpvbmUgd3JpdGUgcGx1ZyBhcyBkZWFkIGFuZCBkcm9wIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB3ZSBnb3Qgd2hlblxuICAqIHRoZSB6b25lIHdyaXRlIHBsdWcgd2FzIGFkZGVkIHRvIHRoZSBoYXNoIHRhYmxlLiBUaGUgem9uZSB3cml0ZSBwbHVnIHdpbGwgYmVcbkBAIC02MjUsNiArODE3LDEyIEBAIHN0YXRpYyB2b2lkIGRpc2tfbWFya196b25lX3dwbHVnX2RlYWQoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcpXG4gXG4gc3RhdGljIGlubGluZSBib29sIGRpc2tfY2hlY2tfem9uZV93cGx1Z19kZWFkKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnKVxuIHtcbitcdGlmIChkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKSB7XG4rXHRcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuK1x0XHRkaXNrX21hcmtfem9uZV93cGx1Z19kZWFkKHp3cGx1Zyk7XG4rXHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuIFx0aWYgKCEoendwbHVnLVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfWk9ORV9XUExVR19ERUFEKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTcwOCw1MyArOTA2LDYgQEAgc3RhdGljIHN0cnVjdCBibGtfem9uZV93cGx1ZyAqZGlza19nZXRfb3JfYWxsb2Nfem9uZV93cGx1ZyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHJldHVybiB6d3BsdWc7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfem9uZV93cGx1Z19iaW9faW9fZXJyb3Ioc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsXG4tXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmlvICpiaW8pXG4te1xuLVx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSB6d3BsdWctXHUwMDNlZGlzay1cdTAwM2VxdWV1ZTtcbi1cbi1cdGJpb19jbGVhcl9mbGFnKGJpbywgQklPX1pPTkVfV1JJVEVfUExVR0dJTkcpO1xuLVx0YmlvX2lvX2Vycm9yKGJpbyk7XG4tXHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4tXHQvKiBEcm9wIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZGlza196b25lX3dwbHVnX2FkZF9iaW8oKS4gKi9cbi1cdGJsa19xdWV1ZV9leGl0KHEpO1xuLX1cbi1cbi0vKlxuLSAqIEFib3J0IChmYWlsKSBhbGwgcGx1Z2dlZCBCSU9zIG9mIGEgem9uZSB3cml0ZSBwbHVnLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19hYm9ydChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zylcbi17XG4tXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHp3cGx1Zy1cdTAwM2VkaXNrO1xuLVx0c3RydWN0IGJpbyAqYmlvO1xuLVxuLVx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZ6d3BsdWctXHUwMDNlbG9jayk7XG4tXG4tXHRpZiAoYmlvX2xpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWJpb19saXN0KSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0cHJfd2Fybl9yYXRlbGltaXRlZChcIiVzOiB6b25lICV1OiBBYm9ydGluZyBwbHVnZ2VkIEJJT3NcXG5cIixcbi1cdFx0XHQgICAgendwbHVnLVx1MDAzZWRpc2stXHUwMDNlZGlza19uYW1lLCB6d3BsdWctXHUwMDNlem9uZV9ubyk7XG4tXHR3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcChcdTAwMjZ6d3BsdWctXHUwMDNlYmlvX2xpc3QpKSlcbi1cdFx0YmxrX3pvbmVfd3BsdWdfYmlvX2lvX2Vycm9yKHp3cGx1ZywgYmlvKTtcbi1cbi1cdHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19QTFVHR0VEO1xuLVxuLVx0Lypcbi1cdCAqIElmIHdlIGFyZSB1c2luZyB0aGUgcGVyIGRpc2sgem9uZSB3cml0ZSBwbHVncyB3b3JrZXIgdGhyZWFkLCByZW1vdmVcbi1cdCAqIHRoZSB6b25lIHdyaXRlIHBsdWcgZnJvbSB0aGUgd29yayBsaXN0IGFuZCBkcm9wIHRoZSByZWZlcmVuY2Ugd2Vcbi1cdCAqIHRvb2sgd2hlbiB0aGUgem9uZSB3cml0ZSBwbHVnIHdhcyBhZGRlZCB0byB0aGF0IGxpc3QuXG4tXHQgKi9cbi1cdGlmIChibGtfcXVldWVfem9uZWRfcWQxX3dyaXRlcyhkaXNrLVx1MDAzZXF1ZXVlKSkge1xuLVx0XHRzcGluX2xvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuLVx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2endwbHVnLVx1MDAzZWVudHJ5KTtcbi1cdFx0XHRkaXNrX3B1dF96b25lX3dwbHVnKHp3cGx1Zyk7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0X2xvY2spO1xuLVx0fVxuLX1cbi1cbiAvKlxuICAqIFVwZGF0ZSBhIHpvbmUgd3JpdGUgcGx1ZyBjb25kaXRpb24gYmFzZWQgb24gdGhlIHdyaXRlIHBvaW50ZXIgb2Zmc2V0LlxuICAqL1xuQEAgLTc4NSw4ICs5MzYsMTAgQEAgc3RhdGljIHZvaWQgZGlza196b25lX3dwbHVnX3NldF93cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXG4gXHQvKiBVcGRhdGUgdGhlIHpvbmUgd3JpdGUgcG9pbnRlciBhbmQgYWJvcnQgYWxsIHBsdWdnZWQgQklPcy4gKi9cbiBcdHp3cGx1Zy1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTEtfWk9ORV9XUExVR19ORUVEX1dQX1VQREFURTtcbi1cdHp3cGx1Zy1cdTAwM2V3cF9vZmZzZXQgPSB3cF9vZmZzZXQ7XG4tXHRkaXNrX3pvbmVfd3BsdWdfdXBkYXRlX2NvbmQoZGlzaywgendwbHVnKTtcbitcdGlmICghZGlza196b25lX3dwbHVnX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoendwbHVnKSkge1xuK1x0XHR6d3BsdWctXHUwMDNld3Bfb2Zmc2V0ID0gd3Bfb2Zmc2V0O1xuK1x0XHRkaXNrX3pvbmVfd3BsdWdfdXBkYXRlX2NvbmQoZGlzaywgendwbHVnKTtcbitcdH1cbiBcbiBcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuIFx0aWYgKCF6d3BsdWctXHUwMDNld3Bfb2Zmc2V0IHx8IGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykpXG5AQCAtODE2LDggKzk2OSw4IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmxrX3pvbmVfd3Bfb2Zmc2V0KHN0cnVjdCBibGtfem9uZSAqem9uZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4tXHRcdFx0XHRcdFx0ICAgc3RydWN0IGJsa196b25lICp6b25lKVxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGUoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUpXG4ge1xuIFx0c3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWc7XG4gXHR1bnNpZ25lZCBpbnQgd3Bfb2Zmc2V0ID0gYmxrX3pvbmVfd3Bfb2Zmc2V0KHpvbmUpO1xuQEAgLTgyOSw2ICs5ODIsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGlmICh6d3BsdWctXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19aT05FX1dQTFVHX05FRURfV1BfVVBEQVRFKVxuIFx0XHRcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KGRpc2ssIHp3cGx1Zywgd3Bfb2Zmc2V0KTtcbitcdFx0aWYgKGRpc2tfem9uZV9jb25kX2lzX29mZmxpbmVfb3JfcmVhZG9ubHkoem9uZS1cdTAwM2Vjb25kKSkge1xuK1x0XHRcdHp3cGx1Zy1cdTAwM2Vjb25kID0gem9uZS1cdTAwM2Vjb25kO1xuK1x0XHRcdGRpc2tfbWFya196b25lX3dwbHVnX2RlYWQoendwbHVnKTtcbitcdFx0fVxuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRcdGRpc2tfcHV0X3pvbmVfd3BsdWcoendwbHVnKTtcbiBcdH1cbkBAIC04NzEsNyArMTAyOCw3IEBAIGludCBkaXNrX3JlcG9ydF96b25lKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsXG4gXHR9XG4gXG4gXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKVxuLVx0XHRkaXNrX3pvbmVfd3BsdWdfc3luY193cF9vZmZzZXQoZGlzaywgem9uZSk7XG4rXHRcdGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpO1xuIFxuIFx0aWYgKGFyZ3MgXHUwMDI2XHUwMDI2IGFyZ3MtXHUwMDNlY2IpXG4gXHRcdHJldHVybiBhcmdzLVx1MDAzZWNiKHpvbmUsIGlkeCwgYXJncy1cdTAwM2VkYXRhKTtcbkBAIC05NDAsNyArMTA5Nyw3IEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXG4gXHRzZWN0b3JfdCB6b25lX3NlY3RvcnMgPSBiZGV2X3pvbmVfc2VjdG9ycyhiZGV2KTtcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbi1cdHU4ICp6b25lc19jb25kO1xuK1x0dTggKnpvbmVzX3N0YXRlLCB6cztcbiBcbiBcdGlmICghYmRldl9pc196b25lZChiZGV2KSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuQEAgLTk1NSwxMiArMTExMiwxOCBAQCBpbnQgYmxrZGV2X2dldF96b25lX2luZm8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuIFx0XHRyZXR1cm4gYmxrZGV2X3JlcG9ydF96b25lX2ZhbGxiYWNrKGJkZXYsIHNlY3Rvciwgem9uZSk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHR6b25lc19jb25kID0gcmN1X2RlcmVmZXJlbmNlKGRpc2stXHUwMDNlem9uZXNfY29uZCk7XG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfY29uZCkge1xuK1x0em9uZXNfc3RhdGUgPSByY3VfZGVyZWZlcmVuY2UoZGlzay1cdTAwM2V6b25lc19zdGF0ZSk7XG4rXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCB8fCAhem9uZXNfc3RhdGUpIHtcbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdHJldHVybiBibGtkZXZfcmVwb3J0X3pvbmVfZmFsbGJhY2soYmRldiwgc2VjdG9yLCB6b25lKTtcbiBcdH1cbi1cdHpvbmUtXHUwMDNlY29uZCA9IHpvbmVzX2NvbmRbZGlza196b25lX25vKGRpc2ssIHNlY3RvcildO1xuK1xuK1x0enMgPSB6b25lc19zdGF0ZVtkaXNrX3pvbmVfbm8oZGlzaywgc2VjdG9yKV07XG4rXHR6b25lLVx1MDAzZWNvbmQgPSBibGtfenN0YXRlX3RvX3pvbmVfY29uZCh6cyk7XG4rXHRpZiAoYmxrX3pzdGF0ZV9pc19jb252KHpzKSlcbitcdFx0em9uZS1cdTAwM2V0eXBlID0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw7XG4rXHRlbHNlXG4rXHRcdHpvbmUtXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHR6b25lLVx1MDAzZXN0YXJ0ID0gc2VjdG9yO1xuQEAgLTk3MCw4ICsxMTMzLDcgQEAgaW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcbiBcdCAqIElmIHRoaXMgaXMgYSBjb252ZW50aW9uYWwgem9uZSwgd2UgZG8gbm90IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgYW5kXG4gXHQgKiBjYW4gcmVwb3J0IHRoZSB6b25lIGltbWVkaWF0ZWx5LlxuIFx0ICovXG4tXHRpZiAoem9uZS1cdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfTk9UX1dQKSB7XG4tXHRcdHpvbmUtXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfQ09OVkVOVElPTkFMO1xuK1x0aWYgKHpvbmUtXHUwMDNldHlwZSA9PSBCTEtfWk9ORV9UWVBFX0NPTlZFTlRJT05BTCkge1xuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gem9uZV9zZWN0b3JzO1xuIFx0XHR6b25lLVx1MDAzZXdwID0gVUxMT05HX01BWDtcbiBcdFx0cmV0dXJuIDA7XG5AQCAtOTgyLDE0ICsxMTQ0LDEyIEBAIGludCBibGtkZXZfZ2V0X3pvbmVfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXG4gXHQgKiBvZmZsaW5lLCBvbmx5IHNldCB0aGUgem9uZSB3cml0ZSBwb2ludGVyIHRvIGFuIGludmFsaWQgdmFsdWUgYW5kXG4gXHQgKiByZXBvcnQgdGhlIHpvbmUuXG4gXHQgKi9cbi1cdHpvbmUtXHUwMDNldHlwZSA9IEJMS19aT05FX1RZUEVfU0VRV1JJVEVfUkVRO1xuIFx0aWYgKGRpc2tfem9uZV9pc19sYXN0KGRpc2ssIHpvbmUpKVxuIFx0XHR6b25lLVx1MDAzZWNhcGFjaXR5ID0gZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHk7XG4gXHRlbHNlXG4gXHRcdHpvbmUtXHUwMDNlY2FwYWNpdHkgPSBkaXNrLVx1MDAzZXpvbmVfY2FwYWNpdHk7XG4gXG4tXHRpZiAoem9uZS1cdTAwM2Vjb25kID09IEJMS19aT05FX0NPTkRfUkVBRE9OTFkgfHxcbi1cdCAgICB6b25lLVx1MDAzZWNvbmQgPT0gQkxLX1pPTkVfQ09ORF9PRkZMSU5FKSB7XG4rXHRpZiAoZGlza196b25lX2NvbmRfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6b25lLVx1MDAzZWNvbmQpKSB7XG4gXHRcdHpvbmUtXHUwMDNld3AgPSBVTExPTkdfTUFYO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbkBAIC0xMTA4LDM0ICsxMjY4LDMyIEBAIHN0YXRpYyB2b2lkIGJsa196b25lX3Jlc2V0X2Jpb19lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGRpc2tfem9uZV93cGx1Z19yZXNldF93cChzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zywgdm9pZCAqZGF0YSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGRpc2tfem9uZV93cGx1Z19zZXRfd3Bfb2Zmc2V0KHp3cGx1Zy1cdTAwM2VkaXNrLCB6d3BsdWcsIDApO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbiBzdGF0aWMgdm9pZCBibGtfem9uZV9yZXNldF9hbGxfYmlvX2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJpby1cdTAwM2ViaV9iZGV2LVx1MDAzZWJkX2Rpc2s7XG4tXHRzZWN0b3JfdCBjYXBhY2l0eSA9IGdldF9jYXBhY2l0eShkaXNrKTtcbi1cdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuLVx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHNlY3Rvcl90IHNlY3Rvcjtcbi1cdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpKSB7XG4tXHRcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRpc2tfem9uZV93cGx1Z3NfaGFzaF9zaXplKGRpc2spOyBpKyspIHtcbi1cdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoendwbHVnLFxuLVx0XHRcdFx0XHRcdCBcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hbaV0sXG4tXHRcdFx0XHRcdFx0IG5vZGUpIHtcbi1cdFx0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnp3cGx1Zy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdFx0XHRkaXNrX3pvbmVfd3BsdWdfc2V0X3dwX29mZnNldChkaXNrLCB6d3BsdWcsIDApO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdH1cbitcdC8qIFVwZGF0ZSB0aGUgY29uZGl0aW9uIG9mIGFsbCB6b25lIHdyaXRlIHBsdWdzLiAqL1xuK1x0aWYgKGF0b21pY19yZWFkKFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MpKVxuK1x0XHRkaXNrX2Zvcl9hbGxfem9uZV93cGx1Z3MoZGlzaywgZGlza196b25lX3dwbHVnX3Jlc2V0X3dwLCBOVUxMKTtcbiBcbiBcdC8qIFVwZGF0ZSB0aGUgY2FjaGVkIHpvbmUgY29uZGl0aW9ucy4gKi9cbi1cdGZvciAoc2VjdG9yID0gMDsgc2VjdG9yIFx1MDAzYyBjYXBhY2l0eTtcbi1cdCAgICAgc2VjdG9yICs9IGJkZXZfem9uZV9zZWN0b3JzKGJpby1cdTAwM2ViaV9iZGV2KSlcbitcdGZvciAoc2VjdG9yID0gMDsgc2VjdG9yIFx1MDAzYyBnZXRfY2FwYWNpdHkoZGlzayk7XG4rXHQgICAgIHNlY3RvciArPSBiZGV2X3pvbmVfc2VjdG9ycyhiaW8tXHUwMDNlYmlfYmRldikpIHtcbitcdFx0aWYgKCFkaXNrX3pvbmVfaXNfc2VxKGRpc2ssIHNlY3RvcikgfHxcbitcdFx0ICAgIGRpc2tfem9uZV9pc19vZmZsaW5lX29yX3JlYWRvbmx5KGRpc2ssIHNlY3RvcikpXG4rXHRcdFx0Y29udGludWU7XG4gXHRcdGRpc2tfem9uZV9zZXRfY29uZChkaXNrLCBzZWN0b3IsIEJMS19aT05FX0NPTkRfRU1QVFkpO1xuK1x0fVxuIFx0Y2xlYXJfYml0KEdEX1pPTkVfQVBQRU5EX1VTRUQsIFx1MDAyNmRpc2stXHUwMDNlc3RhdGUpO1xuIH1cbiBcbkBAIC0xMzgxLDExICsxNTM5LDEyIEBAIHN0YXRpYyBib29sIGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvKHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwgem9uZS5cbi1cdCAqIFdlIGtub3cgc3VjaCBCSU8gd2lsbCBmYWlsLCBhbmQgdGhhdCB3b3VsZCBwb3RlbnRpYWxseSBvdmVyZmxvdyBvdXJcbi1cdCAqIHdyaXRlIHBvaW50ZXIgb2Zmc2V0IGJleW9uZCB0aGUgZW5kIG9mIHRoZSB6b25lLlxuK1x0ICogQ2hlY2sgdGhhdCB0aGUgdXNlciBpcyBub3QgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZ1bGwsIHJlYWQtb25seVxuK1x0ICogb3Igb2ZmbGluZSB6b25lLiBXZSBrbm93IHN1Y2ggQklPcyB3aWxsIGZhaWwsIHNvIHRoZXJlIGlzIG5vIHBvaW50XG4rXHQgKiBpbiBpc3N1aW5nIHRoZW0uXG4gXHQgKi9cbi1cdGlmIChkaXNrX3pvbmVfd3BsdWdfaXNfZnVsbChkaXNrLCB6d3BsdWcpKVxuK1x0aWYgKGRpc2tfem9uZV93cGx1Z19pc19mdWxsKGRpc2ssIHp3cGx1ZykgfHxcbitcdCAgICBkaXNrX3pvbmVfd3BsdWdfaXNfb2ZmbGluZV9vcl9yZWFkb25seSh6d3BsdWcpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoYmlvX29wKGJpbykgPT0gUkVRX09QX1pPTkVfQVBQRU5EKSB7XG5AQCAtMTQ0Miw3ICsxNjAxLDcgQEAgc3RhdGljIGJvb2wgYmxrX3pvbmVfd3BsdWdfaGFuZGxlX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IG5yX3NlZ3MpXG4gXHR9XG4gXG4gXHQvKiBDb252ZW50aW9uYWwgem9uZXMgZG8gbm90IG5lZWQgd3JpdGUgcGx1Z2dpbmcuICovXG4tXHRpZiAoIWJkZXZfem9uZV9pc19zZXEoYmlvLVx1MDAzZWJpX2JkZXYsIHNlY3RvcikpIHtcbitcdGlmICghZGlza196b25lX2lzX3NlcShkaXNrLCBzZWN0b3IpKSB7XG4gXHRcdC8qIFpvbmUgYXBwZW5kIHRvIGNvbnZlbnRpb25hbCB6b25lcyBpcyBub3QgYWxsb3dlZC4gKi9cbiBcdFx0aWYgKGJpb19vcChiaW8pID09IFJFUV9PUF9aT05FX0FQUEVORCkge1xuIFx0XHRcdGJpb19pb19lcnJvcihiaW8pO1xuQEAgLTE4NTQsMTIgKzIwMTMsMjAgQEAgc3RhdGljIGludCBkaXNrX3pvbmVfd3BsdWdzX3dvcmtlcih2b2lkICpkYXRhKVxuIFxuIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbitcdGF0b21pY19zZXQoXHUwMDI2ZGlzay1cdTAwM2Vucl96b25lX3dwbHVncywgMCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2hfbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3RfbG9jayk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2xpc3QpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyX2Jpb19kb25lKTtcbiB9XG4gXG4rc3RhdGljIHVuc2lnbmVkIGludCBkaXNrX2dldF9ucl96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbit7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbitcbitcdHJldHVybiBESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLVx1MDAzZWNodW5rX3NlY3RvcnMpO1xuK31cbitcbiAvKlxuICAqIEZvciB0aGUgc2l6ZSBvZiBhIGRpc2sgem9uZSB3cml0ZSBwbHVnIGhhc2ggdGFibGUsIHVzZSB0aGUgc2l6ZSBvZiB0aGVcbiAgKiB6b25lIHdyaXRlIHBsdWcgbWVtcG9vbCwgd2hpY2ggaXMgdGhlIG1heGltdW0gb2YgdGhlIGRpc2sgb3BlbiB6b25lcyBhbmRcbkBAIC0xODY5LDEzICsyMDM2LDIxIEBAIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuICNkZWZpbmUgQkxLX1pPTkVfV1BMVUdfTUFYX0hBU0hfQklUU1x0XHQ5XG4gI2RlZmluZSBCTEtfWk9ORV9XUExVR19ERUZBVUxUX1BPT0xfU0laRVx0MTI4XG4gXG4tc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplKVxuK3N0YXRpYyBpbnQgZGlza19hbGxvY196b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbitcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuK1x0dW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XG4rXHR1bnNpZ25lZCBpbnQgcG9vbF9zaXplLCBpO1xuIFx0aW50IHJldCA9IC1FTk9NRU07XG4gXG4tXHRhdG9taWNfc2V0KFx1MDAyNmRpc2stXHUwMDNlbnJfem9uZV93cGx1Z3MsIDApO1xuK1x0LypcbitcdCAqIElmIHRoZSBkZXZpY2UgaGFzIG5vIGxpbWl0IG9uIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvcGVuIGFuZCBhY3RpdmVcbitcdCAqIHpvbmVzLCB1c2UgQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUuXG4rXHQgKi9cbitcdHBvb2xfc2l6ZSA9IG1heChsaW0tXHUwMDNlbWF4X29wZW5fem9uZXMsIGxpbS1cdTAwM2VtYXhfYWN0aXZlX3pvbmVzKTtcbitcdGlmICghcG9vbF9zaXplKVxuK1x0XHRwb29sX3NpemUgPSBtaW4oQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsIG5yX3pvbmVzKTtcbitcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9iaXRzID1cbiBcdFx0bWluKGlsb2cyKHBvb2xfc2l6ZSkgKyAxLCBCTEtfWk9ORV9XUExVR19NQVhfSEFTSF9CSVRTKTtcbiBcbkBAIC0xODkzLDIxICsyMDY4LDYgQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3Bvb2wpXG4gXHRcdGdvdG8gZnJlZV9oYXNoO1xuIFxuLVx0Lypcbi1cdCAqIFdlIG1heSBhbHJlYWR5IGhhdmUgYSB6b25lIHdyaXRlIHBsdWcgd29ya3F1ZXVlIGFzIHRoaXMgZnVuY3Rpb24gbWF5XG4tXHQgKiBiZSBjYWxsZWQgYWZ0ZXIgZGlza19mcmVlX3pvbmVfcmVzb3VyY2VzKCksIHdoaWNoIGRvZXMgbm90IGRlc3Ryb3lcbi1cdCAqIHRoZSB3b3JrcXVldWUgKHRoZSB6b25lIHdyaXRlIHBsdWdzIHdvcmtxdWV1ZSBpcyBkZXN0cm95ZWQgYXRcbi1cdCAqIGRpc2tfcmVsZWFzZSgpIHRpbWUpLlxuLVx0ICovXG4tXHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbi1cdFx0ZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSA9XG4tXHRcdFx0YWxsb2Nfd29ya3F1ZXVlKFwiJXNfendwbHVnc1wiLFxuLVx0XHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXG4tXHRcdFx0XHRcdHBvb2xfc2l6ZSwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuLVx0XHRpZiAoIWRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpXG4tXHRcdFx0Z290byBkZXN0cm95X3Bvb2w7XG4tXHR9XG4tXG4gXHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlciA9XG4gXHRcdGt0aHJlYWRfY3JlYXRlKGRpc2tfem9uZV93cGx1Z3Nfd29ya2VyLCBkaXNrLFxuIFx0XHRcdCAgICAgICBcIiVzX3p3cGx1Z3Nfd29ya2VyXCIsIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbkBAIC0xOTE4LDggKzIwNzgsMTggQEAgc3RhdGljIGludCBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIFx0fVxuIFx0d2FrZV91cF9wcm9jZXNzKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcbiBcbitcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPVxuK1x0XHRhbGxvY193b3JrcXVldWUoXCIlc196d3BsdWdzXCIsXG4rXHRcdFx0XHRXUV9NRU1fUkVDTEFJTSB8IFdRX0hJR0hQUkkgfCBXUV9QRVJDUFUsXG4rXHRcdFx0XHRwb29sX3NpemUsIGRpc2stXHUwMDNlZGlza19uYW1lKTtcbitcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbitcdFx0Z290byBzdG9wX3dvcmtlcjtcbitcbiBcdHJldHVybiAwO1xuIFxuK3N0b3Bfd29ya2VyOlxuK1x0a3RocmVhZF9zdG9wKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKTtcbitcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyID0gTlVMTDtcbiBkZXN0cm95X3Bvb2w6XG4gXHRtZW1wb29sX2Rlc3Ryb3koZGlzay1cdTAwM2V6b25lX3dwbHVnc19wb29sKTtcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG5AQCAtMTk2MywxOSArMjEzMywxOSBAQCBzdGF0aWMgdm9pZCBkaXNrX2Rlc3Ryb3lfem9uZV93cGx1Z3NfaGFzaF90YWJsZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdGRpc2stXHUwMDNlem9uZV93cGx1Z3NfcG9vbCA9IE5VTEw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4ICp6b25lc19jb25kKVxuK3N0YXRpYyB2b2lkIGRpc2tfc2V0X3pvbmVzX3N0YXRlX2FycmF5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCAqem9uZXNfc3RhdGUpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaF9sb2NrLCBmbGFncyk7XG4tXHR6b25lc19jb25kID0gcmN1X3JlcGxhY2VfcG9pbnRlcihkaXNrLVx1MDAzZXpvbmVzX2NvbmQsIHpvbmVzX2NvbmQsXG4rXHR6b25lc19zdGF0ZSA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZGlzay1cdTAwM2V6b25lc19zdGF0ZSwgem9uZXNfc3RhdGUsXG4gXHRcdFx0XHRsb2NrZGVwX2lzX2hlbGQoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2spKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoX2xvY2ssIGZsYWdzKTtcbiBcbi1cdGtmcmVlX3JjdV9taWdodHNsZWVwKHpvbmVzX2NvbmQpO1xuK1x0a2ZyZWVfcmN1X21pZ2h0c2xlZXAoem9uZXNfc3RhdGUpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4rdm9pZCBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4ge1xuIFx0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd29ya2VyKSB7XG4gXHRcdGt0aHJlYWRfc3RvcChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dvcmtlcik7XG5AQCAtMTk4MywzMCArMjE1MywyMiBAQCBzdGF0aWMgdm9pZCBkaXNrX2ZyZWVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHR9XG4gXHRXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19saXN0KSk7XG4gXG4tXHRpZiAoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSlcbi1cdFx0ZHJhaW5fd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuK1x0aWYgKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpIHtcbitcdFx0ZGVzdHJveV93b3JrcXVldWUoZGlzay1cdTAwM2V6b25lX3dwbHVnc193cSk7XG4rXHRcdGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EgPSBOVUxMO1xuK1x0fVxuIFxuIFx0ZGlza19kZXN0cm95X3pvbmVfd3BsdWdzX2hhc2hfdGFibGUoZGlzayk7XG4gXG4tXHRkaXNrX3NldF96b25lc19jb25kX2FycmF5KGRpc2ssIE5VTEwpO1xuK1x0ZGlza19zZXRfem9uZXNfc3RhdGVfYXJyYXkoZGlzaywgTlVMTCk7XG4gXHRkaXNrLVx1MDAzZXpvbmVfY2FwYWNpdHkgPSAwO1xuIFx0ZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSAwO1xuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IDA7XG4gfVxuIFxuLXZvaWQgZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuLXtcbi1cdGlmIChkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxKSB7XG4tXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGRpc2stXHUwMDNlem9uZV93cGx1Z3Nfd3EpO1xuLVx0XHRkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX3dxID0gTlVMTDtcbi1cdH1cbi1cbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbi19XG4tXG4gc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyB7XG4gXHRzdHJ1Y3QgZ2VuZGlza1x0KmRpc2s7XG4tXHR1OFx0XHQqem9uZXNfY29uZDtcbitcdHU4XHRcdCp6b25lc19zdGF0ZTtcbiBcdHVuc2lnbmVkIGludFx0bnJfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdG5yX2NvbnZfem9uZXM7XG4gXHR1bnNpZ25lZCBpbnRcdHpvbmVfY2FwYWNpdHk7XG5AQCAtMjAxNCw0OSArMjE3NiwyNiBAQCBzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzIHtcbiBcdHNlY3Rvcl90XHRzZWN0b3I7XG4gfTtcbiBcbi1zdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbitzdGF0aWMgaW50IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3Moc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4gXHRcdFx0XHRzdHJ1Y3QgYmxrX3JldmFsaWRhdGVfem9uZV9hcmdzICphcmdzKVxuIHtcbi1cdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSA9IFx1MDAyNmRpc2stXHUwMDNlcXVldWUtXHUwMDNlbGltaXRzO1xuLVx0dW5zaWduZWQgaW50IHBvb2xfc2l6ZTtcbi1cdGludCByZXQgPSAwO1xuLVxuIFx0YXJncy1cdTAwM2VkaXNrID0gZGlzaztcbi1cdGFyZ3MtXHUwMDNlbnJfem9uZXMgPVxuLVx0XHRESVZfUk9VTkRfVVBfVUxMKGdldF9jYXBhY2l0eShkaXNrKSwgbGltLVx1MDAzZWNodW5rX3NlY3RvcnMpO1xuK1x0YXJncy1cdTAwM2Vucl96b25lcyA9IGRpc2tfZ2V0X25yX3pvbmVzKGRpc2spO1xuIFxuIFx0LyogQ2FjaGVkIHpvbmUgY29uZGl0aW9uczogMSBieXRlIHBlciB6b25lICovXG4tXHRhcmdzLVx1MDAzZXpvbmVzX2NvbmQgPSBremFsbG9jKGFyZ3MtXHUwMDNlbnJfem9uZXMsIEdGUF9OT0lPKTtcbi1cdGlmICghYXJncy1cdTAwM2V6b25lc19jb25kKVxuK1x0YXJncy1cdTAwM2V6b25lc19zdGF0ZSA9IGt6YWxsb2MoYXJncy1cdTAwM2Vucl96b25lcywgR0ZQX05PSU8pO1xuK1x0aWYgKCFhcmdzLVx1MDAzZXpvbmVzX3N0YXRlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGlmICghZGlza19uZWVkX3pvbmVfcmVzb3VyY2VzKGRpc2spKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdC8qXG4tXHQgKiBJZiB0aGUgZGV2aWNlIGhhcyBubyBsaW1pdCBvbiB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3BlbiBhbmQgYWN0aXZlXG4tXHQgKiB6b25lcywgdXNlIEJMS19aT05FX1dQTFVHX0RFRkFVTFRfUE9PTF9TSVpFLlxuLVx0ICovXG4tXHRwb29sX3NpemUgPSBtYXgobGltLVx1MDAzZW1heF9vcGVuX3pvbmVzLCBsaW0tXHUwMDNlbWF4X2FjdGl2ZV96b25lcyk7XG4tXHRpZiAoIXBvb2xfc2l6ZSlcbi1cdFx0cG9vbF9zaXplID1cbi1cdFx0XHRtaW4oQkxLX1pPTkVfV1BMVUdfREVGQVVMVF9QT09MX1NJWkUsIGFyZ3MtXHUwMDNlbnJfem9uZXMpO1xuLVxuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpIHtcbi1cdFx0cmV0ID0gZGlza19hbGxvY196b25lX3Jlc291cmNlcyhkaXNrLCBwb29sX3NpemUpO1xuLVx0XHRpZiAocmV0KVxuLVx0XHRcdGtmcmVlKGFyZ3MtXHUwMDNlem9uZXNfY29uZCk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIC8qXG4tICogVXBkYXRlIHRoZSBkaXNrIHpvbmUgcmVzb3VyY2VzIGluZm9ybWF0aW9uIGFuZCBkZXZpY2UgcXVldWUgbGltaXRzLlxuLSAqIFRoZSBkaXNrIHF1ZXVlIGlzIGZyb3plbiB3aGVuIHRoaXMgaXMgZXhlY3V0ZWQuXG4rICogUmV2YWxpZGF0ZSBhbmQgdXBkYXRlIHRoZSBkaXNrIHpvbmUgcmVzb3VyY2VzIGluZm9ybWF0aW9uIGFuZCBkZXZpY2UgcXVldWVcbisgKiBsaW1pdHMuXG4gICovXG4tc3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbi1cdFx0XHRcdCAgICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXG4rc3RhdGljIGludCBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoc3RydWN0IGdlbmRpc2sgKmRpc2ssXG4rXHRcdFx0XHRcdCAgc3RydWN0IGJsa19yZXZhbGlkYXRlX3pvbmVfYXJncyAqYXJncylcbiB7XG4gXHRzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRpc2stXHUwMDNlcXVldWU7XG4gXHR1bnNpZ25lZCBpbnQgbnJfc2VxX3pvbmVzO1xuQEAgLTIwNjQsMjMgKzIyMDMsMjggQEAgc3RhdGljIGludCBkaXNrX3VwZGF0ZV96b25lX3Jlc291cmNlcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltO1xuIFx0aW50IHJldCA9IDA7XG4gXG4rXHQvKiBNYWtlIHN1cmUgdGhhdCB0aGUgZW50aXJlIGRpc2sgY2FwYWNpdHkgaGFzIGJlZW4gY2hlY2tlZC4gKi9cbitcdGlmIChhcmdzLVx1MDAzZXNlY3RvciAhPSBnZXRfY2FwYWNpdHkoZGlzaykpIHtcbitcdFx0cHJfd2FybihcIiVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcXG5cIixcbitcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy1cdTAwM2VzZWN0b3IpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdGlmIChhcmdzLVx1MDAzZW5yX2NvbnZfem9uZXMgXHUwMDNlPSBhcmdzLVx1MDAzZW5yX3pvbmVzKSB7XG4rXHRcdHByX3dhcm4oXCIlczogSW52YWxpZCBudW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzICV1IC8gJXVcXG5cIixcbitcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy1cdTAwM2Vucl9jb252X3pvbmVzLCBhcmdzLVx1MDAzZW5yX3pvbmVzKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4gXHRsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKHEpO1xuIFxuIFx0bWVtZmxhZ3MgPSBibGtfbXFfZnJlZXplX3F1ZXVlKHEpO1xuIFxuIFx0ZGlzay1cdTAwM2Vucl96b25lcyA9IGFyZ3MtXHUwMDNlbnJfem9uZXM7XG4tXHRpZiAoYXJncy1cdTAwM2Vucl9jb252X3pvbmVzIFx1MDAzZT0gZGlzay1cdTAwM2Vucl96b25lcykge1xuLVx0XHRxdWV1ZV9saW1pdHNfY2FuY2VsX3VwZGF0ZShxKTtcbi1cdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIG51bWJlciBvZiBjb252ZW50aW9uYWwgem9uZXMgJXUgLyAldVxcblwiLFxuLVx0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCBhcmdzLVx1MDAzZW5yX2NvbnZfem9uZXMsIGRpc2stXHUwMDNlbnJfem9uZXMpO1xuLVx0XHRyZXQgPSAtRU5PREVWO1xuLVx0XHRnb3RvIHVuZnJlZXplO1xuLVx0fVxuLVxuIFx0ZGlzay1cdTAwM2V6b25lX2NhcGFjaXR5ID0gYXJncy1cdTAwM2V6b25lX2NhcGFjaXR5O1xuIFx0ZGlzay1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSBhcmdzLVx1MDAzZWxhc3Rfem9uZV9jYXBhY2l0eTtcbi1cdGRpc2tfc2V0X3pvbmVzX2NvbmRfYXJyYXkoZGlzaywgYXJncy1cdTAwM2V6b25lc19jb25kKTtcbi1cdGFyZ3MtXHUwMDNlem9uZXNfY29uZCA9IE5VTEw7XG4rXHRkaXNrX3NldF96b25lc19zdGF0ZV9hcnJheShkaXNrLCBhcmdzLVx1MDAzZXpvbmVzX3N0YXRlKTtcbitcdGFyZ3MtXHUwMDNlem9uZXNfc3RhdGUgPSBOVUxMO1xuIFxuIFx0LypcbiBcdCAqIFNvbWUgZGV2aWNlcyBjYW4gYWR2ZXJ0aXNlIHpvbmUgcmVzb3VyY2UgbGltaXRzIHRoYXQgYXJlIGxhcmdlciB0aGFuXG5AQCAtMjEyMCw0OCArMjI2NCw1OSBAQCBzdGF0aWMgaW50IGRpc2tfdXBkYXRlX3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuIGNvbW1pdDpcbiBcdHJldCA9IHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKHEsIFx1MDAyNmxpbSk7XG4gXG4tdW5mcmVlemU6XG4gXHRibGtfbXFfdW5mcmVlemVfcXVldWUocSwgbWVtZmxhZ3MpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCBibGtfcmV2YWxpZGF0ZV96b25lX2NvbmQoc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgKmFyZ3MpXG4rc3RhdGljIHZvaWQgZGlza19kcm9wX3pvbmVfd3BsdWcoc3RydWN0IGJsa196b25lX3dwbHVnICp6d3BsdWcsIHZvaWQgKmRhdGEpXG4ge1xuLVx0ZW51bSBibGtfem9uZV9jb25kIGNvbmQgPSB6b25lLVx1MDAzZWNvbmQ7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuLVx0LyogQ2hlY2sgdGhhdCB0aGUgem9uZSBjb25kaXRpb24gaXMgY29uc2lzdGVudCB3aXRoIHRoZSB6b25lIHR5cGUuICovXG4tXHRzd2l0Y2ggKGNvbmQpIHtcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9OT1RfV1A6XG4tXHRcdGlmICh6b25lLVx1MDAzZXR5cGUgIT0gQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUwpXG4tXHRcdFx0Z290byBpbnZhbGlkX2NvbmRpdGlvbjtcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0VNUFRZOlxuLVx0Y2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6XG4tXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbi1cdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbi1cdFx0aWYgKHpvbmUtXHUwMDNldHlwZSAhPSBCTEtfWk9ORV9UWVBFX1NFUVdSSVRFX1JFUSlcbi1cdFx0XHRnb3RvIGludmFsaWRfY29uZGl0aW9uO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdHByX3dhcm4oXCIlczogSW52YWxpZCB6b25lIGNvbmRpdGlvbiAweCVYXFxuXCIsXG4tXHRcdFx0YXJncy1cdTAwM2VkaXNrLVx1MDAzZWRpc2tfbmFtZSwgY29uZCk7XG4tXHRcdHJldHVybiAtRU5PREVWO1xuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2endwbHVnLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdGRpc2tfem9uZV93cGx1Z19hYm9ydCh6d3BsdWcpO1xuK1x0ZGlza19tYXJrX3pvbmVfd3BsdWdfZGVhZCh6d3BsdWcpO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ6d3BsdWctXHUwMDNlbG9jaywgZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgaW50IGRpc2tfcmV2YWxpZGF0ZV9jYXBhY2l0eShzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbit7XG4rXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0gPSBcdTAwMjZkaXNrLVx1MDAzZXF1ZXVlLVx1MDAzZWxpbWl0cztcbitcdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IGxpbS1cdTAwM2VjaHVua19zZWN0b3JzO1xuK1x0dW5zaWduZWQgaW50IG5yX3pvbmVzID0gZGlza19nZXRfbnJfem9uZXMoZGlzayk7XG4rXHRpbnQgcmV0ID0gLUVOT0RFVjtcbitcbitcdGlmICghZ2V0X2NhcGFjaXR5KGRpc2spKVxuK1x0XHRnb3RvIGRyb3BfYWxsX3p3cGx1Z3M7XG4rXG4rXHQvKlxuK1x0ICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0XG4rXHQgKiB0aGUgbWF4IHpvbmUgYXBwZW5kIGxpbWl0IGlzIHNldC5cbitcdCAqL1xuK1x0aWYgKCF6b25lX3NlY3RvcnMgfHwgIWlzX3Bvd2VyX29mXzIoem9uZV9zZWN0b3JzKSkge1xuK1x0XHRwcl93YXJuKFwiJXM6IEludmFsaWQgbm9uIHBvd2VyIG9mIHR3byB6b25lIHNpemUgKCVsbHUpXFxuXCIsXG4rXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIHpvbmVfc2VjdG9ycyk7XG4rXHRcdGdvdG8gZHJvcF9hbGxfendwbHVncztcbiBcdH1cbiBcbi1cdGJsa196b25lX3NldF9jb25kKGFyZ3MtXHUwMDNlem9uZXNfY29uZCwgaWR4LCBjb25kKTtcbitcdC8qXG4rXHQgKiBDaGVjayBpZiB0aGUgY2FwYWNpdHkgaGFzIGNoYW5nZWQuIElmIGl0IGRpZCwgYXNzdW1lIHRoYXQgdGhlIGRldmljZVxuK1x0ICogd2FzIHJlZm9ybWF0dGVkIGFuZCB0aGF0IGFsbCBzZXF1ZW50aWFsIHpvbmVzIGFyZSBub3cgZW1wdHkuIFNvIGRyb3BcbitcdCAqIGFsbCB6b25lIHdyaXRlIHBsdWcuXG4rXHQgKi9cbitcdGlmIChkaXNrLVx1MDAzZW5yX3pvbmVzIFx1MDAyNlx1MDAyNiBkaXNrLVx1MDAzZW5yX3pvbmVzICE9IG5yX3pvbmVzKSB7XG4rXHRcdHByX3dhcm4oXCIlczogTnVtYmVyIG9mIHpvbmVzIGNoYW5nZWQgKCV1IC1cdTAwM2UgJXUpXFxuXCIsXG4rXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIGRpc2stXHUwMDNlbnJfem9uZXMsIG5yX3pvbmVzKTtcbitcdFx0cmV0ID0gMDtcbitcdFx0Z290byBkcm9wX2FsbF96d3BsdWdzO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4taW52YWxpZF9jb25kaXRpb246XG4tXHRwcl93YXJuKFwiJXM6IEludmFsaWQgem9uZSBjb25kaXRpb24gMHgleCBmb3IgdHlwZSAweCV4XFxuXCIsXG4tXHRcdGFyZ3MtXHUwMDNlZGlzay1cdTAwM2VkaXNrX25hbWUsIGNvbmQsIHpvbmUtXHUwMDNldHlwZSk7XG4rZHJvcF9hbGxfendwbHVnczpcbitcdGRpc2tfZm9yX2FsbF96b25lX3dwbHVncyhkaXNrLCBkaXNrX2Ryb3Bfem9uZV93cGx1ZywgTlVMTCk7XG4gXG4tXHRyZXR1cm4gLUVOT0RFVjtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbkBAIC0yMTY5LDEyICsyMzI0LDI2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfY29udl96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiB7XG4gXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGFyZ3MtXHUwMDNlZGlzaztcbiBcbitcdC8qIENoZWNrIHRoZSB6b25lIGNvbmRpdGlvbi4gKi9cbitcdHN3aXRjaCAoem9uZS1cdTAwM2Vjb25kKSB7XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfTk9UX1dQOlxuK1x0Y2FzZSBCTEtfWk9ORV9DT05EX09GRkxJTkU6XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfUkVBRE9OTFk6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIGNvbnYuIHpvbmUgY29uZGl0aW9uIDB4JVggYXQgc2VjdG9yICVsbHVcXG5cIixcbitcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgem9uZS1cdTAwM2Vjb25kLCB6b25lLVx1MDAzZXN0YXJ0KTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXG4gXHRpZiAoem9uZS1cdTAwM2VjYXBhY2l0eSAhPSB6b25lLVx1MDAzZWxlbikge1xuIFx0XHRwcl93YXJuKFwiJXM6IEludmFsaWQgY29udmVudGlvbmFsIHpvbmUgY2FwYWNpdHlcXG5cIixcbiBcdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSk7XG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuK1x0YmxrX3pzdGF0ZV9zZXQoYXJncy1cdTAwM2V6b25lc19zdGF0ZSwgaWR4LCB6b25lLVx1MDAzZWNvbmQsIEJMS19aRkxBR19DT05WKTtcbitcbiBcdGlmIChkaXNrX3pvbmVfaXNfbGFzdChkaXNrLCB6b25lKSlcbiBcdFx0YXJncy1cdTAwM2VsYXN0X3pvbmVfY2FwYWNpdHkgPSB6b25lLVx1MDAzZWNhcGFjaXR5O1xuIFxuQEAgLTIxOTAsNiArMjM1OSwyNCBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiBcdHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnO1xuIFx0dW5zaWduZWQgaW50IHdwX29mZnNldDtcbiBcbitcdC8qIENoZWNrIHRoZSB6b25lIGNvbmRpdGlvbi4gKi9cbitcdHN3aXRjaCAoem9uZS1cdTAwM2Vjb25kKSB7XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfSU1QX09QRU46XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfRVhQX09QRU46XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfQ0xPU0VEOlxuK1x0Y2FzZSBCTEtfWk9ORV9DT05EX0VNUFRZOlxuK1x0Y2FzZSBCTEtfWk9ORV9DT05EX0ZVTEw6XG4rXHRjYXNlIEJMS19aT05FX0NPTkRfT0ZGTElORTpcbitcdGNhc2UgQkxLX1pPTkVfQ09ORF9SRUFET05MWTpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwcl93YXJuKFwiJXM6IEludmFsaWQgc2VxLiB6b25lIGNvbmRpdGlvbiAweCVYIGF0IHNlY3RvciAlbGx1XFxuXCIsXG4rXHRcdFx0ZGlzay1cdTAwM2VkaXNrX25hbWUsIHpvbmUtXHUwMDNlY29uZCwgem9uZS1cdTAwM2VzdGFydCk7XG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1x0fVxuK1xuK1x0YmxrX3pzdGF0ZV9zZXQoYXJncy1cdTAwM2V6b25lc19zdGF0ZSwgaWR4LCB6b25lLVx1MDAzZWNvbmQsIDApO1xuK1xuIFx0LypcbiBcdCAqIFJlbWVtYmVyIHRoZSBjYXBhY2l0eSBvZiB0aGUgZmlyc3Qgc2VxdWVudGlhbCB6b25lIGFuZCBjaGVja1xuIFx0ICogaWYgaXQgaXMgY29uc3RhbnQgZm9yIGFsbCB6b25lcywgaWdub3JpbmcgdGhlIGxhc3Qgem9uZSBhcyBpdCBjYW4gYmVcbkBAIC0yMjE0LDcgKzI0MDEsNyBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3NlcV96b25lKHN0cnVjdCBibGtfem9uZSAqem9uZSwgdW5zaWduZWQgaW50IGlkeCxcbiBcdGlmICghZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3dwX29mZnNldChkaXNrLCB6b25lKTtcbitcdHdwX29mZnNldCA9IGRpc2tfem9uZV93cGx1Z19zeW5jX3N0YXRlKGRpc2ssIHpvbmUpO1xuIFx0aWYgKCF3cF9vZmZzZXQgfHwgd3Bfb2Zmc2V0IFx1MDAzZT0gem9uZS1cdTAwM2VjYXBhY2l0eSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjI3MiwxMSArMjQ1OSw2IEBAIHN0YXRpYyBpbnQgYmxrX3JldmFsaWRhdGVfem9uZV9jYihzdHJ1Y3QgYmxrX3pvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBpZHgsXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFx0fVxuIFxuLVx0LyogQ2hlY2sgem9uZSBjb25kaXRpb24gKi9cbi1cdHJldCA9IGJsa19yZXZhbGlkYXRlX3pvbmVfY29uZCh6b25lLCBpZHgsIGFyZ3MpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbi1cbiBcdC8qIENoZWNrIHpvbmUgdHlwZSAqL1xuIFx0c3dpdGNoICh6b25lLVx1MDAzZXR5cGUpIHtcbiBcdGNhc2UgQkxLX1pPTkVfVFlQRV9DT05WRU5USU9OQUw6XG5AQCAtMjMxMywzOSArMjQ5NSwzNyBAQCBzdGF0aWMgaW50IGJsa19yZXZhbGlkYXRlX3pvbmVfY2Ioc3RydWN0IGJsa196b25lICp6b25lLCB1bnNpZ25lZCBpbnQgaWR4LFxuICAqL1xuIGludCBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbi1cdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZGlzay1cdTAwM2VxdWV1ZTtcbi1cdHNlY3Rvcl90IHpvbmVfc2VjdG9ycyA9IHEtXHUwMDNlbGltaXRzLmNodW5rX3NlY3RvcnM7XG4tXHRzZWN0b3JfdCBjYXBhY2l0eSA9IGdldF9jYXBhY2l0eShkaXNrKTtcbiBcdHN0cnVjdCBibGtfcmV2YWxpZGF0ZV96b25lX2FyZ3MgYXJncyA9IHsgfTtcbi1cdHVuc2lnbmVkIGludCBtZW1mbGFncywgbm9pb19mbGFnO1xuIFx0c3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyByZXBfYXJncyA9IHtcbiBcdFx0LmNiID0gYmxrX3JldmFsaWRhdGVfem9uZV9jYixcbiBcdFx0LmRhdGEgPSBcdTAwMjZhcmdzLFxuIFx0fTtcbi1cdGludCByZXQgPSAtRU5PTUVNO1xuK1x0dW5zaWduZWQgaW50IG5vaW9fZmxhZztcbitcdGludCByZXQ7XG4gXG4tXHRpZiAoV0FSTl9PTl9PTkNFKCFibGtfcXVldWVfaXNfem9uZWQocSkpKVxuK1x0aWYgKFdBUk5fT05fT05DRSghYmxrX3F1ZXVlX2lzX3pvbmVkKGRpc2stXHUwMDNlcXVldWUpKSlcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4tXHRpZiAoIWNhcGFjaXR5KVxuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbitcdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV9jYXBhY2l0eShkaXNrKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXG4gXHQvKlxuLVx0ICogQ2hlY2tzIHRoYXQgdGhlIGRldmljZSBkcml2ZXIgaW5kaWNhdGVkIGEgdmFsaWQgem9uZSBzaXplIGFuZCB0aGF0XG4tXHQgKiB0aGUgbWF4IHpvbmUgYXBwZW5kIGxpbWl0IGlzIHNldC5cbitcdCAqIEFsbG9jYXRlIHpvbmUgcmVzb3VyY2VzIGlmIHRoZXkgYXJlIG5lZWRlZCBhbmQgd2UgaGF2ZSBub3QgZG9uZVxuK1x0ICogc28geWV0LCBhbmQgaW5pdGlhbGl6ZSB0aGUgcmV2YWxpZGF0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gcmVwb3J0XG4rXHQgKiB6b25lcy4gRW5zdXJlIHRoYXQgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIGRvbmUgYXNcbitcdCAqIGlmIEdGUF9OT0lPIHdhcyBzcGVjaWZpZWQuXG4gXHQgKi9cbi1cdGlmICghem9uZV9zZWN0b3JzIHx8ICFpc19wb3dlcl9vZl8yKHpvbmVfc2VjdG9ycykpIHtcbi1cdFx0cHJfd2FybihcIiVzOiBJbnZhbGlkIG5vbiBwb3dlciBvZiB0d28gem9uZSBzaXplICglbGx1KVxcblwiLFxuLVx0XHRcdGRpc2stXHUwMDNlZGlza19uYW1lLCB6b25lX3NlY3RvcnMpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbitcdG5vaW9fZmxhZyA9IG1lbWFsbG9jX25vaW9fc2F2ZSgpO1xuK1x0aWYgKGRpc2tfbmVlZF96b25lX3Jlc291cmNlcyhkaXNrKSBcdTAwMjZcdTAwMjYgIWRpc2stXHUwMDNlem9uZV93cGx1Z3NfaGFzaCkge1xuK1x0XHRyZXQgPSBkaXNrX2FsbG9jX3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0bWVtYWxsb2Nfbm9pb19yZXN0b3JlKG5vaW9fZmxhZyk7XG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuIFx0fVxuIFxuLVx0Lypcbi1cdCAqIEVuc3VyZSB0aGF0IGFsbCBtZW1vcnkgYWxsb2NhdGlvbnMgaW4gdGhpcyBjb250ZXh0IGFyZSBkb25lIGFzIGlmXG4tXHQgKiBHRlBfTk9JTyB3YXMgc3BlY2lmaWVkLlxuLVx0ICovXG4tXHRub2lvX2ZsYWcgPSBtZW1hbGxvY19ub2lvX3NhdmUoKTtcbi1cdHJldCA9IGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlcyhkaXNrLCBcdTAwMjZhcmdzKTtcbitcdHJldCA9IGRpc2tfaW5pdF9yZXZhbGlkYXRlX2FyZ3MoZGlzaywgXHUwMDI2YXJncyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdG1lbWFsbG9jX25vaW9fcmVzdG9yZShub2lvX2ZsYWcpO1xuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNTksMzIgKzI1MzksMTggQEAgaW50IGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXMoc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRtZW1hbGxvY19ub2lvX3Jlc3RvcmUobm9pb19mbGFnKTtcbiBcbiBcdGlmIChyZXQgXHUwMDNjPSAwKVxuLVx0XHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xuK1x0XHRnb3RvIGZyZWVfYXJncztcbiBcbi1cdC8qXG4tXHQgKiBJZiB6b25lcyB3aGVyZSByZXBvcnRlZCwgbWFrZSBzdXJlIHRoYXQgdGhlIGVudGlyZSBkaXNrIGNhcGFjaXR5XG4tXHQgKiBoYXMgYmVlbiBjaGVja2VkLlxuLVx0ICovXG4tXHRpZiAoYXJncy5zZWN0b3IgIT0gY2FwYWNpdHkpIHtcbi1cdFx0cHJfd2FybihcIiVzOiBNaXNzaW5nIHpvbmVzIGZyb20gc2VjdG9yICVsbHVcXG5cIixcbi1cdFx0XHRkaXNrLVx1MDAzZWRpc2tfbmFtZSwgYXJncy5zZWN0b3IpO1xuLVx0XHRyZXQgPSAtRU5PREVWO1xuLVx0XHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xuLVx0fVxuLVxuLVx0cmV0ID0gZGlza191cGRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXHUwMDI2YXJncyk7XG4rXHRyZXQgPSBkaXNrX3JldmFsaWRhdGVfem9uZV9yZXNvdXJjZXMoZGlzaywgXHUwMDI2YXJncyk7XG4gXHRpZiAocmV0KVxuLVx0XHRnb3RvIGZyZWVfcmVzb3VyY2VzO1xuK1x0XHRnb3RvIGZyZWVfYXJncztcbiBcbiBcdHJldHVybiAwO1xuIFxuLWZyZWVfcmVzb3VyY2VzOlxuK2ZyZWVfYXJnczpcbiBcdHByX3dhcm4oXCIlczogZmFpbGVkIHRvIHJldmFsaWRhdGUgem9uZXNcXG5cIiwgZGlzay1cdTAwM2VkaXNrX25hbWUpO1xuIFxuLVx0a2ZyZWUoYXJncy56b25lc19jb25kKTtcbi1cdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShxKTtcbi1cdGRpc2tfZnJlZV96b25lX3Jlc291cmNlcyhkaXNrKTtcbi1cdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShxLCBtZW1mbGFncyk7XG4rXHRrZnJlZShhcmdzLnpvbmVzX3N0YXRlKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTI0MzUsOCArMjYwMSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX2lzc3VlX3plcm9vdXQpO1xuIFxuICNpZmRlZiBDT05GSUdfQkxLX0RFQlVHX0ZTXG4gc3RhdGljIHZvaWQgcXVldWVfem9uZV93cGx1Z19zaG93KHN0cnVjdCBibGtfem9uZV93cGx1ZyAqendwbHVnLFxuLVx0XHRcdFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4rXHRcdFx0XHQgIHZvaWQgKmRhdGEpXG4ge1xuK1x0c3RydWN0IHNlcV9maWxlICptID0gZGF0YTtcbiBcdHVuc2lnbmVkIGludCB6d3Bfd3Bfb2Zmc2V0LCB6d3BfZmxhZ3M7XG4gXHR1bnNpZ25lZCBpbnQgendwX3pvbmVfbm8sIHp3cF9yZWY7XG4gXHR1bnNpZ25lZCBpbnQgendwX2Jpb19saXN0X3NpemU7XG5AQCAtMjQ2MSwxOSArMjYyOCw4IEBAIHN0YXRpYyB2b2lkIHF1ZXVlX3pvbmVfd3BsdWdfc2hvdyhzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1ZyxcbiBpbnQgcXVldWVfem9uZV93cGx1Z3Nfc2hvdyh2b2lkICpkYXRhLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXG4ge1xuIFx0c3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBkYXRhO1xuLVx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBxLVx1MDAzZWRpc2s7XG4tXHRzdHJ1Y3QgYmxrX3pvbmVfd3BsdWcgKnp3cGx1Zztcbi1cdHVuc2lnbmVkIGludCBpO1xuLVxuLVx0aWYgKCFkaXNrLVx1MDAzZXpvbmVfd3BsdWdzX2hhc2gpXG4tXHRcdHJldHVybiAwO1xuIFxuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZGlza196b25lX3dwbHVnc19oYXNoX3NpemUoZGlzayk7IGkrKylcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHp3cGx1ZywgXHUwMDI2ZGlzay1cdTAwM2V6b25lX3dwbHVnc19oYXNoW2ldLFxuLVx0XHRcdFx0XHQgbm9kZSlcbi1cdFx0XHRxdWV1ZV96b25lX3dwbHVnX3Nob3coendwbHVnLCBtKTtcbi1cdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0ZGlza19mb3JfYWxsX3pvbmVfd3BsdWdzKHEtXHUwMDNlZGlzaywgcXVldWVfem9uZV93cGx1Z19zaG93LCBtKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9ibG9jay9ibGsuaCBiL2Jsb2NrL2Jsay5oXG5pbmRleCA1MGFiZmQ5MzI4ODYxLi5jZmU4ZDQxODVlMjVhIDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLmhcbisrKyBiL2Jsb2NrL2Jsay5oXG5AQCAtNTc3LDYgKzU3Nyw3IEBAIGludCBibGtkZXZfcmVwb3J0X3pvbmVzX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRcdHVuc2lnbmVkIGxvbmcgYXJnKTtcbiBpbnQgYmxrZGV2X3pvbmVfbWdtdF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsXG4gXHRcdHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTtcbitib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3Rvcik7XG4gI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfWk9ORUQgKi9cbiBzdGF0aWMgaW5saW5lIHZvaWQgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuIHtcbkBAIC02MTksNiArNjIwLDExIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJsa2Rldl96b25lX21nbXRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4rc3RhdGljIGlubGluZSBib29sIGJkZXZfY2hlY2tfem9uZV9tZ210KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXG4rXHRcdFx0XHRcdHNlY3Rvcl90IHNlY3Rvcilcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9aT05FRCAqL1xuIFxuIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXZfYWxsb2Moc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubyk7XG5kaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmNcbmluZGV4IGU4Y2UwY2FiZjM5MmMuLjM0YTY0MDc3YmEwMmMgMTAwNjQ0XG4tLS0gYS9ibG9jay9nZW5oZC5jXG4rKysgYi9ibG9jay9nZW5oZC5jXG5AQCAtNDQ3LDYgKzQ0NywxMyBAQCBzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbiBcdFx0YmRldl9zZXRfZmxhZyhkaXNrLVx1MDAzZXBhcnQwLCBCRF9IQVNfU1VCTUlUX0JJTyk7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogV2UgZG8gbm90IHN1cHBvcnQgcGFydGl0aW9ucyB3aXRoIHpvbmVkIGJsb2NrIGRldmljZXMsIHNvIGRvIG5vdCB0cnlcbitcdCAqIHRvIHNjYW4gdGhlIHBhcnRpdGlvbnMgdGFibGUuXG4rXHQgKi9cbitcdGlmIChibGtfcXVldWVfaXNfem9uZWQoZGlzay1cdTAwM2VxdWV1ZSkpXG4rXHRcdGRpc2stXHUwMDNlZmxhZ3MgfD0gR0VOSERfRkxfTk9fUEFSVDtcbitcbiBcdC8qXG4gXHQgKiBJZiB0aGUgZHJpdmVyIHByb3ZpZGVzIGFuIGV4cGxpY2l0IG1ham9yIG51bWJlciBpdCBhbHNvIG11c3QgcHJvdmlkZVxuIFx0ICogdGhlIG51bWJlciBvZiBtaW5vcnMgbnVtYmVycyBzdXBwb3J0ZWQsIGFuZCB0aG9zZSB3aWxsIGJlIHVzZWQgdG9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggMjBjYjhlZDdkOTg3YS4uNGZhMDA3NTc1MjdkNyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0yMDAsNyArMjAwLDcgQEAgc3RydWN0IGdlbmRpc2sge1xuIFx0dW5zaWduZWQgaW50XHRcdG5yX3pvbmVzO1xuIFx0dW5zaWduZWQgaW50XHRcdHpvbmVfY2FwYWNpdHk7XG4gXHR1bnNpZ25lZCBpbnRcdFx0bGFzdF96b25lX2NhcGFjaXR5O1xuLVx0dTggX19yY3VcdFx0KnpvbmVzX2NvbmQ7XG4rXHR1OCBfX3JjdVx0XHQqem9uZXNfc3RhdGU7XG4gXHR1bnNpZ25lZCBpbnRcdFx0em9uZV93cGx1Z3NfaGFzaF9iaXRzO1xuIFx0YXRvbWljX3RcdFx0bnJfem9uZV93cGx1Z3M7XG4gXHRzcGlubG9ja190XHRcdHpvbmVfd3BsdWdzX2hhc2hfbG9jaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjI2LjE4NzczMjI1M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjY4NDIyNzg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWm9uZWQgQmxvY2sgRGV2aWNlIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQncyB0b3VjaGluZyB0aGUgYmxvY2sgbGF5ZXIsIHNwZWNpZmljYWxseSB0aGUgem9uZWQgYmxvY2sgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBXZSdyZSBsb29raW5nIGF0IGBibG9jay9ibGstem9uZWQuY2AsIGBibG9jay9ibGstY29yZS5jYCwgYGJsb2NrL2Jsay5oYCwgYGJsb2NrL2dlbmhkLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvYmxrZGV2LmhgLiBTdHJhaWdodCBhd2F5LCBJIHNlZSB0aGV5J3JlIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBjaGFuZ2luZyBob3cgem9uZSBzdGF0ZXMgYXJlIHRyYWNrZWQuIEluc3RlYWQgb2YgYHpvbmVzX2NvbmRgLCB3ZSdyZSBub3cgZGVhbGluZyB3aXRoIGB6b25lc19zdGF0ZWAuIFRoaXMgaGFzIGEgaHVnZSBmdW5jdGlvbmFsIGltcGFjdC4gVGhpcyBpcyBhIGdvb2Qgc2lnbiBmb3IgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBzdWJtaXRfYmlvX25vYWNjdGAgbm93IGNoZWNrcyB3aXRoIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAuIFRoYXQgb25lIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay4gVGhleSdyZSBiYXNpY2FsbHkgbWFraW5nIHN1cmUgem9uZSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgYXJlIG9ubHkgYWxsb3dlZCBvbiBzZXF1ZW50aWFsIHpvbmVzIHRoYXQgYXJlIG9ubGluZSBhbmQgbm90IHJlYWQtb25seS4gV2UgYWxzbyBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIGhvdyBgX19hZGRfZGlza2AgaXMgbW9kaWZpZWQgaW4gYGJsb2NrL2dlbmhkLmNgIHRvIHNldCBgR0VOSERfRkxfTk9fUEFSVGAgZm9yIHpvbmVkIGJsb2NrIGRldmljZXMuXG5cblNvLCBJJ20gdGhpbmtpbmcgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgdGhlc2UgbmV3IGNoZWNrcyBhbmQgc3RhdGUgbWFuYWdlbWVudC4gQmFzZWQgb24gdGhhdCwgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHByaW1lIGZ1enppbmcgY2FuZGlkYXRlczpcblxuKiAgIGBiZGV2X2NoZWNrX3pvbmVfbWdtdGAgKGVzcGVjaWFsbHkgZ2l2ZW4gaXQncyBub3cgZXhwb3J0ZWQgYW5kIGNhbGxlZCBmcm9tIGBzdWJtaXRfYmlvX25vYWNjdGApXG4qICAgYGRpc2tfem9uZV9zZXRfY29uZGBcbiogICBgZGlza196b25lX2dldF9zdGF0ZWBcbiogICBgZGlza196b25lX2dldF9jb25kYFxuKiAgIGBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seWBcbiogICBgZGlza196b25lX2lzX3NlcWBcbiogICBgZGlza19pbnNlcnRfem9uZV93cGx1Z2BcbiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YFxuKiAgIGBkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZWBcbiogICBgYmxrZGV2X2dldF96b25lX2luZm9gXG4qICAgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gXG4qICAgYGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvYFxuKiAgIGBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGVgXG4qICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgXG4qICAgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2BcbiogICBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2BcblxuSSdtIHplcm9pbmcgaW4gb24gYSBmZXcgZnVuY3Rpb25zIHdoaWNoIGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3Rpbmc6XG5cbiogICBgYmRldl9jaGVja196b25lX21nbXRgIChzaW5jZSBpdCdzIGEgYm91bmRhcnkgZXhwb3NlZCB0byB0aGUgc3VibWl0IHBhdGgpLlxuKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCAobGlrZWx5IGludm9sdmVkIGluIGluaXRpYWwgZGlzayBzZXR1cCBvciB6b25lIHJldmFsaWRhdGlvbilcbiogICBgYmxrZGV2X2dldF96b25lX2luZm9gIChpZiBhbiBBUEksIGFuZCBjb21tb25seSB1c2VkIGl0IG1heSBiZSB2YWx1YWJsZSB0byBmdXp6KS5cbiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YCAoZXJyb3IgcmVjb3ZlcnkpLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2UgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19CTEtfREVWX1pPTkVEYCBpcyBhY3R1YWxseSBlbmFibGVkLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhhdCB3aXRoIGBnaXQgZ3JlcGAgb3IgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCB0byBtYWtlIHN1cmUgd2UncmUgZGVhbGluZyB3aXRoIGEgYnVpbGQgdGhhdCdzIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc1MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjM2Ljg1NjE1OTA4MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzY1MDkxMDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCTEtfREVWX1pPTkVEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL0tjb25maWc9Nzc9Y29uZmlnIEJMS19ERVZfV1JJVEVfTU9VTlRFRFxcbi0tXFxuYmxvY2svS2NvbmZpZy05Ni1cXG5ibG9jay9LY29uZmlnOjk3OmNvbmZpZyBCTEtfREVWX1pPTkVEXFxuYmxvY2svS2NvbmZpZy05OC1cXHRib29sIFxcXCJab25lZCBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0zNTQ9c291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JuYmQvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU1LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzozNTY6Y29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0zNTctXFx0dHJpc3RhdGUgXFxcIlpvbmVkIGxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NjozOS4yMjEyNTkyNjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzIwMDc3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUsIG15IGluaXRpYWwgZm9jdXMgaXMgb24gYEJMS19ERVZfWk9ORURgLiBUaGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIHNldHRpbmcgZm9yIHpvbmVkIGJsb2NrIGRldmljZSBzdXBwb3J0LCBuYXR1cmFsbHkuIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3MgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBOb3csIHRoaW5raW5nIG1vcmUgYnJvYWRseSwgSSB3b25kZXIuLi5gQkxLX0RFVl9aT05FRF9MT09QYCBjb3VsZCBiZSB1c2VmdWwsIGVzcGVjaWFsbHkgZm9yIGNyZWF0aW5nIGEgdmlydHVhbCBlbnZpcm9ubWVudCB0byB0ZXN0IHRoaW5ncyB3aXRob3V0IG5lZWRpbmcgcmVhbCBoYXJkd2FyZSwgdGhhdCBtaWdodCBiZSB1c2VmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg3LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NDUuNTQxMzM4MjM3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjUyMzQ4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfWk9ORURfTE9PUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWc9MzU0PXNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTM1NS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MzU2OmNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMzU3LVxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NDguMDA2NTc4OTY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg0ODIyMTU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBgQkxLX0RFVl9aT05FRF9MT09QYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb246XG5cbioqRGl2aW5nIGludG8gQkxLX0RFVl9aT05FRF9MT09QIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzIGFuZCBtb2R1bGVzIGFyZSBwcmVyZXF1aXNpdGVzIG9yIGFyZSByZWxhdGVkIHRvIGBCTEtfREVWX1pPTkVEX0xPT1BgLiBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIHRvIHRyYWNlIHRoaXMgZGVwZW5kZW5jeSB0cmVlLiBMZXQncyBzdGFydCBieSBsb29raW5nIGZvciBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIHVzdWFsbHkgaW52b2x2ZXMgc2VhcmNoaW5nIGZvciBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyByZWxhdGVkIHRvIHRoaXMgb3B0aW9uLiBJ4oCZbGwgYmUgd2F0Y2hpbmcgb3V0IGZvciB0aGluZ3MgbGlrZSBzdG9yYWdlIHN0YWNrIGNvbXBvbmVudHMsIGJsb2NrIGRldmljZSBkcml2ZXJzLCBvciBzcGVjaWZpYyBmaWxlc3lzdGVtIGZlYXR1cmVzLiBJdCBjb3VsZCBhbHNvIGRlcGVuZCBvbiBzb21lIGNvcmUgaW5mcmFzdHJ1Y3R1cmUgbGlrZSB0aGUgbG9vcCBkZXZpY2UgaXRzZWxmLCBvYnZpb3VzbHkuIEl0J3MgYWxzbyBwb3NzaWJsZSB0aGF0IGl0IHJlcXVpcmVzIGVuYWJsaW5nIGNlcnRhaW4ga2VybmVsIGFyY2hpdGVjdHVyZXMuIEkgYWxzbyB3aWxsIHdhbnQgdG8gc2VlIHdoaWNoIG90aGVyIG9wdGlvbnMgYXJlIGluY2x1ZGVkLCBhcyB0aGVzZSBvZnRlbiBpbXBseSB1c2FnZSBvZiB0aGUgb3B0aW9uLCB0aG91Z2ggbm90IGV4cGxpY2l0IGRlcGVuZGVuY3kuIEkgYWxzbyB3aWxsIG1ha2Ugbm90ZXMsIGFzIHdlbGwgYXMgdGVzdCBteSBjdXJyZW50IGtub3dsZWRnZSwgc28gSSBjYW4gc2VlIHdoaWNoIEkgbmVlZCB0byByZWZyZXNoIG9uLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBhbnkgcG90ZW50aWFsbHkgY29uZmxpY3Rpbmcgb3B0aW9ucyBvciBpbXBsaWNpdCBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDY2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NTIuODU0ODAzMjg4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0ICBTYXkgTiBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGxlZ2FjeSBjb21tYW5kIG9wY29kZS4gSXQgaXNcXG4gMzUxOlxcdFxcdCAgc3VnZ2VzdGVkIHRvIGVuYWJsZSBOIGlmIHlvdXIgYXBwbGljYXRpb24odWJsayBzZXJ2ZXIpIHN3aXRjaGVzIHRvXFxuIDM1MjpcXHRcXHQgIGlvY3RsIGNvbW1hbmQgZW5jb2RpbmcuXFxuIDM1MzpcXHRcXG4gMzU0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy9ibG9jay9ybmJkL0tjb25maWdcXFwiXFxuIDM1NTpcXHRcXG4gMzU2OlxcdGNvbmZpZyBCTEtfREVWX1pPTkVEX0xPT1BcXG4gMzU3OlxcdFxcdHRyaXN0YXRlIFxcXCJab25lZCBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gMzU4OlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxcbiAzNTk6XFx0XFx0aGVscFxcbiAzNjA6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBjcmVhdGUgYSB6b25lZCBibG9jayBkZXZpY2UgdXNpbmdcXG4gMzYxOlxcdFxcdCAgcmVndWxhciBmaWxlcyBmb3Igem9uZXMgKG9uZSBmaWxlIHBlciB6b25lcykuIFRoaXMgaXMgdXNlZnVsIHRvIHRlc3RcXG4gMzYyOlxcdFxcdCAgZmlsZSBzeXN0ZW1zLCBkZXZpY2UgbWFwcGVyIGFuZCBhcHBsaWNhdGlvbnMgdGhhdCBzdXBwb3J0IHpvbmVkIGJsb2NrXFxuIDM2MzpcXHRcXHQgIGRldmljZXMuIFRvIGNyZWF0ZSBhIHpvbmVkIGxvb3AgZGV2aWNlLCBubyB1c2VyIHV0aWxpdHkgaXMgbmVlZGVkLCBhXFxuIDM2NDpcXHRcXHQgIHpvbmVkIGxvb3AgZGV2aWNlIGNhbiBiZSBjcmVhdGVkIChvciByZS1zdGFydGVkKSB1c2luZyBhIGNvbW1hbmRcXG4gMzY1OlxcdFxcdCAgbGlrZTpcXG4gMzY2OlxcdFxcbiAzNjc6XFx0XFx0ICBlY2hvIFxcXCJhZGQgaWQ9MCx6b25lX3NpemVfbWI9MjU2LGNhcGFjaXR5X21iPTE2Mzg0LGNvbnZfem9uZXM9MTFcXFwiIFxcdTAwM2UgXFxcXFxcbiAzNjg6XFx0XFx0XFx0L2Rldi96bG9vcC1jb250cm9sXFxuIDM2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDY6NTIuODU0OTQ1MDI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyOTMyNzUwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0IG1lIHByb2Nlc3MgdGhpc+KAplxuXG4qKlpvbmVkIEJsb2NrIERldmljZSBDb25mdXNpb24gLSBBIFF1aWNrIERpdmUqKlxuXG5Ib2xkIG9uIGEgc2Vjb25kLiAqQkxLX0RFVl9aT05FRF9MT09QKj8gSSBoYWRuJ3Qgc2VlbiB0aGF0IG9uZSBiZWZvcmUuIEknbSB1c3VhbGx5IHByZXR0eSB1cC10by1kYXRlIG9uIGJsb2NrIGRldmljZSBkZWZpbml0aW9ucywgYnV0IHRoaXMgY2F1Z2h0IG1lIG9mZiBndWFyZC4gV2FpdCwgaXNuJ3QgKkJMS19ERVZfWk9ORUQqIHRoZSBwcmltYXJ5IG9uZSBJJ2QgYmUgbG9va2luZyBhdD8gWWVhaCwgdGhhdCByaW5ncyBhIGJlbGwuIE5vdywgbGV0J3MgdGhpbmvigKYgd2hhdCBhYm91dCAqTlVMTF9CTEtfWk9ORUQqPyBIbW0sIHRoYXQgY291bGQgYWN0dWFsbHkgYmUgcmVsZXZhbnQgdG8gbXkgY3VycmVudCB0cmFpbiBvZiB0aG91Z2h0LiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gKk5VTExfQkxLX1pPTkVEKiwgSSdsbCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBicm9hZGVyICpOVUxMX0JMSyogY29udGV4dC4gR290dGEgbWFrZSBzdXJlIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmlnaHQgYWJzdHJhY3Rpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTMyLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0Njo1Ny41ODQyNzU0NDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNTY3MDc5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEJMS19ERVZfTlVMTF9CTEtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjY6Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy05LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctMTEtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ2OjU5Ljg0MDk4OTg1MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDU3ODA5NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYE5VTExfQkxLYCBab25lZCBTdXBwb3J0KipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gdGhpbmtpbmcgYWJvdXQgYE5VTExfQkxLYCB6b25lZCBzdXBwb3J0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBzdGFydCBieSB1bmRlcnN0YW5kaW5nIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgaGFuZGxlZCBhdCB0aGUgbG93ZXN0IGxldmVsLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgaXQgd2lsbCBwZXJmb3JtIGluIGEgdHlwaWNhbCB3b3JrbG9hZC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIGhvdyB0aGUgem9uZWQgY2hhcmFjdGVyaXN0aWNzIGFyZSBsZXZlcmFnZWQsIGFuZCB3aGVyZSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBtYXkgYmUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9ucyBhbmQgY2FwYWJpbGl0aWVzLiBBcmUgd2UgZ2V0dGluZyBmdWxsIHV0aWxpemF0aW9uIG91dCBvZiB0aGlzIGZlYXR1cmU/IEFyZSB0aGVyZSBhbnkgdW5leHBlY3RlZCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb3IgY29tcGF0aWJpbGl0eSBpc3N1ZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YsIHBlcmhhcHMgd2l0aCBzcGVjaWZpYyBjb250cm9sbGVycyBvciBkcml2ZSBtb2RlbHM/IE15IGZvY3VzIGhhcyB0byBiZSBvbiB0aGUgZGV0YWlscyBvZiBibG9jayBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gZ2V0IHRoaXMgcmlnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MDQuODk4ODAzOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTnVsbCBibG9jayBkZXZpY2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IENPTkZJR0ZTX0ZTXFxuICAgOTpcXHRcXG4gIDEwOlxcdGNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbiAgMTE6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuICAxMjpcXHRcXHRkZXBlbmRzIG9uIEJMS19ERVZfTlVMTF9CTEsgXFx1MDAyNlxcdTAwMjYgRkFVTFRfSU5KRUNUSU9OX0NPTkZJR0ZTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA2VDE5OjQ3OjA0Ljg5ODk1Mjg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMTg3OTg2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFpvbmVkIENvbmZpZ3VyYXRpb24gb2YgYG51bGxfYmxrYCoqXG5cbkhtbSwgaXQgc2VlbXMgbGlrZSBgbnVsbF9ibGtgIG1pZ2h0IG5vdCBoYXZlIGEgZGVkaWNhdGVkLCBzZXBhcmF0ZSB6b25lZCBjb25maWd1cmF0aW9uIGZpbGUuIFRoYXQncyBhIGJpdCB1bmV4cGVjdGVkLiBJIG5lZWQgdG8gY2xhcmlmeSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2UgZnVuY3Rpb25hbGl0eS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBjb25maXJtLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGF0IGVpdGhlciBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgIG9yLCBpZiBpdCBleGlzdHMsIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmNgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB6b25lZCBibG9jayBkZXZpY2Ugc3BlY2lmaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkxNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MTEuMDE3NzU1OTA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU1OTMwNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiem9uZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT0xMD1lbmRpZlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6MTE6bnVsbF9ibGstJChDT05GSUdfQkxLX0RFVl9aT05FRCkgKz0gem9uZWQub1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjM0PU1PRFVMRV9QQVJNX0RFU0MobWJwcywgXFxcIkxpbWl0IG1heGltdW0gYmFuZHdpZHRoIChpbiBNaUIvcykuIERlZmF1bHQ6IDAgKG5vIGxpbWl0KVxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIzNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzY6c3RhdGljIGJvb2wgZ196b25lZDtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzc6bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVkLCBnX3pvbmVkLCBib29sLCBTX0lSVUdPKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzg6TU9EVUxFX1BBUk1fREVTQyh6b25lZCwgXFxcIk1ha2UgZGV2aWNlIGFzIGEgaG9zdC1tYW5hZ2VkIHpvbmVkIGJsb2NrIGRldmljZS4gRGVmYXVsdDogZmFsc2VcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMzktXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDE9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfc2l6ZSwgZ196b25lX3NpemUsIHVsb25nLCBTX0lSVUdPKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNDI6TU9EVUxFX1BBUk1fREVTQyh6b25lX3NpemUsIFxcXCJab25lIHNpemUgaW4gTUIgd2hlbiBibG9jayBkZXZpY2UgaXMgem9uZWQuIE11c3QgYmUgcG93ZXItb2YtdHdvOiBEZWZhdWx0OiAyNTZcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNDMtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNDU9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfY2FwYWNpdHksIGdfem9uZV9jYXBhY2l0eSwgdWxvbmcsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI0NjpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfY2FwYWNpdHksIFxcXCJab25lIGNhcGFjaXR5IGluIE1CIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBDYW4gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHpvbmUgc2l6ZS4gRGVmYXVsdDogWm9uZSBzaXplXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjQ3LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjQ5PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX25yX2NvbnYsIGdfem9uZV9ucl9jb252LCB1aW50LCAwNDQ0KTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNTA6TU9EVUxFX1BBUk1fREVTQyh6b25lX25yX2NvbnYsIFxcXCJOdW1iZXIgb2YgY29udmVudGlvbmFsIHpvbmVzIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBEZWZhdWx0OiAwXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjUxLVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjUzPW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX21heF9vcGVuLCBnX3pvbmVfbWF4X29wZW4sIHVpbnQsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI1NDpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfbWF4X29wZW4sIFxcXCJNYXhpbXVtIG51bWJlciBvZiBvcGVuIHpvbmVzIHdoZW4gYmxvY2sgZGV2aWNlIGlzIHpvbmVkLiBEZWZhdWx0OiAwIChubyBsaW1pdClcXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNTUtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNTc9bW9kdWxlX3BhcmFtX25hbWVkKHpvbmVfbWF4X2FjdGl2ZSwgZ196b25lX21heF9hY3RpdmUsIHVpbnQsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI1ODpNT0RVTEVfUEFSTV9ERVNDKHpvbmVfbWF4X2FjdGl2ZSwgXFxcIk1heGltdW0gbnVtYmVyIG9mIGFjdGl2ZSB6b25lcyB3aGVuIGJsb2NrIGRldmljZSBpcyB6b25lZC4gRGVmYXVsdDogMCAobm8gbGltaXQpXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjY2PW1vZHVsZV9wYXJhbV9uYW1lZCh6b25lX2Z1bGwsIGdfem9uZV9mdWxsLCBib29sLCBTX0lSVUdPKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNjc6TU9EVUxFX1BBUk1fREVTQyh6b25lX2Z1bGwsIFxcXCJJbml0aWFsaXplIHRoZSBzZXF1ZW50aWFsIHdyaXRlIHJlcXVpcmVkIHpvbmVzIG9mIGEgem9uZWQgZGV2aWNlIHRvIGJlIGZ1bGwuIERlZmF1bHQ6IGZhbHNlXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjY4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NDYxPU5VTExCX0RFVklDRV9BVFRSKGNhY2hlX3NpemUsIHVsb25nLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NjI6TlVMTEJfREVWSUNFX0FUVFIoem9uZWQsIGJvb2wsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ2My1OVUxMQl9ERVZJQ0VfQVRUUih6b25lX3NpemUsIHVsb25nLCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTU5Nj1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2F0dHJpYnV0ZSAqbnVsbGJfZGV2aWNlX2F0dHJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02MzItXFx0XFx1MDAyNm51bGxiX2RldmljZV9hdHRyX3pvbmVfc2l6ZSxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2MzM6XFx0XFx1MDAyNm51bGxiX2RldmljZV9hdHRyX3pvbmVkLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTYzNC1cXHROVUxMLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9Nzc3PXN0YXRpYyBzdHJ1Y3QgbnVsbGJfZGV2aWNlICpudWxsX2FsbG9jX2Rldih2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtODE1LVxcdGRldi1cXHUwMDNldXNlX3Blcl9ub2RlX2hjdHggPSBnX3VzZV9wZXJfbm9kZV9oY3R4O1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjgxNjpcXHRkZXYtXFx1MDAzZXpvbmVkID0gZ196b25lZDtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy04MTctXFx0ZGV2LVxcdTAwM2V6b25lX3NpemUgPSBnX3pvbmVfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTgzND1zdGF0aWMgdm9pZCBudWxsX2ZyZWVfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTgzOC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo4Mzk6XFx0bnVsbF9mcmVlX3pvbmVkX2RldihkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTg0MC1cXHRiYWRibG9ja3NfZXhpdChcXHUwMDI2ZGV2LVxcdTAwM2ViYWRibG9ja3MpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTI0Mj1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfdHJhbnNmZXIoc3RydWN0IG51bGxiICpudWxsYiwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMjUyLVxcdGlmICghaXNfd3JpdGUpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMjUzOlxcdFxcdGlmIChkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTI1NC1cXHRcXHRcXHR2YWxpZF9sZW4gPSBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4obnVsbGIsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xNDQyPXN0YXRpYyB2b2lkIG51bGxfaGFuZGxlX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0NTMtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQ1NDpcXHRpZiAoZGV2LVxcdTAwM2V6b25lZClcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDU1OlxcdFxcdHN0cyA9IG51bGxfcHJvY2Vzc196b25lZF9jbWQoY21kLCBvcCwgc2VjdG9yLCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDU2LVxcdGVsc2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE2MTk9c3RhdGljIGVudW0gYmxrX2VoX3RpbWVyX3JldHVybiBudWxsX3RpbWVvdXRfcnEoc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTYzOS1cXHQvKlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE2NDA6XFx0ICogSWYgdGhlIGRldmljZSBpcyBtYXJrZWQgYXMgYmxvY2tpbmcgKGkuZS4gbWVtb3J5IGJhY2tlZCBvciB6b25lZFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2NDEtXFx0ICogZGV2aWNlKSwgdGhlIHN1Ym1pc3Npb24gcGF0aCBtYXkgYmUgYmxvY2tlZCB3YWl0aW5nIGZvciByZXNvdXJjZXNcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE3ODk9c3RhdGljIHZvaWQgbnVsbF9jb25maWdfZGlzY2FyZChzdHJ1Y3QgbnVsbGIgKm51bGxiLCBzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNzk5LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE4MDA6XFx0aWYgKG51bGxiLVxcdTAwM2VkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTgwMS1cXHRcXHRudWxsYi1cXHUwMDNlZGV2LVxcdTAwM2VkaXNjYXJkID0gZmFsc2U7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTgwMjpcXHRcXHRwcl9pbmZvKFxcXCJkaXNjYXJkIG9wdGlvbiBpcyBpZ25vcmVkIGluIHpvbmVkIG1vZGVcXFxcblxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE4MDMtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTg4NT1zdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTE4LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5MTk6XFx0aWYgKGRldi1cXHUwMDNlem9uZWQgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTIwLVxcdCAgICAoIWRldi1cXHUwMDNlem9uZV9zaXplIHx8ICFpc19wb3dlcl9vZl8yKGRldi1cXHUwMDNlem9uZV9zaXplKSkpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE5NTU9c3RhdGljIGludCBudWxsX2FkZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk5MS1cXHRudWxsX2NvbmZpZ19kaXNjYXJkKG51bGxiLCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTkyOlxcdGlmIChkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk5MzpcXHRcXHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcXHUwMDI2bGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTk0LVxcdFxcdGlmIChydilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNDUtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjA0NjpcXHRpZiAobnVsbGItXFx1MDAzZWRldi1cXHUwMDNlem9uZWQpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMDQ3OlxcdFxcdHJ2ID0gbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYobnVsbGIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNDgtXFx0XFx0aWYgKHJ2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjA2Ni1vdXRfY2xlYW51cF96b25lOlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIwNjc6XFx0bnVsbF9mcmVlX3pvbmVkX2RldihkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIwNjgtb3V0X2NsZWFudXBfdGFnczpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD01Mz1zdHJ1Y3QgbnVsbGJfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC04MS1cXHR1bnNpZ25lZCBsb25nIGNhY2hlX3NpemU7IC8qIGRpc2sgY2FjaGUgc2l6ZSBpbiBNQiAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo4MjpcXHR1bnNpZ25lZCBsb25nIHpvbmVfc2l6ZTsgLyogem9uZSBzaXplIGluIE1CIGlmIGRldmljZSBpcyB6b25lZCAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDo4MzpcXHR1bnNpZ25lZCBsb25nIHpvbmVfY2FwYWNpdHk7IC8qIHpvbmUgY2FwYWNpdHkgaW4gTUIgaWYgZGV2aWNlIGlzIHpvbmVkICovXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTg0LVxcdHVuc2lnbmVkIGludCB6b25lX25yX2NvbnY7IC8qIG51bWJlciBvZiBjb252ZW50aW9uYWwgem9uZXMgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMDQtXFx0Ym9vbCBkaXNjYXJkOyAvKiBpZiBzdXBwb3J0IGRpc2NhcmQgKi9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTA1OlxcdGJvb2wgem9uZWQ7IC8qIGlmIGRldmljZSBpcyB6b25lZCAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMDYtXFx0Ym9vbCB6b25lX2Z1bGw7IC8qIEluaXRpYWxpemUgem9uZXMgdG8gYmUgZnVsbCAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTEzOD1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfbWVtb3J5X2JhY2tlZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0MS0jaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORURcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQyOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ0OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNDUtaW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ3LVxcdFxcdCAgICAgIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDg6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc196b25lZF9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ5LVxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTE1Mj1zc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTU0LSNlbHNlXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE1NTpzdGF0aWMgaW5saW5lIGludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTU2LVxcdFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNjAtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjE6c3RhdGljIGlubGluZSBpbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTYyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNjQtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjU6c3RhdGljIGlubGluZSB2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KSB7fVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNjY6c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE2Ny1cXHRcXHRcXHRlbnVtIHJlcV9vcCBvcCwgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTQyPXN0YXRpYyBpbmxpbmUgdm9pZCBudWxsX3VubG9ja196b25lKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01MC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NTE6aW50IG51bGxfaW5pdF96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01Mi1cXHRcXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzktXFx0ICogem9uZSBhdCB0aGUgc2FtZSB0aW1lIGFzIHN1Y2ggem9uZSBjb25maWd1cmF0aW9uIGRvZXMgbm90IGNvcnJlc3BvbmRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6ODA6XFx0ICogdG8gYW55IHJlYWwgem9uZWQgZGV2aWNlLlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy04MS1cXHQgKi9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xNzQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE3NTppbnQgbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYoc3RydWN0IG51bGxiICpudWxsYilcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTc2LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODYtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE4Nzp2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xODgte1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTY0Nj1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfem9uZV9tZ210KHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3MDg6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc196b25lZF9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA5LVxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9Nzc4PXNzaXplX3Qgem9uZV9jb25kX3N0b3JlKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03ODQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjc4NTpcXHRpZiAoIWRldi1cXHUwMDNlem9uZWQpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6Nzg2OlxcdFxcdHByX2VycihcXFwibnVsbF9ibGsgZGV2aWNlIGlzIG5vdCB6b25lZFxcXFxuXFxcIik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4Ny1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MTEuMTIzMzUzNDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjA2NTg2MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBab25lZCBCbG9jayBEZXZpY2UgU3VwcG9ydCoqXG5cbk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgYG51bGxfYmxrYCBzdXBwb3J0cyB6b25lZCBkZXZpY2VzIOKAkyB0aGF0J3MgZ29vZC4gSSByZW1lbWJlciBpdCB1c2VzIGVpdGhlciB0aGUgYGdfem9uZWRgIHBhcmFtZXRlciBvciBjb25maWdmcywgc28gdGhhdCdzIHRoZSBhbmdsZS4gSSBzZWUgdGhlIGltcG9ydGFuY2Ugb2YgYEJMS19ERVZfTlVMTF9CTEtgIGFuZCBgQkxLX0RFVl9aT05FRGAgaW4gdGhlIGNvbmZpZy5cblxuSSBoYXZlIHRvIGNoZWNrIGBCTEtfREVWX1pPTkVEX0xPT1BgIGFnYWluLi4ud2FpdCwgaXNuJ3QgdGhhdCBub3QgbWFpbmxpbmU/IEhtbSwgdGhlIGBncmVwYCByZXN1bHRzIGZyb20gdGhlIHNvdXJjZSBzYXkgb3RoZXJ3aXNlLiBPaCwgSSBzZWUg4oCTIGl0J3MgdGhlcmUgaW4gdGhlIEtjb25maWcuIFJpZ2h0LCBgQkxLX0RFVl9aT05FRGAgaXMgdGhlIG1haW4gb25lLlxuXG5Ob3cgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaW4gdGhlIHBhdGNoLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGJsb2NrL2Jsay16b25lZC5jYCwgc28gSSdsbCByZXZpZXcgdGhvc2U6XG5cbiogICBgYmRldl9jaGVja196b25lX21nbXRgXG4qICAgYGRpc2tfem9uZV9zZXRfY29uZGBcbiogICBgZGlza196b25lX2dldF9zdGF0ZWBcbiogICBgZGlza196b25lX2dldF9jb25kYFxuKiAgIGBkaXNrX3pvbmVfaXNfb2ZmbGluZV9vcl9yZWFkb25seWBcbiogICBgZGlza196b25lX2lzX3NlcWBcbiogICBgZGlza19pbnNlcnRfem9uZV93cGx1Z2BcbiogICBgZGlza196b25lX3dwbHVnX2Fib3J0YFxuKiAgIGBkaXNrX3pvbmVfd3BsdWdfc3luY19zdGF0ZWBcbiogICBgYmxrZGV2X2dldF96b25lX2luZm9gXG4qICAgYGJsa196b25lX3Jlc2V0X2FsbF9iaW9fZW5kaW9gXG4qICAgYGJsa196b25lX3dwbHVnX3ByZXBhcmVfYmlvYFxuKiAgIGBibGtfem9uZV93cGx1Z19oYW5kbGVfd3JpdGVgXG4qICAgYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgXG4qICAgYGRpc2tfcmV2YWxpZGF0ZV96b25lX3Jlc291cmNlc2BcbiogICBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2BcblxuSSBuZWVkIHRvIGZpbHRlciBvdXQgdGhlIHN0YXRpYyBvbmVzIHRoYXQgYXJlIGlubGluZWQgb3IgbGVzcyBhY2Nlc3NpYmxlLCBhbHRob3VnaCBzeXprYWxsZXIgaGFzIGEga25hY2sgZm9yIGZpbmRpbmcgdGhlbSBldmVuIGlmIHRoZXkncmUgbm90IGRpcmVjdGx5IGV4cG9zZWQuXG5cbkxldCdzIHNlZS4uLiBgYmRldl9jaGVja196b25lX21nbXRgIGlzIGV4cG9ydGVkLCB0aGF0J3MgaW50ZXJlc3RpbmcuIFdoYXQgYWJvdXQgYGJsa2Rldl9nZXRfem9uZV9pbmZvYD8gTm8sIGl0J3Mgbm90IGV4cG9ydGVkLCB0aG91Z2ggaXQgaXMgdXNlZCBpbiBgYmxvY2svaW9jdGwuY2AuIEFuZCBgYmxrX3JldmFsaWRhdGVfZGlza196b25lc2AgaXMgYWxzbyBleHBvcnRlZC4gVGhlIHJlc3QgYXJlIHN0YXRpYzogYGRpc2tfYWxsb2Nfem9uZV9yZXNvdXJjZXNgLCBgZGlza19yZXZhbGlkYXRlX3pvbmVfcmVzb3VyY2VzYCwgYGRpc2tfem9uZV93cGx1Z19hYm9ydGAsIGFuZCBgZGlza196b25lX3dwbHVnX3N5bmNfc3RhdGVgLlxuXG5Pa2F5LCBzbyBJIHdpbGwgbm93IGZvY3VzIG9uIHRob3NlIHRoYXQgYXJlIGVpdGhlciBub24tc3RhdGljLCBvciBleHBvcnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUwODIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6MjEuMzI5OTQyNzc3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjEwODQ5NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xfR1BMXFxcXCguKlxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL2Jsay16b25lZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2Jsay16b25lZC5jPTIyND1jb25zdCBjaGFyICpibGtfem9uZV9jb25kX3N0cihlbnVtIGJsa196b25lX2NvbmQgem9uZV9jb25kKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjMyLX1cXG5ibG9jay9ibGstem9uZWQuYzoyMzM6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3pvbmVfY29uZF9zdHIpO1xcbmJsb2NrL2Jsay16b25lZC5jLTIzNC1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTMwMj1ib29sIGJkZXZfem9uZV9pc19zZXEoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yKVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMzA4LX1cXG5ibG9jay9ibGstem9uZWQuYzozMDk6RVhQT1JUX1NZTUJPTF9HUEwoYmRldl96b25lX2lzX3NlcSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMzEwLVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MzgwPWludCBibGtkZXZfcmVwb3J0X3pvbmVzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTM4OS19XFxuYmxvY2svYmxrLXpvbmVkLmM6MzkwOkVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl9yZXBvcnRfem9uZXMpO1xcbmJsb2NrL2Jsay16b25lZC5jLTM5MS1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTQxNj1pbnQgYmxrZGV2X3pvbmVfbWdtdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBlbnVtIHJlcV9vcCBvcCxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTQ2Ni19XFxuYmxvY2svYmxrLXpvbmVkLmM6NDY3OkVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl96b25lX21nbXQpO1xcbmJsb2NrL2Jsay16b25lZC5jLTQ2OC1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTEwMTA9aW50IGRpc2tfcmVwb3J0X3pvbmUoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHN0cnVjdCBibGtfem9uZSAqem9uZSxcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTEwMzctfVxcbmJsb2NrL2Jsay16b25lZC5jOjEwMzg6RVhQT1JUX1NZTUJPTF9HUEwoZGlza19yZXBvcnRfem9uZSk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMTAzOS1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTEwOTM9aW50IGJsa2Rldl9nZXRfem9uZV9pbmZvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTExODUtfVxcbmJsb2NrL2Jsay16b25lZC5jOjExODY6RVhQT1JUX1NZTUJPTF9HUEwoYmxrZGV2X2dldF96b25lX2luZm8pO1xcbmJsb2NrL2Jsay16b25lZC5jLTExODctXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYz0xMjAzPWludCBibGtkZXZfcmVwb3J0X3pvbmVzX2NhY2hlZChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzZWN0b3JfdCBzZWN0b3IsXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xMjQzLX1cXG5ibG9jay9ibGstem9uZWQuYzoxMjQ0OkVYUE9SVF9TWU1CT0xfR1BMKGJsa2Rldl9yZXBvcnRfem9uZXNfY2FjaGVkKTtcXG5ibG9jay9ibGstem9uZWQuYy0xMjQ1LVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MTc0OD1ib29sIGJsa196b25lX3BsdWdfYmlvKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IG5yX3NlZ3MpXFxuLS1cXG5ibG9jay9ibGstem9uZWQuYy0xNzg1LX1cXG5ibG9jay9ibGstem9uZWQuYzoxNzg2OkVYUE9SVF9TWU1CT0xfR1BMKGJsa196b25lX3BsdWdfYmlvKTtcXG5ibG9jay9ibGstem9uZWQuYy0xNzg3LVxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmM9MjQ5Nj1pbnQgYmxrX3JldmFsaWRhdGVfZGlza196b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jLTI1NTYtfVxcbmJsb2NrL2Jsay16b25lZC5jOjI1NTc6RVhQT1JUX1NZTUJPTF9HUEwoYmxrX3JldmFsaWRhdGVfZGlza196b25lcyk7XFxuYmxvY2svYmxrLXpvbmVkLmMtMjU1OC1cXG4tLVxcbmJsb2NrL2Jsay16b25lZC5jPTI1NzE9aW50IGJsa196b25lX2lzc3VlX3plcm9vdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuYmxvY2svYmxrLXpvbmVkLmMtMjU5OS19XFxuYmxvY2svYmxrLXpvbmVkLmM6MjYwMDpFWFBPUlRfU1lNQk9MX0dQTChibGtfem9uZV9pc3N1ZV96ZXJvb3V0KTtcXG5ibG9jay9ibGstem9uZWQuYy0yNjAxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNlQxOTo0NzoyMi41NDA3OTcwMzJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg4MjM3MzA4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEZ1enppbmcgU3RyYXRlZ3k6IFpvbmVkIEJsb2NrIERldmljZSBSZWZhY3RvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIGFzcGVjdHMgb2YgdGhlIHpvbmVkIGJsb2NrIGRldmljZSBpbXBsZW1lbnRhdGlvbiwgc28gd2UgbmVlZCB0byBiZSB0aG9yb3VnaC4gVGhlIGluaXRpYWwgZ2xhbmNlIGF0IHRoZSBkaWZmcyBoaWdobGlnaHRzIHNldmVyYWwgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLCBhbmQgSSdtIGhvbmluZyBpbiBvbiB0aGUga2V5IG9uZXMgZm9yIGZ1enppbmcgYW5kIHRlc3RpbmcuIEZpcnN0LCBJIG5vdGljZWQgYGJkZXZfY2hlY2tfem9uZV9tZ210YCBpcyBuZXdseSBpbnRyb2R1Y2VkLiBJIGhhZCB0byBkb3VibGUtY2hlY2sgaXRzIHZpc2liaWxpdHksIGJ1dCBzaW5jZSBpdCdzIHVzZWQgd2l0aGluIHRoZSBibG9jayBsYXllcidzIGJ1aWx0LWluIGNvbXBvbmVudHMsIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBleHBvcnRlZC4gVGhlbiB0aGVyZSBhcmUgc29tZSBvdGhlciBpbXBvcnRhbnQgZnVuY3Rpb25zIGBibGtkZXZfZ2V0X3pvbmVfaW5mb2AsIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCwgYGRpc2tfcmVwb3J0X3pvbmVgIGFuZCBzbyBvbiwgd2hpY2ggYXJlIG9idmlvdXNseSBjb3JlLlxuXG5NeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgd2VyZTogYGJkZXZfY2hlY2tfem9uZV9tZ210YCwgYGJsa2Rldl9nZXRfem9uZV9pbmZvYCwgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCBhbmQgYGRpc2tfcmVwb3J0X3pvbmVgLCBidXQgSSdtIHJlZmluaW5nIHRoYXQgbGlzdCBhcyBJIGRpdmUgZGVlcGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJldm9sdmVzIGFyb3VuZCB0aGVzZSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIHpvbmUgaW5mb3JtYXRpb24uIEkgYWxzbyBoYWQgdG8ga2VlcCBpbiBtaW5kIGBzdWJtaXRfYmlvX25vYWNjdGAgYXMgaXQncyBhIGhvdCBwYXRoLCBhbmQgYW55IGNoYW5nZXMgaGVyZSBuZWVkIHZlcnkgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBlc3BlY2lhbGx5IHdpdGggdGhlIHVzZSBvZiBgYmRldl9jaGVja196b25lX21nbXRgLiBJJ20gc2xpZ2h0bHkgaGVzaXRhbnQgdG8gZGlyZWN0bHkgdGFyZ2V0IGBzdWJtaXRfYmlvX25vYWNjdGAgZGlyZWN0bHkgaW4gZnV6emluZywgZ2l2ZW4gaXRzIGltcG9ydGFuY2UsIGJ1dCBpdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBpbXBhY3RlZC5cblxuRGl2aW5nIGludG8gdGhlIHNvdXJjZSwgSSBjb25maXJtIHRoYXQgYGJkZXZfY2hlY2tfem9uZV9tZ210YCBpcyBpbmRlZWQgYSBgYm9vbGAgZnVuY3Rpb24sIHRha2luZyBgc3RydWN0IGJsb2NrX2RldmljZWAgYW5kIGBzZWN0b3JfdGAgYXMgYXJndW1lbnRzLiBJIGFsc28gdmVyaWZpZWQgdGhlIHNpZ25hdHVyZXMgb2YgYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgLCB3aGljaCBpcyBgaW50YCByZXR1cm5pbmcgZnVuY3Rpb24gb24gYSBgZ2VuZGlza2AsIGFuZCBgYmxrZGV2X2dldF96b25lX2luZm9gLCB3aGljaCBpcyBgaW50YCB3aXRoIGEgYmxvY2sgZGV2aWNlLCBzZWN0b3IsIGFuZCBgYmxrX3pvbmVgIHN0cnVjdHVyZS4gSSdtIG5vdGluZyB0aGUgc2lnbmF0dXJlcyBiZWNhdXNlIHRoZXNlIGFyZSBjcnVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgbWVhbmluZ2Z1bCBmdXp6IGlucHV0cyBsYXRlci4gSW1wb3J0YW50bHksIEkgd2lsbCBuZWVkIHRvIGNvbnNpZGVyIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgIGFuZCBgZGlza19pbml0X3pvbmVfcmVzb3VyY2VzYC4gVGhlc2UgYXJlIHdvcnRoIGluY2x1ZGluZy4gSSBhbHNvIHNlZSB0aGF0IGBkaXNrX3pvbmVfd3BsdWdfYWJvcnRgLCBgYmxrX3pvbmVfcmVzZXRfYWxsX2Jpb19lbmRpb2AsIGFuZCBgYmxrX3pvbmVfd3BsdWdfcHJlcGFyZV9iaW9gIGhhdmUgYWxsIGJlZW4gbW9kaWZpZWQsIHNvIHRob3NlIGFyZSBkZWZpbml0ZWx5IGltcG9ydGFudC5cblxuRm9yIGVuYWJsaW5nIHRoZSBhcHByb3ByaWF0ZSBlbnZpcm9ubWVudCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB3aXRoIGBCTEtfREVWX1pPTkVEYCwgYEJMS19ERVZfTlVMTF9CTEtgLCBhbmQgYEJMS19ERVZfWk9ORURfTE9PUGAuIFNpbmNlIGBCTEtfREVWX05VTExfQkxLYCBpcyB0cmlzdGF0ZSwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgaWYgSSB3YW50IGl0IGJ1aWx0LWluLCBJIG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgaXQuXG5cblN1bW1hcml6aW5nLCB0aGUgcGF0Y2ggZm9jdXNlcyBvbiByZWZhY3RvcmluZyB6b25lIGNvbmRpdGlvbiB0cmFja2luZyB3aXRoaW4gdGhlIGJsb2NrIGxheWVyIHVzaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIGB6b25lc19zdGF0ZWAgYXJyYXkuIEl04oCZcyB1cGRhdGluZyB6b25lIG1hbmFnZW1lbnQsIHJldmFsaWRhdGlvbiwgYW5kIGluZm9ybWF0aW9uIHJldHJpZXZhbCBmdW5jdGlvbnMsIGFsb25nIHdpdGggcGFydGl0aW9uIGRpc2FibGluZyBvbiB6b25lZCBkZXZpY2VzLiBNeSBwcmltYXJ5IGZvY3VzIGZvciBmdXp6aW5nIHdpbGwgYmU6XG5cbiogICBgYmRldl9jaGVja196b25lX21nbXRgXG4qICAgYGJsa2Rldl9nZXRfem9uZV9pbmZvYFxuKiAgIGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYFxuKiAgIGBkaXNrX3JlbGVhc2Vfem9uZV9yZXNvdXJjZXNgXG4qICAgYGRpc2tfaW5pdF96b25lX3Jlc291cmNlc2BcblxuSSdsbCB1c2UgYEJMS19ERVZfWk9ORURgLCBgQkxLX0RFVl9OVUxMX0JMS2AsIGFuZCBgQkxLX0RFVl9aT05FRF9MT09QYCBjb25maWdzLCBlbnN1cmluZyBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgZXhwbGljaXRseSBkZWZpbmVkIGlmIEkgd2FudCBpdCBidWlsdC1pbi4gVGhpcyBzaG91bGQgZW5zdXJlIGNvbXByZWhlbnNpdmUgY292ZXJhZ2Ugb2YgdGhlIHJlZmFjdG9yZWQgZnVuY3Rpb25hbGl0eSBhbmQgaGVscCBkZXRlY3QgYW55IHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgaGFuZGxpbmcgb3IgYmlvIHN1Ym1pc3Npb24uIEkgZmVlbCBjb25maWRlbnQgd2l0aCB0aGlzIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjAwLCJPdXRwdXRUb2tlbnMiOjI0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDZUMTk6NDc6NDEuMzY0NTMwNzkzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxMzg0MTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX1pPTkVEXCIsXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJCTEtfREVWX1pPTkVEX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiZGV2X2NoZWNrX3pvbmVfbWdtdFwiLFxuICAgIFwiYmxrZGV2X2dldF96b25lX2luZm9cIixcbiAgICBcImJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNcIixcbiAgICBcImRpc2tfcmVsZWFzZV96b25lX3Jlc291cmNlc1wiLFxuICAgIFwiZGlza19pbml0X3pvbmVfcmVzb3VyY2VzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGhvdyB6b25lIGNvbmRpdGlvbnMgYXJlIHRyYWNrZWQgaW4gdGhlIGJsb2NrIGxheWVyLCBpbnRyb2R1Y2luZyBgZW51bSBibGtfenN0YXRlYCBhbmQgYSBuZXcgYHpvbmVzX3N0YXRlYCBhcnJheSB0byByZXBsYWNlIGB6b25lc19jb25kYC4gSXQgdXBkYXRlcyB6b25lIG1hbmFnZW1lbnQgY2hlY2tzIChgYmRldl9jaGVja196b25lX21nbXRgKSwgem9uZSByZXZhbGlkYXRpb24gKGBibGtfcmV2YWxpZGF0ZV9kaXNrX3pvbmVzYCksIGFuZCB6b25lIGluZm9ybWF0aW9uIHJldHJpZXZhbCAoYGJsa2Rldl9nZXRfem9uZV9pbmZvYCkuIEl0IGFsc28gbW9kaWZpZXMgYF9fYWRkX2Rpc2tgIHRvIGRpc2FibGUgcGFydGl0aW9ucyBvbiB6b25lZCBibG9jayBkZXZpY2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGJsb2NrIGxheWVyJ3Mgem9uZWQgc3RvcmFnZSBzdXBwb3J0IGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiB6b25lIHN0YXRlIHRyYWNraW5nIG9yIGJpbyBzdWJtaXNzaW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfWk9ORURcIixcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfWk9ORURfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJkZXZfY2hlY2tfem9uZV9tZ210XCIsXG4gICAgXCJibGtkZXZfZ2V0X3pvbmVfaW5mb1wiLFxuICAgIFwiYmxrX3JldmFsaWRhdGVfZGlza196b25lc1wiLFxuICAgIFwiZGlza19yZWxlYXNlX3pvbmVfcmVzb3VyY2VzXCIsXG4gICAgXCJkaXNrX2luaXRfem9uZV9yZXNvdXJjZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaG93IHpvbmUgY29uZGl0aW9ucyBhcmUgdHJhY2tlZCBpbiB0aGUgYmxvY2sgbGF5ZXIsIGludHJvZHVjaW5nIGBlbnVtIGJsa196c3RhdGVgIGFuZCBhIG5ldyBgem9uZXNfc3RhdGVgIGFycmF5IHRvIHJlcGxhY2UgYHpvbmVzX2NvbmRgLiBJdCB1cGRhdGVzIHpvbmUgbWFuYWdlbWVudCBjaGVja3MgKGBiZGV2X2NoZWNrX3pvbmVfbWdtdGApLCB6b25lIHJldmFsaWRhdGlvbiAoYGJsa19yZXZhbGlkYXRlX2Rpc2tfem9uZXNgKSwgYW5kIHpvbmUgaW5mb3JtYXRpb24gcmV0cmlldmFsIChgYmxrZGV2X2dldF96b25lX2luZm9gKS4gSXQgYWxzbyBtb2RpZmllcyBgX19hZGRfZGlza2AgdG8gZGlzYWJsZSBwYXJ0aXRpb25zIG9uIHpvbmVkIGJsb2NrIGRldmljZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUgYmxvY2sgbGF5ZXIncyB6b25lZCBzdG9yYWdlIHN1cHBvcnQgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHpvbmUgc3RhdGUgdHJhY2tpbmcgb3IgYmlvIHN1Ym1pc3Npb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowmmmdd[1] Phase: Succeeded StartedAt: 2026-08-06 19:47:52 +0000 UTC FinishedAt: 2026-08-06 19:47:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-06 19:47:52 +0000 UTC FinishedAt: 2026-08-06 19:47:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2] Phase: Succeeded StartedAt: 2026-08-06 19:47:52 +0000 UTC FinishedAt: 2026-08-06 23:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-06 19:47:52 +0000 UTC FinishedAt: 2026-08-06 23:32:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-06 19:47:52 +0000 UTC FinishedAt: 2026-08-06 19:48:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-06 19:47:52 +0000 UTC FinishedAt: 2026-08-06 19:47:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmmmdd/series-workflowmmmdd-convert-artifact-165263519/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-06 19:48:03 +0000 UTC FinishedAt: 2026-08-06 20:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-06 19:48:03 +0000 UTC FinishedAt: 2026-08-06 20:04:03 +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:*08ea74cf-1370-4fb5-8804-45f18aee945a,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-workflowmmmdd/series-workflowmmmdd-convert-artifact-165263519/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": "35d75488-c148-4a72-9c4f-c2b03773ee8b", "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-workflowmmmdd/series-workflowmmmdd-build-action-3408013989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-06 19:48:03 +0000 UTC FinishedAt: 2026-08-06 20:03:53 +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:*08ea74cf-1370-4fb5-8804-45f18aee945a,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-workflowmmmdd/series-workflowmmmdd-convert-artifact-165263519/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": "35d75488-c148-4a72-9c4f-c2b03773ee8b", "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-workflowmmmdd/series-workflowmmmdd-build-action-3408013989/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-06 20:04:03 +0000 UTC FinishedAt: 2026-08-06 20:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-06 20:04:03 +0000 UTC FinishedAt: 2026-08-06 20:04:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-06 20:04:03 +0000 UTC FinishedAt: 2026-08-06 20:04:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-06 20:04:03 +0000 UTC FinishedAt: 2026-08-06 20:04:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmmmdd/series-workflowmmmdd-convert-artifact-1964702254/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-06 20:04:13 +0000 UTC FinishedAt: 2026-08-06 20:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-06 20:04:13 +0000 UTC FinishedAt: 2026-08-06 20:06:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35d75488-c148-4a72-9c4f-c2b03773ee8b,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-workflowmmmdd/series-workflowmmmdd-build-action-3408013989/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-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-06 20:06:17 +0000 UTC FinishedAt: 2026-08-06 20:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-06 20:06:17 +0000 UTC FinishedAt: 2026-08-06 20:06:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-06 20:06:17 +0000 UTC FinishedAt: 2026-08-06 20:27:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-06 20:06:17 +0000 UTC FinishedAt: 2026-08-06 20:27:32 +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:*08ea74cf-1370-4fb5-8804-45f18aee945a,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-workflowmmmdd/series-workflowmmmdd-convert-artifact-1964702254/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": "18960599-554b-42c7-9980-2cc29373e44f", "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-workflowmmmdd/series-workflowmmmdd-build-action-2505290050/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-06 20:06:17 +0000 UTC FinishedAt: 2026-08-06 20:27:22 +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:*08ea74cf-1370-4fb5-8804-45f18aee945a,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-workflowmmmdd/series-workflowmmmdd-convert-artifact-1964702254/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": "18960599-554b-42c7-9980-2cc29373e44f", "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-workflowmmmdd/series-workflowmmmdd-build-action-2505290050/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-06 20:27:32 +0000 UTC FinishedAt: 2026-08-06 20:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-06 20:27:33 +0000 UTC FinishedAt: 2026-08-06 20:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-06 20:27:33 +0000 UTC FinishedAt: 2026-08-06 20:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-06 20:27:33 +0000 UTC FinishedAt: 2026-08-06 20:29:22 +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:*18960599-554b-42c7-9980-2cc29373e44f,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-workflowmmmdd/series-workflowmmmdd-build-action-2505290050/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-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-06 20:29:33 +0000 UTC FinishedAt: 2026-08-06 23:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-06 20:29:33 +0000 UTC FinishedAt: 2026-08-06 23:32:46 +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":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"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:*35d75488-c148-4a72-9c4f-c2b03773ee8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18960599-554b-42c7-9980-2cc29373e44f,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-workflowmmmdd/series-workflowmmmdd-build-action-3408013989/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-workflowmmmdd/series-workflowmmmdd-build-action-2505290050/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-06 20:29:33 +0000 UTC FinishedAt: 2026-08-06 20:29:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-06 20:29:33 +0000 UTC FinishedAt: 2026-08-06 20:29:39 +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":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"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-workflowmmmdd/series-workflowmmmdd-convert-artifact-2593388499/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-06 20:29:33 +0000 UTC FinishedAt: 2026-08-06 20:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-06 20:29:33 +0000 UTC FinishedAt: 2026-08-06 20:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-06 20:29:33 +0000 UTC FinishedAt: 2026-08-06 20:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-06 20:29:45 +0000 UTC FinishedAt: 2026-08-06 23:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmmmdd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["bdev_check_zone_mgmt","blkdev_get_zone_info","blk_revalidate_disk_zones","disk_release_zone_resources","disk_init_zone_resources"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7e05769f1a6cd14735f1702996eb2bbb161f41b9","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_ZONED","BLK_DEV_NULL_BLK","BLK_DEV_ZONED_LOOP"],"series_id":"1be50f07-39b9-4eac-b405-3b3e95ebb2fc","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-06 20:29:45 +0000 UTC FinishedAt: 2026-08-06 23:32:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35d75488-c148-4a72-9c4f-c2b03773ee8b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*18960599-554b-42c7-9980-2cc29373e44f,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-workflowmmmdd/series-workflowmmmdd-build-action-3408013989/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-workflowmmmdd/series-workflowmmmdd-build-action-2505290050/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-workflowmmmdd/series-workflowmmmdd-convert-artifact-2593388499/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,}