Name: series-workflowgqz95 Phase: Succeeded StartedAt: 2026-07-04 17:31:53 +0000 UTC FinishedAt: 2026-07-04 20:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[0] Phase: Succeeded StartedAt: 2026-07-04 17:31:53 +0000 UTC FinishedAt: 2026-07-04 18:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[0].run-triage Phase: Succeeded StartedAt: 2026-07-04 17:31:53 +0000 UTC FinishedAt: 2026-07-04 18:18:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "BLK_DEV_MD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "BLK_DEV_MD" ], "series_id": "e42c4ea0-1149-4d34-99b2-3b053a0e3f9a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "_badblocks_set", "_badblocks_clear", "badblocks_check" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIGFuZCBpbmNvcnJlY3QgdXNhZ2Ugb2Ygcm91bmRkb3duL3JvdW5kdXAgbWFjcm9zIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBUaGUgYmFkYmxvY2tzIEFQSSBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBjb25maWdmcyAoZS5nLiwgbnVsbF9ibGssIG1kKSwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHRlc3RhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzRlZGI2YjRkNjEwYThmYjgyOWJkYjNmY2FmM2JhOTYwYmM4Njg2NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMTg6MTY6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xuaW5kZXggZWNlNjRlNzZmZThmZmYuLmU4NDg0OTEyNTMyMzVmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JhZGJsb2Nrcy5jXG5AQCAtODUzLDE1ICYjNDM7ODUzLDIxIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuIFx0XHQvKiBJbnZhbGlkIHNlY3RvcnMgbnVtYmVyICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGJiLVx1MDAzZXNoaWZ0KSB7XG4gXHRcdC8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqL1xuIFx0XHRzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdHMgPSByb3VuZF9kb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdG5leHQgPSByb3VuZF91cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4gXHRcdHNlY3RvcnMgPSBuZXh0IC0gcztcbiBcdH1cbiBcbiYjNDM7XHRpZiAoc2VjdG9ycyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHdyaXRlX3NlcWxvY2tfaXJxc2F2ZShcdTAwMjZiYi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRiYWQuYWNrID0gYWNrbm93bGVkZ2VkO1xuQEAgLTEwNjEsNiAmIzQzOzEwNjcsOSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuIFx0XHQvKiBJbnZhbGlkIHNlY3RvcnMgbnVtYmVyICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGJiLVx1MDAzZXNoaWZ0KSB7XG4gXHRcdHNlY3Rvcl90IHRhcmdldDtcbiBcbkBAIC0xMDcxLDExICYjNDM7MTA4MCwxNyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuIFx0XHQgKiBpc24mIzM5O3QgdGhhbiB0byB0aGluayBhIGJsb2NrIGlzIG5vdCBiYWQgd2hlbiBpdCBpcy5cbiBcdFx0ICovXG4gXHRcdHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9ycztcbi1cdFx0cm91bmR1cChzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHJvdW5kZG93bih0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4mIzQzO1x0XHRzID0gcm91bmRfdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0dGFyZ2V0ID0gcm91bmRfZG93bih0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmICh0YXJnZXQgXHUwMDNjIHMpXG4mIzQzO1x0XHRcdHNlY3RvcnMgPSAwO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbiBcdH1cbiBcbiYjNDM7XHRpZiAoc2VjdG9ycyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHdyaXRlX3NlcWxvY2tfaXJxKFx1MDAyNmJiLVx1MDAzZWxvY2spO1xuIFxuIFx0YmFkLmFjayA9IHRydWU7XG5AQCAtMTMwMywxMyAmIzQzOzEzMTgsMjIgQEAgaW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbiBcbiBcdFdBUk5fT04oYmItXHUwMDNlc2hpZnQgXHUwMDNjIDAgfHwgc2VjdG9ycyA9PSAwKTtcbiBcbiYjNDM7XHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNlIDApIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9ycztcbiBcbi1cdFx0cm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0cm91bmR1cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4mIzQzO1x0XHRzID0gcm91bmRfZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4mIzQzO1x0XHR0YXJnZXQgPSByb3VuZF91cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmICh0YXJnZXQgXHUwMDNjIHMpXG4mIzQzO1x0XHRcdHNlY3RvcnMgPSAwO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2VjdG9ycyA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiByZXRyeTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfYmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtfYmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSBhbmQgaW5jb3JyZWN0IHVzYWdlIG9mIHJvdW5kZG93bi9yb3VuZHVwIG1hY3JvcyBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gVGhlIGJhZGJsb2NrcyBBUEkgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgY29uZmlnZnMgKGUuZy4sIG51bGxfYmxrLCBtZCksIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzRlZGI2YjRkNjEwYThmYjgyOWJkYjNmY2FmM2JhOTYwYmM4Njg2NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDQgMTg6MTY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iYWRibG9ja3MuYyBiL2Jsb2NrL2JhZGJsb2Nrcy5jCmluZGV4IGVjZTY0ZTc2ZmU4ZmZmLi5lODQ4NDkxMjUzMjM1ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmFkYmxvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmFkYmxvY2tzLmMKQEAgLTg1MywxNSAmIzQzOzg1MywyMSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycywKIAkJLyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqLwogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHMgJmd0OyBVTExPTkdfTUFYIC0gc2VjdG9ycykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlpZiAoYmItJmd0O3NoaWZ0KSB7CiAJCS8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqLwogCQlzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzOwogCi0JCXJvdW5kZG93bihzLCAxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7Ci0JCXJvdW5kdXAobmV4dCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJcyA9IHJvdW5kX2Rvd24ocywgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJbmV4dCA9IHJvdW5kX3VwKG5leHQsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKIAkJc2VjdG9ycyA9IG5leHQgLSBzOwogCX0KIAomIzQzOwlpZiAoc2VjdG9ycyA9PSAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmYW1wO2JiLSZndDtsb2NrLCBmbGFncyk7CiAKIAliYWQuYWNrID0gYWNrbm93bGVkZ2VkOwpAQCAtMTA2MSw2ICYjNDM7MTA2Nyw5IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpCiAJCS8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi8KIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChzICZndDsgVUxMT05HX01BWCAtIHNlY3RvcnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKGJiLSZndDtzaGlmdCkgewogCQlzZWN0b3JfdCB0YXJnZXQ7CiAKQEAgLTEwNzEsMTEgJiM0MzsxMDgwLDE3IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpCiAJCSAqIGlzbiYjMzk7dCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLgogCQkgKi8KIAkJdGFyZ2V0ID0gcyAmIzQzOyBzZWN0b3JzOwotCQlyb3VuZHVwKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKLQkJcm91bmRkb3duKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKJiM0MzsJCXMgPSByb3VuZF91cChzLCAxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7CiYjNDM7CQl0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKHRhcmdldCAmbHQ7IHMpCiYjNDM7CQkJc2VjdG9ycyA9IDA7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2VjdG9ycyA9IHRhcmdldCAtIHM7CiAJfQogCiYjNDM7CWlmIChzZWN0b3JzID09IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJd3JpdGVfc2VxbG9ja19pcnEoJmFtcDtiYi0mZ3Q7bG9jayk7CiAKIAliYWQuYWNrID0gdHJ1ZTsKQEAgLTEzMDMsMTMgJiM0MzsxMzE4LDIyIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsCiAKIAlXQVJOX09OKGJiLSZndDtzaGlmdCAmbHQ7IDAgfHwgc2VjdG9ycyA9PSAwKTsKIAomIzQzOwlpZiAocyAmZ3Q7IFVMTE9OR19NQVggLSBzZWN0b3JzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7IDApIHsKIAkJLyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovCiAJCXNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9yczsKIAotCQlyb3VuZGRvd24ocywgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlyb3VuZHVwKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKJiM0MzsJCXMgPSByb3VuZF9kb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCXRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKHRhcmdldCAmbHQ7IHMpCiYjNDM7CQkJc2VjdG9ycyA9IDA7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2VjdG9ycyA9IHRhcmdldCAtIHM7CiYjNDM7CiYjNDM7CQlpZiAoc2VjdG9ycyA9PSAwKQomIzQzOwkJCXJldHVybiAwOwogCX0KIAogcmV0cnk6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCYWRibG9ja3MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBgYmxvY2svYmFkYmxvY2tzLmNgLiBNeSBpbml0aWFsIHJlYWQgc2hvd3MgaXQmIzM5O3MgYWRkcmVzc2luZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aGluIHRoZSBiYWQgYmxvY2sgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGdldHRpbmcgc29tZSBvdmVyZmxvdyBjaGVja3MgYWRkZWQuIEdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBhbHdheXMgYSB3aW4gaW4gY3JpdGljYWwga2VybmVsIHN1YnN5c3RlbXMgbGlrZSB0aGlzLgoKQW5kIG5vdywgSSBzZWUgaXQmIzM5O3MgYWxzbyBmaXhpbmcgdGhlIHVzYWdlIG9mIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAuIEhtbSwgdGhhdCBzZWVtcyBvZGQgYXQgZmlyc3QgZ2xhbmNlLiBJIGltbWVkaWF0ZWx5IHRob3VnaHQsICYjMzQ7QXJlbiYjMzk7dCB0aG9zZSBtYWNyb3M/JiMzNDsgQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhleSBzaG91bGQgcmV0dXJuIHRoZSByb3VuZGVkIHZhbHVlLCBidXQgdGhleSBzaG91bGRuJiMzOTt0IG1vZGlmeSB0aGUgaW5wdXQgdmFyaWFibGUgaW4gcGxhY2UuIFNvLCB3aHkgaXMgdGhlIHBhdGNoIGNoYW5naW5nIGhvdyB0aGV5JiMzOTtyZSB1c2VkPyBSZXBsYWNpbmcgYHMgPSByb3VuZGRvd24ocywgLi4uKWAgd2l0aCBgcyA9IHJvdW5kX2Rvd24ocywgLi4uKWAgbWFrZXMgaXQgc291bmQgbGlrZSB0aGV5IHdlcmUgdHJ5aW5nIHRvIG1vZGlmeSB0aGUgdmFyaWFibGUgZGlyZWN0bHkuCgpBbHJpZ2h0LCB0aW1lIHRvIGdvIGRlZXBlci4gTGV0JiMzOTtzIGNvbmZpcm0gbXkgc3VzcGljaW9ucy4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUga2VybmVsJiMzOTtzIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAgZGVmaW5pdGlvbnMuIEFoLCB5ZXMsIHRoZXkmIzM5O3JlIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWF0aC5oYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhlIGRlZmluaXRpb25zIGFuZCB1c2FnZSBpbiB0aGUga2VybmVsIGNvZGUgdXNpbmcgZ3JlcHBlciwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IG15IGV4cGVjdGF0aW9ucy4gSSBjYW4gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCB0aGlzIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIHJvdW5kZG93biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvZzIuaD02NT11bnNpZ25lZCBsb25nIF9fcm91bmRkb3duX3Bvd19vZl90d28odW5zaWduZWQgbG9uZyBuKVxuLS1cbmluY2x1ZGUvbGludXgvbG9nMi5oLTE5MC0gKi9cbmluY2x1ZGUvbGludXgvbG9nMi5oOjE5MTojZGVmaW5lIHJvdW5kZG93bl9wb3dfb2ZfdHdvKG4pXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbG9nMi5oLTE5Mi0oXHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L21hdGguaC04NC0gKi9cbmluY2x1ZGUvbGludXgvbWF0aC5oOjg1OiNkZWZpbmUgcm91bmRkb3duKHgsIHkpIChcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L21hdGguaC04Ni17XHRcdFx0XHRcdFx0XHRcXFxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvbG9nMi5oPTU2PXVuc2lnbmVkIGxvbmcgX19yb3VuZGRvd25fcG93X29mX3R3byh1bnNpZ25lZCBsb25nIG4pXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmgtMTY3LSAqL1xudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmg6MTY4OiNkZWZpbmUgcm91bmRkb3duX3Bvd19vZl90d28obilcdFx0XHRcXFxudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmgtMTY5LShcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIHRoZSBgcm91bmRkb3duKClgIEJ1ZyBpbiBgYmFkYmxvY2tzLmNgKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIEkgc2VlIHRoZSBpc3N1ZSBpbW1lZGlhdGVseS4gVGhlIG9yaWdpbmFsIGNvZGUgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYCB3YXMgY2FsbGluZyBgcm91bmRkb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KWAgYW5kIGByb3VuZHVwKG5leHQsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KWAgd2l0aG91dCBhY3R1YWxseSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWlzdGFrZSEgVGhlc2UgZnVuY3Rpb25zLCBhcyBJIHJlY2FsbCwgYXJlIG1lYW50IHRvICpyZXR1cm4qIHRoZSByb3VuZGVkIHZhbHVlOyB0aGV5IGRvbiYjMzk7dCBvcGVyYXRlICppbiBwbGFjZSouIFNvLCB0aGUgdmFyaWFibGVzIGBzYCBhbmQgYG5leHRgIHdlcmUgbmV2ZXIgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQgYXMgaW50ZW5kZWQuCgpUaGUgZml4LCBhcyB0aGUgcGF0Y2ggZGVtb25zdHJhdGVzLCBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb3JyZWN0ZWQgY29kZSBub3cgY29ycmVjdGx5IGFzc2lnbnMgdGhlIHJlc3VsdCBvZiB0aGUgcm91bmRpbmcgZnVuY3Rpb25zIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHZhcmlhYmxlczogYHMgPSByb3VuZF9kb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTtgIGFuZCBgbmV4dCA9IHJvdW5kX3VwKG5leHQsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTtgLiBUaGlzIGVuc3VyZXMgdGhlIHN1YnNlcXVlbnQgbG9naWMgb3BlcmF0ZXMgb24gdGhlIHJvdW5kZWQgdmFsdWVzLCB3aGljaCBpcyB0aGUgd2hvbGUgcG9pbnQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBTaW5jZSB0aGlzIGZpeCBpcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIEkgc2hvdWxkIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdHJpZ2dlciB0aGUgYGJhZGJsb2Nrc2AgZnVuY3Rpb25hbGl0eS4gSXQgd291bGQgYmUgaGVscGZ1bCB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGltcGFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuLS1cbmJsb2NrL01ha2VmaWxlLTEyLVx0XHRcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXG5ibG9jay9NYWtlZmlsZToxMzpcdFx0XHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxuYmxvY2svTWFrZWZpbGUtMTQtXHRcdFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00NzU9TlVMTEJfREVWSUNFX0FUVFIocm90YXRpb25hbCwgYm9vbCwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NzY6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX29uY2UsIGJvb2wsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDc3LU5VTExCX0RFVklDRV9BVFRSKGJhZGJsb2Nrc19wYXJ0aWFsX2lvLCBib29sLCBOVUxMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01OTY9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm51bGxiX2RldmljZV9hdHRyc1tdID0ge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTk3LVx0XHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk4Olx0XHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzX29uY2UsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01OTktXHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3NfcGFydGlhbF9pbyxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzQ2PWJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1Ny1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTg6XHRpZiAoY21kLVx1MDAzZW5xLVx1MDAzZWRldi1cdTAwM2ViYWRibG9ja3Nfb25jZSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTktXHRcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTUzPXN0cnVjdCBudWxsYl9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02NS1cdHN0cnVjdCBiYWRibG9ja3MgYmFkYmxvY2tzO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY2Olx0Ym9vbCBiYWRibG9ja3Nfb25jZTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02Ny1cdGJvb2wgYmFkYmxvY2tzX3BhcnRpYWxfaW87XG4tLVxuZHJpdmVycy9tZC9yYWlkMS0xMC5jPTI3OD1zdGF0aWMgaW5saW5lIGJvb2wgcmFpZDFfc2hvdWxkX3JlYWRfZmlyc3Qoc3RydWN0IG1kZGV2ICptZGRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjkzLSAqIGJpbyB3aXRoIFJFUV9SQUhFQUQgb3IgUkVRX05PV0FJVCBjYW4gZmFpbCBhdCBhbnl0aW1lLCBiZWZvcmUgc3VjaCBJTyBpc1xuZHJpdmVycy9tZC9yYWlkMS0xMC5jOjI5NDogKiBzdWJtaXR0ZWQgdG8gdGhlIHVuZGVybHlpbmcgZGlza3MsIGhlbmNlIGRvbiYjMzk7dCByZWNvcmQgYmFkYmxvY2tzIG9yIHJldHJ5XG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjk1LSAqIGluIHRoaXMgY2FzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbG9jayBEZXZpY2UgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYmFkYmxvY2tzLm9gIGZpbGUgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gVGhlIGxvY2F0aW9uIG9mIGl0LCBgYmxvY2svTWFrZWZpbGVgLCB3aXRoIGBvYmoteWAgaW1wbGllcyBpdCYjMzk7cyBhbHdheXMgY29tcGlsZWQgaW4uIEJ1dCBob2xkIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGJsb2NrL01ha2VmaWxlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY3kgY2hhaW4gaGVyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmVzdCB0byB2ZXJpZnkgdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai15LipiYWRibG9ja3MubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJhZGJsb2NrcyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBibG9jay9NYWtlZmlsZWAuIExpbmUgMTMsIGluIHBhcnRpY3VsYXIsIHNlZW1zIGltcG9ydGFudC4gSXQmIzM5O3MgYnVyaWVkIHdpdGhpbiBhIG11bHRpLWxpbmUgYG9iai15YCBhc3NpZ25tZW50LCB3aGljaCBpcyB1c3VhbGx5IGEgc2lnbiB0aGF0IHRoaXMgY29kZSBpcyBjb21waWxlZCBpbiBzdGF0aWNhbGx5LCBhc3N1bWluZyBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBBbmQsIGFzIEkgcmVjYWxsLCBgQ09ORklHX0JMT0NLYCBpcyBlc3NlbnRpYWxseSBhIGRlZmF1bHQgaW4gbW9zdCBtb2Rlcm4ga2VybmVscy4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgYGJhZGJsb2Nrcy5vYCBmaWxlIGlzIGxpa2VseSBhbHdheXMgcGFydCBvZiB0aGUgYnVpbGQsIHVubGVzcyBzb21lb25lIGV4cGxpY2l0bHkgZGlzYWJsZWQgdGhlIGJsb2NrIGRldmljZSBzdXBwb3J0LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcyBvZiB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEJhc2VkIG9uIHRoZSBmaWxlLCB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gQWxsIG9mIHRoZXNlIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGJhZGJsb2NrcyBBUEkuIE15IG5leHQgcXVlc3Rpb24gaXM6IHdobyB1c2VzIHRoZW0/IEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBpbXBhY3QgZm9yIHRoaXMgcGFydGljdWxhciBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmMtMjItICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjIzOiAqIFdoZW4gdGhlIGNhbGxlciBvZiBiYWRibG9ja3Nfc2V0KCkgd2FudHMgdG8gc2V0IGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcywgdGhlXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTMyMC0gKiB0aGUgYmFkIGJsb2NrIHJhbmdlIHNldHRpbmcgY29uZGl0aW9ucy4gTWF5YmUgdGhlcmUgaXMgc29tZSByYXJlIGNvcm5lciBjYXNlXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJiMzOTt0IGh1cnQgaWYgYmFkYmxvY2tzX3NldCgpIGZhaWxzIGR1ZVxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXG5ibG9jay9iYWRibG9ja3MuYy0zMjMtICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNDogKiBJbnNpZGUgYmFkYmxvY2tzX3NldCgpIGVhY2ggbG9vcCBzdGFydHMgYnkganVtcGluZyB0byByZV9pbnNlcnQgbGFiZWwsIGV2ZXJ5XG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2Vcbi0tXG5ibG9jay9iYWRibG9ja3MuYz04MTc9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgzOC0vKiBEbyBleGFjdCB3b3JrIHRvIHNldCBiYWQgYmxvY2sgcmFuZ2UgaW50byB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzo4Mzk6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy04NDAtXHRcdFx0ICAgaW50IGFja25vd2xlZGdlZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMzQ3PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM0OS0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNTA6ICogYmFkYmxvY2tzX3NldCgpIC0gQWRkIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXG5ibG9jay9iYWRibG9ja3MuYy0xMzUxLSAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzY0LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM2NTpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMzY2LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ny17XG5ibG9jay9iYWRibG9ja3MuYzoxMzY4Olx0cmV0dXJuIF9iYWRibG9ja3Nfc2V0KGJiLCBzLCBzZWN0b3JzLCBhY2tub3dsZWRnZWQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM2OS19XG5ibG9jay9iYWRibG9ja3MuYzoxMzcwOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zZXQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM3MS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xNDg4PXNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDctXG5ibG9jay9iYWRibG9ja3MuYzoxNTA4Olx0aWYgKCFiYWRibG9ja3Nfc2V0KGJiLCBzZWN0b3IsIGxlbmd0aCwgIXVuYWNrKSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDktXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTUzMj1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjQtXHRpZiAoYnVmWzBdID09ICYjMzk7JiM0MzsmIzM5Oykge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY1Olx0XHRpZiAoYmFkYmxvY2tzX3NldChcdTAwMjZ0X2Rldi1cdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY2LVx0XHRcdFx0ICBlbmQgLSBzdGFydCAmIzQzOyAxLCAxKSlcbi0tXG5kcml2ZXJzL21kL21kLmM9MTgwOD1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MzEtXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbWQvbWQuYzoxOTMyOlx0XHRcdGlmICghYmFkYmxvY2tzX3NldChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgc2VjdG9yLCBjb3VudCwgMSkpXG5kcml2ZXJzL21kL21kLmMtMTkzMy1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDU1Nj1ib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3QgcywgaW50IHNlY3RvcnMsXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNTc1LVxuZHJpdmVycy9tZC9tZC5jOjEwNTc2Olx0aWYgKCFiYWRibG9ja3Nfc2V0KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBzLCBzZWN0b3JzLCAwKSkge1xuZHJpdmVycy9tZC9tZC5jLTEwNTc3LVx0XHQvKlxuLS1cbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcbi0tXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE2OS1cdC8qIHRoaXMgaXNuJiMzOTt0IGFuIGVycm9yIGFzIHRoZSBoYXJkd2FyZSB3aWxsIHN0aWxsIHRocm93IGFuIGV4Y2VwdGlvbiAqL1xuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHMsIG51bSwgMSkpXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE3MS1cdFx0ZGV2X2luZm9fb25jZShiYi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxuXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NTE9aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzYCBJbnRlcmZhY2UgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYGJhZGJsb2Nrc19zZXRgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhIGZldyBrZXkgZHJpdmVyczogdGhlIGBudWxsX2Jsa2AgZHJpdmVyLCB0aGUgc29mdHdhcmUgUkFJRCBjb21wb25lbnQgKGBtZGApLCBhbmQgdGhlIGBudmRpbW1gIGRyaXZlci4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2V0IG9mIHVzZXJzLiBUaGVzZSBhcmUgYWxsIHBsYWNlcyB3aGVyZSBiYWQgYmxvY2sgbWFuYWdlbWVudCB3b3VsZCBiZSByZWxldmFudCDigJMgdmlydHVhbCBibG9jayBkZXZpY2VzLCBSQUlEIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLgoKVGhlbiwgSSYjMzk7bSBhbHNvIG9ic2VydmluZyB0aGF0IGBiYWRibG9ja3Nfc3RvcmVgIGlzIGludm9rZWQgdGhyb3VnaCBzeXNmcy4gVGhhdCBzdWdnZXN0cyBzb21lIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIGEgd2F5IGZvciBhbiBhZG1pbmlzdHJhdG9yIG9yIHRvb2wgdG8gZGlyZWN0bHkgbWFuYWdlIGJhZCBibG9jayBpbmZvcm1hdGlvbi4gQnV0IHRoaXMgcmFpc2VzIGEgcXVlc3Rpb246IGlzIGBiYWRibG9ja3Nfc3RvcmVgIGJlaW5nICpleHBvcnRlZCogZm9yIHVzZSBieSBgbWRgIG9yIGBudWxsX2Jsa2AsIG9yIGlzIGl0IGp1c3QgYmVpbmcgY2FsbGVkIGluZGVwZW5kZW50bHkgdGhyb3VnaCBzeXNmcyBpbiB0aG9zZSBjb250ZXh0cz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIExldCBtZSBqdXN0IHF1aWNrbHkgdHJhY2UgdGhyb3VnaCBgYmFkYmxvY2tzX3N0b3JlYCBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGF0IGl0IGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBgYmFkYmxvY2tzX3NldGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2Nrc19zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xNDc2PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zaG93KTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDc4LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTQ3OTogKiBiYWRibG9ja3Nfc3RvcmUoKSAtIHN5c2ZzIGFjY2VzcyB0byBiYWQtYmxvY2tzIGxpc3RcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODAtICogQGJiOlx0XHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODctICovXG5ibG9jay9iYWRibG9ja3MuYzoxNDg4OnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cdFx0XHRpbnQgdW5hY2spXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUxMi19XG5ibG9jay9iYWRibG9ja3MuYzoxNTEzOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTE0LVxuLS1cbmJsb2NrL2dlbmhkLmM9ODUxPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODYyLVxuYmxvY2svZ2VuaGQuYzo4NjM6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuYmxvY2svZ2VuaGQuYy04NjQtXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmJsb2NrL2dlbmhkLmMtODcxLVxuYmxvY2svZ2VuaGQuYzo4NzI6XHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKGRpc2stXHUwMDNlYmIsIHBhZ2UsIGxlbiwgMCk7XG5ibG9jay9nZW5oZC5jLTg3My19XG4tLVxuYmxvY2svZ2VuaGQuYz0xMTcyPXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcbmJsb2NrL2dlbmhkLmM6MTE3MzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9nZW5oZC5jLTExNzQtc3RhdGljIERFVklDRV9BVFRSKGRpc2tzZXEsIDA0NDQsIGRpc2tzZXFfc2hvdywgTlVMTCk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTI1PXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTMxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTMyOnN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTMzLVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9tZC9tZC5jPTM2MTI9c3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG5kcml2ZXJzL21kL21kLmMtMzYxMy17XG5kcml2ZXJzL21kL21kLmM6MzYxNDpcdGludCBydiA9IGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTtcbmRyaXZlcnMvbWQvbWQuYy0zNjE1LVx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cbi0tXG5kcml2ZXJzL21kL21kLmM9MzYyNz1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG5kcml2ZXJzL21kL21kLmMtMzYyOC17XG5kcml2ZXJzL21kL21kLmM6MzYyOTpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMSk7XG5kcml2ZXJzL21kL21kLmMtMzYzMC19XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01Nz1zc2l6ZV90IGJhZGJsb2Nrc19zaG93KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjaGFyICpwYWdlLCBpbnQgdW5hY2spO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1ODpzc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTktXHRcdFx0aW50IHVuYWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEJsb2NrIERldmljZXMgdmlhIHN5c2ZzOiBBIFBvdGVudGlhbGx5IEludGVyZXN0aW5nIFZlY3RvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJhZCBibG9jayBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZCBhbmQgSSBzZWUgdGhhdCBgYmFkYmxvY2tzX3N0b3JlYCBpcyB1c2VkIGJ5IGBkaXNrX2JhZGJsb2Nrc19zdG9yZWAgd2l0aGluIGBibG9jay9nZW5oZC5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IGNsaWNrcyB0aGF0IHRoaXMgbWVhbnMgYW55IGJsb2NrIGRldmljZSB3aXRoIGJhZGJsb2NrcyBlbmFibGVkIHBvdGVudGlhbGx5IGhhcyBhIHN5c2ZzIGludGVyZmFjZSBmb3IgZnV6emluZyEgVGhpcyB3YXJyYW50cyBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKTGV0IG1lIGNvbmZpcm0gdGhlIGFjY2VzcyBtZXRob2QuIEFscmlnaHQsIGBkaXNrX2JhZGJsb2Nrc19zdG9yZWAgaXMgcmVnaXN0ZXJlZCB3aXRoIGBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKWAuIFRoYXQgcGxhY2VtZW50IGluIHN5c2ZzIGlzIGdvaW5nIHRvIG1ha2UgaXQgYWNjZXNzaWJsZSB0aHJvdWdoIGAvc3lzL2Jsb2NrLyZsdDtkZXYmZ3Q7L2JhZGJsb2Nrc2AuIFl1cCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBjb21wbGV0ZWx5IGZ1bmN0aW9uYWwgZW50cnlwb2ludC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGlzIHdvcnRoIGEgZGVlcGVyIGludmVzdGlnYXRpb24uCgpPa2F5LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayBgYmFkYmxvY2tzX2NoZWNrYCBhcyB3ZWxsLCBzaW5jZSB0aGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGJhZGJsb2NrcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxuYmxvY2svYmFkYmxvY2tzLmM6MjgzOiAqICAgICBvY2N1cHkgbGVzcyBiYWQgYmxvY2tzIHRhYmxlIHNwYWNlIGFuZCBtYWtlIGJhZGJsb2Nrc19jaGVjaygpIGZhc3Rlci5cbmJsb2NrL2JhZGJsb2Nrcy5jLTI4NC0gKiAgICAgVGhlcmVmb3JlIGluIHN1Y2ggc2l0dWF0aW9uLCBhZnRlciBvdmVyd3JpdGluZyByYW5nZSBTLCB0aGUgcHJldmlvdXMgcmFuZ2Vcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDU1PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTIwMTpzdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMjAyLVx0XHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTI3OS0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyODA6ICogYmFkYmxvY2tzX2NoZWNrKCkgLSBjaGVjayBhIGdpdmVuIHJhbmdlIGZvciBiYWQgc2VjdG9yc1xuYmxvY2svYmFkYmxvY2tzLmMtMTI4MS0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTI5NS0gKlxuYmxvY2svYmFkYmxvY2tzLmM6MTI5NjogKiBMb2NraW5nIG9mIHRoZSBiYWQtYmxvY2sgdGFibGUgdXNlcyBhIHNlcWxvY2sgc28gYmFkYmxvY2tzX2NoZWNrXG5ibG9jay9iYWRibG9ja3MuYy0xMjk3LSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5LlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMTItICovXG5ibG9jay9iYWRibG9ja3MuYzoxMzEzOmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMzE0LVx0XHRcdHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzQwLVx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZiYi1cdTAwM2Vsb2NrKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDE6XHRydiA9IF9iYWRibG9ja3NfY2hlY2soYmIsIHMsIHNlY3RvcnMsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM0Mi1cdGlmIChyZWFkX3NlcXJldHJ5KFx1MDAyNmJiLVx1MDAzZWxvY2ssIHNlcSkpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Ni19XG5ibG9jay9iYWRibG9ja3MuYzoxMzQ3OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzQ4LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNDY9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU0LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1NTpcdGlmICghYmFkYmxvY2tzX2NoZWNrKGJiLCBzZWN0b3IsICpucl9zZWN0b3JzLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNmJhZF9zZWN0b3JzKSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTYtXHRcdHJldHVybiBCTEtfU1RTX09LO1xuLS1cbmRyaXZlcnMvbWQvbWQuaD0yOTk9c3RhdGljIGlubGluZSBpbnQgaXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuZHJpdmVycy9tZC9tZC5oLTMwMi1cdGlmICh1bmxpa2VseShyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jb3VudCkpIHtcbmRyaXZlcnMvbWQvbWQuaDozMDM6XHRcdGludCBydiA9IGJhZGJsb2Nrc19jaGVjayhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcmRldi1cdTAwM2VkYXRhX29mZnNldCAmIzQzOyBzLFxuZHJpdmVycy9tZC9tZC5oLTMwNC1cdFx0XHRcdFx0c2VjdG9ycyxcbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oPTY3Nj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfYmFkX3BtZW0oc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cbmRyaXZlcnMvbnZkaW1tL25kLmg6NjgzOlx0XHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcdTAwMjZmaXJzdF9iYWQsXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4NC1cdFx0XHRcdFx1MDAyNm51bV9iYWQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMzgzLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XHRcdGJiX3ByZXNlbnQgPSBiYWRibG9ja3NfY2hlY2soXHUwMDI2bmRfcmVnaW9uLVx1MDAzZWJiLCBtZXRhX3N0YXJ0LFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODUtXHRcdFx0XHRtZXRhX251bSwgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZudW1fYmFkKTtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MjQyPV9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjU4LVx0aWYgKGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNlxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjI1OTpcdCAgICBiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbnVtLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNm51bV9iYWQpKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjYwLVx0XHRsb25nIGFjdHVhbF9ucjtcbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTQ1PXN0cnVjdCBiYWRibG9ja3NfY29udGV4dCB7XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01MC1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTE6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc1CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGJhZGJsb2Nrc19jaGVja2AgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBiYWRibG9ja3NfY2hlY2tgIGlzIHV0aWxpemVkIGJ5IGEgZmV3IGtleSBjb21wb25lbnRzOiBgbnVsbF9ibGtgLCBgbWRgLCBhbmQgYG52ZGltbWAuIEdpdmVuIHRoYXQgbGlzdCwgYG51bGxfYmxrYCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJdCBmZWVscyBsaWtlIGEgcmVsYXRpdmVseSBjb250YWluZWQgYW5kIGFjY2Vzc2libGUgdGFyZ2V0IHdpdGhpbiB0aGF0IGdyb3VwLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IGRldGVybWluZSBpZiBgbnVsbF9ibGtgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBhIHR5cGljYWwgY29uZmlndXJhdGlvbiwgb3IgaWYgSSBuZWVkIHRvIGVuYWJsZSBpdCB3aXRoIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIEkgY2FuIGV2ZW4gc3RhcnQgdGVzdGluZyB0aGUgYGJhZGJsb2Nrc19jaGVja2AgYmVoYXZpb3Igd2l0aGluIHRoYXQgbW9kdWxlLiBJZGVudGlmeWluZyBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGdldCB0byB0aGUgZ29vZCBzdHVmZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVsbF9ibGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0PTEzOT1GdXJ0aGVyIHJlYWRpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jsay1tcS5yc3QtMTQ1LVxuRG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0OjE0NjotIGBOdWxsIGJsb2NrIGRldmljZSBkcml2ZXIgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvYmxvY2svbnVsbF9ibGsuaHRtbFx1MDAzZWBfXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jsay1tcS5yc3QtMTQ3LVxuLS1cbkRvY3VtZW50YXRpb24vYmxvY2svaW5kZXgucnN0PTQ9QmxvY2tcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2luZGV4LnJzdC0xOC0gICBreWJlci1pb3NjaGVkXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2luZGV4LnJzdDoxOTogICBudWxsX2Jsa1xuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3QtMjAtICAgcHJcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdD04Mz1kaXNjYXJkPVswLzFdOiBEZWZhdWx0OiAwXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdDo4NDogIFN1cHBvcnQgZGlzY2FyZCBvcGVyYXRpb25zIChyZXF1aXJlcyBtZW1vcnktYmFja2VkIG51bGxfYmxrIGRldmljZSkuXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdC04NS1cbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdD0xMTg9YmxvY2tpbmc9WzAvMV06IERlZmF1bHQ6IDBcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdC0xMjItICAwICBSZWdpc3RlciBhcyBhIG5vbi1ibG9ja2luZyBibGstbXEgZHJpdmVyIGRldmljZS5cbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0OjEyMzogIDEgIFJlZ2lzdGVyIGFzIGEgYmxvY2tpbmcgYmxrLW1xIGRyaXZlciBkZXZpY2UsIG51bGxfYmxrIHdpbGwgc2V0XG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdC0xMjQtICAgICB0aGUgQkxLX01RX0ZfQkxPQ0tJTkcgZmxhZywgaW5kaWNhdGluZyB0aGF0IGl0IHNvbWV0aW1lcy9hbHdheXNcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3pvbmVmcy5yc3Q9NDAwPXpvbmVmcy10b29scyBhbHNvIGluY2x1ZGVzIGEgdGVzdCBzdWl0ZSB3aGljaCBjYW4gYmUgcnVuIGFnYWluc3QgYW55IHpvbmVkXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3pvbmVmcy5yc3Q6NDAxOmJsb2NrIGRldmljZSwgaW5jbHVkaW5nIG51bGxfYmxrIGJsb2NrIGRldmljZSBjcmVhdGVkIHdpdGggem9uZWQgbW9kZS5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvem9uZWZzLnJzdC00MDItXG4tLVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9MTUyPVRvIGZhY2lsaXRhdGUgdGVzdGluZywgZW5hYmxpbmcgdGhlIG51bGwtYmxrIGRyaXZlciAoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxNTM6aXMgYWxzbyByZWNvbW1lbmRlZC4gV2l0aCB0aGlzLCBhIHNpbXBsZSBzZXR1cCB1c2luZyBhIG51bGxfYmxrIGJsb2NrIGRldmljZVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTU0LWFzIGEgc3Vic3lzdGVtIG5hbWVzcGFjZSBjYW4gYmUgdXNlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0xODg9c2NvcGUgb2YgdGhpcyBkb2N1bWVudC4gVGhlIGZvbGxvd2luZyBvbmx5IHByb3ZpZGVzIGEgc2ltcGxlIGV4YW1wbGUgb2YgYSBwb3J0XG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxODk6YW5kIHN1YnN5c3RlbSB3aXRoIGEgc2luZ2xlIG5hbWVzcGFjZSBiYWNrZWQgYnkgYSBudWxsX2JsayBkZXZpY2UuXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTAtXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0xOTE9Rmlyc3QsIG1ha2Ugc3VyZSB0aGF0IGNvbmZpZ2ZzIGlzIGVuYWJsZWQ6OlxuLS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTE5NC1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE5NTpOZXh0LCBjcmVhdGUgYSBudWxsX2JsayBkZXZpY2UgKGRlZmF1bHQgc2V0dGluZ3MgZ2l2ZSBhIDI1MCBHQiBkZXZpY2Ugd2l0aG91dFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTk2LW1lbW9yeSBiYWNraW5nKS4gVGhlIGJsb2NrIGRldmljZSBjcmVhdGVkIHdpbGwgYmUgL2Rldi9udWxsYjAgYnkgZGVmYXVsdDo6XG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTctXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxOTg6ICAgICAgICAjIG1vZHByb2JlIG51bGxfYmxrXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTktICAgICAgICAjIGxzIC9kZXYvbnVsbGIwXG4tLVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9MjEyPWV4YW1wbGUsIHRoZSBwb3J0IGlzIGNyZWF0ZWQgd2l0aCBhIG1heGltdW0gb2YgNCBJL08gcXVldWUgcGFpcnM6OlxuLS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTIyMS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjIyMjpOZXh0LCBjcmVhdGUgYW5kIGVuYWJsZSB0aGUgc3Vic3lzdGVtIG5hbWVzcGFjZSB1c2luZyB0aGUgbnVsbF9ibGsgYmxvY2tcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTIyMy1kZXZpY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTI4NT10YXJnZXQgZGV2aWNlIGFuZCBlbmRwb2ludCBkZXZpY2UgYXJlIGNyZWF0ZWQgYW5kIGNvbm5lY3RlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0yODgtXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoyODk6ICAgICAgICBudWxsX2JsazogZGlzayBudWxsYjAgY3JlYXRlZFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MjkwOiAgICAgICAgbnVsbF9ibGs6IG1vZHVsZSBsb2FkZWRcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTI5MS0gICAgICAgIG52bWV0OiBhZGRpbmcgbnNpZCAxIHRvIHN1YnN5c3RlbSBudm1lcGYuMC5ucW5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0PTExMj1JL08g6K+35rGC5a6M5oiQ5LqG44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svYmxrLW1xLnJzdC0xMjAtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0OjEyMTotIGBOdWxsIOWdl+iuvuWkh+mpseWKqOeoi+W6jyBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9ibG9jay9udWxsX2Jsay5odG1sXHUwMDNlYF9cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2Jsay1tcS5yc3QtMTIyLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2luZGV4LnJzdD0yMj1UT0RPTGlzdDpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9pbmRleC5yc3QtMjktKiBreWJlci1pb3NjaGVkXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9pbmRleC5yc3Q6MzA6KiBudWxsX2Jsa1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0LTMxLSogcHJcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTc9aWYgQkxLX0RFVlxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5OnNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yMC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVx0JiM0Mzs9IHJuYmQvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGwvXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT00PWNjZmxhZ3MteVx0XHRcdCYjNDM7PSAtSSQoc3JjKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS01LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19CTEtfREVWX05VTExfQkxLKVx0JiM0Mzs9IG51bGxfYmxrLm9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NzpudWxsX2Jsay1vYmpzXHRcdFx0Oj0gbWFpbi5vXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTgtaWZlcSAoJChDT05GSUdfQkxLX0RFVl9aT05FRCksIHkpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlOjk6bnVsbF9ibGstJChDT05GSUdfVFJBQ0lORykgXHQmIzQzOz0gdHJhY2Uub1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS0xMC1lbmRpZlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZToxMTpudWxsX2Jsay0kKENPTkZJR19CTEtfREVWX1pPTkVEKSAmIzQzOz0gem9uZWQub1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTI6I2luY2x1ZGUgXCYjMzQ7bnVsbF9ibGsuaFwmIzM0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTMtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNC0jdW5kZWYgcHJfZm10XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNTojZGVmaW5lIHByX2ZtdChmbXQpXHRcJiMzNDtudWxsX2JsazogXCYjMzQ7IGZtdFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTYtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjIxPW1vZHVsZV9wYXJhbV9uYW1lZChkaXNjYXJkLCBnX2Rpc2NhcmQsIGJvb2wsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjIyOk1PRFVMRV9QQVJNX0RFU0MoZGlzY2FyZCwgXCYjMzQ7U3VwcG9ydCBkaXNjYXJkIG9wZXJhdGlvbnMgKHJlcXVpcmVzIG1lbW9yeS1iYWNrZWQgbnVsbF9ibGsgZGV2aWNlKS4gRGVmYXVsdDogZmFsc2VcJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjIzLVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTcxOT1zdGF0aWMgc3NpemVfdCBtZW1iX2dyb3VwX2ZlYXR1cmVzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTczMy1cdFx0aWYgKHJldCBcdTAwM2U9IGxlZnQpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjczNDpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7VG9vIG1hbnkgbnVsbF9ibGsgZmVhdHVyZXMgdG8gcHJpbnRcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzM1LVx0XHRcdG1lbXplcm9fZXhwbGljaXQocGFnZSwgUEFHRV9TSVpFKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzk1PXN0YXRpYyBpbmxpbmUgdm9pZCBudWxsYl9jb21wbGV0ZV9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzOTktXHQvKlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQwMDpcdCAqIFNpbmNlIHJvb3QgcHJpdmlsZWdlcyBhcmUgcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZSBudWxsX2Jsa1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQwMS1cdCAqIGRyaXZlciwgaXQgaXMgZmluZSB0aGF0IHRoaXMgZHJpdmVyIGRvZXMgbm90IGluaXRpYWxpemUgdGhlXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQwMy1cdCAqIGFueXdheSBpZiBLTVNBTiBpcyBlbmFibGVkIHRvIHByZXZlbnQgdGhhdCBLTVNBTiBjb21wbGFpbnNcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MDQ6XHQgKiBhYm91dCBudWxsX2JsayBub3QgaW5pdGlhbGl6aW5nIHJlYWQgZGF0YSBidWZmZXJzLlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQwNS1cdCAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy0yLS8qXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmM6MzogKiBudWxsX2JsayB0cmFjZSByZWxhdGVkIGhlbHBlcnMuXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmMtNC0gKlxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy05LS8qXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmM6MTA6ICogSGVscGVyIHRvIHVzZSBmb3IgYWxsIG51bGxfYmxrIHRyYWNlcyB0byBleHRyYWN0IGRpc2sgbmFtZS5cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy0xMS0gKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmgtMi0vKlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oOjM6ICogbnVsbF9ibGsgZGV2aWNlIGRyaXZlciB0cmFjZXBvaW50cy5cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC00LSAqXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oLTE2LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oOjE3OiNpbmNsdWRlIFwmIzM0O251bGxfYmxrLmhcJiMzNDtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC0xOC1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQ6I2luY2x1ZGUgXCYjMzQ7bnVsbF9ibGsuaFwmIzM0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTUtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTktI3VuZGVmIHByX2ZtdFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjEwOiNkZWZpbmUgcHJfZm10KGZtdClcdFwmIzM0O251bGxfYmxrOiBcJiMzNDsgZm10XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTEtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTc3OD1zc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4NS1cdGlmICghZGV2LVx1MDAzZXpvbmVkKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6Nzg2Olx0XHRwcl9lcnIoXCYjMzQ7bnVsbF9ibGsgZGV2aWNlIGlzIG5vdCB6b25lZFxcblwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzg3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzkwLVx0aWYgKCFkZXYtXHUwMDNlem9uZXMpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3OTE6XHRcdHByX2VycihcJiMzNDtudWxsX2JsayBkZXZpY2UgaXMgbm90IHlldCBwb3dlcmVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03OTItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9NDc9ICAgIGZuIG1ha2VfZ3JvdXAoXG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy01NC0gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzOjU1OiAgICAgICAgICAgICAgICAvLyBOYW1lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEMgbnVsbF9ibGtcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNTYtICAgICAgICAgICAgICAgIHBvd2VyOiAwLFxuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvcm51bGwucnM9MzY9ICAgIGZuIGluaXQoX21vZHVsZTogXHUwMDI2JiMzOTtzdGF0aWMgVGhpc01vZHVsZSkgLVx1MDAzZSBpbXBsIFBpbkluaXRcdTAwM2NTZWxmLCBFcnJvclx1MDAzZSB7XG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzOjM3OiAgICAgICAgcHJfaW5mbyEoXCYjMzQ7UnVzdCBudWxsX2JsayBsb2FkZWRcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycy0zOC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvcnRycy1jbHQuYz02OT1fX3J0cnNfZ2V0X3Blcm1pdChzdHJ1Y3QgcnRyc19jbHRfc2VzcyAqY2x0LCBlbnVtIHJ0cnNfY2x0X2Nvbl90eXBlIGNvbl90eXBlKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jLTc1LVx0LypcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jOjc2Olx0ICogQWRhcHRlZCBmcm9tIG51bGxfYmxrIGdldF90YWcoKS4gQ2FsbGVycyBmcm9tIGRpZmZlcmVudCBjcHVzIG1heVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL3J0cnMtY2x0LmMtNzctXHQgKiBncmFiIHRoZSBzYW1lIGJpdCwgc2luY2UgZmluZF9maXJzdF96ZXJvX2JpdCBpcyBub3QgYXRvbWljLlxuLS1cbmxpYi9mYXVsdC1pbmplY3QuYz0yNjc9RVhQT1JUX1NZTUJPTF9HUEwoZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cik7XG4tLVxubGliL2ZhdWx0LWluamVjdC5jLTI3Mi1cbmxpYi9mYXVsdC1pbmplY3QuYzoyNzM6LyogVGhlc2UgY29uZmlnZnMgYXR0cmlidXRlIHV0aWxpdGllcyBhcmUgY29waWVkIGZyb20gZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgKi9cbmxpYi9mYXVsdC1pbmplY3QuYy0yNzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTQ3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBgYmFkYmxvY2tzYCBpbiBCbG9jayBEZXZpY2UgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIGBiYWRibG9ja3NgIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHRoZSByZWNlbnRseSBhcHBsaWVkIHBhdGNoLiBUaGUgc3RhcnRpbmcgcG9pbnQgaGVyZSBpcyB0aGUgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIEkmIzM5O2xsIGFkZCBgQkxLX0RFVl9OVUxMX0JMS2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGJlIHN1cmUuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgYG51bGxfYmxrYCBzZWVtcyBwZXJmZWN0IGZvciB0ZXN0aW5nIGBiYWRibG9ja3NgIHRocm91Z2ggY29uZmlnZnMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIGNvbnRleHQsIGBDT05GSUdfTURgIChNdWx0aXBsZSBEZXZpY2VzKSBpcyBvZnRlbiBlbmFibGVkLCBhbmQgYGRyaXZlcnMvbWQvbWQuY2AgY2FsbHMgYGJhZGJsb2Nrc2AgZnVuY3Rpb25zLCBidXQgYG51bGxfYmxrYCBpcyB0aGUgY2xlYXIgZWFzaWVzdCBvcHRpb24gaGVyZSBmb3IgdGVzdGluZyBiYWRibG9ja3MgdGhyb3VnaCBjb25maWdmcy4KClRoZSByZWNlbnQgcGF0Y2ggY2F1Z2h0IG15IGV5ZSwgZml4aW5nIGFuIG92ZXJmbG93IGlzc3VlIGluIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgIGFuZCBhbHNvIGFkZHJlc3NpbmcgYHJvdW5kZG93bmAgYW5kIGByb3VuZHVwYCBtYWNyb3Mgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGRlbWFuZHMgdGFyZ2V0ZWQgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgdGhlbiBzaG91bGQgYmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gTGV0JiMzOTtzIHNlZS4uLiBJbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgb2YgdGhlIG1haW4gaW50ZXJmYWNlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zdG9yZWAsIGFuZCBgYmFkYmxvY2tzX3Nob3dgLgoKQWgsIGJ1dCB0aGUgcGF0Y2ggbW9kaWZpZWQgdGhlIGludGVybmFsIGZ1bmN0aW9ucywgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIGBiYWRibG9ja3NfY2hlY2tgIHNob3VsZCBiZSBsaXN0ZWQsIGJlY2F1c2UgaXQgaGFzIGJlZW4gbW9kaWZpZWQuIFNvIEkmIzM5O2xsIGxpc3QgdGhlIGtleSBzeW1ib2xzIGFzOgoKKiAgIGBfYmFkYmxvY2tzX3NldGAKKiAgIGBfYmFkYmxvY2tzX2NsZWFyYAoqICAgYGJhZGJsb2Nrc19jaGVja2AKKiAgIGBiYWRibG9ja3Nfc2V0YAoqICAgYGJhZGJsb2Nrc19jbGVhcmAKCk5vdyBJJiMzOTtsbCBjaGVjayBgYmFkYmxvY2tzX2NsZWFyYCBpbiBgYmFkYmxvY2tzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3NfY2xlYXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmM9MTAzNz1zdGF0aWMgaW50IGZyb250X3NwbGl0dGluZ19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA1NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMDU1OnN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG5ibG9jay9iYWRibG9ja3MuYy0xMDU2LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMzcwPUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zZXQpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzItLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzczOiAqIGJhZGJsb2Nrc19jbGVhcigpIC0gUmVtb3ZlIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXG5ibG9jay9iYWRibG9ja3MuYy0xMzc0LSAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzg1LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM4Njpib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODcte1xuYmxvY2svYmFkYmxvY2tzLmM6MTM4ODpcdHJldHVybiBfYmFkYmxvY2tzX2NsZWFyKGJiLCBzLCBzZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODktfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM5MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2xlYXIpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM5MS1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY3LVx0XHRcdHJldCA9IGNvdW50O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4Olx0fSBlbHNlIGlmIChiYWRibG9ja3NfY2xlYXIoXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2OS1cdFx0XHRcdCAgIGVuZCAtIHN0YXJ0ICYjNDM7IDEpKSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTgtXHRpZiAoY21kLVx1MDAzZW5xLVx1MDAzZWRldi1cdTAwM2ViYWRibG9ja3Nfb25jZSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTk6XHRcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzYwLVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDU5Nj12b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA2MDMtXG5kcml2ZXJzL21kL21kLmM6MTA2MDQ6XHRpZiAoIWJhZGJsb2Nrc19jbGVhcihcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycykpXG5kcml2ZXJzL21kL21kLmMtMTA2MDUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYz0xNjQ9c3RhdGljIGludCBudmRpbW1fY2xlYXJfYmFkYmxvY2tzX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9udmRpbW0vYnVzLmMtMTgzLVx0c2VjdG9yID0gKGN0eC1cdTAwM2VwaHlzIC0gbmRfcmVnaW9uLVx1MDAzZW5kcl9zdGFydCkgLyA1MTI7XG5kcml2ZXJzL252ZGltbS9idXMuYzoxODQ6XHRiYWRibG9ja3NfY2xlYXIoXHUwMDI2bmRfcmVnaW9uLVx1MDAzZWJiLCBzZWN0b3IsIGN0eC1cdTAwM2VjbGVhcmVkIC8gNTEyKTtcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTE4NS1cbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNjktXHRcdFx0XHRjbGVhcmVkIC89IDUxMjtcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM6MjcwOlx0XHRcdFx0YmFkYmxvY2tzX2NsZWFyKFx1MDAyNm5zaW8tXHUwMDNlYmIsIHNlY3RvciwgY2xlYXJlZCk7XG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3MS1cdFx0XHR9XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTg4PXN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTEtXHRcdHJldHVybjtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo5MjpcdGJhZGJsb2Nrc19jbGVhcihcdTAwMjZwbWVtLVx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTkzLVx0aWYgKHBtZW0tXHUwMDNlYmJfc3RhdGUpXG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01Mz1ib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTU6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Ni12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCYWQgQmxvY2sgSGFuZGxpbmcgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaW5pdGlhbGx5LCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBkaXJlY3RseSBhbHRlcmVkIGFwcGVhciB0byBiZSBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaW1wcmVzc2lvbi4KCkZpcnN0LCBJIGhhZCB0byBjbGFyaWZ5IHdoZXRoZXIgYGJhZGJsb2Nrc19zdG9yZWAgd2FzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgbm90LiBUaG91Z2ggaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYGJhZGJsb2Nrc19zZXRgIGFuZCBgYmFkYmxvY2tzX2NsZWFyYC4gU28sIHRoZSBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZXNlIHRocmVlLiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Uga2V5IGZ1bmN0aW9ucy4KCk5leHQsIEkgbmVlZGVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYGJhZGJsb2Nrcy5jYCBtb2R1bGUgaXMsIGluIGZhY3QsIGNvbXBpbGVkIGJ5IGRlZmF1bHQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGBibG9jay9NYWtlZmlsZWAgYW5kIHRoZSBgb2JqLXlgIHNldHRpbmcgY29uZmlybWVkIHRoaXMuCgpOb3csIGxldCBtZSBpbnZlc3RpZ2F0ZSB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBpcyBiZW5lZmljaWFsLCBhcyBpdCBleHBvc2VzIGJhZGJsb2NrcyB0aHJvdWdoIGNvbmZpZ2ZzLiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGxvY2F0aW9ucy4KCkFoLCB0aGVyZSYjMzk7cyBhbm90aGVyIHBvaW50LiBgYmFkYmxvY2tzX3N0b3JlYCBpcyBhbHNvIGV4cG9zZWQgdGhyb3VnaCBgZGlza19iYWRibG9ja3Nfc3RvcmVgIHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCB0aGF0IGZ1bmN0aW9uLCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNrX2JhZGJsb2Nrc19zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9nZW5oZC5jPTg1MT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9nZW5oZC5jLTg2Mi1cbmJsb2NrL2dlbmhkLmM6ODYzOnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmJsb2NrL2dlbmhkLmMtODY0LVx0XHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5ibG9jay9nZW5oZC5jPTExNzI9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xuYmxvY2svZ2VuaGQuYzoxMTczOnN0YXRpYyBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2dlbmhkLmMtMTE3NC1zdGF0aWMgREVWSUNFX0FUVFIoZGlza3NlcSwgMDQ0NCwgZGlza3NlcV9zaG93LCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBgZGlza19iYWRibG9ja3NgIHN5c2ZzIEF0dHJpYnV0ZSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJdCBzZWVtcyBsaWtlIGFueSBibG9jayBkZXZpY2Ugd2hlcmUgdGhlIGBkaXNrLSZndDtiYmAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGlzIGF1dG9tYXRpY2FsbHkgZ29pbmcgdG8gaGF2ZSB0aGUgc3lzZnMgYXR0cmlidXRlIHJlbGF0ZWQgdG8gYmFkIGJsb2NrcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBhc3N1bXB0aW9uLCBlc3NlbnRpYWxseSB0eWluZyB0aGUgcHJlc2VuY2Ugb2YgdGhhdCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gdGhhdCBgZGlzay0mZ3Q7YmJgIGluaXRpYWxpemF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyB0aGF0JiMzOTtzIGltcGxlbWVudGVkLiBBaCwgeWVzLCBsb29raW5nIGF0IHRoZSBjb2RlIGZvciB0aGUgYGRpc2tfYmFkYmxvY2tzX3N0b3JlYCBmdW5jdGlvbiwgaXQgc3BlY2lmaWNhbGx5IGNoZWNrcyBpZiBgZGlzay0mZ3Q7YmJgIGlzICpub3QqIE5VTEwuIFRoYXQgY29uZmlybXMgdGhlIGRlcGVuZGVuY3kgSSBqdXN0IGh5cG90aGVzaXplZDogaWYgYGRpc2stJmd0O2JiYCBpcyBOVUxMLCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZCwgYW5kIHRoZSBzeXNmcyBhdHRyaWJ1dGUgcHJlc3VtYWJseSB3b24mIzM5O3QgZXZlbiBiZSBjcmVhdGVkIG9yIHdpbGwgcmV0dXJuIGFuIGVycm9yIHdoZW4gYWNjZXNzZWQuIEl0IGlzIGFuIGltcG9ydGFudCBzYW5pdHkgY2hlY2suIFNvLCB0aGF0JiMzOTtzIHRoZSBrZXkgcmVxdWlyZW1lbnQgLSBpbml0aWFsaXphdGlvbiBvZiBgZGlzay0mZ3Q7YmJgLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2stXHUwMDNlYmImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svZ2VuaGQuYz04NTE9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy04NTYtXG5ibG9jay9nZW5oZC5jOjg1NzpcdGlmICghZGlzay1cdTAwM2ViYilcbmJsb2NrL2dlbmhkLmMtODU4LVx0XHRyZXR1cm4gc3lzZnNfZW1pdChwYWdlLCBcJiMzNDtcXG5cJiMzNDspO1xuYmxvY2svZ2VuaGQuYy04NTktXG5ibG9jay9nZW5oZC5jOjg2MDpcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhkaXNrLVx1MDAzZWJiLCBwYWdlLCAwKTtcbmJsb2NrL2dlbmhkLmMtODYxLX1cbi0tXG5ibG9jay9nZW5oZC5jPTg2Mz1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy04NjgtXG5ibG9jay9nZW5oZC5jOjg2OTpcdGlmICghZGlzay1cdTAwM2ViYilcbmJsb2NrL2dlbmhkLmMtODcwLVx0XHRyZXR1cm4gLUVOWElPO1xuYmxvY2svZ2VuaGQuYy04NzEtXG5ibG9jay9nZW5oZC5jOjg3MjpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoZGlzay1cdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcbmJsb2NrL2dlbmhkLmMtODczLX1cbi0tXG5ibG9jay9nZW5oZC5jPTEyMzY9c3RhdGljIHVtb2RlX3QgZGlza192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgbilcbi0tXG5ibG9jay9nZW5oZC5jLTEyNDAtXG5ibG9jay9nZW5oZC5jOjEyNDE6XHRpZiAoYSA9PSBcdTAwMjZkZXZfYXR0cl9iYWRibG9ja3MuYXR0ciBcdTAwMjZcdTAwMjYgIWRpc2stXHUwMDNlYmIpXG5ibG9jay9nZW5oZC5jLTEyNDItXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTUzLVx0bnZkaW1tX2JhZGJsb2Nrc19wb3B1bGF0ZShuZF9yZWdpb24sIFx1MDAyNnBtZW0tXHUwMDNlYmIsIFx1MDAyNmJiX3JhbmdlKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1NTQ6XHRkaXNrLVx1MDAzZWJiID0gXHUwMDI2cG1lbS1cdTAwM2ViYjtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODUyCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBpbml0aWFsaXphdGlvbiBvZiBgZGlzay0mZ3Q7YmJgLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIG9ubHkgZG9uZSBmb3IgYHBtZW1gLCBvciBOVlJBTS4gSG1tLCB3aGF0IGFib3V0IGBudWxsX2Jsa2A/IFRoYXQgbW9kdWxlIHV0aWxpemVzIGB0X2Rldi0mZ3Q7YmFkYmxvY2tzYCBidXQgZXhwb3NlcyBpdCB0aHJvdWdoIGNvbmZpZ2ZzIGluc3RlYWQgb2Ygc3lzZnMuIFJpZ2h0LCBhbmQgdGhlbiBJIHJlbWVtYmVyIHRoYXQgYG1kYCBhbHNvIGhhbmRsZXMgYmFkYmxvY2tzLCBidXQgZXhwb3NlcyB0aGVtIGRpZmZlcmVudGx5LiBJdCB1c2VzIGByZGV2LSZndDtiYWRibG9ja3NgIGFuZCBwdXRzIHRoZW0gaW4gc3lzZnMgdW5kZXIgYG1kL2Rldi14eHgvYmFkX2Jsb2Nrc2AuIFRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBib3RoIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AgYW5kIGBDT05GSUdfTURgIHdvdWxkIGJlIGEgZ29vZCBhcHByb2FjaCwgSSBzaG91bGQgYWRkIGBCTEtfREVWX05VTExfQkxLYCBhbmQgYE1EYCB0byBgRW5hYmxlQ29uZmlnc2Agbm93LgoKTm93IEkgc2hvdWxkIGp1c3QgdGFrZSBhIHF1aWNrIGxvb2sgYXQgaG93IGBDT05GSUdfTURgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Nsay9xY29tL0tjb25maWc9NTYzPWNvbmZpZyBNU01fTENDXzg5NjBcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctNTcxLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjU3Mjpjb25maWcgTURNX0dDQ185NjA3XG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7TURNOTYwNyBHbG9iYWwgQ2xvY2sgQ29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01NzktXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6NTgwOmNvbmZpZyBNRE1fR0NDXzk2MTVcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01ODEtXHR0cmlzdGF0ZSBcJiMzNDtNRE05NjE1IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTUtXG5kcml2ZXJzL21kL0tjb25maWc6NjptZW51Y29uZmlnIE1EXG5kcml2ZXJzL21kL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZz0xNT1jb25maWcgQkxLX0RFVl9NRFxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0zOS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo0MDpjb25maWcgTURfQklUTUFQXG5kcml2ZXJzL21kL0tjb25maWctNDEtXHRib29sIFwmIzM0O01EIFJBSUQgYml0bWFwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctNTQtXG5kcml2ZXJzL21kL0tjb25maWc6NTU6Y29uZmlnIE1EX0xMQklUTUFQXG5kcml2ZXJzL21kL0tjb25maWctNTYtXHRib29sIFwmIzM0O01EIFJBSUQgbG9ja2xlc3MgYml0bWFwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctNjUtXG5kcml2ZXJzL21kL0tjb25maWc6NjY6Y29uZmlnIE1EX0FVVE9ERVRFQ1RcbmRyaXZlcnMvbWQvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7QXV0b2RldGVjdCBSQUlEIGFycmF5cyBkdXJpbmcga2VybmVsIGJvb3RcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctNzktXG5kcml2ZXJzL21kL0tjb25maWc6ODA6Y29uZmlnIE1EX0JJVE1BUF9GSUxFXG5kcml2ZXJzL21kL0tjb25maWctODEtXHRib29sIFwmIzM0O01EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTkwLVxuZHJpdmVycy9tZC9LY29uZmlnOjkxOmNvbmZpZyBNRF9MSU5FQVJcbmRyaXZlcnMvbWQvS2NvbmZpZy05Mi1cdHRyaXN0YXRlIFwmIzM0O0xpbmVhciAoYXBwZW5kKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxMDQ6Y29uZmlnIE1EX1JBSUQwXG5kcml2ZXJzL21kL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0wIChzdHJpcGluZykgbW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjMtXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMSAobWlycm9yaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxuZHJpdmVycy9tZC9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE2NC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNjU6Y29uZmlnIE1EX1JBSUQ0NTZcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjYtXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTQvUkFJRC01L1JBSUQtNiBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTIwMS1cbmRyaXZlcnMvbWQvS2NvbmZpZzoyMDI6Y29uZmlnIE1EX0NMVVNURVJcbmRyaXZlcnMvbWQvS2NvbmZpZy0yMDMtXHR0cmlzdGF0ZSBcJiMzNDtDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xMz1pZiBFVEhFUk5FVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MTU6Y29uZmlnIE1ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xOT1jb25maWcgQUNQSV9NRElPXG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI0OmNvbmZpZyBNRElPX0FJUk9IQVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEFONzU4MyBNRElPIGJ1cyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjMxOmNvbmZpZyBNRElPX1NVTjRJXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzozOTpjb25maWcgTURJT19YR0VORVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7QVBNIFgtR2VuZSBTb0MgTURJTyBidXMgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo0Njpjb25maWcgTURJT19BU1BFRURcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O0FTUEVFRCBNRElPIGJ1cyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTU4LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjU5OmNvbmZpZyBNRElPX0JJVEJBTkdcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0JpdGJhbmdlZCBNRElPIGJ1c2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTY3LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjY4OmNvbmZpZyBNRElPX0JDTV9JUFJPQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gaVByb2MgTURJTyBidXMgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy03Ni1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo3Nzpjb25maWcgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzgtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBVbmlNQUMgTURJTyBidXMgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy04NS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo4Njpjb25maWcgTURJT19DQVZJVU1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy04Ny1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctODgtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6ODk6Y29uZmlnIE1ESU9fR1BJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTkwLVx0dHJpc3RhdGUgXCYjMzQ7R1BJTyBsaWItYmFzZWQgYml0YmFuZ2VkIE1ESU8gYnVzZXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTgtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6OTk6Y29uZmlnIE1ESU9fSElTSV9GRU1BQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBGRU1BQyBNRElPIGJ1cyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDY6Y29uZmlnIE1ESU9fSTJDXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA3LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTE1LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjExNjpjb25maWcgTURJT19NVlVTQlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExNy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgVVNCIHRvIE1ESU8gQWRhcHRlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMjItXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTIzOmNvbmZpZyBNRElPX01TQ0NfTUlJTVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEyNC1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc2VtaSBNSUlNIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzMC1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMzE6Y29uZmlnIE1ESU9fTU9YQVJUXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTMyLVx0dHJpc3RhdGUgXCYjMzQ7TU9YQSBBUlQgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMzctXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTM4OmNvbmZpZyBNRElPX09DVEVPTlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzOS1cdHRyaXN0YXRlIFwmIzM0O09jdGVvbiBhbmQgc29tZSBUaHVuZGVyWCBTT0NzIE1ESU8gYnVzZXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTQ3LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE0ODpjb25maWcgTURJT19QSUM2NEhQU0NcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtQSUM2NC1IUFNDL0hYIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTU1LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE1Njpjb25maWcgTURJT19JUFE0MDE5XG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTU3LVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gSVBRNDAxOSBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE2My1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNjQ6Y29uZmlnIE1ESU9fSVBRODA2NFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE2NS1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQUTgwNjQgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTcyOmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3OC1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzk6Y29uZmlnIE1ESU9fUkVHTUFQXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTgwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTg5LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE5MDpjb25maWcgTURJT19USFVOREVSXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTkxLVx0dHJpc3RhdGUgXCYjMzQ7VGh1bmRlclggU09DcyBNRElPIGJ1c2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTIwMD1jb21tZW50IFwmIzM0O01ESU8gTXVsdGlwbGV4ZXJzXCYjMzQ7XG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjAxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIwMjpjb25maWcgTURJT19CVVNfTVVYXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjAzLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjEwLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIxMTpjb25maWcgTURJT19CVVNfTVVYX01FU09OX0cxMkFcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMTItXHR0cmlzdGF0ZSBcJiMzNDtBbWxvZ2ljIEcxMmEgYmFzZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjIxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIyMjpjb25maWcgTURJT19CVVNfTVVYX01FU09OX0dYTFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTIyMy1cdHRyaXN0YXRlIFwmIzM0O0FtbG9naWMgR1hMIGJhc2VkIE1ESU8gYnVzIG11bHRpcGxleGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTIzMi1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoyMzM6Y29uZmlnIE1ESU9fQlVTX01VWF9CQ002MzY4XG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjM0LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gQkNNNjM2OCBNRElPIGJ1cyBtdWx0aXBsZXhlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjQzLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI0NDpjb25maWcgTURJT19CVVNfTVVYX0JDTV9JUFJPQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI0NS1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIGlQcm9jIGJhc2VkIE1ESU8gYnVzIG11bHRpcGxleGVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNTQtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MjU1OmNvbmZpZyBNRElPX0JVU19NVVhfR1BJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI1Ni1cdHRyaXN0YXRlIFwmIzM0O0dQSU8gY29udHJvbGxlZCBNRElPIGJ1cyBtdWx0aXBsZXhlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjY0LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI2NTpjb25maWcgTURJT19CVVNfTVVYX01VTFRJUExFWEVSXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjY2LVx0dHJpc3RhdGUgXCYjMzQ7TURJTyBidXMgbXVsdGlwbGV4ZXIgdXNpbmcga2VybmVsIG11bHRpcGxleGVyIHN1YnN5c3RlbVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNzYtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mjc3OmNvbmZpZyBNRElPX0JVU19NVVhfTU1JT1JFR1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O01NSU8gZGV2aWNlLWNvbnRyb2xsZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTIxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX0JMS19ERVZfTURgIGNsaWNrcyDigJMgdGhhdCYjMzk7cyB0aGUgTUQgY29uZmlnLiBJIG5lZWQgdG8gaW5jbHVkZSBgQkxLX0RFVl9NRGAgYW5kIGFsc28gYEJMS19ERVZfTlVMTF9CTEtgLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBpbiBgYmxvY2svYmFkYmxvY2tzLmNgLCByaWdodD8gUmlnaHQsIGFuZCB0aGUgcmVhc29uIGZvciBmdXp6aW5nIGlzOiBpdCBhZGRyZXNzZXMgYW4gb3ZlcmZsb3cgYW5kIHNvbWUgaW5jb3JyZWN0IG1hY3JvIHVzYWdlIHJlbGF0ZWQgdG8gYHJvdW5kZG93bmAgYW5kIGByb3VuZHVwYCBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gR29vZCwgdGhhdCBBUEkgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCBjb25maWdmcyDigJMgdGhpbmtpbmcgbnVsbF9ibGsgYW5kIG1kIGhlcmUg4oCTIHNvIGl0JiMzOTtzIGFjdHVhbGx5IHRlc3RhYmxlLiBUaGF0JiMzOTtzIGEgaHVnZSBwbHVzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBMb29rcyBsaWtlIGl0JiMzOTtzOiBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gWWVwLCB0aG9zZSBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXNjcmliZWQgdnVsbmVyYWJpbGl0eS4gSSYjMzk7bGwgZGVmaW5pdGVseSBhZGQgdGhvc2UuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBxdWlja2x5IGNvbmZpcm1pbmcgcmVhY2hhYmlsaXR5IG9mIGBiYWRibG9ja3NfY2hlY2tgLiBJdCYjMzk7cyBjYWxsZWQgYnkgYG51bGxfaGFuZGxlX2JhZGJsb2Nrc2AgaW4gYG51bGxfYmxrYCwgd2hpY2ggaXMgaXRzZWxmIGludm9rZWQgb24gZXZlcnkgSU8gaWYgYmFkYmxvY2tzIGFyZSBjb25maWd1cmVkLiBQZXJmZWN0LiBgX2JhZGJsb2Nrc19zZXRgIGlzIGNhbGxlZCBieSBgYmFkYmxvY2tzX3NldGAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlYCBpbiBgbnVsbF9ibGtgIGFuZCBgZGlza19iYWRibG9ja3Nfc3RvcmVgIGluIGBnZW5oZC5jYCBhbmQgYGJiX3N0b3JlYCBpbiBgbWQuY2AuIEFuZCBgX2JhZGJsb2Nrc19jbGVhcmAgaXMgY2FsbGVkIGJ5IGBiYWRibG9ja3NfY2xlYXJgIHdoaWNoIGlzIGNhbGxlZCBieSBgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZWAgYW5kIGBudWxsX2hhbmRsZV9iYWRibG9ja3NgIGFuZCBgcmRldl9jbGVhcl9iYWRibG9ja3NgLgoKU28sIHllYWgsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uLiBUaGUgY29uZmlnIHNlbGVjdGlvbnMgYXJlIGNvcnJlY3QgZm9yIGNvdmVyYWdlLiBUaGUgcmVhc29uaW5nIG1ha2VzIHRvdGFsIHNlbnNlLiBBbGwgc3lzdGVtcyBhcmUgZ28uIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIGFuZCBpbmNvcnJlY3QgdXNhZ2Ugb2Ygcm91bmRkb3duL3JvdW5kdXAgbWFjcm9zIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBUaGUgYmFkYmxvY2tzIEFQSSBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBjb25maWdmcyAoZS5nLiwgbnVsbF9ibGssIG1kKSwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHRlc3RhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfYmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtfYmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSBhbmQgaW5jb3JyZWN0IHVzYWdlIG9mIHJvdW5kZG93bi9yb3VuZHVwIG1hY3JvcyBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gVGhlIGJhZGJsb2NrcyBBUEkgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgY29uZmlnZnMgKGUuZy4sIG51bGxfYmxrLCBtZCksIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjMyLjY3MTI3MTE2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjgwNzA2ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgYW5kIGluY29ycmVjdCB1c2FnZSBvZiByb3VuZGRvd24vcm91bmR1cCBtYWNyb3MgaW4gdGhlIGJhZGJsb2NrcyBibG9jayBsYXllciBBUEkuIFRoZSBiYWRibG9ja3MgQVBJIGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGNvbmZpZ2ZzIChlLmcuLCBudWxsX2JsaywgbWQpLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgdGVzdGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjMyLjY3MTI3Njg4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxOTM3MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzRlZGI2YjRkNjEwYThmYjgyOWJkYjNmY2FmM2JhOTYwYmM4Njg2NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDE4OjE2OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcXG5pbmRleCBlY2U2NGU3NmZlOGZmZi4uZTg0ODQ5MTI1MzIzNWYgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xcbkBAIC04NTMsMTUgKzg1MywyMSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4gXFx0XFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAocyBcXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoYmItXFx1MDAzZXNoaWZ0KSB7XFxuIFxcdFxcdC8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqL1xcbiBcXHRcXHRzZWN0b3JfdCBuZXh0ID0gcyArIHNlY3RvcnM7XFxuIFxcbi1cXHRcXHRyb3VuZGRvd24ocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbi1cXHRcXHRyb3VuZHVwKG5leHQsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0cyA9IHJvdW5kX2Rvd24ocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbitcXHRcXHRuZXh0ID0gcm91bmRfdXAobmV4dCwgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbiBcXHRcXHRzZWN0b3JzID0gbmV4dCAtIHM7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChzZWN0b3JzID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdHdyaXRlX3NlcWxvY2tfaXJxc2F2ZShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdGJhZC5hY2sgPSBhY2tub3dsZWRnZWQ7XFxuQEAgLTEwNjEsNiArMTA2Nyw5IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuIFxcdFxcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0aWYgKHMgXFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCkge1xcbiBcXHRcXHRzZWN0b3JfdCB0YXJnZXQ7XFxuIFxcbkBAIC0xMDcxLDExICsxMDgwLDE3IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuIFxcdFxcdCAqIGlzbid0IHRoYW4gdG8gdGhpbmsgYSBibG9jayBpcyBub3QgYmFkIHdoZW4gaXQgaXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR0YXJnZXQgPSBzICsgc2VjdG9ycztcXG4tXFx0XFx0cm91bmR1cChzLCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuLVxcdFxcdHJvdW5kZG93bih0YXJnZXQsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XFxuK1xcdFxcdHMgPSByb3VuZF91cChzLCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdHRhcmdldCA9IHJvdW5kX2Rvd24odGFyZ2V0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmICh0YXJnZXQgXFx1MDAzYyBzKVxcbitcXHRcXHRcXHRzZWN0b3JzID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHNlY3RvcnMgPT0gMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0d3JpdGVfc2VxbG9ja19pcnEoXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdGJhZC5hY2sgPSB0cnVlO1xcbkBAIC0xMzAzLDEzICsxMzE4LDIyIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuIFxcbiBcXHRXQVJOX09OKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNjIDAgfHwgc2VjdG9ycyA9PSAwKTtcXG4gXFxuK1xcdGlmIChzIFxcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXFxuIFxcdFxcdHNlY3Rvcl90IHRhcmdldCA9IHMgKyBzZWN0b3JzO1xcbiBcXG4tXFx0XFx0cm91bmRkb3duKHMsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0cm91bmR1cCh0YXJnZXQsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XFxuK1xcdFxcdHMgPSByb3VuZF9kb3duKHMsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0dGFyZ2V0ID0gcm91bmRfdXAodGFyZ2V0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmICh0YXJnZXQgXFx1MDAzYyBzKVxcbitcXHRcXHRcXHRzZWN0b3JzID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcXG4rXFxuK1xcdFxcdGlmIChzZWN0b3JzID09IDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiByZXRyeTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6MzIuOTczODc4NTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk3ODA4OTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJCTEtfREVWX01EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX2JhZGJsb2Nrc19zZXRcIixcbiAgICBcIl9iYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIGFuZCBpbmNvcnJlY3QgdXNhZ2Ugb2Ygcm91bmRkb3duL3JvdW5kdXAgbWFjcm9zIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBUaGUgYmFkYmxvY2tzIEFQSSBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBjb25maWdmcyAoZS5nLiwgbnVsbF9ibGssIG1kKSwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0ZWRiNmI0ZDYxMGE4ZmI4MjliZGIzZmNhZjNiYTk2MGJjODY4NjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCA0IDE4OjE2OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xuaW5kZXggZWNlNjRlNzZmZThmZmYuLmU4NDg0OTEyNTMyMzVmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcbisrKyBiL2Jsb2NrL2JhZGJsb2Nrcy5jXG5AQCAtODUzLDE1ICs4NTMsMjEgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4gXHRcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0aWYgKHMgXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRpZiAoYmItXHUwMDNlc2hpZnQpIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IG5leHQgPSBzICsgc2VjdG9ycztcbiBcbi1cdFx0cm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0cm91bmR1cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdHMgPSByb3VuZF9kb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0bmV4dCA9IHJvdW5kX3VwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiBcdFx0c2VjdG9ycyA9IG5leHQgLSBzO1xuIFx0fVxuIFxuK1x0aWYgKHNlY3RvcnMgPT0gMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0d3JpdGVfc2VxbG9ja19pcnFzYXZlKFx1MDAyNmJiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGJhZC5hY2sgPSBhY2tub3dsZWRnZWQ7XG5AQCAtMTA2MSw2ICsxMDY3LDkgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbiBcdFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCkge1xuIFx0XHRzZWN0b3JfdCB0YXJnZXQ7XG4gXG5AQCAtMTA3MSwxMSArMTA4MCwxNyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuIFx0XHQgKiBpc24ndCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLlxuIFx0XHQgKi9cbiBcdFx0dGFyZ2V0ID0gcyArIHNlY3RvcnM7XG4tXHRcdHJvdW5kdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZGRvd24odGFyZ2V0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuK1x0XHRzID0gcm91bmRfdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHR0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHRpZiAodGFyZ2V0IFx1MDAzYyBzKVxuK1x0XHRcdHNlY3RvcnMgPSAwO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4gXHR9XG4gXG4rXHRpZiAoc2VjdG9ycyA9PSAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHR3cml0ZV9zZXFsb2NrX2lycShcdTAwMjZiYi1cdTAwM2Vsb2NrKTtcbiBcbiBcdGJhZC5hY2sgPSB0cnVlO1xuQEAgLTEzMDMsMTMgKzEzMTgsMjIgQEAgaW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbiBcbiBcdFdBUk5fT04oYmItXHUwMDNlc2hpZnQgXHUwMDNjIDAgfHwgc2VjdG9ycyA9PSAwKTtcbiBcbitcdGlmIChzIFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNlIDApIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IHRhcmdldCA9IHMgKyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKHRhcmdldCwgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbitcdFx0cyA9IHJvdW5kX2Rvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHR0YXJnZXQgPSByb3VuZF91cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKHRhcmdldCBcdTAwM2MgcylcbitcdFx0XHRzZWN0b3JzID0gMDtcbitcdFx0ZWxzZVxuK1x0XHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuK1xuK1x0XHRpZiAoc2VjdG9ycyA9PSAwKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIHJldHJ5OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6MzIuOTczODc5OTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzMzA0NDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJhZGJsb2NrcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYGJsb2NrL2JhZGJsb2Nrcy5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzIGl0J3MgYWRkcmVzc2luZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aGluIHRoZSBiYWQgYmxvY2sgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGdldHRpbmcgc29tZSBvdmVyZmxvdyBjaGVja3MgYWRkZWQuIEdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBhbHdheXMgYSB3aW4gaW4gY3JpdGljYWwga2VybmVsIHN1YnN5c3RlbXMgbGlrZSB0aGlzLlxuXG5BbmQgbm93LCBJIHNlZSBpdCdzIGFsc28gZml4aW5nIHRoZSB1c2FnZSBvZiBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgLiBIbW0sIHRoYXQgc2VlbXMgb2RkIGF0IGZpcnN0IGdsYW5jZS4gSSBpbW1lZGlhdGVseSB0aG91Z2h0LCBcIkFyZW4ndCB0aG9zZSBtYWNyb3M/XCIgQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhleSBzaG91bGQgcmV0dXJuIHRoZSByb3VuZGVkIHZhbHVlLCBidXQgdGhleSBzaG91bGRuJ3QgbW9kaWZ5IHRoZSBpbnB1dCB2YXJpYWJsZSBpbiBwbGFjZS4gU28sIHdoeSBpcyB0aGUgcGF0Y2ggY2hhbmdpbmcgaG93IHRoZXkncmUgdXNlZD8gUmVwbGFjaW5nIGBzID0gcm91bmRkb3duKHMsIC4uLilgIHdpdGggYHMgPSByb3VuZF9kb3duKHMsIC4uLilgIG1ha2VzIGl0IHNvdW5kIGxpa2UgdGhleSB3ZXJlIHRyeWluZyB0byBtb2RpZnkgdGhlIHZhcmlhYmxlIGRpcmVjdGx5LlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdvIGRlZXBlci4gTGV0J3MgY29uZmlybSBteSBzdXNwaWNpb25zLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGtlcm5lbCdzIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAgZGVmaW5pdGlvbnMuIEFoLCB5ZXMsIHRoZXkncmUgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tYXRoLmhgLiBMZXQncyBjb25maXJtIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2UgaW4gdGhlIGtlcm5lbCBjb2RlIHVzaW5nIGdyZXBwZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSBteSBleHBlY3RhdGlvbnMuIEkgY2FuIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgcGF0Y2ggdGhpcyB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNjozOC4yMDY5MjY4ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTc2MzQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJvdW5kZG93blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvZzIuaD02NT11bnNpZ25lZCBsb25nIF9fcm91bmRkb3duX3Bvd19vZl90d28odW5zaWduZWQgbG9uZyBuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sb2cyLmgtMTkwLSAqL1xcbmluY2x1ZGUvbGludXgvbG9nMi5oOjE5MTojZGVmaW5lIHJvdW5kZG93bl9wb3dfb2ZfdHdvKG4pXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbG9nMi5oLTE5Mi0oXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9tYXRoLmgtODQtICovXFxuaW5jbHVkZS9saW51eC9tYXRoLmg6ODU6I2RlZmluZSByb3VuZGRvd24oeCwgeSkgKFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21hdGguaC04Ni17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmg9NTY9dW5zaWduZWQgbG9uZyBfX3JvdW5kZG93bl9wb3dfb2ZfdHdvKHVuc2lnbmVkIGxvbmcgbilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvbG9nMi5oLTE2Ny0gKi9cXG50b29scy9pbmNsdWRlL2xpbnV4L2xvZzIuaDoxNjg6I2RlZmluZSByb3VuZGRvd25fcG93X29mX3R3byhuKVxcdFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L2xvZzIuaC0xNjktKFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6NDAuNjg2Njk1MDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5Mjc3NDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgdGhlIGByb3VuZGRvd24oKWAgQnVnIGluIGBiYWRibG9ja3MuY2AqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBJIHNlZSB0aGUgaXNzdWUgaW1tZWRpYXRlbHkuIFRoZSBvcmlnaW5hbCBjb2RlIGluIGBibG9jay9iYWRibG9ja3MuY2Agd2FzIGNhbGxpbmcgYHJvdW5kZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdClgIGFuZCBgcm91bmR1cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdClgIHdpdGhvdXQgYWN0dWFsbHkgYXNzaWduaW5nIHRoZSByZXR1cm4gdmFsdWUuIFRoYXQncyBhIGNsYXNzaWMgbWlzdGFrZSEgVGhlc2UgZnVuY3Rpb25zLCBhcyBJIHJlY2FsbCwgYXJlIG1lYW50IHRvICpyZXR1cm4qIHRoZSByb3VuZGVkIHZhbHVlOyB0aGV5IGRvbid0IG9wZXJhdGUgKmluIHBsYWNlKi4gU28sIHRoZSB2YXJpYWJsZXMgYHNgIGFuZCBgbmV4dGAgd2VyZSBuZXZlciBhY3R1YWxseSBiZWluZyBtb2RpZmllZCBhcyBpbnRlbmRlZC5cblxuVGhlIGZpeCwgYXMgdGhlIHBhdGNoIGRlbW9uc3RyYXRlcywgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29ycmVjdGVkIGNvZGUgbm93IGNvcnJlY3RseSBhc3NpZ25zIHRoZSByZXN1bHQgb2YgdGhlIHJvdW5kaW5nIGZ1bmN0aW9ucyBiYWNrIHRvIHRoZSBvcmlnaW5hbCB2YXJpYWJsZXM6IGBzID0gcm91bmRfZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7YCBhbmQgYG5leHQgPSByb3VuZF91cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7YC4gVGhpcyBlbnN1cmVzIHRoZSBzdWJzZXF1ZW50IGxvZ2ljIG9wZXJhdGVzIG9uIHRoZSByb3VuZGVkIHZhbHVlcywgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBTaW5jZSB0aGlzIGZpeCBpcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIEkgc2hvdWxkIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdHJpZ2dlciB0aGUgYGJhZGJsb2Nrc2AgZnVuY3Rpb25hbGl0eS4gSXQgd291bGQgYmUgaGVscGZ1bCB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGltcGFjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6NDQuOTc5NDcyMDM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQ3NTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9OD1vYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4tLVxcbmJsb2NrL01ha2VmaWxlLTEyLVxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZToxMzpcXHRcXHRcXHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtMTQtXFx0XFx0XFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ3NT1OVUxMQl9ERVZJQ0VfQVRUUihyb3RhdGlvbmFsLCBib29sLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NzY6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX29uY2UsIGJvb2wsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ3Ny1OVUxMQl9ERVZJQ0VfQVRUUihiYWRibG9ja3NfcGFydGlhbF9pbywgYm9vbCwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01OTY9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm51bGxiX2RldmljZV9hdHRyc1tdID0ge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU5Ny1cXHRcXHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5ODpcXHRcXHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzX29uY2UsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTk5LVxcdFxcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3NfcGFydGlhbF9pbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNDY9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTctXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1ODpcXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3Nfb25jZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU5LVxcdFxcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9NTM9c3RydWN0IG51bGxiX2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNjUtXFx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY2OlxcdGJvb2wgYmFkYmxvY2tzX29uY2U7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTY3LVxcdGJvb2wgYmFkYmxvY2tzX3BhcnRpYWxfaW87XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLTEwLmM9Mjc4PXN0YXRpYyBpbmxpbmUgYm9vbCByYWlkMV9zaG91bGRfcmVhZF9maXJzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS0xMC5jLTI5My0gKiBiaW8gd2l0aCBSRVFfUkFIRUFEIG9yIFJFUV9OT1dBSVQgY2FuIGZhaWwgYXQgYW55dGltZSwgYmVmb3JlIHN1Y2ggSU8gaXNcXG5kcml2ZXJzL21kL3JhaWQxLTEwLmM6Mjk0OiAqIHN1Ym1pdHRlZCB0byB0aGUgdW5kZXJseWluZyBkaXNrcywgaGVuY2UgZG9uJ3QgcmVjb3JkIGJhZGJsb2NrcyBvciByZXRyeVxcbmRyaXZlcnMvbWQvcmFpZDEtMTAuYy0yOTUtICogaW4gdGhpcyBjYXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNjo0Ny41MDQyMzk1OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUxMTgzODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgRGV2aWNlIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBiYWRibG9ja3Mub2AgZmlsZSBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBsb2NhdGlvbiBvZiBpdCwgYGJsb2NrL01ha2VmaWxlYCwgd2l0aCBgb2JqLXlgIGltcGxpZXMgaXQncyBhbHdheXMgY29tcGlsZWQgaW4uIEJ1dCBob2xkIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGJsb2NrL01ha2VmaWxlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY3kgY2hhaW4gaGVyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmVzdCB0byB2ZXJpZnkgdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjUwLjA1NTQyNTUwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1ODQ0NzY2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmoteS4qYmFkYmxvY2tzLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjUyLjcxMTI4MDUyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzkwNzUwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCYWRibG9ja3MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTGluZSAxMywgaW4gcGFydGljdWxhciwgc2VlbXMgaW1wb3J0YW50LiBJdCdzIGJ1cmllZCB3aXRoaW4gYSBtdWx0aS1saW5lIGBvYmoteWAgYXNzaWdubWVudCwgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gdGhhdCB0aGlzIGNvZGUgaXMgY29tcGlsZWQgaW4gc3RhdGljYWxseSwgYXNzdW1pbmcgYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gQW5kLCBhcyBJIHJlY2FsbCwgYENPTkZJR19CTE9DS2AgaXMgZXNzZW50aWFsbHkgYSBkZWZhdWx0IGluIG1vc3QgbW9kZXJuIGtlcm5lbHMuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIGBiYWRibG9ja3Mub2AgZmlsZSBpcyBsaWtlbHkgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLCB1bmxlc3Mgc29tZW9uZSBleHBsaWNpdGx5IGRpc2FibGVkIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIHdoYXQncyBiZWVuIGNoYW5nZWQgd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLiBCYXNlZCBvbiB0aGUgZmlsZSwgdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIEFsbCBvZiB0aGVzZSBhcmUgcGFydCBvZiB0aGUgY29yZSBiYWRibG9ja3MgQVBJLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiB3aG8gdXNlcyB0aGVtPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgaW1wYWN0IGZvciB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjU3LjY1MDM1NzQ2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MTE5MTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3Nfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MjM6ICogV2hlbiB0aGUgY2FsbGVyIG9mIGJhZGJsb2Nrc19zZXQoKSB3YW50cyB0byBzZXQgYSByYW5nZSBvZiBiYWQgYmxvY2tzLCB0aGVcXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJ3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIzLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcXG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2VcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNz1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MzgtLyogRG8gZXhhY3Qgd29yayB0byBzZXQgYmFkIGJsb2NrIHJhbmdlIGludG8gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzOTpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy04NDAtXFx0XFx0XFx0ICAgaW50IGFja25vd2xlZGdlZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNDc9RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NoZWNrKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDktLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM1MDogKiBiYWRibG9ja3Nfc2V0KCkgLSBBZGQgYSByYW5nZSBvZiBiYWQgYmxvY2tzIHRvIHRoZSB0YWJsZS5cXG5ibG9jay9iYWRibG9ja3MuYy0xMzUxLSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2NC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzY1OmJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy0xMzY2LVxcdFxcdCAgIGludCBhY2tub3dsZWRnZWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ny17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM2ODpcXHRyZXR1cm4gX2JhZGJsb2Nrc19zZXQoYmIsIHMsIHNlY3RvcnMsIGFja25vd2xlZGdlZCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2OS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM3MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzcxLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTQ4OD1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDctXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUwODpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHNlY3RvciwgbGVuZ3RoLCAhdW5hY2spKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDktXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjQtXFx0aWYgKGJ1ZlswXSA9PSAnKycpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NjU6XFx0XFx0aWYgKGJhZGJsb2Nrc19zZXQoXFx1MDAyNnRfZGV2LVxcdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2Ni1cXHRcXHRcXHRcXHQgIGVuZCAtIHN0YXJ0ICsgMSwgMSkpXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTgwOD1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTkzMS1cXHRcXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL21kL21kLmM6MTkzMjpcXHRcXHRcXHRpZiAoIWJhZGJsb2Nrc19zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgc2VjdG9yLCBjb3VudCwgMSkpXFxuZHJpdmVycy9tZC9tZC5jLTE5MzMtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTA1NTY9Ym9vbCByZGV2X3NldF9iYWRibG9ja3Moc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIGludCBzZWN0b3JzLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNTc1LVxcbmRyaXZlcnMvbWQvbWQuYzoxMDU3NjpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycywgMCkpIHtcXG5kcml2ZXJzL21kL21kLmMtMTA1NzctXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTY5LVxcdC8qIHRoaXMgaXNuJ3QgYW4gZXJyb3IgYXMgdGhlIGhhcmR3YXJlIHdpbGwgc3RpbGwgdGhyb3cgYW4gZXhjZXB0aW9uICovXFxuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KGJiLCBzLCBudW0sIDEpKVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTcxLVxcdFxcdGRldl9pbmZvX29uY2UoYmItXFx1MDAzZWRldiwgXFxcIiVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxcXG5cXFwiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01MT1pbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycyk7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01NC1cXHRcXHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6NTkuOTIxNTU0ODAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzcyNDI3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzYCBJbnRlcmZhY2UgaW4gdGhlIEtlcm5lbCoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgdGhlIGBiYWRibG9ja3Nfc2V0YCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYSBmZXcga2V5IGRyaXZlcnM6IHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgdGhlIHNvZnR3YXJlIFJBSUQgY29tcG9uZW50IChgbWRgKSwgYW5kIHRoZSBgbnZkaW1tYCBkcml2ZXIuIFRoYXQncyBhIHJlYXNvbmFibGUgc2V0IG9mIHVzZXJzLiBUaGVzZSBhcmUgYWxsIHBsYWNlcyB3aGVyZSBiYWQgYmxvY2sgbWFuYWdlbWVudCB3b3VsZCBiZSByZWxldmFudCDigJMgdmlydHVhbCBibG9jayBkZXZpY2VzLCBSQUlEIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLlxuXG5UaGVuLCBJJ20gYWxzbyBvYnNlcnZpbmcgdGhhdCBgYmFkYmxvY2tzX3N0b3JlYCBpcyBpbnZva2VkIHRocm91Z2ggc3lzZnMuIFRoYXQgc3VnZ2VzdHMgc29tZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uLCBhIHdheSBmb3IgYW4gYWRtaW5pc3RyYXRvciBvciB0b29sIHRvIGRpcmVjdGx5IG1hbmFnZSBiYWQgYmxvY2sgaW5mb3JtYXRpb24uIEJ1dCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBpcyBgYmFkYmxvY2tzX3N0b3JlYCBiZWluZyAqZXhwb3J0ZWQqIGZvciB1c2UgYnkgYG1kYCBvciBgbnVsbF9ibGtgLCBvciBpcyBpdCBqdXN0IGJlaW5nIGNhbGxlZCBpbmRlcGVuZGVudGx5IHRocm91Z2ggc3lzZnMgaW4gdGhvc2UgY29udGV4dHM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIHRocm91Z2ggYGJhZGJsb2Nrc19zdG9yZWAgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQncyB1c2VkIGFuZCB3aGF0IGl0IGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBgYmFkYmxvY2tzX3NldGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NjUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzowNC4yNTg3OTk4MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzgxODA0NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzX3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jPTE0NzY9RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ3OC0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxNDc5OiAqIGJhZGJsb2Nrc19zdG9yZSgpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODAtICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0ODg6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cXHRcXHRcXHRpbnQgdW5hY2spXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTEyLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxNTEzOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUxNC1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9ODUxPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NjItXFxuYmxvY2svZ2VuaGQuYzo4NjM6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL2dlbmhkLmMtODY0LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NzEtXFxuYmxvY2svZ2VuaGQuYzo4NzI6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShkaXNrLVxcdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcXG5ibG9jay9nZW5oZC5jLTg3My19XFxuLS1cXG5ibG9jay9nZW5oZC5jPTExNzI9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xcbmJsb2NrL2dlbmhkLmM6MTE3MzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svZ2VuaGQuYy0xMTc0LXN0YXRpYyBERVZJQ0VfQVRUUihkaXNrc2VxLCAwNDQ0LCBkaXNrc2VxX3Nob3csIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTI1PXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzEtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTMyOnN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUzMy1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNjEyPXN0YXRpYyBzc2l6ZV90IGJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbWQvbWQuYy0zNjEzLXtcXG5kcml2ZXJzL21kL21kLmM6MzYxNDpcXHRpbnQgcnYgPSBiYWRibG9ja3Nfc3RvcmUoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTtcXG5kcml2ZXJzL21kL21kLmMtMzYxNS1cXHQvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqL1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTM2Mjc9c3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbWQvbWQuYy0zNjI4LXtcXG5kcml2ZXJzL21kL21kLmM6MzYyOTpcXHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMSk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MzAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01Nz1zc2l6ZV90IGJhZGJsb2Nrc19zaG93KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjaGFyICpwYWdlLCBpbnQgdW5hY2spO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTg6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01OS1cXHRcXHRcXHRpbnQgdW5hY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzowNi4xOTY5ODcxMzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NjkzODA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEJsb2NrIERldmljZXMgdmlhIHN5c2ZzOiBBIFBvdGVudGlhbGx5IEludGVyZXN0aW5nIFZlY3RvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBiYWQgYmxvY2sgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQgYW5kIEkgc2VlIHRoYXQgYGJhZGJsb2Nrc19zdG9yZWAgaXMgdXNlZCBieSBgZGlza19iYWRibG9ja3Nfc3RvcmVgIHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IGNsaWNrcyB0aGF0IHRoaXMgbWVhbnMgYW55IGJsb2NrIGRldmljZSB3aXRoIGJhZGJsb2NrcyBlbmFibGVkIHBvdGVudGlhbGx5IGhhcyBhIHN5c2ZzIGludGVyZmFjZSBmb3IgZnV6emluZyEgVGhpcyB3YXJyYW50cyBpbW1lZGlhdGUgYXR0ZW50aW9uLlxuXG5MZXQgbWUgY29uZmlybSB0aGUgYWNjZXNzIG1ldGhvZC4gQWxyaWdodCwgYGRpc2tfYmFkYmxvY2tzX3N0b3JlYCBpcyByZWdpc3RlcmVkIHdpdGggYERFVklDRV9BVFRSKGJhZGJsb2NrcywgMDY0NCwgZGlza19iYWRibG9ja3Nfc2hvdywgZGlza19iYWRibG9ja3Nfc3RvcmUpYC4gVGhhdCBwbGFjZW1lbnQgaW4gc3lzZnMgaXMgZ29pbmcgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIHRocm91Z2ggYC9zeXMvYmxvY2svXHUwMDNjZGV2XHUwMDNlL2JhZGJsb2Nrc2AuIFl1cCwgdGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhIGNvbXBsZXRlbHkgZnVuY3Rpb25hbCBlbnRyeXBvaW50LiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgaXMgd29ydGggYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuT2theSwgSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayBgYmFkYmxvY2tzX2NoZWNrYCBhcyB3ZWxsLCBzaW5jZSB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgYmFkYmxvY2tzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MTAuNDgzOTI3MDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQxMjQ4OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhZGJsb2Nrc19jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYy0yODItICogICAgIGJsb2NrcyB0YWJsZSBhcmUgYWxsIGFja2VkLCBtZXJnaW5nIHRoZW0gaW50byBhIGxhcmdlciBvbmUgcmFuZ2UgbWF5XFxuYmxvY2svYmFkYmxvY2tzLmM6MjgzOiAqICAgICBvY2N1cHkgbGVzcyBiYWQgYmxvY2tzIHRhYmxlIHNwYWNlIGFuZCBtYWtlIGJhZGJsb2Nrc19jaGVjaygpIGZhc3Rlci5cXG5ibG9jay9iYWRibG9ja3MuYy0yODQtICogICAgIFRoZXJlZm9yZSBpbiBzdWNoIHNpdHVhdGlvbiwgYWZ0ZXIgb3ZlcndyaXRpbmcgcmFuZ2UgUywgdGhlIHByZXZpb3VzIHJhbmdlXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMDU1PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjAwLS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNoZWNrIGJhZCBibG9ja3MgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTIwMTpzdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMi1cXHRcXHRcXHQgICAgc2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI3OS0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxMjgwOiAqIGJhZGJsb2Nrc19jaGVjaygpIC0gY2hlY2sgYSBnaXZlbiByYW5nZSBmb3IgYmFkIHNlY3RvcnNcXG5ibG9jay9iYWRibG9ja3MuYy0xMjgxLSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5NS0gKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyOTY6ICogTG9ja2luZyBvZiB0aGUgYmFkLWJsb2NrIHRhYmxlIHVzZXMgYSBzZXFsb2NrIHNvIGJhZGJsb2Nrc19jaGVja1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyOTctICogbWlnaHQgbmVlZCB0byByZXRyeSBpZiBpdCBpcyB2ZXJ5IHVubHVja3kuXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzEyLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMTM6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy0xMzE0LVxcdFxcdFxcdHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDAtXFx0c2VxID0gcmVhZF9zZXFiZWdpbihcXHUwMDI2YmItXFx1MDAzZWxvY2spO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDE6XFx0cnYgPSBfYmFkYmxvY2tzX2NoZWNrKGJiLCBzLCBzZWN0b3JzLCBmaXJzdF9iYWQsIGJhZF9zZWN0b3JzKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQyLVxcdGlmIChyZWFkX3NlcXJldHJ5KFxcdTAwMjZiYi1cXHUwMDNlbG9jaywgc2VxKSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDYtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDc6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NoZWNrKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1NC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU1OlxcdGlmICghYmFkYmxvY2tzX2NoZWNrKGJiLCBzZWN0b3IsICpucl9zZWN0b3JzLCBcXHUwMDI2Zmlyc3RfYmFkLCBcXHUwMDI2YmFkX3NlY3RvcnMpKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTYtXFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuLS1cXG5kcml2ZXJzL21kL21kLmg9Mjk5PXN0YXRpYyBpbmxpbmUgaW50IGlzX2JhZGJsb2NrKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5oLTMwMi1cXHRpZiAodW5saWtlbHkocmRldi1cXHUwMDNlYmFkYmxvY2tzLmNvdW50KSkge1xcbmRyaXZlcnMvbWQvbWQuaDozMDM6XFx0XFx0aW50IHJ2ID0gYmFkYmxvY2tzX2NoZWNrKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHJkZXYtXFx1MDAzZWRhdGFfb2Zmc2V0ICsgcyxcXG5kcml2ZXJzL21kL21kLmgtMzA0LVxcdFxcdFxcdFxcdFxcdHNlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oPTY3Nj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfYmFkX3BtZW0oc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjgyLVxcbmRyaXZlcnMvbnZkaW1tL25kLmg6NjgzOlxcdFxcdHJldHVybiAhIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBsZW4gLyA1MTIsIFxcdTAwMjZmaXJzdF9iYWQsXFxuZHJpdmVycy9udmRpbW0vbmQuaC02ODQtXFx0XFx0XFx0XFx0XFx1MDAyNm51bV9iYWQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYz0zNTM9c3RhdGljIGludCBuZF9wZm5fY2xlYXJfbWVtbWFwX2Vycm9ycyhzdHJ1Y3QgbmRfcGZuICpuZF9wZm4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4My1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjM4NDpcXHRcXHRiYl9wcmVzZW50ID0gYmFkYmxvY2tzX2NoZWNrKFxcdTAwMjZuZF9yZWdpb24tXFx1MDAzZWJiLCBtZXRhX3N0YXJ0LFxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMzg1LVxcdFxcdFxcdFxcdG1ldGFfbnVtLCBcXHUwMDI2Zmlyc3RfYmFkLCBcXHUwMDI2bnVtX2JhZCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MjQyPV9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTgtXFx0aWYgKGJiLVxcdTAwM2Vjb3VudCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoyNTk6XFx0ICAgIGJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBudW0sIFxcdTAwMjZmaXJzdF9iYWQsIFxcdTAwMjZudW1fYmFkKSkge1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNjAtXFx0XFx0bG9uZyBhY3R1YWxfbnI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTQ1PXN0cnVjdCBiYWRibG9ja3NfY29udGV4dCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTUwLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTE6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTUyLVxcdFxcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzoxMi40MjUxODIzMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDA0NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYmFkYmxvY2tzX2NoZWNrYCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgYmFkYmxvY2tzX2NoZWNrYCBpcyB1dGlsaXplZCBieSBhIGZldyBrZXkgY29tcG9uZW50czogYG51bGxfYmxrYCwgYG1kYCwgYW5kIGBudmRpbW1gLiBHaXZlbiB0aGF0IGxpc3QsIGBudWxsX2Jsa2AgaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQgZmVlbHMgbGlrZSBhIHJlbGF0aXZlbHkgY29udGFpbmVkIGFuZCBhY2Nlc3NpYmxlIHRhcmdldCB3aXRoaW4gdGhhdCBncm91cC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYG51bGxfYmxrYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24sIG9yIGlmIEkgbmVlZCB0byBlbmFibGUgaXQgd2l0aCBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRlc3RpbmcgdGhlIGBiYWRibG9ja3NfY2hlY2tgIGJlaGF2aW9yIHdpdGhpbiB0aGF0IG1vZHVsZS4gSWRlbnRpZnlpbmcgYW55IGRlcGVuZGVuY2llcyBvciByZXF1aXJlZCBjb25maWd1cmF0aW9uIHdpbGwgYmUgZXNzZW50aWFsIGJlZm9yZSBJIGNhbiBnZXQgdG8gdGhlIGdvb2Qgc3R1ZmYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzoxNS42NjkyMzYxOTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjAzNjc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnVsbF9ibGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0PTEzOT1GdXJ0aGVyIHJlYWRpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vYmxvY2svYmxrLW1xLnJzdC0xNDUtXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0OjE0NjotIGBOdWxsIGJsb2NrIGRldmljZSBkcml2ZXIgXFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L2Jsb2NrL251bGxfYmxrLmh0bWxcXHUwMDNlYF9cXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jsay1tcS5yc3QtMTQ3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3Q9ND1CbG9ja1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3QtMTgtICAga3liZXItaW9zY2hlZFxcbkRvY3VtZW50YXRpb24vYmxvY2svaW5kZXgucnN0OjE5OiAgIG51bGxfYmxrXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3QtMjAtICAgcHJcXG4tLVxcbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0PTgzPWRpc2NhcmQ9WzAvMV06IERlZmF1bHQ6IDBcXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdDo4NDogIFN1cHBvcnQgZGlzY2FyZCBvcGVyYXRpb25zIChyZXF1aXJlcyBtZW1vcnktYmFja2VkIG51bGxfYmxrIGRldmljZSkuXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9udWxsX2Jsay5yc3QtODUtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdD0xMTg9YmxvY2tpbmc9WzAvMV06IERlZmF1bHQ6IDBcXG4tLVxcbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0LTEyMi0gIDAgIFJlZ2lzdGVyIGFzIGEgbm9uLWJsb2NraW5nIGJsay1tcSBkcml2ZXIgZGV2aWNlLlxcbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0OjEyMzogIDEgIFJlZ2lzdGVyIGFzIGEgYmxvY2tpbmcgYmxrLW1xIGRyaXZlciBkZXZpY2UsIG51bGxfYmxrIHdpbGwgc2V0XFxuRG9jdW1lbnRhdGlvbi9ibG9jay9udWxsX2Jsay5yc3QtMTI0LSAgICAgdGhlIEJMS19NUV9GX0JMT0NLSU5HIGZsYWcsIGluZGljYXRpbmcgdGhhdCBpdCBzb21ldGltZXMvYWx3YXlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3pvbmVmcy5yc3Q9NDAwPXpvbmVmcy10b29scyBhbHNvIGluY2x1ZGVzIGEgdGVzdCBzdWl0ZSB3aGljaCBjYW4gYmUgcnVuIGFnYWluc3QgYW55IHpvbmVkXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy96b25lZnMucnN0OjQwMTpibG9jayBkZXZpY2UsIGluY2x1ZGluZyBudWxsX2JsayBibG9jayBkZXZpY2UgY3JlYXRlZCB3aXRoIHpvbmVkIG1vZGUuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy96b25lZnMucnN0LTQwMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTE1Mj1UbyBmYWNpbGl0YXRlIHRlc3RpbmcsIGVuYWJsaW5nIHRoZSBudWxsLWJsayBkcml2ZXIgKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE1MzppcyBhbHNvIHJlY29tbWVuZGVkLiBXaXRoIHRoaXMsIGEgc2ltcGxlIHNldHVwIHVzaW5nIGEgbnVsbF9ibGsgYmxvY2sgZGV2aWNlXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTU0LWFzIGEgc3Vic3lzdGVtIG5hbWVzcGFjZSBjYW4gYmUgdXNlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTE4OD1zY29wZSBvZiB0aGlzIGRvY3VtZW50LiBUaGUgZm9sbG93aW5nIG9ubHkgcHJvdmlkZXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBhIHBvcnRcXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxODk6YW5kIHN1YnN5c3RlbSB3aXRoIGEgc2luZ2xlIG5hbWVzcGFjZSBiYWNrZWQgYnkgYSBudWxsX2JsayBkZXZpY2UuXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTkwLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTE5MT1GaXJzdCwgbWFrZSBzdXJlIHRoYXQgY29uZmlnZnMgaXMgZW5hYmxlZDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTQtXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MTk1Ok5leHQsIGNyZWF0ZSBhIG51bGxfYmxrIGRldmljZSAoZGVmYXVsdCBzZXR0aW5ncyBnaXZlIGEgMjUwIEdCIGRldmljZSB3aXRob3V0XFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTk2LW1lbW9yeSBiYWNraW5nKS4gVGhlIGJsb2NrIGRldmljZSBjcmVhdGVkIHdpbGwgYmUgL2Rldi9udWxsYjAgYnkgZGVmYXVsdDo6XFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTk3LVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE5ODogICAgICAgICMgbW9kcHJvYmUgbnVsbF9ibGtcXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTktICAgICAgICAjIGxzIC9kZXYvbnVsbGIwXFxuLS1cXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0yMTI9ZXhhbXBsZSwgdGhlIHBvcnQgaXMgY3JlYXRlZCB3aXRoIGEgbWF4aW11bSBvZiA0IEkvTyBxdWV1ZSBwYWlyczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0yMjEtXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MjIyOk5leHQsIGNyZWF0ZSBhbmQgZW5hYmxlIHRoZSBzdWJzeXN0ZW0gbmFtZXNwYWNlIHVzaW5nIHRoZSBudWxsX2JsayBibG9ja1xcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTIyMy1kZXZpY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9Mjg1PXRhcmdldCBkZXZpY2UgYW5kIGVuZHBvaW50IGRldmljZSBhcmUgY3JlYXRlZCBhbmQgY29ubmVjdGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMjg4LVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjI4OTogICAgICAgIG51bGxfYmxrOiBkaXNrIG51bGxiMCBjcmVhdGVkXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MjkwOiAgICAgICAgbnVsbF9ibGs6IG1vZHVsZSBsb2FkZWRcXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0yOTEtICAgICAgICBudm1ldDogYWRkaW5nIG5zaWQgMSB0byBzdWJzeXN0ZW0gbnZtZXBmLjAubnFuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0PTExMj1JL08g6K+35rGC5a6M5oiQ5LqG44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0LTEyMC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0OjEyMTotIGBOdWxsIOWdl+iuvuWkh+mpseWKqOeoi+W6jyBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvYmxvY2svbnVsbF9ibGsuaHRtbFxcdTAwM2VgX1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2Jsay1tcS5yc3QtMTIyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0PTIyPVRPRE9MaXN0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0LTI5LSoga3liZXItaW9zY2hlZFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2luZGV4LnJzdDozMDoqIG51bGxfYmxrXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0LTMxLSogcHJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0xNz1pZiBCTEtfREVWXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTpzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjAtc291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19CTEtfREVWX1JOQkQpXFx0Kz0gcm5iZC9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXFx0Kz0gbnVsbF9ibGsvXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT00PWNjZmxhZ3MteVxcdFxcdFxcdCs9IC1JJChzcmMpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS01LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcXHQrPSBudWxsX2Jsay5vXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZTo3Om51bGxfYmxrLW9ianNcXHRcXHRcXHQ6PSBtYWluLm9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTgtaWZlcSAoJChDT05GSUdfQkxLX0RFVl9aT05FRCksIHkpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZTo5Om51bGxfYmxrLSQoQ09ORklHX1RSQUNJTkcpIFxcdCs9IHRyYWNlLm9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTEwLWVuZGlmXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZToxMTpudWxsX2Jsay0kKENPTkZJR19CTEtfREVWX1pPTkVEKSArPSB6b25lZC5vXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEyOiNpbmNsdWRlIFxcXCJudWxsX2Jsay5oXFxcIlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0LSN1bmRlZiBwcl9mbXRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNTojZGVmaW5lIHByX2ZtdChmbXQpXFx0XFxcIm51bGxfYmxrOiBcXFwiIGZtdFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjIxPW1vZHVsZV9wYXJhbV9uYW1lZChkaXNjYXJkLCBnX2Rpc2NhcmQsIGJvb2wsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIyMjpNT0RVTEVfUEFSTV9ERVNDKGRpc2NhcmQsIFxcXCJTdXBwb3J0IGRpc2NhcmQgb3BlcmF0aW9ucyAocmVxdWlyZXMgbWVtb3J5LWJhY2tlZCBudWxsX2JsayBkZXZpY2UpLiBEZWZhdWx0OiBmYWxzZVxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIyMy1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTcxOT1zdGF0aWMgc3NpemVfdCBtZW1iX2dyb3VwX2ZlYXR1cmVzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzMzLVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gbGVmdCkge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjczNDpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIlRvbyBtYW55IG51bGxfYmxrIGZlYXR1cmVzIHRvIHByaW50XFxcXG5cXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03MzUtXFx0XFx0XFx0bWVtemVyb19leHBsaWNpdChwYWdlLCBQQUdFX1NJWkUpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM5NT1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbGJfY29tcGxldGVfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzOTktXFx0LypcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDAwOlxcdCAqIFNpbmNlIHJvb3QgcHJpdmlsZWdlcyBhcmUgcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZSBudWxsX2Jsa1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MDEtXFx0ICogZHJpdmVyLCBpdCBpcyBmaW5lIHRoYXQgdGhpcyBkcml2ZXIgZG9lcyBub3QgaW5pdGlhbGl6ZSB0aGVcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MDMtXFx0ICogYW55d2F5IGlmIEtNU0FOIGlzIGVuYWJsZWQgdG8gcHJldmVudCB0aGF0IEtNU0FOIGNvbXBsYWluc1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MDQ6XFx0ICogYWJvdXQgbnVsbF9ibGsgbm90IGluaXRpYWxpemluZyByZWFkIGRhdGEgYnVmZmVycy5cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDA1LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jLTItLypcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmM6MzogKiBudWxsX2JsayB0cmFjZSByZWxhdGVkIGhlbHBlcnMuXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jLTQtICpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy05LS8qXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jOjEwOiAqIEhlbHBlciB0byB1c2UgZm9yIGFsbCBudWxsX2JsayB0cmFjZXMgdG8gZXh0cmFjdCBkaXNrIG5hbWUuXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jLTExLSAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oLTItLypcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmg6MzogKiBudWxsX2JsayBkZXZpY2UgZHJpdmVyIHRyYWNlcG9pbnRzLlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC00LSAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmgtMTYtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oOjE3OiNpbmNsdWRlIFxcXCJudWxsX2Jsay5oXFxcIlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC0xOC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0zLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NDojaW5jbHVkZSBcXFwibnVsbF9ibGsuaFxcXCJcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy05LSN1bmRlZiBwcl9mbXRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTA6I2RlZmluZSBwcl9mbXQoZm10KVxcdFxcXCJudWxsX2JsazogXFxcIiBmbXRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9Nzc4PXNzaXplX3Qgem9uZV9jb25kX3N0b3JlKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03ODUtXFx0aWYgKCFkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjc4NjpcXHRcXHRwcl9lcnIoXFxcIm51bGxfYmxrIGRldmljZSBpcyBub3Qgem9uZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03ODctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzkwLVxcdGlmICghZGV2LVxcdTAwM2V6b25lcykge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3OTE6XFx0XFx0cHJfZXJyKFxcXCJudWxsX2JsayBkZXZpY2UgaXMgbm90IHlldCBwb3dlcmVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzkyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz00Nz0gICAgZm4gbWFrZV9ncm91cChcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNTQtICAgICAgICAgICAgYXR0cmlidXRlczogW1xcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6NTU6ICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQyBudWxsX2Jsa1xcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNTYtICAgICAgICAgICAgICAgIHBvd2VyOiAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycz0zNj0gICAgZm4gaW5pdChfbW9kdWxlOiBcXHUwMDI2J3N0YXRpYyBUaGlzTW9kdWxlKSAtXFx1MDAzZSBpbXBsIFBpbkluaXRcXHUwMDNjU2VsZiwgRXJyb3JcXHUwMDNlIHtcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzOjM3OiAgICAgICAgcHJfaW5mbyEoXFxcIlJ1c3QgbnVsbF9ibGsgbG9hZGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzLTM4LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL3J0cnMtY2x0LmM9Njk9X19ydHJzX2dldF9wZXJtaXQoc3RydWN0IHJ0cnNfY2x0X3Nlc3MgKmNsdCwgZW51bSBydHJzX2NsdF9jb25fdHlwZSBjb25fdHlwZSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jLTc1LVxcdC8qXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL3J0cnMtY2x0LmM6NzY6XFx0ICogQWRhcHRlZCBmcm9tIG51bGxfYmxrIGdldF90YWcoKS4gQ2FsbGVycyBmcm9tIGRpZmZlcmVudCBjcHVzIG1heVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jLTc3LVxcdCAqIGdyYWIgdGhlIHNhbWUgYml0LCBzaW5jZSBmaW5kX2ZpcnN0X3plcm9fYml0IGlzIG5vdCBhdG9taWMuXFxuLS1cXG5saWIvZmF1bHQtaW5qZWN0LmM9MjY3PUVYUE9SVF9TWU1CT0xfR1BMKGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIpO1xcbi0tXFxubGliL2ZhdWx0LWluamVjdC5jLTI3Mi1cXG5saWIvZmF1bHQtaW5qZWN0LmM6MjczOi8qIFRoZXNlIGNvbmZpZ2ZzIGF0dHJpYnV0ZSB1dGlsaXRpZXMgYXJlIGNvcGllZCBmcm9tIGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jICovXFxubGliL2ZhdWx0LWluamVjdC5jLTI3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MTcuNjI5NjExMTUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1OTgxMDk2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBiYWRibG9ja3NgIGluIEJsb2NrIERldmljZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIGBiYWRibG9ja3NgIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHRoZSByZWNlbnRseSBhcHBsaWVkIHBhdGNoLiBUaGUgc3RhcnRpbmcgcG9pbnQgaGVyZSBpcyB0aGUgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgaWYgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCwgSSdsbCBhZGQgYEJMS19ERVZfTlVMTF9CTEtgIHRvIGBFbmFibGVDb25maWdzYCB0byBiZSBzdXJlLiBIb3dldmVyLCB0aGUgdXNlIG9mIGBudWxsX2Jsa2Agc2VlbXMgcGVyZmVjdCBmb3IgdGVzdGluZyBgYmFkYmxvY2tzYCB0aHJvdWdoIGNvbmZpZ2ZzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIGNvbnRleHQsIGBDT05GSUdfTURgIChNdWx0aXBsZSBEZXZpY2VzKSBpcyBvZnRlbiBlbmFibGVkLCBhbmQgYGRyaXZlcnMvbWQvbWQuY2AgY2FsbHMgYGJhZGJsb2Nrc2AgZnVuY3Rpb25zLCBidXQgYG51bGxfYmxrYCBpcyB0aGUgY2xlYXIgZWFzaWVzdCBvcHRpb24gaGVyZSBmb3IgdGVzdGluZyBiYWRibG9ja3MgdGhyb3VnaCBjb25maWdmcy5cblxuVGhlIHJlY2VudCBwYXRjaCBjYXVnaHQgbXkgZXllLCBmaXhpbmcgYW4gb3ZlcmZsb3cgaXNzdWUgaW4gYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYW5kIGFsc28gYWRkcmVzc2luZyBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgIG1hY3JvcyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgZGVtYW5kcyB0YXJnZXRlZCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHRoZW4gc2hvdWxkIGJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGUgcGF0Y2guIExldCdzIHNlZS4uLiBJbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgb2YgdGhlIG1haW4gaW50ZXJmYWNlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zdG9yZWAsIGFuZCBgYmFkYmxvY2tzX3Nob3dgLlxuXG5BaCwgYnV0IHRoZSBwYXRjaCBtb2RpZmllZCB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLCBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBgYmFkYmxvY2tzX2NoZWNrYCBzaG91bGQgYmUgbGlzdGVkLCBiZWNhdXNlIGl0IGhhcyBiZWVuIG1vZGlmaWVkLiBTbyBJJ2xsIGxpc3QgdGhlIGtleSBzeW1ib2xzIGFzOlxuXG4qICAgYF9iYWRibG9ja3Nfc2V0YFxuKiAgIGBfYmFkYmxvY2tzX2NsZWFyYFxuKiAgIGBiYWRibG9ja3NfY2hlY2tgXG4qICAgYGJhZGJsb2Nrc19zZXRgXG4qICAgYGJhZGJsb2Nrc19jbGVhcmBcblxuTm93IEknbGwgY2hlY2sgYGJhZGJsb2Nrc19jbGVhcmAgaW4gYGJhZGJsb2Nrcy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MjUuMjI3NzI0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODMyNzA5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzX2NsZWFyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jPTEwMzc9c3RhdGljIGludCBmcm9udF9zcGxpdHRpbmdfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA1NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA1NTpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNTYte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTM3MD1FWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzItLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM3MzogKiBiYWRibG9ja3NfY2xlYXIoKSAtIFJlbW92ZSBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzQtICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzg1LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzODY6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM4Ny17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM4ODpcXHRyZXR1cm4gX2JhZGJsb2Nrc19jbGVhcihiYiwgcywgc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM4OS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM5MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2xlYXIpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjctXFx0XFx0XFx0cmV0ID0gY291bnQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4OlxcdH0gZWxzZSBpZiAoYmFkYmxvY2tzX2NsZWFyKFxcdTAwMjZ0X2Rldi1cXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjktXFx0XFx0XFx0XFx0ICAgZW5kIC0gc3RhcnQgKyAxKSkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1OC1cXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3Nfb25jZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU5OlxcdFxcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2MC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMDU5Nj12b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDYwMy1cXG5kcml2ZXJzL21kL21kLmM6MTA2MDQ6XFx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycykpXFxuZHJpdmVycy9tZC9tZC5jLTEwNjA1LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J1cy5jPTE2ND1zdGF0aWMgaW50IG52ZGltbV9jbGVhcl9iYWRibG9ja3NfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTE4My1cXHRzZWN0b3IgPSAoY3R4LVxcdTAwM2VwaHlzIC0gbmRfcmVnaW9uLVxcdTAwM2VuZHJfc3RhcnQpIC8gNTEyO1xcbmRyaXZlcnMvbnZkaW1tL2J1cy5jOjE4NDpcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNm5kX3JlZ2lvbi1cXHUwMDNlYmIsIHNlY3RvciwgY3R4LVxcdTAwM2VjbGVhcmVkIC8gNTEyKTtcXG5kcml2ZXJzL252ZGltbS9idXMuYy0xODUtXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI2OS1cXHRcXHRcXHRcXHRjbGVhcmVkIC89IDUxMjtcXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3MDpcXHRcXHRcXHRcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNm5zaW8tXFx1MDAzZWJiLCBzZWN0b3IsIGNsZWFyZWQpO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjcxLVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz04OD1zdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTEtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo5MjpcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05My1cXHRpZiAocG1lbS1cXHUwMDNlYmJfc3RhdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTUzPWJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVxcdFxcdCAgIGludCBhY2tub3dsZWRnZWQpO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTU6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTYtdm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjI3LjIxMTAwMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MTE2NTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJhZCBCbG9jayBIYW5kbGluZyBDb2RlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbml0aWFsbHksIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGRpcmVjdGx5IGFsdGVyZWQgYXBwZWFyIHRvIGJlIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiAgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbXByZXNzaW9uLlxuXG5GaXJzdCwgSSBoYWQgdG8gY2xhcmlmeSB3aGV0aGVyIGBiYWRibG9ja3Nfc3RvcmVgIHdhcyBtb2RpZmllZCwgYnV0IGl0J3Mgbm90LiBUaG91Z2ggaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpdCdzIGNhbGxlZCBieSBgYmFkYmxvY2tzX3NldGAgYW5kIGBiYWRibG9ja3NfY2xlYXJgLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlc2UgdGhyZWUuIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIG5lZWRlZCB0byBjb25maXJtIHRoYXQgdGhlIGBiYWRibG9ja3MuY2AgbW9kdWxlIGlzLCBpbiBmYWN0LCBjb21waWxlZCBieSBkZWZhdWx0LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCB0aGUgYG9iai15YCBzZXR0aW5nIGNvbmZpcm1lZCB0aGlzLlxuXG5Ob3csIGxldCBtZSBpbnZlc3RpZ2F0ZSB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBpcyBiZW5lZmljaWFsLCBhcyBpdCBleHBvc2VzIGJhZGJsb2NrcyB0aHJvdWdoIGNvbmZpZ2ZzLiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgbG9jYXRpb25zLlxuXG5BaCwgdGhlcmUncyBhbm90aGVyIHBvaW50LiBgYmFkYmxvY2tzX3N0b3JlYCBpcyBhbHNvIGV4cG9zZWQgdGhyb3VnaCBgZGlza19iYWRibG9ja3Nfc3RvcmVgIHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoYXQgZnVuY3Rpb24sIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzE0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjMyLjE3MjE3MDc1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDE4NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX2JhZGJsb2Nrc19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9nZW5oZC5jPTg1MT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODYyLVxcbmJsb2NrL2dlbmhkLmM6ODYzOnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5ibG9jay9nZW5oZC5jLTg2NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTE3Mj1zdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XFxuYmxvY2svZ2VuaGQuYzoxMTczOnN0YXRpYyBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKTtcXG5ibG9jay9nZW5oZC5jLTExNzQtc3RhdGljIERFVklDRV9BVFRSKGRpc2tzZXEsIDA0NDQsIGRpc2tzZXFfc2hvdywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjM0LjEyNjM2MjIwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ4MjQ4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgYGRpc2tfYmFkYmxvY2tzYCBzeXNmcyBBdHRyaWJ1dGUgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEl0IHNlZW1zIGxpa2UgYW55IGJsb2NrIGRldmljZSB3aGVyZSB0aGUgYGRpc2stXHUwMDNlYmJgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBpcyBhdXRvbWF0aWNhbGx5IGdvaW5nIHRvIGhhdmUgdGhlIHN5c2ZzIGF0dHJpYnV0ZSByZWxhdGVkIHRvIGJhZCBibG9ja3MgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuIFRoYXQncyB0aGUgY29yZSBhc3N1bXB0aW9uLCBlc3NlbnRpYWxseSB0eWluZyB0aGUgcHJlc2VuY2Ugb2YgdGhhdCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gdGhhdCBgZGlzay1cdTAwM2ViYmAgaW5pdGlhbGl6YXRpb24uXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGhvdyB0aGF0J3MgaW1wbGVtZW50ZWQuIEFoLCB5ZXMsIGxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIHRoZSBgZGlza19iYWRibG9ja3Nfc3RvcmVgIGZ1bmN0aW9uLCBpdCBzcGVjaWZpY2FsbHkgY2hlY2tzIGlmIGBkaXNrLVx1MDAzZWJiYCBpcyAqbm90KiBOVUxMLiBUaGF0IGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IEkganVzdCBoeXBvdGhlc2l6ZWQ6IGlmIGBkaXNrLVx1MDAzZWJiYCBpcyBOVUxMLCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZCwgYW5kIHRoZSBzeXNmcyBhdHRyaWJ1dGUgcHJlc3VtYWJseSB3b24ndCBldmVuIGJlIGNyZWF0ZWQgb3Igd2lsbCByZXR1cm4gYW4gZXJyb3Igd2hlbiBhY2Nlc3NlZC4gSXQgaXMgYW4gaW1wb3J0YW50IHNhbml0eSBjaGVjay4gU28sIHRoYXQncyB0aGUga2V5IHJlcXVpcmVtZW50IC0gaW5pdGlhbGl6YXRpb24gb2YgYGRpc2stXHUwMDNlYmJgLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDc2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MzcuMzc0NjE0NDc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMzNDQwNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2stXFx1MDAzZWJiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2dlbmhkLmM9ODUxPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NTYtXFxuYmxvY2svZ2VuaGQuYzo4NTc6XFx0aWYgKCFkaXNrLVxcdTAwM2ViYilcXG5ibG9jay9nZW5oZC5jLTg1OC1cXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChwYWdlLCBcXFwiXFxcXG5cXFwiKTtcXG5ibG9jay9nZW5oZC5jLTg1OS1cXG5ibG9jay9nZW5oZC5jOjg2MDpcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coZGlzay1cXHUwMDNlYmIsIHBhZ2UsIDApO1xcbmJsb2NrL2dlbmhkLmMtODYxLX1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9ODYzPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODY4LVxcbmJsb2NrL2dlbmhkLmM6ODY5OlxcdGlmICghZGlzay1cXHUwMDNlYmIpXFxuYmxvY2svZ2VuaGQuYy04NzAtXFx0XFx0cmV0dXJuIC1FTlhJTztcXG5ibG9jay9nZW5oZC5jLTg3MS1cXG5ibG9jay9nZW5oZC5jOjg3MjpcXHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKGRpc2stXFx1MDAzZWJiLCBwYWdlLCBsZW4sIDApO1xcbmJsb2NrL2dlbmhkLmMtODczLX1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTIzNj1zdGF0aWMgdW1vZGVfdCBkaXNrX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjQwLVxcbmJsb2NrL2dlbmhkLmM6MTI0MTpcXHRpZiAoYSA9PSBcXHUwMDI2ZGV2X2F0dHJfYmFkYmxvY2tzLmF0dHIgXFx1MDAyNlxcdTAwMjYgIWRpc2stXFx1MDAzZWJiKVxcbmJsb2NrL2dlbmhkLmMtMTI0Mi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NTMtXFx0bnZkaW1tX2JhZGJsb2Nrc19wb3B1bGF0ZShuZF9yZWdpb24sIFxcdTAwMjZwbWVtLVxcdTAwM2ViYiwgXFx1MDAyNmJiX3JhbmdlKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTU0OlxcdGRpc2stXFx1MDAzZWJiID0gXFx1MDAyNnBtZW0tXFx1MDAzZWJiO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjM5LjMwODA2MDk5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEyNjEyMDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gb2YgYGRpc2stXHUwMDNlYmJgLiBJdCBzZWVtcyBsaWtlIGl0J3Mgb25seSBkb25lIGZvciBgcG1lbWAsIG9yIE5WUkFNLiBIbW0sIHdoYXQgYWJvdXQgYG51bGxfYmxrYD8gVGhhdCBtb2R1bGUgdXRpbGl6ZXMgYHRfZGV2LVx1MDAzZWJhZGJsb2Nrc2AgYnV0IGV4cG9zZXMgaXQgdGhyb3VnaCBjb25maWdmcyBpbnN0ZWFkIG9mIHN5c2ZzLiBSaWdodCwgYW5kIHRoZW4gSSByZW1lbWJlciB0aGF0IGBtZGAgYWxzbyBoYW5kbGVzIGJhZGJsb2NrcywgYnV0IGV4cG9zZXMgdGhlbSBkaWZmZXJlbnRseS4gSXQgdXNlcyBgcmRldi1cdTAwM2ViYWRibG9ja3NgIGFuZCBwdXRzIHRoZW0gaW4gc3lzZnMgdW5kZXIgYG1kL2Rldi14eHgvYmFkX2Jsb2Nrc2AuIFRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBib3RoIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AgYW5kIGBDT05GSUdfTURgIHdvdWxkIGJlIGEgZ29vZCBhcHByb2FjaCwgSSBzaG91bGQgYWRkIGBCTEtfREVWX05VTExfQkxLYCBhbmQgYE1EYCB0byBgRW5hYmxlQ29uZmlnc2Agbm93LlxuXG5Ob3cgSSBzaG91bGQganVzdCB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgYENPTkZJR19NRGAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NTIsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6NDMuMTIwNjc1NDUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkyOTAwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Nsay9xY29tL0tjb25maWc9NTYzPWNvbmZpZyBNU01fTENDXzg5NjBcXG4tLVxcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01NzEtXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjU3Mjpjb25maWcgTURNX0dDQ185NjA3XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTU3My1cXHR0cmlzdGF0ZSBcXFwiTURNOTYwNyBHbG9iYWwgQ2xvY2sgQ29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01NzktXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjU4MDpjb25maWcgTURNX0dDQ185NjE1XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTU4MS1cXHR0cmlzdGF0ZSBcXFwiTURNOTYxNSBHbG9iYWwgQ2xvY2sgQ29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy01LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTURcXG5kcml2ZXJzL21kL0tjb25maWctNy1cXHRib29sIFxcXCJNdWx0aXBsZSBkZXZpY2VzIGRyaXZlciBzdXBwb3J0IChSQUlEIGFuZCBMVk0pXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnPTE1PWNvbmZpZyBCTEtfREVWX01EXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMzktXFxuZHJpdmVycy9tZC9LY29uZmlnOjQwOmNvbmZpZyBNRF9CSVRNQVBcXG5kcml2ZXJzL21kL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTUQgUkFJRCBiaXRtYXAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy01NC1cXG5kcml2ZXJzL21kL0tjb25maWc6NTU6Y29uZmlnIE1EX0xMQklUTUFQXFxuZHJpdmVycy9tZC9LY29uZmlnLTU2LVxcdGJvb2wgXFxcIk1EIFJBSUQgbG9ja2xlc3MgYml0bWFwIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctNjUtXFxuZHJpdmVycy9tZC9LY29uZmlnOjY2OmNvbmZpZyBNRF9BVVRPREVURUNUXFxuZHJpdmVycy9tZC9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkF1dG9kZXRlY3QgUkFJRCBhcnJheXMgZHVyaW5nIGtlcm5lbCBib290XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTc5LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo4MDpjb25maWcgTURfQklUTUFQX0ZJTEVcXG5kcml2ZXJzL21kL0tjb25maWctODEtXFx0Ym9vbCBcXFwiTUQgYml0bWFwIGZpbGUgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctOTAtXFxuZHJpdmVycy9tZC9LY29uZmlnOjkxOmNvbmZpZyBNRF9MSU5FQVJcXG5kcml2ZXJzL21kL0tjb25maWctOTItXFx0dHJpc3RhdGUgXFxcIkxpbmVhciAoYXBwZW5kKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL21kL0tjb25maWc6MTA0OmNvbmZpZyBNRF9SQUlEMFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlJBSUQtMCAoc3RyaXBpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTIzLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIlJBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTE2NC1cXG5kcml2ZXJzL21kL0tjb25maWc6MTY1OmNvbmZpZyBNRF9SQUlENDU2XFxuZHJpdmVycy9tZC9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiUkFJRC00L1JBSUQtNS9SQUlELTYgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0yMDEtXFxuZHJpdmVycy9tZC9LY29uZmlnOjIwMjpjb25maWcgTURfQ0xVU1RFUlxcbmRyaXZlcnMvbWQvS2NvbmZpZy0yMDMtXFx0dHJpc3RhdGUgXFxcIkNsdXN0ZXIgU3VwcG9ydCBmb3IgTURcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTEzPWlmIEVUSEVSTkVUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE1OmNvbmZpZyBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE5PWNvbmZpZyBBQ1BJX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MjQ6Y29uZmlnIE1ESU9fQUlST0hBXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgQU43NTgzIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjMxOmNvbmZpZyBNRElPX1NVTjRJXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mzk6Y29uZmlnIE1ESU9fWEdFTkVcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNDAtXFx0dHJpc3RhdGUgXFxcIkFQTSBYLUdlbmUgU29DIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNDUtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjQ2OmNvbmZpZyBNRElPX0FTUEVFRFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiQVNQRUVEIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNTgtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjU5OmNvbmZpZyBNRElPX0JJVEJBTkdcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIkJpdGJhbmdlZCBNRElPIGJ1c2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTY3LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo2ODpjb25maWcgTURJT19CQ01fSVBST0NcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNjktXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIGlQcm9jIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzYtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjc3OmNvbmZpZyBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFVuaU1BQyBNRElPIGJ1cyBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTg1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo4Njpjb25maWcgTURJT19DQVZJVU1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctODctXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctODgtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjg5OmNvbmZpZyBNRElPX0dQSU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTAtXFx0dHJpc3RhdGUgXFxcIkdQSU8gbGliLWJhc2VkIGJpdGJhbmdlZCBNRElPIGJ1c2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo5OTpjb25maWcgTURJT19ISVNJX0ZFTUFDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwMC1cXHR0cmlzdGF0ZSBcXFwiSGlzaWxpY29uIEZFTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDY6Y29uZmlnIE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExNS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTE2OmNvbmZpZyBNRElPX01WVVNCXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBVU0IgdG8gTURJTyBBZGFwdGVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEyMi1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTIzOmNvbmZpZyBNRElPX01TQ0NfTUlJTVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMjQtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc2VtaSBNSUlNIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzMC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTMxOmNvbmZpZyBNRElPX01PWEFSVFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMzItXFx0dHJpc3RhdGUgXFxcIk1PWEEgQVJUIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTM3LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMzg6Y29uZmlnIE1ESU9fT0NURU9OXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzOS1cXHR0cmlzdGF0ZSBcXFwiT2N0ZW9uIGFuZCBzb21lIFRodW5kZXJYIFNPQ3MgTURJTyBidXNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNDctXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE0ODpjb25maWcgTURJT19QSUM2NEhQU0NcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTQ5LVxcdHRyaXN0YXRlIFxcXCJQSUM2NC1IUFNDL0hYIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTU1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNTY6Y29uZmlnIE1ESU9fSVBRNDAxOVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNTctXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQUTQwMTkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNjMtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE2NDpjb25maWcgTURJT19JUFE4MDY0XFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE2NS1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gSVBRODA2NCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3MS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTcyOmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc5OmNvbmZpZyBNRElPX1JFR01BUFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xODAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xODktXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE5MDpjb25maWcgTURJT19USFVOREVSXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE5MS1cXHR0cmlzdGF0ZSBcXFwiVGh1bmRlclggU09DcyBNRElPIGJ1c2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTIwMD1jb21tZW50IFxcXCJNRElPIE11bHRpcGxleGVyc1xcXCJcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjAxLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoyMDI6Y29uZmlnIE1ESU9fQlVTX01VWFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMDMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMTAtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIxMTpjb25maWcgTURJT19CVVNfTVVYX01FU09OX0cxMkFcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjEyLVxcdHRyaXN0YXRlIFxcXCJBbWxvZ2ljIEcxMmEgYmFzZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjIxLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoyMjI6Y29uZmlnIE1ESU9fQlVTX01VWF9NRVNPTl9HWExcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjIzLVxcdHRyaXN0YXRlIFxcXCJBbWxvZ2ljIEdYTCBiYXNlZCBNRElPIGJ1cyBtdWx0aXBsZXhlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMzItXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIzMzpjb25maWcgTURJT19CVVNfTVVYX0JDTTYzNjhcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjM0LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ002MzY4IE1ESU8gYnVzIG11bHRpcGxleGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNDMtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI0NDpjb25maWcgTURJT19CVVNfTVVYX0JDTV9JUFJPQ1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNDUtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIGlQcm9jIGJhc2VkIE1ESU8gYnVzIG11bHRpcGxleGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNTQtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI1NTpjb25maWcgTURJT19CVVNfTVVYX0dQSU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjU2LVxcdHRyaXN0YXRlIFxcXCJHUElPIGNvbnRyb2xsZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI2NC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MjY1OmNvbmZpZyBNRElPX0JVU19NVVhfTVVMVElQTEVYRVJcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjY2LVxcdHRyaXN0YXRlIFxcXCJNRElPIGJ1cyBtdWx0aXBsZXhlciB1c2luZyBrZXJuZWwgbXVsdGlwbGV4ZXIgc3Vic3lzdGVtXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI3Ni1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mjc3OmNvbmZpZyBNRElPX0JVU19NVVhfTU1JT1JFR1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk1NSU8gZGV2aWNlLWNvbnRyb2xsZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzo0NS4xMTM1ODY4MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1OTY1MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19CTEtfREVWX01EYCBjbGlja3Mg4oCTIHRoYXQncyB0aGUgTUQgY29uZmlnLiBJIG5lZWQgdG8gaW5jbHVkZSBgQkxLX0RFVl9NRGAgYW5kIGFsc28gYEJMS19ERVZfTlVMTF9CTEtgLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGluIGBibG9jay9iYWRibG9ja3MuY2AsIHJpZ2h0PyBSaWdodCwgYW5kIHRoZSByZWFzb24gZm9yIGZ1enppbmcgaXM6IGl0IGFkZHJlc3NlcyBhbiBvdmVyZmxvdyBhbmQgc29tZSBpbmNvcnJlY3QgbWFjcm8gdXNhZ2UgcmVsYXRlZCB0byBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBHb29kLCB0aGF0IEFQSSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgYW5kIGNvbmZpZ2ZzIOKAkyB0aGlua2luZyBudWxsX2JsayBhbmQgbWQgaGVyZSDigJMgc28gaXQncyBhY3R1YWxseSB0ZXN0YWJsZS4gVGhhdCdzIGEgaHVnZSBwbHVzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBpdCdzOiBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gWWVwLCB0aG9zZSBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXNjcmliZWQgdnVsbmVyYWJpbGl0eS4gSSdsbCBkZWZpbml0ZWx5IGFkZCB0aG9zZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBxdWlja2x5IGNvbmZpcm1pbmcgcmVhY2hhYmlsaXR5IG9mIGBiYWRibG9ja3NfY2hlY2tgLiBJdCdzIGNhbGxlZCBieSBgbnVsbF9oYW5kbGVfYmFkYmxvY2tzYCBpbiBgbnVsbF9ibGtgLCB3aGljaCBpcyBpdHNlbGYgaW52b2tlZCBvbiBldmVyeSBJTyBpZiBiYWRibG9ja3MgYXJlIGNvbmZpZ3VyZWQuIFBlcmZlY3QuIGBfYmFkYmxvY2tzX3NldGAgaXMgY2FsbGVkIGJ5IGBiYWRibG9ja3Nfc2V0YCB3aGljaCBpcyBjYWxsZWQgYnkgYG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmVgIGluIGBudWxsX2Jsa2AgYW5kIGBkaXNrX2JhZGJsb2Nrc19zdG9yZWAgaW4gYGdlbmhkLmNgIGFuZCBgYmJfc3RvcmVgIGluIGBtZC5jYC4gQW5kIGBfYmFkYmxvY2tzX2NsZWFyYCBpcyBjYWxsZWQgYnkgYGJhZGJsb2Nrc19jbGVhcmAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlYCBhbmQgYG51bGxfaGFuZGxlX2JhZGJsb2Nrc2AgYW5kIGByZGV2X2NsZWFyX2JhZGJsb2Nrc2AuXG5cblNvLCB5ZWFoLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgc3BvdCBvbi4gVGhlIGNvbmZpZyBzZWxlY3Rpb25zIGFyZSBjb3JyZWN0IGZvciBjb3ZlcmFnZS4gVGhlIHJlYXNvbmluZyBtYWtlcyB0b3RhbCBzZW5zZS4gQWxsIHN5c3RlbXMgYXJlIGdvLiBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMSwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6NTIuODczMjQwMzA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MjM0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgYW5kIGluY29ycmVjdCB1c2FnZSBvZiByb3VuZGRvd24vcm91bmR1cCBtYWNyb3MgaW4gdGhlIGJhZGJsb2NrcyBibG9jayBsYXllciBBUEkuIFRoZSBiYWRibG9ja3MgQVBJIGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGNvbmZpZ2ZzIChlLmcuLCBudWxsX2JsaywgbWQpLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgdGVzdGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiQkxLX0RFVl9NRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9iYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJfYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSBhbmQgaW5jb3JyZWN0IHVzYWdlIG9mIHJvdW5kZG93bi9yb3VuZHVwIG1hY3JvcyBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gVGhlIGJhZGJsb2NrcyBBUEkgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgY29uZmlnZnMgKGUuZy4sIG51bGxfYmxrLCBtZCksIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgqz95[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-04 17:31:53 +0000 UTC FinishedAt: 2026-07-04 18:17:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "BLK_DEV_MD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK", "BLK_DEV_MD" ], "series_id": "e42c4ea0-1149-4d34-99b2-3b053a0e3f9a" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "_badblocks_set", "_badblocks_clear", "badblocks_check" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIGFuZCBpbmNvcnJlY3QgdXNhZ2Ugb2Ygcm91bmRkb3duL3JvdW5kdXAgbWFjcm9zIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBUaGUgYmFkYmxvY2tzIEFQSSBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBjb25maWdmcyAoZS5nLiwgbnVsbF9ibGssIG1kKSwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHRlc3RhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzRlZGI2YjRkNjEwYThmYjgyOWJkYjNmY2FmM2JhOTYwYmM4Njg2NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDQgMTg6MTY6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xuaW5kZXggZWNlNjRlNzZmZThmZmYuLmU4NDg0OTEyNTMyMzVmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JhZGJsb2Nrcy5jXG5AQCAtODUzLDE1ICYjNDM7ODUzLDIxIEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3Nfc2V0KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxuIFx0XHQvKiBJbnZhbGlkIHNlY3RvcnMgbnVtYmVyICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGJiLVx1MDAzZXNoaWZ0KSB7XG4gXHRcdC8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqL1xuIFx0XHRzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdHMgPSByb3VuZF9kb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdG5leHQgPSByb3VuZF91cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4gXHRcdHNlY3RvcnMgPSBuZXh0IC0gcztcbiBcdH1cbiBcbiYjNDM7XHRpZiAoc2VjdG9ycyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHdyaXRlX3NlcWxvY2tfaXJxc2F2ZShcdTAwMjZiYi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRiYWQuYWNrID0gYWNrbm93bGVkZ2VkO1xuQEAgLTEwNjEsNiAmIzQzOzEwNjcsOSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuIFx0XHQvKiBJbnZhbGlkIHNlY3RvcnMgbnVtYmVyICovXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiYjNDM7XHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGJiLVx1MDAzZXNoaWZ0KSB7XG4gXHRcdHNlY3Rvcl90IHRhcmdldDtcbiBcbkBAIC0xMDcxLDExICYjNDM7MTA4MCwxNyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuIFx0XHQgKiBpc24mIzM5O3QgdGhhbiB0byB0aGluayBhIGJsb2NrIGlzIG5vdCBiYWQgd2hlbiBpdCBpcy5cbiBcdFx0ICovXG4gXHRcdHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9ycztcbi1cdFx0cm91bmR1cChzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHJvdW5kZG93bih0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4mIzQzO1x0XHRzID0gcm91bmRfdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuJiM0MztcdFx0dGFyZ2V0ID0gcm91bmRfZG93bih0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmICh0YXJnZXQgXHUwMDNjIHMpXG4mIzQzO1x0XHRcdHNlY3RvcnMgPSAwO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbiBcdH1cbiBcbiYjNDM7XHRpZiAoc2VjdG9ycyA9PSAwKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiBcdHdyaXRlX3NlcWxvY2tfaXJxKFx1MDAyNmJiLVx1MDAzZWxvY2spO1xuIFxuIFx0YmFkLmFjayA9IHRydWU7XG5AQCAtMTMwMywxMyAmIzQzOzEzMTgsMjIgQEAgaW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbiBcbiBcdFdBUk5fT04oYmItXHUwMDNlc2hpZnQgXHUwMDNjIDAgfHwgc2VjdG9ycyA9PSAwKTtcbiBcbiYjNDM7XHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNlIDApIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9ycztcbiBcbi1cdFx0cm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0cm91bmR1cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4mIzQzO1x0XHRzID0gcm91bmRfZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4mIzQzO1x0XHR0YXJnZXQgPSByb3VuZF91cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiYjNDM7XHRcdGlmICh0YXJnZXQgXHUwMDNjIHMpXG4mIzQzO1x0XHRcdHNlY3RvcnMgPSAwO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc2VjdG9ycyA9PSAwKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbiByZXRyeTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfYmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtfYmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSBhbmQgaW5jb3JyZWN0IHVzYWdlIG9mIHJvdW5kZG93bi9yb3VuZHVwIG1hY3JvcyBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gVGhlIGJhZGJsb2NrcyBBUEkgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgY29uZmlnZnMgKGUuZy4sIG51bGxfYmxrLCBtZCksIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzRlZGI2YjRkNjEwYThmYjgyOWJkYjNmY2FmM2JhOTYwYmM4Njg2NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDQgMTg6MTY6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9ibG9jay9iYWRibG9ja3MuYyBiL2Jsb2NrL2JhZGJsb2Nrcy5jCmluZGV4IGVjZTY0ZTc2ZmU4ZmZmLi5lODQ4NDkxMjUzMjM1ZiAxMDA2NDQKLS0tIGEvYmxvY2svYmFkYmxvY2tzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmFkYmxvY2tzLmMKQEAgLTg1MywxNSAmIzQzOzg1MywyMSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycywKIAkJLyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqLwogCQlyZXR1cm4gZmFsc2U7CiAKJiM0MzsJaWYgKHMgJmd0OyBVTExPTkdfTUFYIC0gc2VjdG9ycykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKIAlpZiAoYmItJmd0O3NoaWZ0KSB7CiAJCS8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqLwogCQlzZWN0b3JfdCBuZXh0ID0gcyAmIzQzOyBzZWN0b3JzOwogCi0JCXJvdW5kZG93bihzLCAxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7Ci0JCXJvdW5kdXAobmV4dCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJcyA9IHJvdW5kX2Rvd24ocywgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJbmV4dCA9IHJvdW5kX3VwKG5leHQsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKIAkJc2VjdG9ycyA9IG5leHQgLSBzOwogCX0KIAomIzQzOwlpZiAoc2VjdG9ycyA9PSAwKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwogCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmYW1wO2JiLSZndDtsb2NrLCBmbGFncyk7CiAKIAliYWQuYWNrID0gYWNrbm93bGVkZ2VkOwpAQCAtMTA2MSw2ICYjNDM7MTA2Nyw5IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpCiAJCS8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi8KIAkJcmV0dXJuIGZhbHNlOwogCiYjNDM7CWlmIChzICZndDsgVUxMT05HX01BWCAtIHNlY3RvcnMpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJaWYgKGJiLSZndDtzaGlmdCkgewogCQlzZWN0b3JfdCB0YXJnZXQ7CiAKQEAgLTEwNzEsMTEgJiM0MzsxMDgwLDE3IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpCiAJCSAqIGlzbiYjMzk7dCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLgogCQkgKi8KIAkJdGFyZ2V0ID0gcyAmIzQzOyBzZWN0b3JzOwotCQlyb3VuZHVwKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKLQkJcm91bmRkb3duKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKJiM0MzsJCXMgPSByb3VuZF91cChzLCAxICZsdDsmbHQ7IGJiLSZndDtzaGlmdCk7CiYjNDM7CQl0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKHRhcmdldCAmbHQ7IHMpCiYjNDM7CQkJc2VjdG9ycyA9IDA7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2VjdG9ycyA9IHRhcmdldCAtIHM7CiAJfQogCiYjNDM7CWlmIChzZWN0b3JzID09IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiAJd3JpdGVfc2VxbG9ja19pcnEoJmFtcDtiYi0mZ3Q7bG9jayk7CiAKIAliYWQuYWNrID0gdHJ1ZTsKQEAgLTEzMDMsMTMgJiM0MzsxMzE4LDIyIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsCiAKIAlXQVJOX09OKGJiLSZndDtzaGlmdCAmbHQ7IDAgfHwgc2VjdG9ycyA9PSAwKTsKIAomIzQzOwlpZiAocyAmZ3Q7IFVMTE9OR19NQVggLSBzZWN0b3JzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJaWYgKGJiLSZndDtzaGlmdCAmZ3Q7IDApIHsKIAkJLyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovCiAJCXNlY3Rvcl90IHRhcmdldCA9IHMgJiM0Mzsgc2VjdG9yczsKIAotCQlyb3VuZGRvd24ocywgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlyb3VuZHVwKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwotCQlzZWN0b3JzID0gdGFyZ2V0IC0gczsKJiM0MzsJCXMgPSByb3VuZF9kb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTsKJiM0MzsJCXRhcmdldCA9IHJvdW5kX3VwKHRhcmdldCwgMSAmbHQ7Jmx0OyBiYi0mZ3Q7c2hpZnQpOwomIzQzOwkJaWYgKHRhcmdldCAmbHQ7IHMpCiYjNDM7CQkJc2VjdG9ycyA9IDA7CiYjNDM7CQllbHNlCiYjNDM7CQkJc2VjdG9ycyA9IHRhcmdldCAtIHM7CiYjNDM7CiYjNDM7CQlpZiAoc2VjdG9ycyA9PSAwKQomIzQzOwkJCXJldHVybiAwOwogCX0KIAogcmV0cnk6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCYWRibG9ja3MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBgYmxvY2svYmFkYmxvY2tzLmNgLiBNeSBpbml0aWFsIHJlYWQgc2hvd3MgaXQmIzM5O3MgYWRkcmVzc2luZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aGluIHRoZSBiYWQgYmxvY2sgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGdldHRpbmcgc29tZSBvdmVyZmxvdyBjaGVja3MgYWRkZWQuIEdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBhbHdheXMgYSB3aW4gaW4gY3JpdGljYWwga2VybmVsIHN1YnN5c3RlbXMgbGlrZSB0aGlzLgoKQW5kIG5vdywgSSBzZWUgaXQmIzM5O3MgYWxzbyBmaXhpbmcgdGhlIHVzYWdlIG9mIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAuIEhtbSwgdGhhdCBzZWVtcyBvZGQgYXQgZmlyc3QgZ2xhbmNlLiBJIGltbWVkaWF0ZWx5IHRob3VnaHQsICYjMzQ7QXJlbiYjMzk7dCB0aG9zZSBtYWNyb3M/JiMzNDsgQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhleSBzaG91bGQgcmV0dXJuIHRoZSByb3VuZGVkIHZhbHVlLCBidXQgdGhleSBzaG91bGRuJiMzOTt0IG1vZGlmeSB0aGUgaW5wdXQgdmFyaWFibGUgaW4gcGxhY2UuIFNvLCB3aHkgaXMgdGhlIHBhdGNoIGNoYW5naW5nIGhvdyB0aGV5JiMzOTtyZSB1c2VkPyBSZXBsYWNpbmcgYHMgPSByb3VuZGRvd24ocywgLi4uKWAgd2l0aCBgcyA9IHJvdW5kX2Rvd24ocywgLi4uKWAgbWFrZXMgaXQgc291bmQgbGlrZSB0aGV5IHdlcmUgdHJ5aW5nIHRvIG1vZGlmeSB0aGUgdmFyaWFibGUgZGlyZWN0bHkuCgpBbHJpZ2h0LCB0aW1lIHRvIGdvIGRlZXBlci4gTGV0JiMzOTtzIGNvbmZpcm0gbXkgc3VzcGljaW9ucy4gSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUga2VybmVsJiMzOTtzIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAgZGVmaW5pdGlvbnMuIEFoLCB5ZXMsIHRoZXkmIzM5O3JlIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbWF0aC5oYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhlIGRlZmluaXRpb25zIGFuZCB1c2FnZSBpbiB0aGUga2VybmVsIGNvZGUgdXNpbmcgZ3JlcHBlciwganVzdCB0byBiZSB0aG9yb3VnaCBhbmQgdmVyaWZ5IG15IGV4cGVjdGF0aW9ucy4gSSBjYW4gcXVpY2tseSB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoZSBwYXRjaCB0aGlzIHdheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIHJvdW5kZG93biYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2xvZzIuaD02NT11bnNpZ25lZCBsb25nIF9fcm91bmRkb3duX3Bvd19vZl90d28odW5zaWduZWQgbG9uZyBuKVxuLS1cbmluY2x1ZGUvbGludXgvbG9nMi5oLTE5MC0gKi9cbmluY2x1ZGUvbGludXgvbG9nMi5oOjE5MTojZGVmaW5lIHJvdW5kZG93bl9wb3dfb2ZfdHdvKG4pXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvbG9nMi5oLTE5Mi0oXHRcdFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L21hdGguaC04NC0gKi9cbmluY2x1ZGUvbGludXgvbWF0aC5oOjg1OiNkZWZpbmUgcm91bmRkb3duKHgsIHkpIChcdFx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L21hdGguaC04Ni17XHRcdFx0XHRcdFx0XHRcXFxuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvbG9nMi5oPTU2PXVuc2lnbmVkIGxvbmcgX19yb3VuZGRvd25fcG93X29mX3R3byh1bnNpZ25lZCBsb25nIG4pXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmgtMTY3LSAqL1xudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmg6MTY4OiNkZWZpbmUgcm91bmRkb3duX3Bvd19vZl90d28obilcdFx0XHRcXFxudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmgtMTY5LShcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNzcKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRml4aW5nIHRoZSBgcm91bmRkb3duKClgIEJ1ZyBpbiBgYmFkYmxvY2tzLmNgKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIEkgc2VlIHRoZSBpc3N1ZSBpbW1lZGlhdGVseS4gVGhlIG9yaWdpbmFsIGNvZGUgaW4gYGJsb2NrL2JhZGJsb2Nrcy5jYCB3YXMgY2FsbGluZyBgcm91bmRkb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KWAgYW5kIGByb3VuZHVwKG5leHQsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KWAgd2l0aG91dCBhY3R1YWxseSBhc3NpZ25pbmcgdGhlIHJldHVybiB2YWx1ZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgbWlzdGFrZSEgVGhlc2UgZnVuY3Rpb25zLCBhcyBJIHJlY2FsbCwgYXJlIG1lYW50IHRvICpyZXR1cm4qIHRoZSByb3VuZGVkIHZhbHVlOyB0aGV5IGRvbiYjMzk7dCBvcGVyYXRlICppbiBwbGFjZSouIFNvLCB0aGUgdmFyaWFibGVzIGBzYCBhbmQgYG5leHRgIHdlcmUgbmV2ZXIgYWN0dWFsbHkgYmVpbmcgbW9kaWZpZWQgYXMgaW50ZW5kZWQuCgpUaGUgZml4LCBhcyB0aGUgcGF0Y2ggZGVtb25zdHJhdGVzLCBpcyBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb3JyZWN0ZWQgY29kZSBub3cgY29ycmVjdGx5IGFzc2lnbnMgdGhlIHJlc3VsdCBvZiB0aGUgcm91bmRpbmcgZnVuY3Rpb25zIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHZhcmlhYmxlczogYHMgPSByb3VuZF9kb3duKHMsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTtgIGFuZCBgbmV4dCA9IHJvdW5kX3VwKG5leHQsIDEgJmx0OyZsdDsgYmItJmd0O3NoaWZ0KTtgLiBUaGlzIGVuc3VyZXMgdGhlIHN1YnNlcXVlbnQgbG9naWMgb3BlcmF0ZXMgb24gdGhlIHJvdW5kZWQgdmFsdWVzLCB3aGljaCBpcyB0aGUgd2hvbGUgcG9pbnQuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBTaW5jZSB0aGlzIGZpeCBpcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIEkgc2hvdWxkIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdHJpZ2dlciB0aGUgYGJhZGJsb2Nrc2AgZnVuY3Rpb25hbGl0eS4gSXQgd291bGQgYmUgaGVscGZ1bCB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGltcGFjdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmFkYmxvY2tzLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9OD1vYmoteVx0XHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxuLS1cbmJsb2NrL01ha2VmaWxlLTEyLVx0XHRcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXG5ibG9jay9NYWtlZmlsZToxMzpcdFx0XHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxuYmxvY2svTWFrZWZpbGUtMTQtXHRcdFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00NzU9TlVMTEJfREVWSUNFX0FUVFIocm90YXRpb25hbCwgYm9vbCwgTlVMTCk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NzY6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX29uY2UsIGJvb2wsIE5VTEwpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDc3LU5VTExCX0RFVklDRV9BVFRSKGJhZGJsb2Nrc19wYXJ0aWFsX2lvLCBib29sLCBOVUxMKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01OTY9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm51bGxiX2RldmljZV9hdHRyc1tdID0ge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTk3LVx0XHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTk4Olx0XHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzX29uY2UsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01OTktXHRcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3NfcGFydGlhbF9pbyxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzQ2PWJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1Ny1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTg6XHRpZiAoY21kLVx1MDAzZW5xLVx1MDAzZWRldi1cdTAwM2ViYWRibG9ja3Nfb25jZSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTktXHRcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTUzPXN0cnVjdCBudWxsYl9kZXZpY2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02NS1cdHN0cnVjdCBiYWRibG9ja3MgYmFkYmxvY2tzO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY2Olx0Ym9vbCBiYWRibG9ja3Nfb25jZTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC02Ny1cdGJvb2wgYmFkYmxvY2tzX3BhcnRpYWxfaW87XG4tLVxuZHJpdmVycy9tZC9yYWlkMS0xMC5jPTI3OD1zdGF0aWMgaW5saW5lIGJvb2wgcmFpZDFfc2hvdWxkX3JlYWRfZmlyc3Qoc3RydWN0IG1kZGV2ICptZGRldixcbi0tXG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjkzLSAqIGJpbyB3aXRoIFJFUV9SQUhFQUQgb3IgUkVRX05PV0FJVCBjYW4gZmFpbCBhdCBhbnl0aW1lLCBiZWZvcmUgc3VjaCBJTyBpc1xuZHJpdmVycy9tZC9yYWlkMS0xMC5jOjI5NDogKiBzdWJtaXR0ZWQgdG8gdGhlIHVuZGVybHlpbmcgZGlza3MsIGhlbmNlIGRvbiYjMzk7dCByZWNvcmQgYmFkYmxvY2tzIG9yIHJldHJ5XG5kcml2ZXJzL21kL3JhaWQxLTEwLmMtMjk1LSAqIGluIHRoaXMgY2FzZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCbG9jayBEZXZpY2UgQnVpbGQgUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYmFkYmxvY2tzLm9gIGZpbGUgYW5kIGl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBidWlsZC4gVGhlIGxvY2F0aW9uIG9mIGl0LCBgYmxvY2svTWFrZWZpbGVgLCB3aXRoIGBvYmoteWAgaW1wbGllcyBpdCYjMzk7cyBhbHdheXMgY29tcGlsZWQgaW4uIEJ1dCBob2xkIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGJsb2NrL01ha2VmaWxlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY3kgY2hhaW4gaGVyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmVzdCB0byB2ZXJpZnkgdGhlIHNwZWNpZmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai15LipiYWRibG9ja3MubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY1NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJhZGJsb2NrcyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGBibG9jay9NYWtlZmlsZWAuIExpbmUgMTMsIGluIHBhcnRpY3VsYXIsIHNlZW1zIGltcG9ydGFudC4gSXQmIzM5O3MgYnVyaWVkIHdpdGhpbiBhIG11bHRpLWxpbmUgYG9iai15YCBhc3NpZ25tZW50LCB3aGljaCBpcyB1c3VhbGx5IGEgc2lnbiB0aGF0IHRoaXMgY29kZSBpcyBjb21waWxlZCBpbiBzdGF0aWNhbGx5LCBhc3N1bWluZyBgQ09ORklHX0JMT0NLYCBpcyBlbmFibGVkLiBBbmQsIGFzIEkgcmVjYWxsLCBgQ09ORklHX0JMT0NLYCBpcyBlc3NlbnRpYWxseSBhIGRlZmF1bHQgaW4gbW9zdCBtb2Rlcm4ga2VybmVscy4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoaXMgYGJhZGJsb2Nrcy5vYCBmaWxlIGlzIGxpa2VseSBhbHdheXMgcGFydCBvZiB0aGUgYnVpbGQsIHVubGVzcyBzb21lb25lIGV4cGxpY2l0bHkgZGlzYWJsZWQgdGhlIGJsb2NrIGRldmljZSBzdXBwb3J0LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIHNwZWNpZmljcyBvZiB3aGF0JiMzOTtzIGJlZW4gY2hhbmdlZCB3aXRoaW4gdGhlIGZpbGUgaXRzZWxmLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEJhc2VkIG9uIHRoZSBmaWxlLCB0aGUgZnVuY3Rpb25zIGFmZmVjdGVkIGFyZSBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gQWxsIG9mIHRoZXNlIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIGJhZGJsb2NrcyBBUEkuIE15IG5leHQgcXVlc3Rpb24gaXM6IHdobyB1c2VzIHRoZW0/IEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGZyb20gdG8gZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBpbXBhY3QgZm9yIHRoaXMgcGFydGljdWxhciBjaGFuZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2Nrc19zZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmMtMjItICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjIzOiAqIFdoZW4gdGhlIGNhbGxlciBvZiBiYWRibG9ja3Nfc2V0KCkgd2FudHMgdG8gc2V0IGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcywgdGhlXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTMyMC0gKiB0aGUgYmFkIGJsb2NrIHJhbmdlIHNldHRpbmcgY29uZGl0aW9ucy4gTWF5YmUgdGhlcmUgaXMgc29tZSByYXJlIGNvcm5lciBjYXNlXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJiMzOTt0IGh1cnQgaWYgYmFkYmxvY2tzX3NldCgpIGZhaWxzIGR1ZVxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXG5ibG9jay9iYWRibG9ja3MuYy0zMjMtICpcbmJsb2NrL2JhZGJsb2Nrcy5jOjMyNDogKiBJbnNpZGUgYmFkYmxvY2tzX3NldCgpIGVhY2ggbG9vcCBzdGFydHMgYnkganVtcGluZyB0byByZV9pbnNlcnQgbGFiZWwsIGV2ZXJ5XG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2Vcbi0tXG5ibG9jay9iYWRibG9ja3MuYz04MTc9c3RhdGljIGJvb2wgdHJ5X2FkamFjZW50X2NvbWJpbmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2KVxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTgzOC0vKiBEbyBleGFjdCB3b3JrIHRvIHNldCBiYWQgYmxvY2sgcmFuZ2UgaW50byB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzo4Mzk6c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy04NDAtXHRcdFx0ICAgaW50IGFja25vd2xlZGdlZClcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMzQ3PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM0OS0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNTA6ICogYmFkYmxvY2tzX3NldCgpIC0gQWRkIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXG5ibG9jay9iYWRibG9ja3MuYy0xMzUxLSAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzY0LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM2NTpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMzY2LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKVxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ny17XG5ibG9jay9iYWRibG9ja3MuYzoxMzY4Olx0cmV0dXJuIF9iYWRibG9ja3Nfc2V0KGJiLCBzLCBzZWN0b3JzLCBhY2tub3dsZWRnZWQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM2OS19XG5ibG9jay9iYWRibG9ja3MuYzoxMzcwOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zZXQpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM3MS1cbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xNDg4PXNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDctXG5ibG9jay9iYWRibG9ja3MuYzoxNTA4Olx0aWYgKCFiYWRibG9ja3Nfc2V0KGJiLCBzZWN0b3IsIGxlbmd0aCwgIXVuYWNrKSlcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDktXHRcdHJldHVybiAtRU5PU1BDO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTUzMj1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjQtXHRpZiAoYnVmWzBdID09ICYjMzk7JiM0MzsmIzM5Oykge1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY1Olx0XHRpZiAoYmFkYmxvY2tzX3NldChcdTAwMjZ0X2Rldi1cdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY2LVx0XHRcdFx0ICBlbmQgLSBzdGFydCAmIzQzOyAxLCAxKSlcbi0tXG5kcml2ZXJzL21kL21kLmM9MTgwOD1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXG4tLVxuZHJpdmVycy9tZC9tZC5jLTE5MzEtXHRcdFx0XHRicmVhaztcbmRyaXZlcnMvbWQvbWQuYzoxOTMyOlx0XHRcdGlmICghYmFkYmxvY2tzX3NldChcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgc2VjdG9yLCBjb3VudCwgMSkpXG5kcml2ZXJzL21kL21kLmMtMTkzMy1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDU1Nj1ib29sIHJkZXZfc2V0X2JhZGJsb2NrcyhzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc2VjdG9yX3QgcywgaW50IHNlY3RvcnMsXG4tLVxuZHJpdmVycy9tZC9tZC5jLTEwNTc1LVxuZHJpdmVycy9tZC9tZC5jOjEwNTc2Olx0aWYgKCFiYWRibG9ja3Nfc2V0KFx1MDAyNnJkZXYtXHUwMDNlYmFkYmxvY2tzLCBzLCBzZWN0b3JzLCAwKSkge1xuZHJpdmVycy9tZC9tZC5jLTEwNTc3LVx0XHQvKlxuLS1cbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcbi0tXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE2OS1cdC8qIHRoaXMgaXNuJiMzOTt0IGFuIGVycm9yIGFzIHRoZSBoYXJkd2FyZSB3aWxsIHN0aWxsIHRocm93IGFuIGV4Y2VwdGlvbiAqL1xuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHMsIG51bSwgMSkpXG5kcml2ZXJzL252ZGltbS9iYWRyYW5nZS5jLTE3MS1cdFx0ZGV2X2luZm9fb25jZShiYi1cdTAwM2VkZXYsIFwmIzM0OyVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxuXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg9NTE9aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzYCBJbnRlcmZhY2UgaW4gdGhlIEtlcm5lbCoqCgpSaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgYGJhZGJsb2Nrc19zZXRgIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBhIGZldyBrZXkgZHJpdmVyczogdGhlIGBudWxsX2Jsa2AgZHJpdmVyLCB0aGUgc29mdHdhcmUgUkFJRCBjb21wb25lbnQgKGBtZGApLCBhbmQgdGhlIGBudmRpbW1gIGRyaXZlci4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc2V0IG9mIHVzZXJzLiBUaGVzZSBhcmUgYWxsIHBsYWNlcyB3aGVyZSBiYWQgYmxvY2sgbWFuYWdlbWVudCB3b3VsZCBiZSByZWxldmFudCDigJMgdmlydHVhbCBibG9jayBkZXZpY2VzLCBSQUlEIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLgoKVGhlbiwgSSYjMzk7bSBhbHNvIG9ic2VydmluZyB0aGF0IGBiYWRibG9ja3Nfc3RvcmVgIGlzIGludm9rZWQgdGhyb3VnaCBzeXNmcy4gVGhhdCBzdWdnZXN0cyBzb21lIHVzZXItc3BhY2UgaW50ZXJhY3Rpb24sIGEgd2F5IGZvciBhbiBhZG1pbmlzdHJhdG9yIG9yIHRvb2wgdG8gZGlyZWN0bHkgbWFuYWdlIGJhZCBibG9jayBpbmZvcm1hdGlvbi4gQnV0IHRoaXMgcmFpc2VzIGEgcXVlc3Rpb246IGlzIGBiYWRibG9ja3Nfc3RvcmVgIGJlaW5nICpleHBvcnRlZCogZm9yIHVzZSBieSBgbWRgIG9yIGBudWxsX2Jsa2AsIG9yIGlzIGl0IGp1c3QgYmVpbmcgY2FsbGVkIGluZGVwZW5kZW50bHkgdGhyb3VnaCBzeXNmcyBpbiB0aG9zZSBjb250ZXh0cz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIExldCBtZSBqdXN0IHF1aWNrbHkgdHJhY2UgdGhyb3VnaCBgYmFkYmxvY2tzX3N0b3JlYCBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGF0IGl0IGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBgYmFkYmxvY2tzX3NldGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhZGJsb2Nrc19zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iYWRibG9ja3MuYz0xNDc2PUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zaG93KTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xNDc4LS8qKlxuYmxvY2svYmFkYmxvY2tzLmM6MTQ3OTogKiBiYWRibG9ja3Nfc3RvcmUoKSAtIHN5c2ZzIGFjY2VzcyB0byBiYWQtYmxvY2tzIGxpc3RcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODAtICogQGJiOlx0XHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODctICovXG5ibG9jay9iYWRibG9ja3MuYzoxNDg4OnNzaXplX3QgYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuLFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cdFx0XHRpbnQgdW5hY2spXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTUxMi19XG5ibG9jay9iYWRibG9ja3MuYzoxNTEzOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9iYWRibG9ja3MuYy0xNTE0LVxuLS1cbmJsb2NrL2dlbmhkLmM9ODUxPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODYyLVxuYmxvY2svZ2VuaGQuYzo4NjM6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuYmxvY2svZ2VuaGQuYy04NjQtXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmJsb2NrL2dlbmhkLmMtODcxLVxuYmxvY2svZ2VuaGQuYzo4NzI6XHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKGRpc2stXHUwMDNlYmIsIHBhZ2UsIGxlbiwgMCk7XG5ibG9jay9nZW5oZC5jLTg3My19XG4tLVxuYmxvY2svZ2VuaGQuYz0xMTcyPXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcbmJsb2NrL2dlbmhkLmM6MTE3MzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XG5ibG9jay9nZW5oZC5jLTExNzQtc3RhdGljIERFVklDRV9BVFRSKGRpc2tzZXEsIDA0NDQsIGRpc2tzZXFfc2hvdywgTlVMTCk7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTI1PXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTMxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTMyOnN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTMzLVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4tLVxuZHJpdmVycy9tZC9tZC5jPTM2MTI9c3RhdGljIHNzaXplX3QgYmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG5kcml2ZXJzL21kL21kLmMtMzYxMy17XG5kcml2ZXJzL21kL21kLmM6MzYxNDpcdGludCBydiA9IGJhZGJsb2Nrc19zdG9yZShcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTtcbmRyaXZlcnMvbWQvbWQuYy0zNjE1LVx0LyogTWF5YmUgdGhhdCBhY2sgd2FzIGFsbCB3ZSBuZWVkZWQgKi9cbi0tXG5kcml2ZXJzL21kL21kLmM9MzYyNz1zdGF0aWMgc3NpemVfdCB1YmJfc3RvcmUoc3RydWN0IG1kX3JkZXYgKnJkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4pXG5kcml2ZXJzL21kL21kLmMtMzYyOC17XG5kcml2ZXJzL21kL21kLmM6MzYyOTpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoXHUwMDI2cmRldi1cdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMSk7XG5kcml2ZXJzL21kL21kLmMtMzYzMC19XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01Nz1zc2l6ZV90IGJhZGJsb2Nrc19zaG93KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjaGFyICpwYWdlLCBpbnQgdW5hY2spO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1ODpzc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTktXHRcdFx0aW50IHVuYWNrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0NgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEJsb2NrIERldmljZXMgdmlhIHN5c2ZzOiBBIFBvdGVudGlhbGx5IEludGVyZXN0aW5nIFZlY3RvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJhZCBibG9jayBoYW5kbGluZyBpcyBpbXBsZW1lbnRlZCBhbmQgSSBzZWUgdGhhdCBgYmFkYmxvY2tzX3N0b3JlYCBpcyB1c2VkIGJ5IGBkaXNrX2JhZGJsb2Nrc19zdG9yZWAgd2l0aGluIGBibG9jay9nZW5oZC5jYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IGNsaWNrcyB0aGF0IHRoaXMgbWVhbnMgYW55IGJsb2NrIGRldmljZSB3aXRoIGJhZGJsb2NrcyBlbmFibGVkIHBvdGVudGlhbGx5IGhhcyBhIHN5c2ZzIGludGVyZmFjZSBmb3IgZnV6emluZyEgVGhpcyB3YXJyYW50cyBpbW1lZGlhdGUgYXR0ZW50aW9uLgoKTGV0IG1lIGNvbmZpcm0gdGhlIGFjY2VzcyBtZXRob2QuIEFscmlnaHQsIGBkaXNrX2JhZGJsb2Nrc19zdG9yZWAgaXMgcmVnaXN0ZXJlZCB3aXRoIGBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKWAuIFRoYXQgcGxhY2VtZW50IGluIHN5c2ZzIGlzIGdvaW5nIHRvIG1ha2UgaXQgYWNjZXNzaWJsZSB0aHJvdWdoIGAvc3lzL2Jsb2NrLyZsdDtkZXYmZ3Q7L2JhZGJsb2Nrc2AuIFl1cCwgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBhbmQgYSBjb21wbGV0ZWx5IGZ1bmN0aW9uYWwgZW50cnlwb2ludC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGlzIHdvcnRoIGEgZGVlcGVyIGludmVzdGlnYXRpb24uCgpPa2F5LCBJJiMzOTttIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayBgYmFkYmxvY2tzX2NoZWNrYCBhcyB3ZWxsLCBzaW5jZSB0aGF0JiMzOTtzIGFub3RoZXIgaW1wb3J0YW50IGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdGhlIGJhZGJsb2NrcyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3NfY2hlY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmMtMjgyLSAqICAgICBibG9ja3MgdGFibGUgYXJlIGFsbCBhY2tlZCwgbWVyZ2luZyB0aGVtIGludG8gYSBsYXJnZXIgb25lIHJhbmdlIG1heVxuYmxvY2svYmFkYmxvY2tzLmM6MjgzOiAqICAgICBvY2N1cHkgbGVzcyBiYWQgYmxvY2tzIHRhYmxlIHNwYWNlIGFuZCBtYWtlIGJhZGJsb2Nrc19jaGVjaygpIGZhc3Rlci5cbmJsb2NrL2JhZGJsb2Nrcy5jLTI4NC0gKiAgICAgVGhlcmVmb3JlIGluIHN1Y2ggc2l0dWF0aW9uLCBhZnRlciBvdmVyd3JpdGluZyByYW5nZSBTLCB0aGUgcHJldmlvdXMgcmFuZ2Vcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDU1PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjaGVjayBiYWQgYmxvY2tzIHJhbmdlIGZyb20gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTIwMTpzdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMjAyLVx0XHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTI3OS0vKipcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyODA6ICogYmFkYmxvY2tzX2NoZWNrKCkgLSBjaGVjayBhIGdpdmVuIHJhbmdlIGZvciBiYWQgc2VjdG9yc1xuYmxvY2svYmFkYmxvY2tzLmMtMTI4MS0gKiBAYmI6XHRcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTI5NS0gKlxuYmxvY2svYmFkYmxvY2tzLmM6MTI5NjogKiBMb2NraW5nIG9mIHRoZSBiYWQtYmxvY2sgdGFibGUgdXNlcyBhIHNlcWxvY2sgc28gYmFkYmxvY2tzX2NoZWNrXG5ibG9jay9iYWRibG9ja3MuYy0xMjk3LSAqIG1pZ2h0IG5lZWQgdG8gcmV0cnkgaWYgaXQgaXMgdmVyeSB1bmx1Y2t5LlxuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzMTItICovXG5ibG9jay9iYWRibG9ja3MuYzoxMzEzOmludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5ibG9jay9iYWRibG9ja3MuYy0xMzE0LVx0XHRcdHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzQwLVx0c2VxID0gcmVhZF9zZXFiZWdpbihcdTAwMjZiYi1cdTAwM2Vsb2NrKTtcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDE6XHRydiA9IF9iYWRibG9ja3NfY2hlY2soYmIsIHMsIHNlY3RvcnMsIGZpcnN0X2JhZCwgYmFkX3NlY3RvcnMpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM0Mi1cdGlmIChyZWFkX3NlcXJldHJ5KFx1MDAyNmJiLVx1MDAzZWxvY2ssIHNlcSkpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTM0Ni19XG5ibG9jay9iYWRibG9ja3MuYzoxMzQ3OkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19jaGVjayk7XG5ibG9jay9iYWRibG9ja3MuYy0xMzQ4LVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNDY9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU0LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1NTpcdGlmICghYmFkYmxvY2tzX2NoZWNrKGJiLCBzZWN0b3IsICpucl9zZWN0b3JzLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNmJhZF9zZWN0b3JzKSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTYtXHRcdHJldHVybiBCTEtfU1RTX09LO1xuLS1cbmRyaXZlcnMvbWQvbWQuaD0yOTk9c3RhdGljIGlubGluZSBpbnQgaXNfYmFkYmxvY2soc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4tLVxuZHJpdmVycy9tZC9tZC5oLTMwMi1cdGlmICh1bmxpa2VseShyZGV2LVx1MDAzZWJhZGJsb2Nrcy5jb3VudCkpIHtcbmRyaXZlcnMvbWQvbWQuaDozMDM6XHRcdGludCBydiA9IGJhZGJsb2Nrc19jaGVjayhcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2NrcywgcmRldi1cdTAwM2VkYXRhX29mZnNldCAmIzQzOyBzLFxuZHJpdmVycy9tZC9tZC5oLTMwNC1cdFx0XHRcdFx0c2VjdG9ycyxcbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oPTY3Nj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfYmFkX3BtZW0oc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHNlY3Rvcixcbi0tXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4Mi1cbmRyaXZlcnMvbnZkaW1tL25kLmg6NjgzOlx0XHRyZXR1cm4gISFiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbGVuIC8gNTEyLCBcdTAwMjZmaXJzdF9iYWQsXG5kcml2ZXJzL252ZGltbS9uZC5oLTY4NC1cdFx0XHRcdFx1MDAyNm51bV9iYWQpO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MzUzPXN0YXRpYyBpbnQgbmRfcGZuX2NsZWFyX21lbW1hcF9lcnJvcnMoc3RydWN0IG5kX3BmbiAqbmRfcGZuKVxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMzgzLVxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYzozODQ6XHRcdGJiX3ByZXNlbnQgPSBiYWRibG9ja3NfY2hlY2soXHUwMDI2bmRfcmVnaW9uLVx1MDAzZWJiLCBtZXRhX3N0YXJ0LFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0zODUtXHRcdFx0XHRtZXRhX251bSwgXHUwMDI2Zmlyc3RfYmFkLCBcdTAwMjZudW1fYmFkKTtcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MjQyPV9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjU4LVx0aWYgKGJiLVx1MDAzZWNvdW50IFx1MDAyNlx1MDAyNlxuZHJpdmVycy9udmRpbW0vcG1lbS5jOjI1OTpcdCAgICBiYWRibG9ja3NfY2hlY2soYmIsIHNlY3RvciwgbnVtLCBcdTAwMjZmaXJzdF9iYWQsIFx1MDAyNm51bV9iYWQpKSB7XG5kcml2ZXJzL252ZGltbS9wbWVtLmMtMjYwLVx0XHRsb25nIGFjdHVhbF9ucjtcbi0tXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTQ1PXN0cnVjdCBiYWRibG9ja3NfY29udGV4dCB7XG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01MC1cbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTE6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXHRcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTc1CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgYGJhZGJsb2Nrc19jaGVja2AgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBiYWRibG9ja3NfY2hlY2tgIGlzIHV0aWxpemVkIGJ5IGEgZmV3IGtleSBjb21wb25lbnRzOiBgbnVsbF9ibGtgLCBgbWRgLCBhbmQgYG52ZGltbWAuIEdpdmVuIHRoYXQgbGlzdCwgYG51bGxfYmxrYCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0IGFzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJdCBmZWVscyBsaWtlIGEgcmVsYXRpdmVseSBjb250YWluZWQgYW5kIGFjY2Vzc2libGUgdGFyZ2V0IHdpdGhpbiB0aGF0IGdyb3VwLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBxdWlja2x5IGRldGVybWluZSBpZiBgbnVsbF9ibGtgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBhIHR5cGljYWwgY29uZmlndXJhdGlvbiwgb3IgaWYgSSBuZWVkIHRvIGVuYWJsZSBpdCB3aXRoIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIEkgY2FuIGV2ZW4gc3RhcnQgdGVzdGluZyB0aGUgYGJhZGJsb2Nrc19jaGVja2AgYmVoYXZpb3Igd2l0aGluIHRoYXQgbW9kdWxlLiBJZGVudGlmeWluZyBhbnkgZGVwZW5kZW5jaWVzIG9yIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGdldCB0byB0aGUgZ29vZCBzdHVmZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVsbF9ibGsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0PTEzOT1GdXJ0aGVyIHJlYWRpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jsay1tcS5yc3QtMTQ1LVxuRG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0OjE0NjotIGBOdWxsIGJsb2NrIGRldmljZSBkcml2ZXIgXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvYmxvY2svbnVsbF9ibGsuaHRtbFx1MDAzZWBfXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jsay1tcS5yc3QtMTQ3LVxuLS1cbkRvY3VtZW50YXRpb24vYmxvY2svaW5kZXgucnN0PTQ9QmxvY2tcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2luZGV4LnJzdC0xOC0gICBreWJlci1pb3NjaGVkXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2luZGV4LnJzdDoxOTogICBudWxsX2Jsa1xuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3QtMjAtICAgcHJcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdD04Mz1kaXNjYXJkPVswLzFdOiBEZWZhdWx0OiAwXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdDo4NDogIFN1cHBvcnQgZGlzY2FyZCBvcGVyYXRpb25zIChyZXF1aXJlcyBtZW1vcnktYmFja2VkIG51bGxfYmxrIGRldmljZSkuXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdC04NS1cbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdD0xMTg9YmxvY2tpbmc9WzAvMV06IERlZmF1bHQ6IDBcbi0tXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdC0xMjItICAwICBSZWdpc3RlciBhcyBhIG5vbi1ibG9ja2luZyBibGstbXEgZHJpdmVyIGRldmljZS5cbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0OjEyMzogIDEgIFJlZ2lzdGVyIGFzIGEgYmxvY2tpbmcgYmxrLW1xIGRyaXZlciBkZXZpY2UsIG51bGxfYmxrIHdpbGwgc2V0XG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdC0xMjQtICAgICB0aGUgQkxLX01RX0ZfQkxPQ0tJTkcgZmxhZywgaW5kaWNhdGluZyB0aGF0IGl0IHNvbWV0aW1lcy9hbHdheXNcbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3pvbmVmcy5yc3Q9NDAwPXpvbmVmcy10b29scyBhbHNvIGluY2x1ZGVzIGEgdGVzdCBzdWl0ZSB3aGljaCBjYW4gYmUgcnVuIGFnYWluc3QgYW55IHpvbmVkXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3pvbmVmcy5yc3Q6NDAxOmJsb2NrIGRldmljZSwgaW5jbHVkaW5nIG51bGxfYmxrIGJsb2NrIGRldmljZSBjcmVhdGVkIHdpdGggem9uZWQgbW9kZS5cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvem9uZWZzLnJzdC00MDItXG4tLVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9MTUyPVRvIGZhY2lsaXRhdGUgdGVzdGluZywgZW5hYmxpbmcgdGhlIG51bGwtYmxrIGRyaXZlciAoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxNTM6aXMgYWxzbyByZWNvbW1lbmRlZC4gV2l0aCB0aGlzLCBhIHNpbXBsZSBzZXR1cCB1c2luZyBhIG51bGxfYmxrIGJsb2NrIGRldmljZVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTU0LWFzIGEgc3Vic3lzdGVtIG5hbWVzcGFjZSBjYW4gYmUgdXNlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0xODg9c2NvcGUgb2YgdGhpcyBkb2N1bWVudC4gVGhlIGZvbGxvd2luZyBvbmx5IHByb3ZpZGVzIGEgc2ltcGxlIGV4YW1wbGUgb2YgYSBwb3J0XG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxODk6YW5kIHN1YnN5c3RlbSB3aXRoIGEgc2luZ2xlIG5hbWVzcGFjZSBiYWNrZWQgYnkgYSBudWxsX2JsayBkZXZpY2UuXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTAtXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0xOTE9Rmlyc3QsIG1ha2Ugc3VyZSB0aGF0IGNvbmZpZ2ZzIGlzIGVuYWJsZWQ6OlxuLS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTE5NC1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE5NTpOZXh0LCBjcmVhdGUgYSBudWxsX2JsayBkZXZpY2UgKGRlZmF1bHQgc2V0dGluZ3MgZ2l2ZSBhIDI1MCBHQiBkZXZpY2Ugd2l0aG91dFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTk2LW1lbW9yeSBiYWNraW5nKS4gVGhlIGJsb2NrIGRldmljZSBjcmVhdGVkIHdpbGwgYmUgL2Rldi9udWxsYjAgYnkgZGVmYXVsdDo6XG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTctXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxOTg6ICAgICAgICAjIG1vZHByb2JlIG51bGxfYmxrXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTktICAgICAgICAjIGxzIC9kZXYvbnVsbGIwXG4tLVxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9MjEyPWV4YW1wbGUsIHRoZSBwb3J0IGlzIGNyZWF0ZWQgd2l0aCBhIG1heGltdW0gb2YgNCBJL08gcXVldWUgcGFpcnM6OlxuLS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTIyMS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjIyMjpOZXh0LCBjcmVhdGUgYW5kIGVuYWJsZSB0aGUgc3Vic3lzdGVtIG5hbWVzcGFjZSB1c2luZyB0aGUgbnVsbF9ibGsgYmxvY2tcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTIyMy1kZXZpY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTI4NT10YXJnZXQgZGV2aWNlIGFuZCBlbmRwb2ludCBkZXZpY2UgYXJlIGNyZWF0ZWQgYW5kIGNvbm5lY3RlZC5cbi0tXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0yODgtXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoyODk6ICAgICAgICBudWxsX2JsazogZGlzayBudWxsYjAgY3JlYXRlZFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MjkwOiAgICAgICAgbnVsbF9ibGs6IG1vZHVsZSBsb2FkZWRcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTI5MS0gICAgICAgIG52bWV0OiBhZGRpbmcgbnNpZCAxIHRvIHN1YnN5c3RlbSBudm1lcGYuMC5ucW5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0PTExMj1JL08g6K+35rGC5a6M5oiQ5LqG44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svYmxrLW1xLnJzdC0xMjAtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0OjEyMTotIGBOdWxsIOWdl+iuvuWkh+mpseWKqOeoi+W6jyBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9ibG9jay9udWxsX2Jsay5odG1sXHUwMDNlYF9cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2Jsay1tcS5yc3QtMTIyLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2luZGV4LnJzdD0yMj1UT0RPTGlzdDpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9pbmRleC5yc3QtMjktKiBreWJlci1pb3NjaGVkXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9pbmRleC5yc3Q6MzA6KiBudWxsX2Jsa1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0LTMxLSogcHJcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc9MTc9aWYgQkxLX0RFVlxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE5OnNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0yMC1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9ibG9jay9ybnVsbC9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZT0zNT1vYmotJChDT05GSUdfQkxLX0RFVl9STkJEKVx0JiM0Mzs9IHJuYmQvXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxuZHJpdmVycy9ibG9jay9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcdCYjNDM7PSBudWxsX2Jsay9cbmRyaXZlcnMvYmxvY2svTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX0JMS19ERVZfUlVTVF9OVUxMKSAmIzQzOz0gcm51bGwvXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT00PWNjZmxhZ3MteVx0XHRcdCYjNDM7PSAtSSQoc3JjKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS01LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19CTEtfREVWX05VTExfQkxLKVx0JiM0Mzs9IG51bGxfYmxrLm9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NzpudWxsX2Jsay1vYmpzXHRcdFx0Oj0gbWFpbi5vXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTgtaWZlcSAoJChDT05GSUdfQkxLX0RFVl9aT05FRCksIHkpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlOjk6bnVsbF9ibGstJChDT05GSUdfVFJBQ0lORykgXHQmIzQzOz0gdHJhY2Uub1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS0xMC1lbmRpZlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZToxMTpudWxsX2Jsay0kKENPTkZJR19CTEtfREVWX1pPTkVEKSAmIzQzOz0gem9uZWQub1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTExLSNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTI6I2luY2x1ZGUgXCYjMzQ7bnVsbF9ibGsuaFwmIzM0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTMtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNC0jdW5kZWYgcHJfZm10XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNTojZGVmaW5lIHByX2ZtdChmbXQpXHRcJiMzNDtudWxsX2JsazogXCYjMzQ7IGZtdFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTYtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjIxPW1vZHVsZV9wYXJhbV9uYW1lZChkaXNjYXJkLCBnX2Rpc2NhcmQsIGJvb2wsIDA0NDQpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjIyOk1PRFVMRV9QQVJNX0RFU0MoZGlzY2FyZCwgXCYjMzQ7U3VwcG9ydCBkaXNjYXJkIG9wZXJhdGlvbnMgKHJlcXVpcmVzIG1lbW9yeS1iYWNrZWQgbnVsbF9ibGsgZGV2aWNlKS4gRGVmYXVsdDogZmFsc2VcJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjIzLVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTcxOT1zdGF0aWMgc3NpemVfdCBtZW1iX2dyb3VwX2ZlYXR1cmVzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTczMy1cdFx0aWYgKHJldCBcdTAwM2U9IGxlZnQpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjczNDpcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7VG9vIG1hbnkgbnVsbF9ibGsgZmVhdHVyZXMgdG8gcHJpbnRcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzM1LVx0XHRcdG1lbXplcm9fZXhwbGljaXQocGFnZSwgUEFHRV9TSVpFKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzk1PXN0YXRpYyBpbmxpbmUgdm9pZCBudWxsYl9jb21wbGV0ZV9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzOTktXHQvKlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQwMDpcdCAqIFNpbmNlIHJvb3QgcHJpdmlsZWdlcyBhcmUgcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZSBudWxsX2Jsa1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQwMS1cdCAqIGRyaXZlciwgaXQgaXMgZmluZSB0aGF0IHRoaXMgZHJpdmVyIGRvZXMgbm90IGluaXRpYWxpemUgdGhlXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQwMy1cdCAqIGFueXdheSBpZiBLTVNBTiBpcyBlbmFibGVkIHRvIHByZXZlbnQgdGhhdCBLTVNBTiBjb21wbGFpbnNcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MDQ6XHQgKiBhYm91dCBudWxsX2JsayBub3QgaW5pdGlhbGl6aW5nIHJlYWQgZGF0YSBidWZmZXJzLlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTQwNS1cdCAqL1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy0yLS8qXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmM6MzogKiBudWxsX2JsayB0cmFjZSByZWxhdGVkIGhlbHBlcnMuXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmMtNC0gKlxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy05LS8qXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmM6MTA6ICogSGVscGVyIHRvIHVzZSBmb3IgYWxsIG51bGxfYmxrIHRyYWNlcyB0byBleHRyYWN0IGRpc2sgbmFtZS5cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy0xMS0gKi9cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmgtMi0vKlxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oOjM6ICogbnVsbF9ibGsgZGV2aWNlIGRyaXZlciB0cmFjZXBvaW50cy5cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC00LSAqXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oLTE2LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oOjE3OiNpbmNsdWRlIFwmIzM0O251bGxfYmxrLmhcJiMzNDtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC0xOC1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRtYXAuaFx1MDAzZVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjQ6I2luY2x1ZGUgXCYjMzQ7bnVsbF9ibGsuaFwmIzM0O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTUtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTktI3VuZGVmIHByX2ZtdFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjEwOiNkZWZpbmUgcHJfZm10KGZtdClcdFwmIzM0O251bGxfYmxrOiBcJiMzNDsgZm10XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTEtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTc3OD1zc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTc4NS1cdGlmICghZGV2LVx1MDAzZXpvbmVkKSB7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6Nzg2Olx0XHRwcl9lcnIoXCYjMzQ7bnVsbF9ibGsgZGV2aWNlIGlzIG5vdCB6b25lZFxcblwmIzM0Oyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzg3LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzkwLVx0aWYgKCFkZXYtXHUwMDNlem9uZXMpIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3OTE6XHRcdHByX2VycihcJiMzNDtudWxsX2JsayBkZXZpY2UgaXMgbm90IHlldCBwb3dlcmVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03OTItXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM9NDc9ICAgIGZuIG1ha2VfZ3JvdXAoXG4tLVxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycy01NC0gICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXG5kcml2ZXJzL2Jsb2NrL3JudWxsL2NvbmZpZ2ZzLnJzOjU1OiAgICAgICAgICAgICAgICAvLyBOYW1lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEMgbnVsbF9ibGtcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNTYtICAgICAgICAgICAgICAgIHBvd2VyOiAwLFxuLS1cbmRyaXZlcnMvYmxvY2svcm51bGwvcm51bGwucnM9MzY9ICAgIGZuIGluaXQoX21vZHVsZTogXHUwMDI2JiMzOTtzdGF0aWMgVGhpc01vZHVsZSkgLVx1MDAzZSBpbXBsIFBpbkluaXRcdTAwM2NTZWxmLCBFcnJvclx1MDAzZSB7XG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzOjM3OiAgICAgICAgcHJfaW5mbyEoXCYjMzQ7UnVzdCBudWxsX2JsayBsb2FkZWRcXG5cJiMzNDspO1xuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycy0zOC1cbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvdWxwL3J0cnMvcnRycy1jbHQuYz02OT1fX3J0cnNfZ2V0X3Blcm1pdChzdHJ1Y3QgcnRyc19jbHRfc2VzcyAqY2x0LCBlbnVtIHJ0cnNfY2x0X2Nvbl90eXBlIGNvbl90eXBlKVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jLTc1LVx0LypcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jOjc2Olx0ICogQWRhcHRlZCBmcm9tIG51bGxfYmxrIGdldF90YWcoKS4gQ2FsbGVycyBmcm9tIGRpZmZlcmVudCBjcHVzIG1heVxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL3J0cnMtY2x0LmMtNzctXHQgKiBncmFiIHRoZSBzYW1lIGJpdCwgc2luY2UgZmluZF9maXJzdF96ZXJvX2JpdCBpcyBub3QgYXRvbWljLlxuLS1cbmxpYi9mYXVsdC1pbmplY3QuYz0yNjc9RVhQT1JUX1NZTUJPTF9HUEwoZmF1bHRfY3JlYXRlX2RlYnVnZnNfYXR0cik7XG4tLVxubGliL2ZhdWx0LWluamVjdC5jLTI3Mi1cbmxpYi9mYXVsdC1pbmplY3QuYzoyNzM6LyogVGhlc2UgY29uZmlnZnMgYXR0cmlidXRlIHV0aWxpdGllcyBhcmUgY29waWVkIGZyb20gZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgKi9cbmxpYi9mYXVsdC1pbmplY3QuYy0yNzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTQ3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBgYmFkYmxvY2tzYCBpbiBCbG9jayBEZXZpY2UgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIGBiYWRibG9ja3NgIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHRoZSByZWNlbnRseSBhcHBsaWVkIHBhdGNoLiBUaGUgc3RhcnRpbmcgcG9pbnQgaGVyZSBpcyB0aGUgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc2VlIGlmIHdlIG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIEkmIzM5O2xsIGFkZCBgQkxLX0RFVl9OVUxMX0JMS2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGJlIHN1cmUuIEhvd2V2ZXIsIHRoZSB1c2Ugb2YgYG51bGxfYmxrYCBzZWVtcyBwZXJmZWN0IGZvciB0ZXN0aW5nIGBiYWRibG9ja3NgIHRocm91Z2ggY29uZmlnZnMuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIGNvbnRleHQsIGBDT05GSUdfTURgIChNdWx0aXBsZSBEZXZpY2VzKSBpcyBvZnRlbiBlbmFibGVkLCBhbmQgYGRyaXZlcnMvbWQvbWQuY2AgY2FsbHMgYGJhZGJsb2Nrc2AgZnVuY3Rpb25zLCBidXQgYG51bGxfYmxrYCBpcyB0aGUgY2xlYXIgZWFzaWVzdCBvcHRpb24gaGVyZSBmb3IgdGVzdGluZyBiYWRibG9ja3MgdGhyb3VnaCBjb25maWdmcy4KClRoZSByZWNlbnQgcGF0Y2ggY2F1Z2h0IG15IGV5ZSwgZml4aW5nIGFuIG92ZXJmbG93IGlzc3VlIGluIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgIGFuZCBhbHNvIGFkZHJlc3NpbmcgYHJvdW5kZG93bmAgYW5kIGByb3VuZHVwYCBtYWNyb3Mgd2l0aGluIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYW5kIGRlbWFuZHMgdGFyZ2V0ZWQgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgdGhlbiBzaG91bGQgYmUgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gTGV0JiMzOTtzIHNlZS4uLiBJbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgb2YgdGhlIG1haW4gaW50ZXJmYWNlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zdG9yZWAsIGFuZCBgYmFkYmxvY2tzX3Nob3dgLgoKQWgsIGJ1dCB0aGUgcGF0Y2ggbW9kaWZpZWQgdGhlIGludGVybmFsIGZ1bmN0aW9ucywgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuIGBiYWRibG9ja3NfY2hlY2tgIHNob3VsZCBiZSBsaXN0ZWQsIGJlY2F1c2UgaXQgaGFzIGJlZW4gbW9kaWZpZWQuIFNvIEkmIzM5O2xsIGxpc3QgdGhlIGtleSBzeW1ib2xzIGFzOgoKKiAgIGBfYmFkYmxvY2tzX3NldGAKKiAgIGBfYmFkYmxvY2tzX2NsZWFyYAoqICAgYGJhZGJsb2Nrc19jaGVja2AKKiAgIGBiYWRibG9ja3Nfc2V0YAoqICAgYGJhZGJsb2Nrc19jbGVhcmAKCk5vdyBJJiMzOTtsbCBjaGVjayBgYmFkYmxvY2tzX2NsZWFyYCBpbiBgYmFkYmxvY2tzLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiYWRibG9ja3NfY2xlYXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmFkYmxvY2tzLmM9MTAzNz1zdGF0aWMgaW50IGZyb250X3NwbGl0dGluZ19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTA1NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXG5ibG9jay9iYWRibG9ja3MuYzoxMDU1OnN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG5ibG9jay9iYWRibG9ja3MuYy0xMDU2LXtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMzcwPUVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zZXQpO1xuLS1cbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzItLyoqXG5ibG9jay9iYWRibG9ja3MuYzoxMzczOiAqIGJhZGJsb2Nrc19jbGVhcigpIC0gUmVtb3ZlIGEgcmFuZ2Ugb2YgYmFkIGJsb2NrcyB0byB0aGUgdGFibGUuXG5ibG9jay9iYWRibG9ja3MuYy0xMzc0LSAqIEBiYjpcdFx0dGhlIGJhZGJsb2NrcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyBhbGwgYmFkYmxvY2sgaW5mb3JtYXRpb25cbi0tXG5ibG9jay9iYWRibG9ja3MuYy0xMzg1LSAqL1xuYmxvY2svYmFkYmxvY2tzLmM6MTM4Njpib29sIGJhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODcte1xuYmxvY2svYmFkYmxvY2tzLmM6MTM4ODpcdHJldHVybiBfYmFkYmxvY2tzX2NsZWFyKGJiLCBzLCBzZWN0b3JzKTtcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzODktfVxuYmxvY2svYmFkYmxvY2tzLmM6MTM5MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2xlYXIpO1xuYmxvY2svYmFkYmxvY2tzLmMtMTM5MS1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTY3LVx0XHRcdHJldCA9IGNvdW50O1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4Olx0fSBlbHNlIGlmIChiYWRibG9ja3NfY2xlYXIoXHUwMDI2dF9kZXYtXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2OS1cdFx0XHRcdCAgIGVuZCAtIHN0YXJ0ICYjNDM7IDEpKSB7XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTgtXHRpZiAoY21kLVx1MDAzZW5xLVx1MDAzZWRldi1cdTAwM2ViYWRibG9ja3Nfb25jZSlcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEzNTk6XHRcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzYwLVxuLS1cbmRyaXZlcnMvbWQvbWQuYz0xMDU5Nj12b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcbi0tXG5kcml2ZXJzL21kL21kLmMtMTA2MDMtXG5kcml2ZXJzL21kL21kLmM6MTA2MDQ6XHRpZiAoIWJhZGJsb2Nrc19jbGVhcihcdTAwMjZyZGV2LVx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycykpXG5kcml2ZXJzL21kL21kLmMtMTA2MDUtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL252ZGltbS9idXMuYz0xNjQ9c3RhdGljIGludCBudmRpbW1fY2xlYXJfYmFkYmxvY2tzX3JlZ2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXG4tLVxuZHJpdmVycy9udmRpbW0vYnVzLmMtMTgzLVx0c2VjdG9yID0gKGN0eC1cdTAwM2VwaHlzIC0gbmRfcmVnaW9uLVx1MDAzZW5kcl9zdGFydCkgLyA1MTI7XG5kcml2ZXJzL252ZGltbS9idXMuYzoxODQ6XHRiYWRibG9ja3NfY2xlYXIoXHUwMDI2bmRfcmVnaW9uLVx1MDAzZWJiLCBzZWN0b3IsIGN0eC1cdTAwM2VjbGVhcmVkIC8gNTEyKTtcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTE4NS1cbi0tXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXG4tLVxuZHJpdmVycy9udmRpbW0vY2xhaW0uYy0yNjktXHRcdFx0XHRjbGVhcmVkIC89IDUxMjtcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmM6MjcwOlx0XHRcdFx0YmFkYmxvY2tzX2NsZWFyKFx1MDAyNm5zaW8tXHUwMDNlYmIsIHNlY3RvciwgY2xlYXJlZCk7XG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI3MS1cdFx0XHR9XG4tLVxuZHJpdmVycy9udmRpbW0vcG1lbS5jPTg4PXN0YXRpYyB2b2lkIHBtZW1fY2xlYXJfYmIoc3RydWN0IHBtZW1fZGV2aWNlICpwbWVtLCBzZWN0b3JfdCBzZWN0b3IsIGxvbmcgYmxrcylcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTEtXHRcdHJldHVybjtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo5MjpcdGJhZGJsb2Nrc19jbGVhcihcdTAwMjZwbWVtLVx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xuZHJpdmVycy9udmRpbW0vcG1lbS5jLTkzLVx0aWYgKHBtZW0tXHUwMDNlYmJfc3RhdGUpXG4tLVxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01Mz1ib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVx0XHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTU6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpO1xuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01Ni12b2lkIGFja19hbGxfYmFkYmxvY2tzKHN0cnVjdCBiYWRibG9ja3MgKmJiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCYWQgQmxvY2sgSGFuZGxpbmcgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgaW5pdGlhbGx5LCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBkaXJlY3RseSBhbHRlcmVkIGFwcGVhciB0byBiZSBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gIEkgbmVlZCB0byBjb25maXJtIHRoaXMgaW1wcmVzc2lvbi4KCkZpcnN0LCBJIGhhZCB0byBjbGFyaWZ5IHdoZXRoZXIgYGJhZGJsb2Nrc19zdG9yZWAgd2FzIG1vZGlmaWVkLCBidXQgaXQmIzM5O3Mgbm90LiBUaG91Z2ggaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgYnkgYGJhZGJsb2Nrc19zZXRgIGFuZCBgYmFkYmxvY2tzX2NsZWFyYC4gU28sIHRoZSBwYXRjaCBzZWVtcyB0byBjZW50ZXIgYXJvdW5kIHRoZXNlIHRocmVlLiBJIHNob3VsZCBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlc2Uga2V5IGZ1bmN0aW9ucy4KCk5leHQsIEkgbmVlZGVkIHRvIGNvbmZpcm0gdGhhdCB0aGUgYGJhZGJsb2Nrcy5jYCBtb2R1bGUgaXMsIGluIGZhY3QsIGNvbXBpbGVkIGJ5IGRlZmF1bHQuIEEgcXVpY2sgY2hlY2sgb2YgdGhlIGBibG9jay9NYWtlZmlsZWAgYW5kIHRoZSBgb2JqLXlgIHNldHRpbmcgY29uZmlybWVkIHRoaXMuCgpOb3csIGxldCBtZSBpbnZlc3RpZ2F0ZSB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBpcyBiZW5lZmljaWFsLCBhcyBpdCBleHBvc2VzIGJhZGJsb2NrcyB0aHJvdWdoIGNvbmZpZ2ZzLiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IGxvY2F0aW9ucy4KCkFoLCB0aGVyZSYjMzk7cyBhbm90aGVyIHBvaW50LiBgYmFkYmxvY2tzX3N0b3JlYCBpcyBhbHNvIGV4cG9zZWQgdGhyb3VnaCBgZGlza19iYWRibG9ja3Nfc3RvcmVgIHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gbG9vayBhdCB0aGF0IGZ1bmN0aW9uLCBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNCAxODoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkaXNrX2JhZGJsb2Nrc19zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9nZW5oZC5jPTg1MT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9nZW5oZC5jLTg2Mi1cbmJsb2NrL2dlbmhkLmM6ODYzOnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbmJsb2NrL2dlbmhkLmMtODY0LVx0XHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5ibG9jay9nZW5oZC5jPTExNzI9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xuYmxvY2svZ2VuaGQuYzoxMTczOnN0YXRpYyBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKTtcbmJsb2NrL2dlbmhkLmMtMTE3NC1zdGF0aWMgREVWSUNFX0FUVFIoZGlza3NlcSwgMDQ0NCwgZGlza3NlcV9zaG93LCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNzYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4KCioqQW5hbHl6aW5nIHRoZSBgZGlza19iYWRibG9ja3NgIHN5c2ZzIEF0dHJpYnV0ZSBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBJdCBzZWVtcyBsaWtlIGFueSBibG9jayBkZXZpY2Ugd2hlcmUgdGhlIGBkaXNrLSZndDtiYmAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGlzIGF1dG9tYXRpY2FsbHkgZ29pbmcgdG8gaGF2ZSB0aGUgc3lzZnMgYXR0cmlidXRlIHJlbGF0ZWQgdG8gYmFkIGJsb2NrcyBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBhc3N1bXB0aW9uLCBlc3NlbnRpYWxseSB0eWluZyB0aGUgcHJlc2VuY2Ugb2YgdGhhdCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gdGhhdCBgZGlzay0mZ3Q7YmJgIGluaXRpYWxpemF0aW9uLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIGhvdyB0aGF0JiMzOTtzIGltcGxlbWVudGVkLiBBaCwgeWVzLCBsb29raW5nIGF0IHRoZSBjb2RlIGZvciB0aGUgYGRpc2tfYmFkYmxvY2tzX3N0b3JlYCBmdW5jdGlvbiwgaXQgc3BlY2lmaWNhbGx5IGNoZWNrcyBpZiBgZGlzay0mZ3Q7YmJgIGlzICpub3QqIE5VTEwuIFRoYXQgY29uZmlybXMgdGhlIGRlcGVuZGVuY3kgSSBqdXN0IGh5cG90aGVzaXplZDogaWYgYGRpc2stJmd0O2JiYCBpcyBOVUxMLCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZCwgYW5kIHRoZSBzeXNmcyBhdHRyaWJ1dGUgcHJlc3VtYWJseSB3b24mIzM5O3QgZXZlbiBiZSBjcmVhdGVkIG9yIHdpbGwgcmV0dXJuIGFuIGVycm9yIHdoZW4gYWNjZXNzZWQuIEl0IGlzIGFuIGltcG9ydGFudCBzYW5pdHkgY2hlY2suIFNvLCB0aGF0JiMzOTtzIHRoZSBrZXkgcmVxdWlyZW1lbnQgLSBpbml0aWFsaXphdGlvbiBvZiBgZGlzay0mZ3Q7YmJgLiBHb3QgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rpc2stXHUwMDNlYmImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svZ2VuaGQuYz04NTE9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy04NTYtXG5ibG9jay9nZW5oZC5jOjg1NzpcdGlmICghZGlzay1cdTAwM2ViYilcbmJsb2NrL2dlbmhkLmMtODU4LVx0XHRyZXR1cm4gc3lzZnNfZW1pdChwYWdlLCBcJiMzNDtcXG5cJiMzNDspO1xuYmxvY2svZ2VuaGQuYy04NTktXG5ibG9jay9nZW5oZC5jOjg2MDpcdHJldHVybiBiYWRibG9ja3Nfc2hvdyhkaXNrLVx1MDAzZWJiLCBwYWdlLCAwKTtcbmJsb2NrL2dlbmhkLmMtODYxLX1cbi0tXG5ibG9jay9nZW5oZC5jPTg2Mz1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy04NjgtXG5ibG9jay9nZW5oZC5jOjg2OTpcdGlmICghZGlzay1cdTAwM2ViYilcbmJsb2NrL2dlbmhkLmMtODcwLVx0XHRyZXR1cm4gLUVOWElPO1xuYmxvY2svZ2VuaGQuYy04NzEtXG5ibG9jay9nZW5oZC5jOjg3MjpcdHJldHVybiBiYWRibG9ja3Nfc3RvcmUoZGlzay1cdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcbmJsb2NrL2dlbmhkLmMtODczLX1cbi0tXG5ibG9jay9nZW5oZC5jPTEyMzY9c3RhdGljIHVtb2RlX3QgZGlza192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgbilcbi0tXG5ibG9jay9nZW5oZC5jLTEyNDAtXG5ibG9jay9nZW5oZC5jOjEyNDE6XHRpZiAoYSA9PSBcdTAwMjZkZXZfYXR0cl9iYWRibG9ja3MuYXR0ciBcdTAwMjZcdTAwMjYgIWRpc2stXHUwMDNlYmIpXG5ibG9jay9nZW5oZC5jLTEyNDItXHRcdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtNTUzLVx0bnZkaW1tX2JhZGJsb2Nrc19wb3B1bGF0ZShuZF9yZWdpb24sIFx1MDAyNnBtZW0tXHUwMDNlYmIsIFx1MDAyNmJiX3JhbmdlKTtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo1NTQ6XHRkaXNrLVx1MDAzZWJiID0gXHUwMDI2cG1lbS1cdTAwM2ViYjtcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODUyCgkJCQkJCQlvdXRwdXQ6IDE2CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBpbml0aWFsaXphdGlvbiBvZiBgZGlzay0mZ3Q7YmJgLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIG9ubHkgZG9uZSBmb3IgYHBtZW1gLCBvciBOVlJBTS4gSG1tLCB3aGF0IGFib3V0IGBudWxsX2Jsa2A/IFRoYXQgbW9kdWxlIHV0aWxpemVzIGB0X2Rldi0mZ3Q7YmFkYmxvY2tzYCBidXQgZXhwb3NlcyBpdCB0aHJvdWdoIGNvbmZpZ2ZzIGluc3RlYWQgb2Ygc3lzZnMuIFJpZ2h0LCBhbmQgdGhlbiBJIHJlbWVtYmVyIHRoYXQgYG1kYCBhbHNvIGhhbmRsZXMgYmFkYmxvY2tzLCBidXQgZXhwb3NlcyB0aGVtIGRpZmZlcmVudGx5LiBJdCB1c2VzIGByZGV2LSZndDtiYWRibG9ja3NgIGFuZCBwdXRzIHRoZW0gaW4gc3lzZnMgdW5kZXIgYG1kL2Rldi14eHgvYmFkX2Jsb2Nrc2AuIFRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBib3RoIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AgYW5kIGBDT05GSUdfTURgIHdvdWxkIGJlIGEgZ29vZCBhcHByb2FjaCwgSSBzaG91bGQgYWRkIGBCTEtfREVWX05VTExfQkxLYCBhbmQgYE1EYCB0byBgRW5hYmxlQ29uZmlnc2Agbm93LgoKTm93IEkgc2hvdWxkIGp1c3QgdGFrZSBhIHF1aWNrIGxvb2sgYXQgaG93IGBDT05GSUdfTURgIGlzIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Nsay9xY29tL0tjb25maWc9NTYzPWNvbmZpZyBNU01fTENDXzg5NjBcbi0tXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctNTcxLVxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjU3Mjpjb25maWcgTURNX0dDQ185NjA3XG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWctNTczLVx0dHJpc3RhdGUgXCYjMzQ7TURNOTYwNyBHbG9iYWwgQ2xvY2sgQ29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01NzktXG5kcml2ZXJzL2Nsay9xY29tL0tjb25maWc6NTgwOmNvbmZpZyBNRE1fR0NDXzk2MTVcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01ODEtXHR0cmlzdGF0ZSBcJiMzNDtNRE05NjE1IEdsb2JhbCBDbG9jayBDb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTUtXG5kcml2ZXJzL21kL0tjb25maWc6NjptZW51Y29uZmlnIE1EXG5kcml2ZXJzL21kL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7TXVsdGlwbGUgZGV2aWNlcyBkcml2ZXIgc3VwcG9ydCAoUkFJRCBhbmQgTFZNKVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZz0xNT1jb25maWcgQkxLX0RFVl9NRFxuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0zOS1cbmRyaXZlcnMvbWQvS2NvbmZpZzo0MDpjb25maWcgTURfQklUTUFQXG5kcml2ZXJzL21kL0tjb25maWctNDEtXHRib29sIFwmIzM0O01EIFJBSUQgYml0bWFwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctNTQtXG5kcml2ZXJzL21kL0tjb25maWc6NTU6Y29uZmlnIE1EX0xMQklUTUFQXG5kcml2ZXJzL21kL0tjb25maWctNTYtXHRib29sIFwmIzM0O01EIFJBSUQgbG9ja2xlc3MgYml0bWFwIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctNjUtXG5kcml2ZXJzL21kL0tjb25maWc6NjY6Y29uZmlnIE1EX0FVVE9ERVRFQ1RcbmRyaXZlcnMvbWQvS2NvbmZpZy02Ny1cdGJvb2wgXCYjMzQ7QXV0b2RldGVjdCBSQUlEIGFycmF5cyBkdXJpbmcga2VybmVsIGJvb3RcJiMzNDtcbi0tXG5kcml2ZXJzL21kL0tjb25maWctNzktXG5kcml2ZXJzL21kL0tjb25maWc6ODA6Y29uZmlnIE1EX0JJVE1BUF9GSUxFXG5kcml2ZXJzL21kL0tjb25maWctODEtXHRib29sIFwmIzM0O01EIGJpdG1hcCBmaWxlIHN1cHBvcnQgKGRlcHJlY2F0ZWQpXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTkwLVxuZHJpdmVycy9tZC9LY29uZmlnOjkxOmNvbmZpZyBNRF9MSU5FQVJcbmRyaXZlcnMvbWQvS2NvbmZpZy05Mi1cdHRyaXN0YXRlIFwmIzM0O0xpbmVhciAoYXBwZW5kKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxMDQ6Y29uZmlnIE1EX1JBSUQwXG5kcml2ZXJzL21kL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UkFJRC0wIChzdHJpcGluZykgbW9kZVwmIzM0O1xuLS1cbmRyaXZlcnMvbWQvS2NvbmZpZy0xMjMtXG5kcml2ZXJzL21kL0tjb25maWc6MTI0OmNvbmZpZyBNRF9SQUlEMVxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMSAobWlycm9yaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE0NS1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxuZHJpdmVycy9tZC9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O1JBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTE2NC1cbmRyaXZlcnMvbWQvS2NvbmZpZzoxNjU6Y29uZmlnIE1EX1JBSUQ0NTZcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNjYtXHR0cmlzdGF0ZSBcJiMzNDtSQUlELTQvUkFJRC01L1JBSUQtNiBtb2RlXCYjMzQ7XG4tLVxuZHJpdmVycy9tZC9LY29uZmlnLTIwMS1cbmRyaXZlcnMvbWQvS2NvbmZpZzoyMDI6Y29uZmlnIE1EX0NMVVNURVJcbmRyaXZlcnMvbWQvS2NvbmZpZy0yMDMtXHR0cmlzdGF0ZSBcJiMzNDtDbHVzdGVyIFN1cHBvcnQgZm9yIE1EXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0xMz1pZiBFVEhFUk5FVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MTU6Y29uZmlnIE1ESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMTYtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xOT1jb25maWcgQUNQSV9NRElPXG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTIzLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI0OmNvbmZpZyBNRElPX0FJUk9IQVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI1LVx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIEFONzU4MyBNRElPIGJ1cyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTMwLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjMxOmNvbmZpZyBNRElPX1NVTjRJXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzItXHR0cmlzdGF0ZSBcJiMzNDtBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzozOTpjb25maWcgTURJT19YR0VORVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTQwLVx0dHJpc3RhdGUgXCYjMzQ7QVBNIFgtR2VuZSBTb0MgTURJTyBidXMgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy00NS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo0Njpjb25maWcgTURJT19BU1BFRURcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy00Ny1cdHRyaXN0YXRlIFwmIzM0O0FTUEVFRCBNRElPIGJ1cyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTU4LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjU5OmNvbmZpZyBNRElPX0JJVEJBTkdcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy02MC1cdHRyaXN0YXRlIFwmIzM0O0JpdGJhbmdlZCBNRElPIGJ1c2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTY3LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjY4OmNvbmZpZyBNRElPX0JDTV9JUFJPQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gaVByb2MgTURJTyBidXMgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy03Ni1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo3Nzpjb25maWcgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzgtXHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBVbmlNQUMgTURJTyBidXMgY29udHJvbGxlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy04NS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo4Njpjb25maWcgTURJT19DQVZJVU1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy04Ny1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctODgtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6ODk6Y29uZmlnIE1ESU9fR1BJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTkwLVx0dHJpc3RhdGUgXCYjMzQ7R1BJTyBsaWItYmFzZWQgYml0YmFuZ2VkIE1ESU8gYnVzZXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTgtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6OTk6Y29uZmlnIE1ESU9fSElTSV9GRU1BQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwMC1cdHRyaXN0YXRlIFwmIzM0O0hpc2lsaWNvbiBGRU1BQyBNRElPIGJ1cyBjb250cm9sbGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDY6Y29uZmlnIE1ESU9fSTJDXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA3LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTE1LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjExNjpjb25maWcgTURJT19NVlVTQlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExNy1cdHRyaXN0YXRlIFwmIzM0O01hcnZlbGwgVVNCIHRvIE1ESU8gQWRhcHRlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMjItXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTIzOmNvbmZpZyBNRElPX01TQ0NfTUlJTVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEyNC1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc2VtaSBNSUlNIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzMC1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMzE6Y29uZmlnIE1ESU9fTU9YQVJUXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTMyLVx0dHJpc3RhdGUgXCYjMzQ7TU9YQSBBUlQgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMzctXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTM4OmNvbmZpZyBNRElPX09DVEVPTlxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzOS1cdHRyaXN0YXRlIFwmIzM0O09jdGVvbiBhbmQgc29tZSBUaHVuZGVyWCBTT0NzIE1ESU8gYnVzZXNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTQ3LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE0ODpjb25maWcgTURJT19QSUM2NEhQU0NcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNDktXHR0cmlzdGF0ZSBcJiMzNDtQSUM2NC1IUFNDL0hYIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTU1LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE1Njpjb25maWcgTURJT19JUFE0MDE5XG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTU3LVx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gSVBRNDAxOSBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE2My1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNjQ6Y29uZmlnIE1ESU9fSVBRODA2NFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE2NS1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIElQUTgwNjQgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzEtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTcyOmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3My1cdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3OC1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzk6Y29uZmlnIE1ESU9fUkVHTUFQXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTgwLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTg5LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE5MDpjb25maWcgTURJT19USFVOREVSXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTkxLVx0dHJpc3RhdGUgXCYjMzQ7VGh1bmRlclggU09DcyBNRElPIGJ1c2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTIwMD1jb21tZW50IFwmIzM0O01ESU8gTXVsdGlwbGV4ZXJzXCYjMzQ7XG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjAxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIwMjpjb25maWcgTURJT19CVVNfTVVYXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjAzLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjEwLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIxMTpjb25maWcgTURJT19CVVNfTVVYX01FU09OX0cxMkFcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMTItXHR0cmlzdGF0ZSBcJiMzNDtBbWxvZ2ljIEcxMmEgYmFzZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjIxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIyMjpjb25maWcgTURJT19CVVNfTVVYX01FU09OX0dYTFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTIyMy1cdHRyaXN0YXRlIFwmIzM0O0FtbG9naWMgR1hMIGJhc2VkIE1ESU8gYnVzIG11bHRpcGxleGVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTIzMi1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoyMzM6Y29uZmlnIE1ESU9fQlVTX01VWF9CQ002MzY4XG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjM0LVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gQkNNNjM2OCBNRElPIGJ1cyBtdWx0aXBsZXhlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjQzLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI0NDpjb25maWcgTURJT19CVVNfTVVYX0JDTV9JUFJPQ1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI0NS1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIGlQcm9jIGJhc2VkIE1ESU8gYnVzIG11bHRpcGxleGVyc1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNTQtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MjU1OmNvbmZpZyBNRElPX0JVU19NVVhfR1BJT1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI1Ni1cdHRyaXN0YXRlIFwmIzM0O0dQSU8gY29udHJvbGxlZCBNRElPIGJ1cyBtdWx0aXBsZXhlcnNcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjY0LVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI2NTpjb25maWcgTURJT19CVVNfTVVYX01VTFRJUExFWEVSXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjY2LVx0dHJpc3RhdGUgXCYjMzQ7TURJTyBidXMgbXVsdGlwbGV4ZXIgdXNpbmcga2VybmVsIG11bHRpcGxleGVyIHN1YnN5c3RlbVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNzYtXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mjc3OmNvbmZpZyBNRElPX0JVU19NVVhfTU1JT1JFR1xuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI3OC1cdHRyaXN0YXRlIFwmIzM0O01NSU8gZGV2aWNlLWNvbnRyb2xsZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA0IDE4OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTIxCgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDQ5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX0JMS19ERVZfTURgIGNsaWNrcyDigJMgdGhhdCYjMzk7cyB0aGUgTUQgY29uZmlnLiBJIG5lZWQgdG8gaW5jbHVkZSBgQkxLX0RFVl9NRGAgYW5kIGFsc28gYEJMS19ERVZfTlVMTF9CTEtgLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyBpbiBgYmxvY2svYmFkYmxvY2tzLmNgLCByaWdodD8gUmlnaHQsIGFuZCB0aGUgcmVhc29uIGZvciBmdXp6aW5nIGlzOiBpdCBhZGRyZXNzZXMgYW4gb3ZlcmZsb3cgYW5kIHNvbWUgaW5jb3JyZWN0IG1hY3JvIHVzYWdlIHJlbGF0ZWQgdG8gYHJvdW5kZG93bmAgYW5kIGByb3VuZHVwYCBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gR29vZCwgdGhhdCBBUEkgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2ZzIGFuZCBjb25maWdmcyDigJMgdGhpbmtpbmcgbnVsbF9ibGsgYW5kIG1kIGhlcmUg4oCTIHNvIGl0JiMzOTtzIGFjdHVhbGx5IHRlc3RhYmxlLiBUaGF0JiMzOTtzIGEgaHVnZSBwbHVzLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzLiBMb29rcyBsaWtlIGl0JiMzOTtzOiBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gWWVwLCB0aG9zZSBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXNjcmliZWQgdnVsbmVyYWJpbGl0eS4gSSYjMzk7bGwgZGVmaW5pdGVseSBhZGQgdGhvc2UuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bSBxdWlja2x5IGNvbmZpcm1pbmcgcmVhY2hhYmlsaXR5IG9mIGBiYWRibG9ja3NfY2hlY2tgLiBJdCYjMzk7cyBjYWxsZWQgYnkgYG51bGxfaGFuZGxlX2JhZGJsb2Nrc2AgaW4gYG51bGxfYmxrYCwgd2hpY2ggaXMgaXRzZWxmIGludm9rZWQgb24gZXZlcnkgSU8gaWYgYmFkYmxvY2tzIGFyZSBjb25maWd1cmVkLiBQZXJmZWN0LiBgX2JhZGJsb2Nrc19zZXRgIGlzIGNhbGxlZCBieSBgYmFkYmxvY2tzX3NldGAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlYCBpbiBgbnVsbF9ibGtgIGFuZCBgZGlza19iYWRibG9ja3Nfc3RvcmVgIGluIGBnZW5oZC5jYCBhbmQgYGJiX3N0b3JlYCBpbiBgbWQuY2AuIEFuZCBgX2JhZGJsb2Nrc19jbGVhcmAgaXMgY2FsbGVkIGJ5IGBiYWRibG9ja3NfY2xlYXJgIHdoaWNoIGlzIGNhbGxlZCBieSBgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZWAgYW5kIGBudWxsX2hhbmRsZV9iYWRibG9ja3NgIGFuZCBgcmRldl9jbGVhcl9iYWRibG9ja3NgLgoKU28sIHllYWgsIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uLiBUaGUgY29uZmlnIHNlbGVjdGlvbnMgYXJlIGNvcnJlY3QgZm9yIGNvdmVyYWdlLiBUaGUgcmVhc29uaW5nIG1ha2VzIHRvdGFsIHNlbnNlLiBBbGwgc3lzdGVtcyBhcmUgZ28uIEkmIzM5O20gc2F0aXNmaWVkLiBMZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDQgMTg6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OywKICAgICYjMzQ7QkxLX0RFVl9NRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19iYWRibG9ja3Nfc2V0JiMzNDssCiAgICAmIzM0O19iYWRibG9ja3NfY2xlYXImIzM0OywKICAgICYjMzQ7YmFkYmxvY2tzX2NoZWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIGFuZCBpbmNvcnJlY3QgdXNhZ2Ugb2Ygcm91bmRkb3duL3JvdW5kdXAgbWFjcm9zIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBUaGUgYmFkYmxvY2tzIEFQSSBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBjb25maWdmcyAoZS5nLiwgbnVsbF9ibGssIG1kKSwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHRlc3RhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDssCiAgICAmIzM0O0JMS19ERVZfTUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfYmFkYmxvY2tzX3NldCYjMzQ7LAogICAgJiMzNDtfYmFkYmxvY2tzX2NsZWFyJiMzNDssCiAgICAmIzM0O2JhZGJsb2Nrc19jaGVjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSBhbmQgaW5jb3JyZWN0IHVzYWdlIG9mIHJvdW5kZG93bi9yb3VuZHVwIG1hY3JvcyBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gVGhlIGJhZGJsb2NrcyBBUEkgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgY29uZmlnZnMgKGUuZy4sIG51bGxfYmxrLCBtZCksIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjMyLjY3MTI3MTE2MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwMjgwNzA2ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgYW5kIGluY29ycmVjdCB1c2FnZSBvZiByb3VuZGRvd24vcm91bmR1cCBtYWNyb3MgaW4gdGhlIGJhZGJsb2NrcyBibG9jayBsYXllciBBUEkuIFRoZSBiYWRibG9ja3MgQVBJIGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGNvbmZpZ2ZzIChlLmcuLCBudWxsX2JsaywgbWQpLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgdGVzdGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjMyLjY3MTI3Njg4MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxOTM3MDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzRlZGI2YjRkNjEwYThmYjgyOWJkYjNmY2FmM2JhOTYwYmM4Njg2NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCA0IDE4OjE2OjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2Jsb2NrL2JhZGJsb2Nrcy5jIGIvYmxvY2svYmFkYmxvY2tzLmNcXG5pbmRleCBlY2U2NGU3NmZlOGZmZi4uZTg0ODQ5MTI1MzIzNWYgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcXG4rKysgYi9ibG9jay9iYWRibG9ja3MuY1xcbkBAIC04NTMsMTUgKzg1MywyMSBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG4gXFx0XFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbitcXHRpZiAocyBcXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbiBcXHRpZiAoYmItXFx1MDAzZXNoaWZ0KSB7XFxuIFxcdFxcdC8qIHJvdW5kIHRoZSBzdGFydCBkb3duLCBhbmQgdGhlIGVuZCB1cCAqL1xcbiBcXHRcXHRzZWN0b3JfdCBuZXh0ID0gcyArIHNlY3RvcnM7XFxuIFxcbi1cXHRcXHRyb3VuZGRvd24ocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbi1cXHRcXHRyb3VuZHVwKG5leHQsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0cyA9IHJvdW5kX2Rvd24ocywgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbitcXHRcXHRuZXh0ID0gcm91bmRfdXAobmV4dCwgMSBcXHUwMDNjXFx1MDAzYyBiYi1cXHUwMDNlc2hpZnQpO1xcbiBcXHRcXHRzZWN0b3JzID0gbmV4dCAtIHM7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChzZWN0b3JzID09IDApXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuIFxcdHdyaXRlX3NlcWxvY2tfaXJxc2F2ZShcXHUwMDI2YmItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuIFxcdGJhZC5hY2sgPSBhY2tub3dsZWRnZWQ7XFxuQEAgLTEwNjEsNiArMTA2Nyw5IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuIFxcdFxcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4rXFx0aWYgKHMgXFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCkge1xcbiBcXHRcXHRzZWN0b3JfdCB0YXJnZXQ7XFxuIFxcbkBAIC0xMDcxLDExICsxMDgwLDE3IEBAIHN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuIFxcdFxcdCAqIGlzbid0IHRoYW4gdG8gdGhpbmsgYSBibG9jayBpcyBub3QgYmFkIHdoZW4gaXQgaXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR0YXJnZXQgPSBzICsgc2VjdG9ycztcXG4tXFx0XFx0cm91bmR1cChzLCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuLVxcdFxcdHJvdW5kZG93bih0YXJnZXQsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XFxuK1xcdFxcdHMgPSByb3VuZF91cChzLCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdHRhcmdldCA9IHJvdW5kX2Rvd24odGFyZ2V0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmICh0YXJnZXQgXFx1MDAzYyBzKVxcbitcXHRcXHRcXHRzZWN0b3JzID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHNlY3RvcnMgPT0gMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4gXFx0d3JpdGVfc2VxbG9ja19pcnEoXFx1MDAyNmJiLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdGJhZC5hY2sgPSB0cnVlO1xcbkBAIC0xMzAzLDEzICsxMzE4LDIyIEBAIGludCBiYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuIFxcbiBcXHRXQVJOX09OKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNjIDAgfHwgc2VjdG9ycyA9PSAwKTtcXG4gXFxuK1xcdGlmIChzIFxcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0aWYgKGJiLVxcdTAwM2VzaGlmdCBcXHUwMDNlIDApIHtcXG4gXFx0XFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXFxuIFxcdFxcdHNlY3Rvcl90IHRhcmdldCA9IHMgKyBzZWN0b3JzO1xcbiBcXG4tXFx0XFx0cm91bmRkb3duKHMsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0cm91bmR1cCh0YXJnZXQsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4tXFx0XFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XFxuK1xcdFxcdHMgPSByb3VuZF9kb3duKHMsIDEgXFx1MDAzY1xcdTAwM2MgYmItXFx1MDAzZXNoaWZ0KTtcXG4rXFx0XFx0dGFyZ2V0ID0gcm91bmRfdXAodGFyZ2V0LCAxIFxcdTAwM2NcXHUwMDNjIGJiLVxcdTAwM2VzaGlmdCk7XFxuK1xcdFxcdGlmICh0YXJnZXQgXFx1MDAzYyBzKVxcbitcXHRcXHRcXHRzZWN0b3JzID0gMDtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcXG4rXFxuK1xcdFxcdGlmIChzZWN0b3JzID09IDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbiBcXHR9XFxuIFxcbiByZXRyeTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6MzIuOTczODc4NTgxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk3ODA4OTk4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCIsXG4gICAgXCJCTEtfREVWX01EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX2JhZGJsb2Nrc19zZXRcIixcbiAgICBcIl9iYWRibG9ja3NfY2xlYXJcIixcbiAgICBcImJhZGJsb2Nrc19jaGVja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIG92ZXJmbG93IGlzc3VlIGFuZCBpbmNvcnJlY3QgdXNhZ2Ugb2Ygcm91bmRkb3duL3JvdW5kdXAgbWFjcm9zIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBUaGUgYmFkYmxvY2tzIEFQSSBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBjb25maWdmcyAoZS5nLiwgbnVsbF9ibGssIG1kKSwgbWFraW5nIGl0IGZ1bmN0aW9uYWwgYW5kIHRlc3RhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM0ZWRiNmI0ZDYxMGE4ZmI4MjliZGIzZmNhZjNiYTk2MGJjODY4NjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCA0IDE4OjE2OjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmFkYmxvY2tzLmMgYi9ibG9jay9iYWRibG9ja3MuY1xuaW5kZXggZWNlNjRlNzZmZThmZmYuLmU4NDg0OTEyNTMyMzVmIDEwMDY0NFxuLS0tIGEvYmxvY2svYmFkYmxvY2tzLmNcbisrKyBiL2Jsb2NrL2JhZGJsb2Nrcy5jXG5AQCAtODUzLDE1ICs4NTMsMjEgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXG4gXHRcdC8qIEludmFsaWQgc2VjdG9ycyBudW1iZXIgKi9cbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuK1x0aWYgKHMgXHUwMDNlIFVMTE9OR19NQVggLSBzZWN0b3JzKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHRpZiAoYmItXHUwMDNlc2hpZnQpIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IG5leHQgPSBzICsgc2VjdG9ycztcbiBcbi1cdFx0cm91bmRkb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbi1cdFx0cm91bmR1cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4rXHRcdHMgPSByb3VuZF9kb3duKHMsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0bmV4dCA9IHJvdW5kX3VwKG5leHQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbiBcdFx0c2VjdG9ycyA9IG5leHQgLSBzO1xuIFx0fVxuIFxuK1x0aWYgKHNlY3RvcnMgPT0gMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuIFx0d3JpdGVfc2VxbG9ja19pcnFzYXZlKFx1MDAyNmJiLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbiBcdGJhZC5hY2sgPSBhY2tub3dsZWRnZWQ7XG5AQCAtMTA2MSw2ICsxMDY3LDkgQEAgc3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcbiBcdFx0LyogSW52YWxpZCBzZWN0b3JzIG51bWJlciAqL1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4rXHRpZiAocyBcdTAwM2UgVUxMT05HX01BWCAtIHNlY3RvcnMpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbiBcdGlmIChiYi1cdTAwM2VzaGlmdCkge1xuIFx0XHRzZWN0b3JfdCB0YXJnZXQ7XG4gXG5AQCAtMTA3MSwxMSArMTA4MCwxNyBAQCBzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxuIFx0XHQgKiBpc24ndCB0aGFuIHRvIHRoaW5rIGEgYmxvY2sgaXMgbm90IGJhZCB3aGVuIGl0IGlzLlxuIFx0XHQgKi9cbiBcdFx0dGFyZ2V0ID0gcyArIHNlY3RvcnM7XG4tXHRcdHJvdW5kdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZGRvd24odGFyZ2V0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7XG4tXHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuK1x0XHRzID0gcm91bmRfdXAocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHR0YXJnZXQgPSByb3VuZF9kb3duKHRhcmdldCwgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHRpZiAodGFyZ2V0IFx1MDAzYyBzKVxuK1x0XHRcdHNlY3RvcnMgPSAwO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2VjdG9ycyA9IHRhcmdldCAtIHM7XG4gXHR9XG4gXG4rXHRpZiAoc2VjdG9ycyA9PSAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4gXHR3cml0ZV9zZXFsb2NrX2lycShcdTAwMjZiYi1cdTAwM2Vsb2NrKTtcbiBcbiBcdGJhZC5hY2sgPSB0cnVlO1xuQEAgLTEzMDMsMTMgKzEzMTgsMjIgQEAgaW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcbiBcbiBcdFdBUk5fT04oYmItXHUwMDNlc2hpZnQgXHUwMDNjIDAgfHwgc2VjdG9ycyA9PSAwKTtcbiBcbitcdGlmIChzIFx1MDAzZSBVTExPTkdfTUFYIC0gc2VjdG9ycylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRpZiAoYmItXHUwMDNlc2hpZnQgXHUwMDNlIDApIHtcbiBcdFx0Lyogcm91bmQgdGhlIHN0YXJ0IGRvd24sIGFuZCB0aGUgZW5kIHVwICovXG4gXHRcdHNlY3Rvcl90IHRhcmdldCA9IHMgKyBzZWN0b3JzO1xuIFxuLVx0XHRyb3VuZGRvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRyb3VuZHVwKHRhcmdldCwgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuLVx0XHRzZWN0b3JzID0gdGFyZ2V0IC0gcztcbitcdFx0cyA9IHJvdW5kX2Rvd24ocywgMSBcdTAwM2NcdTAwM2MgYmItXHUwMDNlc2hpZnQpO1xuK1x0XHR0YXJnZXQgPSByb3VuZF91cCh0YXJnZXQsIDEgXHUwMDNjXHUwMDNjIGJiLVx1MDAzZXNoaWZ0KTtcbitcdFx0aWYgKHRhcmdldCBcdTAwM2MgcylcbitcdFx0XHRzZWN0b3JzID0gMDtcbitcdFx0ZWxzZVxuK1x0XHRcdHNlY3RvcnMgPSB0YXJnZXQgLSBzO1xuK1xuK1x0XHRpZiAoc2VjdG9ycyA9PSAwKVxuK1x0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuIHJldHJ5OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6MzIuOTczODc5OTExWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIzMzA0NDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJhZGJsb2NrcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgYGJsb2NrL2JhZGJsb2Nrcy5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzIGl0J3MgYWRkcmVzc2luZyBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvd3Mgd2l0aGluIHRoZSBiYWQgYmxvY2sgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBmdW5jdGlvbnMgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYXJlIGdldHRpbmcgc29tZSBvdmVyZmxvdyBjaGVja3MgYWRkZWQuIEdvb2QsIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBhbHdheXMgYSB3aW4gaW4gY3JpdGljYWwga2VybmVsIHN1YnN5c3RlbXMgbGlrZSB0aGlzLlxuXG5BbmQgbm93LCBJIHNlZSBpdCdzIGFsc28gZml4aW5nIHRoZSB1c2FnZSBvZiBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgLiBIbW0sIHRoYXQgc2VlbXMgb2RkIGF0IGZpcnN0IGdsYW5jZS4gSSBpbW1lZGlhdGVseSB0aG91Z2h0LCBcIkFyZW4ndCB0aG9zZSBtYWNyb3M/XCIgQW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgdGhleSBzaG91bGQgcmV0dXJuIHRoZSByb3VuZGVkIHZhbHVlLCBidXQgdGhleSBzaG91bGRuJ3QgbW9kaWZ5IHRoZSBpbnB1dCB2YXJpYWJsZSBpbiBwbGFjZS4gU28sIHdoeSBpcyB0aGUgcGF0Y2ggY2hhbmdpbmcgaG93IHRoZXkncmUgdXNlZD8gUmVwbGFjaW5nIGBzID0gcm91bmRkb3duKHMsIC4uLilgIHdpdGggYHMgPSByb3VuZF9kb3duKHMsIC4uLilgIG1ha2VzIGl0IHNvdW5kIGxpa2UgdGhleSB3ZXJlIHRyeWluZyB0byBtb2RpZnkgdGhlIHZhcmlhYmxlIGRpcmVjdGx5LlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdvIGRlZXBlci4gTGV0J3MgY29uZmlybSBteSBzdXNwaWNpb25zLiBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIGtlcm5lbCdzIGByb3VuZGRvd25gIGFuZCBgcm91bmR1cGAgZGVmaW5pdGlvbnMuIEFoLCB5ZXMsIHRoZXkncmUgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tYXRoLmhgLiBMZXQncyBjb25maXJtIHRoZSBkZWZpbml0aW9ucyBhbmQgdXNhZ2UgaW4gdGhlIGtlcm5lbCBjb2RlIHVzaW5nIGdyZXBwZXIsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIHZlcmlmeSBteSBleHBlY3RhdGlvbnMuIEkgY2FuIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGUgcGF0Y2ggdGhpcyB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNjozOC4yMDY5MjY4ODVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTc2MzQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIHJvdW5kZG93blwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvZzIuaD02NT11bnNpZ25lZCBsb25nIF9fcm91bmRkb3duX3Bvd19vZl90d28odW5zaWduZWQgbG9uZyBuKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sb2cyLmgtMTkwLSAqL1xcbmluY2x1ZGUvbGludXgvbG9nMi5oOjE5MTojZGVmaW5lIHJvdW5kZG93bl9wb3dfb2ZfdHdvKG4pXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvbG9nMi5oLTE5Mi0oXFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9tYXRoLmgtODQtICovXFxuaW5jbHVkZS9saW51eC9tYXRoLmg6ODU6I2RlZmluZSByb3VuZGRvd24oeCwgeSkgKFxcdFxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L21hdGguaC04Ni17XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9sb2cyLmg9NTY9dW5zaWduZWQgbG9uZyBfX3JvdW5kZG93bl9wb3dfb2ZfdHdvKHVuc2lnbmVkIGxvbmcgbilcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvbG9nMi5oLTE2Ny0gKi9cXG50b29scy9pbmNsdWRlL2xpbnV4L2xvZzIuaDoxNjg6I2RlZmluZSByb3VuZGRvd25fcG93X29mX3R3byhuKVxcdFxcdFxcdFxcXFxcXG50b29scy9pbmNsdWRlL2xpbnV4L2xvZzIuaC0xNjktKFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6NDAuNjg2Njk1MDM3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5Mjc3NDUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGaXhpbmcgdGhlIGByb3VuZGRvd24oKWAgQnVnIGluIGBiYWRibG9ja3MuY2AqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBJIHNlZSB0aGUgaXNzdWUgaW1tZWRpYXRlbHkuIFRoZSBvcmlnaW5hbCBjb2RlIGluIGBibG9jay9iYWRibG9ja3MuY2Agd2FzIGNhbGxpbmcgYHJvdW5kZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdClgIGFuZCBgcm91bmR1cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdClgIHdpdGhvdXQgYWN0dWFsbHkgYXNzaWduaW5nIHRoZSByZXR1cm4gdmFsdWUuIFRoYXQncyBhIGNsYXNzaWMgbWlzdGFrZSEgVGhlc2UgZnVuY3Rpb25zLCBhcyBJIHJlY2FsbCwgYXJlIG1lYW50IHRvICpyZXR1cm4qIHRoZSByb3VuZGVkIHZhbHVlOyB0aGV5IGRvbid0IG9wZXJhdGUgKmluIHBsYWNlKi4gU28sIHRoZSB2YXJpYWJsZXMgYHNgIGFuZCBgbmV4dGAgd2VyZSBuZXZlciBhY3R1YWxseSBiZWluZyBtb2RpZmllZCBhcyBpbnRlbmRlZC5cblxuVGhlIGZpeCwgYXMgdGhlIHBhdGNoIGRlbW9uc3RyYXRlcywgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29ycmVjdGVkIGNvZGUgbm93IGNvcnJlY3RseSBhc3NpZ25zIHRoZSByZXN1bHQgb2YgdGhlIHJvdW5kaW5nIGZ1bmN0aW9ucyBiYWNrIHRvIHRoZSBvcmlnaW5hbCB2YXJpYWJsZXM6IGBzID0gcm91bmRfZG93bihzLCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7YCBhbmQgYG5leHQgPSByb3VuZF91cChuZXh0LCAxIFx1MDAzY1x1MDAzYyBiYi1cdTAwM2VzaGlmdCk7YC4gVGhpcyBlbnN1cmVzIHRoZSBzdWJzZXF1ZW50IGxvZ2ljIG9wZXJhdGVzIG9uIHRoZSByb3VuZGVkIHZhbHVlcywgd2hpY2ggaXMgdGhlIHdob2xlIHBvaW50LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBTaW5jZSB0aGlzIGZpeCBpcyBpbiB0aGUgYmxvY2sgbGF5ZXIsIEkgc2hvdWxkIGRpZyBkZWVwZXIgdG8gdW5kZXJzdGFuZCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdHJpZ2dlciB0aGUgYGJhZGJsb2Nrc2AgZnVuY3Rpb25hbGl0eS4gSXQgd291bGQgYmUgaGVscGZ1bCB0byBkZXRlcm1pbmUgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB0aGlzIGltcGFjdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6NDQuOTc5NDcyMDM0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MjQ3NTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9OD1vYmoteVxcdFxcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXFxcXG4tLVxcbmJsb2NrL01ha2VmaWxlLTEyLVxcdFxcdFxcdGJsay1tcS1zeXNmcy5vIGJsay1tcS1jcHVtYXAubyBibGstbXEtc2NoZWQubyBpb2N0bC5vIFxcXFxcXG5ibG9jay9NYWtlZmlsZToxMzpcXHRcXHRcXHRnZW5oZC5vIGlvcHJpby5vIGJhZGJsb2Nrcy5vIHBhcnRpdGlvbnMvIGJsay1ycS1xb3MubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtMTQtXFx0XFx0XFx0ZGlzay1ldmVudHMubyBibGstaWEtcmFuZ2VzLm8gZWFybHktbG9va3VwLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ3NT1OVUxMQl9ERVZJQ0VfQVRUUihyb3RhdGlvbmFsLCBib29sLCBOVUxMKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo0NzY6TlVMTEJfREVWSUNFX0FUVFIoYmFkYmxvY2tzX29uY2UsIGJvb2wsIE5VTEwpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ3Ny1OVUxMQl9ERVZJQ0VfQVRUUihiYWRibG9ja3NfcGFydGlhbF9pbywgYm9vbCwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01OTY9c3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKm51bGxiX2RldmljZV9hdHRyc1tdID0ge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU5Ny1cXHRcXHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5ODpcXHRcXHUwMDI2bnVsbGJfZGV2aWNlX2F0dHJfYmFkYmxvY2tzX29uY2UsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTk5LVxcdFxcdTAwMjZudWxsYl9kZXZpY2VfYXR0cl9iYWRibG9ja3NfcGFydGlhbF9pbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzNDY9YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2JhZGJsb2NrcyhzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTctXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM1ODpcXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3Nfb25jZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzU5LVxcdFxcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg9NTM9c3RydWN0IG51bGxiX2RldmljZSB7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtNjUtXFx0c3RydWN0IGJhZGJsb2NrcyBiYWRibG9ja3M7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjY2OlxcdGJvb2wgYmFkYmxvY2tzX29uY2U7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTY3LVxcdGJvb2wgYmFkYmxvY2tzX3BhcnRpYWxfaW87XFxuLS1cXG5kcml2ZXJzL21kL3JhaWQxLTEwLmM9Mjc4PXN0YXRpYyBpbmxpbmUgYm9vbCByYWlkMV9zaG91bGRfcmVhZF9maXJzdChzdHJ1Y3QgbWRkZXYgKm1kZGV2LFxcbi0tXFxuZHJpdmVycy9tZC9yYWlkMS0xMC5jLTI5My0gKiBiaW8gd2l0aCBSRVFfUkFIRUFEIG9yIFJFUV9OT1dBSVQgY2FuIGZhaWwgYXQgYW55dGltZSwgYmVmb3JlIHN1Y2ggSU8gaXNcXG5kcml2ZXJzL21kL3JhaWQxLTEwLmM6Mjk0OiAqIHN1Ym1pdHRlZCB0byB0aGUgdW5kZXJseWluZyBkaXNrcywgaGVuY2UgZG9uJ3QgcmVjb3JkIGJhZGJsb2NrcyBvciByZXRyeVxcbmRyaXZlcnMvbWQvcmFpZDEtMTAuYy0yOTUtICogaW4gdGhpcyBjYXNlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNjo0Ny41MDQyMzk1OTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTUxMTgzODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmxvY2sgRGV2aWNlIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBiYWRibG9ja3Mub2AgZmlsZSBhbmQgaXQgc2VlbXMgbGlrZSBpdCdzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBsb2NhdGlvbiBvZiBpdCwgYGJsb2NrL01ha2VmaWxlYCwgd2l0aCBgb2JqLXlgIGltcGxpZXMgaXQncyBhbHdheXMgY29tcGlsZWQgaW4uIEJ1dCBob2xkIG9uLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgYGJsb2NrL01ha2VmaWxlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYW5kIGRlcGVuZGVuY3kgY2hhaW4gaGVyZSBiZWZvcmUgSSBtYWtlIGFueSBhc3N1bXB0aW9ucy4gQmVzdCB0byB2ZXJpZnkgdGhlIHNwZWNpZmljcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjUwLjA1NTQyNTUwM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU1ODQ0NzY2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmoteS4qYmFkYmxvY2tzLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjUyLjcxMTI4MDUyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzkwNzUwMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCYWRibG9ja3MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgYGJsb2NrL01ha2VmaWxlYC4gTGluZSAxMywgaW4gcGFydGljdWxhciwgc2VlbXMgaW1wb3J0YW50LiBJdCdzIGJ1cmllZCB3aXRoaW4gYSBtdWx0aS1saW5lIGBvYmoteWAgYXNzaWdubWVudCwgd2hpY2ggaXMgdXN1YWxseSBhIHNpZ24gdGhhdCB0aGlzIGNvZGUgaXMgY29tcGlsZWQgaW4gc3RhdGljYWxseSwgYXNzdW1pbmcgYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gQW5kLCBhcyBJIHJlY2FsbCwgYENPTkZJR19CTE9DS2AgaXMgZXNzZW50aWFsbHkgYSBkZWZhdWx0IGluIG1vc3QgbW9kZXJuIGtlcm5lbHMuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGlzIGBiYWRibG9ja3Mub2AgZmlsZSBpcyBsaWtlbHkgYWx3YXlzIHBhcnQgb2YgdGhlIGJ1aWxkLCB1bmxlc3Mgc29tZW9uZSBleHBsaWNpdGx5IGRpc2FibGVkIHRoZSBibG9jayBkZXZpY2Ugc3VwcG9ydC5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgc3BlY2lmaWNzIG9mIHdoYXQncyBiZWVuIGNoYW5nZWQgd2l0aGluIHRoZSBmaWxlIGl0c2VsZi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIG1vZGlmaWVkLiBCYXNlZCBvbiB0aGUgZmlsZSwgdGhlIGZ1bmN0aW9ucyBhZmZlY3RlZCBhcmUgYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AuIEFsbCBvZiB0aGVzZSBhcmUgcGFydCBvZiB0aGUgY29yZSBiYWRibG9ja3MgQVBJLiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiB3aG8gdXNlcyB0aGVtPyBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHRvIGRldGVybWluZSB0aGUgc2NvcGUgb2YgaW1wYWN0IGZvciB0aGlzIHBhcnRpY3VsYXIgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjU1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE2OjU3LjY1MDM1NzQ2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI3MTE5MTU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYWRibG9ja3Nfc2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jLTIyLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MjM6ICogV2hlbiB0aGUgY2FsbGVyIG9mIGJhZGJsb2Nrc19zZXQoKSB3YW50cyB0byBzZXQgYSByYW5nZSBvZiBiYWQgYmxvY2tzLCB0aGVcXG5ibG9jay9iYWRibG9ja3MuYy0yNC0gKiBzZXR0aW5nIHJhbmdlIGNhbiBiZSBhY2tlZCBvciB1bmFja2VkLiBBbmQgdGhlIHNldHRpbmcgcmFuZ2UgbWF5IG1lcmdlLFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIwLSAqIHRoZSBiYWQgYmxvY2sgcmFuZ2Ugc2V0dGluZyBjb25kaXRpb25zLiBNYXliZSB0aGVyZSBpcyBzb21lIHJhcmUgY29ybmVyIGNhc2VcXG5ibG9jay9iYWRibG9ja3MuYzozMjE6ICogaXMgbm90IGNvbnNpZGVyZWQgYW5kIG9wdGltaXplZCwgaXQgd29uJ3QgaHVydCBpZiBiYWRibG9ja3Nfc2V0KCkgZmFpbHMgZHVlXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIyLSAqIHRvIG5vIHNwYWNlLCBvciBzb21lIHJhbmdlcyBhcmUgbm90IG1lcmdlZCB0byBzYXZlIGJhZCBibG9ja3MgdGFibGUgc3BhY2UuXFxuYmxvY2svYmFkYmxvY2tzLmMtMzIzLSAqXFxuYmxvY2svYmFkYmxvY2tzLmM6MzI0OiAqIEluc2lkZSBiYWRibG9ja3Nfc2V0KCkgZWFjaCBsb29wIHN0YXJ0cyBieSBqdW1waW5nIHRvIHJlX2luc2VydCBsYWJlbCwgZXZlcnlcXG5ibG9jay9iYWRibG9ja3MuYy0zMjUtICogdGltZSBmb3IgdGhlIG5ldyBsb29wIHByZXZfYmFkYmxvY2tzKCkgaXMgY2FsbGVkIHRvIGZpbmQgYW4gYWxyZWFkeSBzZXQgcmFuZ2VcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTgxNz1zdGF0aWMgYm9vbCB0cnlfYWRqYWNlbnRfY29tYmluZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy04MzgtLyogRG8gZXhhY3Qgd29yayB0byBzZXQgYmFkIGJsb2NrIHJhbmdlIGludG8gdGhlIGJhZCBibG9jayB0YWJsZSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjgzOTpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy04NDAtXFx0XFx0XFx0ICAgaW50IGFja25vd2xlZGdlZClcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEzNDc9RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NoZWNrKTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDktLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM1MDogKiBiYWRibG9ja3Nfc2V0KCkgLSBBZGQgYSByYW5nZSBvZiBiYWQgYmxvY2tzIHRvIHRoZSB0YWJsZS5cXG5ibG9jay9iYWRibG9ja3MuYy0xMzUxLSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2NC0gKi9cXG5ibG9jay9iYWRibG9ja3MuYzoxMzY1OmJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy0xMzY2LVxcdFxcdCAgIGludCBhY2tub3dsZWRnZWQpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2Ny17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM2ODpcXHRyZXR1cm4gX2JhZGJsb2Nrc19zZXQoYmIsIHMsIHNlY3RvcnMsIGFja25vd2xlZGdlZCk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM2OS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM3MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzcxLVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTQ4OD1zc2l6ZV90IGJhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgY29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGxlbixcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDctXFxuYmxvY2svYmFkYmxvY2tzLmM6MTUwODpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoYmIsIHNlY3RvciwgbGVuZ3RoLCAhdW5hY2spKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE1MDktXFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjQtXFx0aWYgKGJ1ZlswXSA9PSAnKycpIHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NjU6XFx0XFx0aWYgKGJhZGJsb2Nrc19zZXQoXFx1MDAyNnRfZGV2LVxcdTAwM2ViYWRibG9ja3MsIHN0YXJ0LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU2Ni1cXHRcXHRcXHRcXHQgIGVuZCAtIHN0YXJ0ICsgMSwgMSkpXFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTgwOD1zdGF0aWMgaW50IHN1cGVyXzFfbG9hZChzdHJ1Y3QgbWRfcmRldiAqcmRldiwgc3RydWN0IG1kX3JkZXYgKnJlZmRldiwgaW50IG1pbm9yX3ZlcnNpb24pXFxuLS1cXG5kcml2ZXJzL21kL21kLmMtMTkzMS1cXHRcXHRcXHRcXHRicmVhaztcXG5kcml2ZXJzL21kL21kLmM6MTkzMjpcXHRcXHRcXHRpZiAoIWJhZGJsb2Nrc19zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgc2VjdG9yLCBjb3VudCwgMSkpXFxuZHJpdmVycy9tZC9tZC5jLTE5MzMtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL21kL21kLmM9MTA1NTY9Ym9vbCByZGV2X3NldF9iYWRibG9ja3Moc3RydWN0IG1kX3JkZXYgKnJkZXYsIHNlY3Rvcl90IHMsIGludCBzZWN0b3JzLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5jLTEwNTc1LVxcbmRyaXZlcnMvbWQvbWQuYzoxMDU3NjpcXHRpZiAoIWJhZGJsb2Nrc19zZXQoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycywgMCkpIHtcXG5kcml2ZXJzL21kL21kLmMtMTA1NzctXFx0XFx0LypcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmM9MTY1PXN0YXRpYyB2b2lkIHNldF9iYWRibG9jayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3QgcywgaW50IG51bSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTY5LVxcdC8qIHRoaXMgaXNuJ3QgYW4gZXJyb3IgYXMgdGhlIGhhcmR3YXJlIHdpbGwgc3RpbGwgdGhyb3cgYW4gZXhjZXB0aW9uICovXFxuZHJpdmVycy9udmRpbW0vYmFkcmFuZ2UuYzoxNzA6XFx0aWYgKCFiYWRibG9ja3Nfc2V0KGJiLCBzLCBudW0sIDEpKVxcbmRyaXZlcnMvbnZkaW1tL2JhZHJhbmdlLmMtMTcxLVxcdFxcdGRldl9pbmZvX29uY2UoYmItXFx1MDAzZWRldiwgXFxcIiVzOiBmYWlsZWQgZm9yIHNlY3RvciAlbGx4XFxcXG5cXFwiLFxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01MT1pbnQgYmFkYmxvY2tzX2NoZWNrKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTItXFx0XFx0ICAgIHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycyk7XFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaDo1Mzpib29sIGJhZGJsb2Nrc19zZXQoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01NC1cXHRcXHQgICBpbnQgYWNrbm93bGVkZ2VkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTY6NTkuOTIxNTU0ODAyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzcyNDI3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgYmFkYmxvY2tzYCBJbnRlcmZhY2UgaW4gdGhlIEtlcm5lbCoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIHRoYXQgdGhlIGBiYWRibG9ja3Nfc2V0YCBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYSBmZXcga2V5IGRyaXZlcnM6IHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgdGhlIHNvZnR3YXJlIFJBSUQgY29tcG9uZW50IChgbWRgKSwgYW5kIHRoZSBgbnZkaW1tYCBkcml2ZXIuIFRoYXQncyBhIHJlYXNvbmFibGUgc2V0IG9mIHVzZXJzLiBUaGVzZSBhcmUgYWxsIHBsYWNlcyB3aGVyZSBiYWQgYmxvY2sgbWFuYWdlbWVudCB3b3VsZCBiZSByZWxldmFudCDigJMgdmlydHVhbCBibG9jayBkZXZpY2VzLCBSQUlEIGNvbmZpZ3VyYXRpb25zLCBhbmQgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2VzLlxuXG5UaGVuLCBJJ20gYWxzbyBvYnNlcnZpbmcgdGhhdCBgYmFkYmxvY2tzX3N0b3JlYCBpcyBpbnZva2VkIHRocm91Z2ggc3lzZnMuIFRoYXQgc3VnZ2VzdHMgc29tZSB1c2VyLXNwYWNlIGludGVyYWN0aW9uLCBhIHdheSBmb3IgYW4gYWRtaW5pc3RyYXRvciBvciB0b29sIHRvIGRpcmVjdGx5IG1hbmFnZSBiYWQgYmxvY2sgaW5mb3JtYXRpb24uIEJ1dCB0aGlzIHJhaXNlcyBhIHF1ZXN0aW9uOiBpcyBgYmFkYmxvY2tzX3N0b3JlYCBiZWluZyAqZXhwb3J0ZWQqIGZvciB1c2UgYnkgYG1kYCBvciBgbnVsbF9ibGtgLCBvciBpcyBpdCBqdXN0IGJlaW5nIGNhbGxlZCBpbmRlcGVuZGVudGx5IHRocm91Z2ggc3lzZnMgaW4gdGhvc2UgY29udGV4dHM/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIHRocm91Z2ggYGJhZGJsb2Nrc19zdG9yZWAgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgaXQncyB1c2VkIGFuZCB3aGF0IGl0IGRvZXMgaW4gcmVsYXRpb24gdG8gdGhlIGRyaXZlcnMgdGhhdCBhcmUgY2FsbGluZyBgYmFkYmxvY2tzX3NldGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NjUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzowNC4yNTg3OTk4MDdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzgxODA0NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzX3N0b3JlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jPTE0NzY9RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX3Nob3cpO1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ3OC0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxNDc5OiAqIGJhZGJsb2Nrc19zdG9yZSgpIC0gc3lzZnMgYWNjZXNzIHRvIGJhZC1ibG9ja3MgbGlzdFxcbmJsb2NrL2JhZGJsb2Nrcy5jLTE0ODAtICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNDg3LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjE0ODg6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXFxuYmxvY2svYmFkYmxvY2tzLmMtMTQ4OS1cXHRcXHRcXHRpbnQgdW5hY2spXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xNTEyLX1cXG5ibG9jay9iYWRibG9ja3MuYzoxNTEzOkVYUE9SVF9TWU1CT0xfR1BMKGJhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTUxNC1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9ODUxPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NjItXFxuYmxvY2svZ2VuaGQuYzo4NjM6c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL2dlbmhkLmMtODY0LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NzEtXFxuYmxvY2svZ2VuaGQuYzo4NzI6XFx0cmV0dXJuIGJhZGJsb2Nrc19zdG9yZShkaXNrLVxcdTAwM2ViYiwgcGFnZSwgbGVuLCAwKTtcXG5ibG9jay9nZW5oZC5jLTg3My19XFxuLS1cXG5ibG9jay9nZW5oZC5jPTExNzI9c3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xcbmJsb2NrL2dlbmhkLmM6MTE3MzpzdGF0aWMgREVWSUNFX0FUVFIoYmFkYmxvY2tzLCAwNjQ0LCBkaXNrX2JhZGJsb2Nrc19zaG93LCBkaXNrX2JhZGJsb2Nrc19zdG9yZSk7XFxuYmxvY2svZ2VuaGQuYy0xMTc0LXN0YXRpYyBERVZJQ0VfQVRUUihkaXNrc2VxLCAwNDQ0LCBkaXNrc2VxX3Nob3csIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTI1PXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MzEtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTMyOnN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUzMy1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0zNjEyPXN0YXRpYyBzc2l6ZV90IGJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbWQvbWQuYy0zNjEzLXtcXG5kcml2ZXJzL21kL21kLmM6MzYxNDpcXHRpbnQgcnYgPSBiYWRibG9ja3Nfc3RvcmUoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2NrcywgcGFnZSwgbGVuLCAwKTtcXG5kcml2ZXJzL21kL21kLmMtMzYxNS1cXHQvKiBNYXliZSB0aGF0IGFjayB3YXMgYWxsIHdlIG5lZWRlZCAqL1xcbi0tXFxuZHJpdmVycy9tZC9tZC5jPTM2Mjc9c3RhdGljIHNzaXplX3QgdWJiX3N0b3JlKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgbGVuKVxcbmRyaXZlcnMvbWQvbWQuYy0zNjI4LXtcXG5kcml2ZXJzL21kL21kLmM6MzYyOTpcXHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHBhZ2UsIGxlbiwgMSk7XFxuZHJpdmVycy9tZC9tZC5jLTM2MzAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaD01Nz1zc2l6ZV90IGJhZGJsb2Nrc19zaG93KHN0cnVjdCBiYWRibG9ja3MgKmJiLCBjaGFyICpwYWdlLCBpbnQgdW5hY2spO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTg6c3NpemVfdCBiYWRibG9ja3Nfc3RvcmUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBsZW4sXFxuaW5jbHVkZS9saW51eC9iYWRibG9ja3MuaC01OS1cXHRcXHRcXHRpbnQgdW5hY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzowNi4xOTY5ODcxMzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NjkzODA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEJsb2NrIERldmljZXMgdmlhIHN5c2ZzOiBBIFBvdGVudGlhbGx5IEludGVyZXN0aW5nIFZlY3RvcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBiYWQgYmxvY2sgaGFuZGxpbmcgaXMgaW1wbGVtZW50ZWQgYW5kIEkgc2VlIHRoYXQgYGJhZGJsb2Nrc19zdG9yZWAgaXMgdXNlZCBieSBgZGlza19iYWRibG9ja3Nfc3RvcmVgIHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIFRoYXQncyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IGNsaWNrcyB0aGF0IHRoaXMgbWVhbnMgYW55IGJsb2NrIGRldmljZSB3aXRoIGJhZGJsb2NrcyBlbmFibGVkIHBvdGVudGlhbGx5IGhhcyBhIHN5c2ZzIGludGVyZmFjZSBmb3IgZnV6emluZyEgVGhpcyB3YXJyYW50cyBpbW1lZGlhdGUgYXR0ZW50aW9uLlxuXG5MZXQgbWUgY29uZmlybSB0aGUgYWNjZXNzIG1ldGhvZC4gQWxyaWdodCwgYGRpc2tfYmFkYmxvY2tzX3N0b3JlYCBpcyByZWdpc3RlcmVkIHdpdGggYERFVklDRV9BVFRSKGJhZGJsb2NrcywgMDY0NCwgZGlza19iYWRibG9ja3Nfc2hvdywgZGlza19iYWRibG9ja3Nfc3RvcmUpYC4gVGhhdCBwbGFjZW1lbnQgaW4gc3lzZnMgaXMgZ29pbmcgdG8gbWFrZSBpdCBhY2Nlc3NpYmxlIHRocm91Z2ggYC9zeXMvYmxvY2svXHUwMDNjZGV2XHUwMDNlL2JhZGJsb2Nrc2AuIFl1cCwgdGhhdCdzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBhIGNvbXBsZXRlbHkgZnVuY3Rpb25hbCBlbnRyeXBvaW50LiBUaGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRoYXQgaXMgd29ydGggYSBkZWVwZXIgaW52ZXN0aWdhdGlvbi5cblxuT2theSwgSSdtIGdvaW5nIHRvIHNoaWZ0IGdlYXJzIGFuZCBjaGVjayBgYmFkYmxvY2tzX2NoZWNrYCBhcyB3ZWxsLCBzaW5jZSB0aGF0J3MgYW5vdGhlciBpbXBvcnRhbnQgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUgYmFkYmxvY2tzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NDYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MTAuNDgzOTI3MDU1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTQxMjQ4OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJhZGJsb2Nrc19jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9iYWRibG9ja3MuYy0yODItICogICAgIGJsb2NrcyB0YWJsZSBhcmUgYWxsIGFja2VkLCBtZXJnaW5nIHRoZW0gaW50byBhIGxhcmdlciBvbmUgcmFuZ2UgbWF5XFxuYmxvY2svYmFkYmxvY2tzLmM6MjgzOiAqICAgICBvY2N1cHkgbGVzcyBiYWQgYmxvY2tzIHRhYmxlIHNwYWNlIGFuZCBtYWtlIGJhZGJsb2Nrc19jaGVjaygpIGZhc3Rlci5cXG5ibG9jay9iYWRibG9ja3MuYy0yODQtICogICAgIFRoZXJlZm9yZSBpbiBzdWNoIHNpdHVhdGlvbiwgYWZ0ZXIgb3ZlcndyaXRpbmcgcmFuZ2UgUywgdGhlIHByZXZpb3VzIHJhbmdlXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYz0xMDU1PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMjAwLS8qIERvIHRoZSBleGFjdCB3b3JrIHRvIGNoZWNrIGJhZCBibG9ja3MgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTIwMTpzdGF0aWMgaW50IF9iYWRibG9ja3NfY2hlY2soc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMsXFxuYmxvY2svYmFkYmxvY2tzLmMtMTIwMi1cXHRcXHRcXHQgICAgc2VjdG9yX3QgKmZpcnN0X2JhZCwgc2VjdG9yX3QgKmJhZF9zZWN0b3JzKVxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI3OS0vKipcXG5ibG9jay9iYWRibG9ja3MuYzoxMjgwOiAqIGJhZGJsb2Nrc19jaGVjaygpIC0gY2hlY2sgYSBnaXZlbiByYW5nZSBmb3IgYmFkIHNlY3RvcnNcXG5ibG9jay9iYWRibG9ja3MuYy0xMjgxLSAqIEBiYjpcXHRcXHR0aGUgYmFkYmxvY2tzIHN0cnVjdHVyZSB0aGF0IGhvbGRzIGFsbCBiYWRibG9jayBpbmZvcm1hdGlvblxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTI5NS0gKlxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEyOTY6ICogTG9ja2luZyBvZiB0aGUgYmFkLWJsb2NrIHRhYmxlIHVzZXMgYSBzZXFsb2NrIHNvIGJhZGJsb2Nrc19jaGVja1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEyOTctICogbWlnaHQgbmVlZCB0byByZXRyeSBpZiBpdCBpcyB2ZXJ5IHVubHVja3kuXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzEyLSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzMTM6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5ibG9jay9iYWRibG9ja3MuYy0xMzE0LVxcdFxcdFxcdHNlY3Rvcl90ICpmaXJzdF9iYWQsIHNlY3Rvcl90ICpiYWRfc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDAtXFx0c2VxID0gcmVhZF9zZXFiZWdpbihcXHUwMDI2YmItXFx1MDAzZWxvY2spO1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDE6XFx0cnYgPSBfYmFkYmxvY2tzX2NoZWNrKGJiLCBzLCBzZWN0b3JzLCBmaXJzdF9iYWQsIGJhZF9zZWN0b3JzKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQyLVxcdGlmIChyZWFkX3NlcXJldHJ5KFxcdTAwMjZiYi1cXHUwMDNlbG9jaywgc2VxKSlcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNDYtfVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzNDc6RVhQT1JUX1NZTUJPTF9HUEwoYmFkYmxvY2tzX2NoZWNrKTtcXG5ibG9jay9iYWRibG9ja3MuYy0xMzQ4LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1NC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU1OlxcdGlmICghYmFkYmxvY2tzX2NoZWNrKGJiLCBzZWN0b3IsICpucl9zZWN0b3JzLCBcXHUwMDI2Zmlyc3RfYmFkLCBcXHUwMDI2YmFkX3NlY3RvcnMpKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNTYtXFx0XFx0cmV0dXJuIEJMS19TVFNfT0s7XFxuLS1cXG5kcml2ZXJzL21kL21kLmg9Mjk5PXN0YXRpYyBpbmxpbmUgaW50IGlzX2JhZGJsb2NrKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzLFxcbi0tXFxuZHJpdmVycy9tZC9tZC5oLTMwMi1cXHRpZiAodW5saWtlbHkocmRldi1cXHUwMDNlYmFkYmxvY2tzLmNvdW50KSkge1xcbmRyaXZlcnMvbWQvbWQuaDozMDM6XFx0XFx0aW50IHJ2ID0gYmFkYmxvY2tzX2NoZWNrKFxcdTAwMjZyZGV2LVxcdTAwM2ViYWRibG9ja3MsIHJkZXYtXFx1MDAzZWRhdGFfb2Zmc2V0ICsgcyxcXG5kcml2ZXJzL21kL21kLmgtMzA0LVxcdFxcdFxcdFxcdFxcdHNlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9uZC5oPTY3Nj1zdGF0aWMgaW5saW5lIGJvb2wgaXNfYmFkX3BtZW0oc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHNlY3RvcixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL25kLmgtNjgyLVxcbmRyaXZlcnMvbnZkaW1tL25kLmg6NjgzOlxcdFxcdHJldHVybiAhIWJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBsZW4gLyA1MTIsIFxcdTAwMjZmaXJzdF9iYWQsXFxuZHJpdmVycy9udmRpbW0vbmQuaC02ODQtXFx0XFx0XFx0XFx0XFx1MDAyNm51bV9iYWQpO1xcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYz0zNTM9c3RhdGljIGludCBuZF9wZm5fY2xlYXJfbWVtbWFwX2Vycm9ycyhzdHJ1Y3QgbmRfcGZuICpuZF9wZm4pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTM4My1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjM4NDpcXHRcXHRiYl9wcmVzZW50ID0gYmFkYmxvY2tzX2NoZWNrKFxcdTAwMjZuZF9yZWdpb24tXFx1MDAzZWJiLCBtZXRhX3N0YXJ0LFxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMzg1LVxcdFxcdFxcdFxcdG1ldGFfbnVtLCBcXHUwMDI2Zmlyc3RfYmFkLCBcXHUwMDI2bnVtX2JhZCk7XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmM9MjQyPV9fd2VhayBsb25nIF9fcG1lbV9kaXJlY3RfYWNjZXNzKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgcGdvZmZfdCBwZ29mZixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNTgtXFx0aWYgKGJiLVxcdTAwM2Vjb3VudCBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzoyNTk6XFx0ICAgIGJhZGJsb2Nrc19jaGVjayhiYiwgc2VjdG9yLCBudW0sIFxcdTAwMjZmaXJzdF9iYWQsIFxcdTAwMjZudW1fYmFkKSkge1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy0yNjAtXFx0XFx0bG9uZyBhY3R1YWxfbnI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTQ1PXN0cnVjdCBiYWRibG9ja3NfY29udGV4dCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTUwLVxcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTE6aW50IGJhZGJsb2Nrc19jaGVjayhzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTUyLVxcdFxcdCAgICBzZWN0b3JfdCAqZmlyc3RfYmFkLCBzZWN0b3JfdCAqYmFkX3NlY3RvcnMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzoxMi40MjUxODIzMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0NDA0NTgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgYmFkYmxvY2tzX2NoZWNrYCBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgYmFkYmxvY2tzX2NoZWNrYCBpcyB1dGlsaXplZCBieSBhIGZldyBrZXkgY29tcG9uZW50czogYG51bGxfYmxrYCwgYG1kYCwgYW5kIGBudmRpbW1gLiBHaXZlbiB0aGF0IGxpc3QsIGBudWxsX2Jsa2AgaW1tZWRpYXRlbHkgc3RhbmRzIG91dCBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQgZmVlbHMgbGlrZSBhIHJlbGF0aXZlbHkgY29udGFpbmVkIGFuZCBhY2Nlc3NpYmxlIHRhcmdldCB3aXRoaW4gdGhhdCBncm91cC4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYG51bGxfYmxrYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gYSB0eXBpY2FsIGNvbmZpZ3VyYXRpb24sIG9yIGlmIEkgbmVlZCB0byBlbmFibGUgaXQgd2l0aCBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRlc3RpbmcgdGhlIGBiYWRibG9ja3NfY2hlY2tgIGJlaGF2aW9yIHdpdGhpbiB0aGF0IG1vZHVsZS4gSWRlbnRpZnlpbmcgYW55IGRlcGVuZGVuY2llcyBvciByZXF1aXJlZCBjb25maWd1cmF0aW9uIHdpbGwgYmUgZXNzZW50aWFsIGJlZm9yZSBJIGNhbiBnZXQgdG8gdGhlIGdvb2Qgc3R1ZmYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1NzUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzoxNS42NjkyMzYxOTFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NjAzNjc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibnVsbF9ibGtcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0PTEzOT1GdXJ0aGVyIHJlYWRpbmdcXG4tLVxcbkRvY3VtZW50YXRpb24vYmxvY2svYmxrLW1xLnJzdC0xNDUtXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9ibGstbXEucnN0OjE0NjotIGBOdWxsIGJsb2NrIGRldmljZSBkcml2ZXIgXFx1MDAzY2h0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L2Jsb2NrL251bGxfYmxrLmh0bWxcXHUwMDNlYF9cXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL2Jsay1tcS5yc3QtMTQ3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3Q9ND1CbG9ja1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3QtMTgtICAga3liZXItaW9zY2hlZFxcbkRvY3VtZW50YXRpb24vYmxvY2svaW5kZXgucnN0OjE5OiAgIG51bGxfYmxrXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9pbmRleC5yc3QtMjAtICAgcHJcXG4tLVxcbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0PTgzPWRpc2NhcmQ9WzAvMV06IERlZmF1bHQ6IDBcXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdDo4NDogIFN1cHBvcnQgZGlzY2FyZCBvcGVyYXRpb25zIChyZXF1aXJlcyBtZW1vcnktYmFja2VkIG51bGxfYmxrIGRldmljZSkuXFxuRG9jdW1lbnRhdGlvbi9ibG9jay9udWxsX2Jsay5yc3QtODUtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2Jsb2NrL251bGxfYmxrLnJzdD0xMTg9YmxvY2tpbmc9WzAvMV06IERlZmF1bHQ6IDBcXG4tLVxcbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0LTEyMi0gIDAgIFJlZ2lzdGVyIGFzIGEgbm9uLWJsb2NraW5nIGJsay1tcSBkcml2ZXIgZGV2aWNlLlxcbkRvY3VtZW50YXRpb24vYmxvY2svbnVsbF9ibGsucnN0OjEyMzogIDEgIFJlZ2lzdGVyIGFzIGEgYmxvY2tpbmcgYmxrLW1xIGRyaXZlciBkZXZpY2UsIG51bGxfYmxrIHdpbGwgc2V0XFxuRG9jdW1lbnRhdGlvbi9ibG9jay9udWxsX2Jsay5yc3QtMTI0LSAgICAgdGhlIEJMS19NUV9GX0JMT0NLSU5HIGZsYWcsIGluZGljYXRpbmcgdGhhdCBpdCBzb21ldGltZXMvYWx3YXlzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3pvbmVmcy5yc3Q9NDAwPXpvbmVmcy10b29scyBhbHNvIGluY2x1ZGVzIGEgdGVzdCBzdWl0ZSB3aGljaCBjYW4gYmUgcnVuIGFnYWluc3QgYW55IHpvbmVkXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy96b25lZnMucnN0OjQwMTpibG9jayBkZXZpY2UsIGluY2x1ZGluZyBudWxsX2JsayBibG9jayBkZXZpY2UgY3JlYXRlZCB3aXRoIHpvbmVkIG1vZGUuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy96b25lZnMucnN0LTQwMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTE1Mj1UbyBmYWNpbGl0YXRlIHRlc3RpbmcsIGVuYWJsaW5nIHRoZSBudWxsLWJsayBkcml2ZXIgKENPTkZJR19CTEtfREVWX05VTExfQkxLKVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE1MzppcyBhbHNvIHJlY29tbWVuZGVkLiBXaXRoIHRoaXMsIGEgc2ltcGxlIHNldHVwIHVzaW5nIGEgbnVsbF9ibGsgYmxvY2sgZGV2aWNlXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTU0LWFzIGEgc3Vic3lzdGVtIG5hbWVzcGFjZSBjYW4gYmUgdXNlZC5cXG4tLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTE4OD1zY29wZSBvZiB0aGlzIGRvY3VtZW50LiBUaGUgZm9sbG93aW5nIG9ubHkgcHJvdmlkZXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBhIHBvcnRcXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdDoxODk6YW5kIHN1YnN5c3RlbSB3aXRoIGEgc2luZ2xlIG5hbWVzcGFjZSBiYWNrZWQgYnkgYSBudWxsX2JsayBkZXZpY2UuXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTkwLVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0PTE5MT1GaXJzdCwgbWFrZSBzdXJlIHRoYXQgY29uZmlnZnMgaXMgZW5hYmxlZDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTQtXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MTk1Ok5leHQsIGNyZWF0ZSBhIG51bGxfYmxrIGRldmljZSAoZGVmYXVsdCBzZXR0aW5ncyBnaXZlIGEgMjUwIEdCIGRldmljZSB3aXRob3V0XFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTk2LW1lbW9yeSBiYWNraW5nKS4gVGhlIGJsb2NrIGRldmljZSBjcmVhdGVkIHdpbGwgYmUgL2Rldi9udWxsYjAgYnkgZGVmYXVsdDo6XFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMTk3LVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjE5ODogICAgICAgICMgbW9kcHJvYmUgbnVsbF9ibGtcXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0xOTktICAgICAgICAjIGxzIC9kZXYvbnVsbGIwXFxuLS1cXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdD0yMTI9ZXhhbXBsZSwgdGhlIHBvcnQgaXMgY3JlYXRlZCB3aXRoIGEgbWF4aW11bSBvZiA0IEkvTyBxdWV1ZSBwYWlyczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0yMjEtXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MjIyOk5leHQsIGNyZWF0ZSBhbmQgZW5hYmxlIHRoZSBzdWJzeXN0ZW0gbmFtZXNwYWNlIHVzaW5nIHRoZSBudWxsX2JsayBibG9ja1xcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0LTIyMy1kZXZpY2U6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q9Mjg1PXRhcmdldCBkZXZpY2UgYW5kIGVuZHBvaW50IGRldmljZSBhcmUgY3JlYXRlZCBhbmQgY29ubmVjdGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3QtMjg4LVxcbkRvY3VtZW50YXRpb24vbnZtZS9udm1lLXBjaS1lbmRwb2ludC10YXJnZXQucnN0OjI4OTogICAgICAgIG51bGxfYmxrOiBkaXNrIG51bGxiMCBjcmVhdGVkXFxuRG9jdW1lbnRhdGlvbi9udm1lL252bWUtcGNpLWVuZHBvaW50LXRhcmdldC5yc3Q6MjkwOiAgICAgICAgbnVsbF9ibGs6IG1vZHVsZSBsb2FkZWRcXG5Eb2N1bWVudGF0aW9uL252bWUvbnZtZS1wY2ktZW5kcG9pbnQtdGFyZ2V0LnJzdC0yOTEtICAgICAgICBudm1ldDogYWRkaW5nIG5zaWQgMSB0byBzdWJzeXN0ZW0gbnZtZXBmLjAubnFuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0PTExMj1JL08g6K+35rGC5a6M5oiQ5LqG44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0LTEyMC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9ibG9jay9ibGstbXEucnN0OjEyMTotIGBOdWxsIOWdl+iuvuWkh+mpseWKqOeoi+W6jyBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvYmxvY2svbnVsbF9ibGsuaHRtbFxcdTAwM2VgX1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2Jsay1tcS5yc3QtMTIyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0PTIyPVRPRE9MaXN0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0LTI5LSoga3liZXItaW9zY2hlZFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2Jsb2NrL2luZGV4LnJzdDozMDoqIG51bGxfYmxrXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vYmxvY2svaW5kZXgucnN0LTMxLSogcHJcXG4tLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZz0xNz1pZiBCTEtfREVWXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4LVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxOTpzb3VyY2UgXFxcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMjAtc291cmNlIFxcXCJkcml2ZXJzL2Jsb2NrL3JudWxsL0tjb25maWdcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTM1PW9iai0kKENPTkZJR19CTEtfREVWX1JOQkQpXFx0Kz0gcm5iZC9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTM2LVxcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6Mzc6b2JqLSQoQ09ORklHX0JMS19ERVZfTlVMTF9CTEspXFx0Kz0gbnVsbF9ibGsvXFxuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0zOC1vYmotJChDT05GSUdfQkxLX0RFVl9SVVNUX05VTEwpICs9IHJudWxsL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZT00PWNjZmxhZ3MteVxcdFxcdFxcdCs9IC1JJChzcmMpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZS01LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxLX0RFVl9OVUxMX0JMSylcXHQrPSBudWxsX2Jsay5vXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZTo3Om51bGxfYmxrLW9ianNcXHRcXHRcXHQ6PSBtYWluLm9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTgtaWZlcSAoJChDT05GSUdfQkxLX0RFVl9aT05FRCksIHkpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZTo5Om51bGxfYmxrLSQoQ09ORklHX1RSQUNJTkcpIFxcdCs9IHRyYWNlLm9cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL01ha2VmaWxlLTEwLWVuZGlmXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9NYWtlZmlsZToxMTpudWxsX2Jsay0kKENPTkZJR19CTEtfREVWX1pPTkVEKSArPSB6b25lZC5vXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEyOiNpbmNsdWRlIFxcXCJudWxsX2Jsay5oXFxcIlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0LSN1bmRlZiBwcl9mbXRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNTojZGVmaW5lIHByX2ZtdChmbXQpXFx0XFxcIm51bGxfYmxrOiBcXFwiIGZtdFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE2LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjIxPW1vZHVsZV9wYXJhbV9uYW1lZChkaXNjYXJkLCBnX2Rpc2NhcmQsIGJvb2wsIDA0NDQpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIyMjpNT0RVTEVfUEFSTV9ERVNDKGRpc2NhcmQsIFxcXCJTdXBwb3J0IGRpc2NhcmQgb3BlcmF0aW9ucyAocmVxdWlyZXMgbWVtb3J5LWJhY2tlZCBudWxsX2JsayBkZXZpY2UpLiBEZWZhdWx0OiBmYWxzZVxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIyMy1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTcxOT1zdGF0aWMgc3NpemVfdCBtZW1iX2dyb3VwX2ZlYXR1cmVzX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzMzLVxcdFxcdGlmIChyZXQgXFx1MDAzZT0gbGVmdCkge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjczNDpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIlRvbyBtYW55IG51bGxfYmxrIGZlYXR1cmVzIHRvIHByaW50XFxcXG5cXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03MzUtXFx0XFx0XFx0bWVtemVyb19leHBsaWNpdChwYWdlLCBQQUdFX1NJWkUpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM5NT1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbGJfY29tcGxldGVfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzOTktXFx0LypcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDAwOlxcdCAqIFNpbmNlIHJvb3QgcHJpdmlsZWdlcyBhcmUgcmVxdWlyZWQgdG8gY29uZmlndXJlIHRoZSBudWxsX2Jsa1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MDEtXFx0ICogZHJpdmVyLCBpdCBpcyBmaW5lIHRoYXQgdGhpcyBkcml2ZXIgZG9lcyBub3QgaW5pdGlhbGl6ZSB0aGVcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MDMtXFx0ICogYW55d2F5IGlmIEtNU0FOIGlzIGVuYWJsZWQgdG8gcHJldmVudCB0aGF0IEtNU0FOIGNvbXBsYWluc1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE0MDQ6XFx0ICogYWJvdXQgbnVsbF9ibGsgbm90IGluaXRpYWxpemluZyByZWFkIGRhdGEgYnVmZmVycy5cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDA1LVxcdCAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jLTItLypcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmM6MzogKiBudWxsX2JsayB0cmFjZSByZWxhdGVkIGhlbHBlcnMuXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jLTQtICpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuYy05LS8qXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jOjEwOiAqIEhlbHBlciB0byB1c2UgZm9yIGFsbCBudWxsX2JsayB0cmFjZXMgdG8gZXh0cmFjdCBkaXNrIG5hbWUuXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5jLTExLSAqL1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oLTItLypcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmg6MzogKiBudWxsX2JsayBkZXZpY2UgZHJpdmVyIHRyYWNlcG9pbnRzLlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC00LSAqXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3RyYWNlLmgtMTYtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay90cmFjZS5oOjE3OiNpbmNsdWRlIFxcXCJudWxsX2Jsay5oXFxcIlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvdHJhY2UuaC0xOC1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0zLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRtYXAuaFxcdTAwM2VcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6NDojaW5jbHVkZSBcXFwibnVsbF9ibGsuaFxcXCJcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNS1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy05LSN1bmRlZiBwcl9mbXRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTA6I2RlZmluZSBwcl9mbXQoZm10KVxcdFxcXCJudWxsX2JsazogXFxcIiBmbXRcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9Nzc4PXNzaXplX3Qgem9uZV9jb25kX3N0b3JlKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03ODUtXFx0aWYgKCFkZXYtXFx1MDAzZXpvbmVkKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjc4NjpcXHRcXHRwcl9lcnIoXFxcIm51bGxfYmxrIGRldmljZSBpcyBub3Qgem9uZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03ODctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzkwLVxcdGlmICghZGV2LVxcdTAwM2V6b25lcykge1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3OTE6XFx0XFx0cHJfZXJyKFxcXCJudWxsX2JsayBkZXZpY2UgaXMgbm90IHlldCBwb3dlcmVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzkyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9jb25maWdmcy5ycz00Nz0gICAgZm4gbWFrZV9ncm91cChcXG4tLVxcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNTQtICAgICAgICAgICAgYXR0cmlidXRlczogW1xcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnM6NTU6ICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQyBudWxsX2Jsa1xcbmRyaXZlcnMvYmxvY2svcm51bGwvY29uZmlnZnMucnMtNTYtICAgICAgICAgICAgICAgIHBvd2VyOiAwLFxcbi0tXFxuZHJpdmVycy9ibG9jay9ybnVsbC9ybnVsbC5ycz0zNj0gICAgZm4gaW5pdChfbW9kdWxlOiBcXHUwMDI2J3N0YXRpYyBUaGlzTW9kdWxlKSAtXFx1MDAzZSBpbXBsIFBpbkluaXRcXHUwMDNjU2VsZiwgRXJyb3JcXHUwMDNlIHtcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzOjM3OiAgICAgICAgcHJfaW5mbyEoXFxcIlJ1c3QgbnVsbF9ibGsgbG9hZGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL2Jsb2NrL3JudWxsL3JudWxsLnJzLTM4LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL3J0cnMtY2x0LmM9Njk9X19ydHJzX2dldF9wZXJtaXQoc3RydWN0IHJ0cnNfY2x0X3Nlc3MgKmNsdCwgZW51bSBydHJzX2NsdF9jb25fdHlwZSBjb25fdHlwZSlcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jLTc1LVxcdC8qXFxuZHJpdmVycy9pbmZpbmliYW5kL3VscC9ydHJzL3J0cnMtY2x0LmM6NzY6XFx0ICogQWRhcHRlZCBmcm9tIG51bGxfYmxrIGdldF90YWcoKS4gQ2FsbGVycyBmcm9tIGRpZmZlcmVudCBjcHVzIG1heVxcbmRyaXZlcnMvaW5maW5pYmFuZC91bHAvcnRycy9ydHJzLWNsdC5jLTc3LVxcdCAqIGdyYWIgdGhlIHNhbWUgYml0LCBzaW5jZSBmaW5kX2ZpcnN0X3plcm9fYml0IGlzIG5vdCBhdG9taWMuXFxuLS1cXG5saWIvZmF1bHQtaW5qZWN0LmM9MjY3PUVYUE9SVF9TWU1CT0xfR1BMKGZhdWx0X2NyZWF0ZV9kZWJ1Z2ZzX2F0dHIpO1xcbi0tXFxubGliL2ZhdWx0LWluamVjdC5jLTI3Mi1cXG5saWIvZmF1bHQtaW5qZWN0LmM6MjczOi8qIFRoZXNlIGNvbmZpZ2ZzIGF0dHJpYnV0ZSB1dGlsaXRpZXMgYXJlIGNvcGllZCBmcm9tIGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jICovXFxubGliL2ZhdWx0LWluamVjdC5jLTI3NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MTcuNjI5NjExMTUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1OTgxMDk2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBiYWRibG9ja3NgIGluIEJsb2NrIERldmljZSBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0byBiZXN0IGFwcHJvYWNoIGZ1enppbmcgdGhlIGBiYWRibG9ja3NgIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB3aXRoIGFuIGV5ZSB0b3dhcmRzIHRoZSByZWNlbnRseSBhcHBsaWVkIHBhdGNoLiBUaGUgc3RhcnRpbmcgcG9pbnQgaGVyZSBpcyB0aGUgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBjb25maWd1cmF0aW9uLiBMZXQncyBzZWUgaWYgd2UgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCwgSSdsbCBhZGQgYEJMS19ERVZfTlVMTF9CTEtgIHRvIGBFbmFibGVDb25maWdzYCB0byBiZSBzdXJlLiBIb3dldmVyLCB0aGUgdXNlIG9mIGBudWxsX2Jsa2Agc2VlbXMgcGVyZmVjdCBmb3IgdGVzdGluZyBgYmFkYmxvY2tzYCB0aHJvdWdoIGNvbmZpZ2ZzLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBicm9hZGVyIGNvbnRleHQsIGBDT05GSUdfTURgIChNdWx0aXBsZSBEZXZpY2VzKSBpcyBvZnRlbiBlbmFibGVkLCBhbmQgYGRyaXZlcnMvbWQvbWQuY2AgY2FsbHMgYGJhZGJsb2Nrc2AgZnVuY3Rpb25zLCBidXQgYG51bGxfYmxrYCBpcyB0aGUgY2xlYXIgZWFzaWVzdCBvcHRpb24gaGVyZSBmb3IgdGVzdGluZyBiYWRibG9ja3MgdGhyb3VnaCBjb25maWdmcy5cblxuVGhlIHJlY2VudCBwYXRjaCBjYXVnaHQgbXkgZXllLCBmaXhpbmcgYW4gb3ZlcmZsb3cgaXNzdWUgaW4gYF9iYWRibG9ja3Nfc2V0YCwgYF9iYWRibG9ja3NfY2xlYXJgLCBhbmQgYGJhZGJsb2Nrc19jaGVja2AgYW5kIGFsc28gYWRkcmVzc2luZyBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgIG1hY3JvcyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBhbmQgZGVtYW5kcyB0YXJnZXRlZCBmdXp6aW5nLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHRoZW4gc2hvdWxkIGJlIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdG91Y2hlZCBieSB0aGUgcGF0Y2guIExldCdzIHNlZS4uLiBJbml0aWFsbHkgSSB3YXMgdGhpbmtpbmcgb2YgdGhlIG1haW4gaW50ZXJmYWNlIGZ1bmN0aW9ucyBgYmFkYmxvY2tzX3NldGAsIGBiYWRibG9ja3NfY2xlYXJgLCBgYmFkYmxvY2tzX2NoZWNrYCwgYGJhZGJsb2Nrc19zdG9yZWAsIGFuZCBgYmFkYmxvY2tzX3Nob3dgLlxuXG5BaCwgYnV0IHRoZSBwYXRjaCBtb2RpZmllZCB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zLCBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzLiBgYmFkYmxvY2tzX2NoZWNrYCBzaG91bGQgYmUgbGlzdGVkLCBiZWNhdXNlIGl0IGhhcyBiZWVuIG1vZGlmaWVkLiBTbyBJJ2xsIGxpc3QgdGhlIGtleSBzeW1ib2xzIGFzOlxuXG4qICAgYF9iYWRibG9ja3Nfc2V0YFxuKiAgIGBfYmFkYmxvY2tzX2NsZWFyYFxuKiAgIGBiYWRibG9ja3NfY2hlY2tgXG4qICAgYGJhZGJsb2Nrc19zZXRgXG4qICAgYGJhZGJsb2Nrc19jbGVhcmBcblxuTm93IEknbGwgY2hlY2sgYGJhZGJsb2Nrc19jbGVhcmAgaW4gYGJhZGJsb2Nrcy5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MjUuMjI3NzI0MTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODMyNzA5ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmFkYmxvY2tzX2NsZWFyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2JhZGJsb2Nrcy5jPTEwMzc9c3RhdGljIGludCBmcm9udF9zcGxpdHRpbmdfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtMTA1NC0vKiBEbyB0aGUgZXhhY3Qgd29yayB0byBjbGVhciBiYWQgYmxvY2sgcmFuZ2UgZnJvbSB0aGUgYmFkIGJsb2NrIHRhYmxlICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTA1NTpzdGF0aWMgYm9vbCBfYmFkYmxvY2tzX2NsZWFyKHN0cnVjdCBiYWRibG9ja3MgKmJiLCBzZWN0b3JfdCBzLCBzZWN0b3JfdCBzZWN0b3JzKVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEwNTYte1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9MTM3MD1FWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3Nfc2V0KTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzItLyoqXFxuYmxvY2svYmFkYmxvY2tzLmM6MTM3MzogKiBiYWRibG9ja3NfY2xlYXIoKSAtIFJlbW92ZSBhIHJhbmdlIG9mIGJhZCBibG9ja3MgdG8gdGhlIHRhYmxlLlxcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzNzQtICogQGJiOlxcdFxcdHRoZSBiYWRibG9ja3Mgc3RydWN0dXJlIHRoYXQgaG9sZHMgYWxsIGJhZGJsb2NrIGluZm9ybWF0aW9uXFxuLS1cXG5ibG9jay9iYWRibG9ja3MuYy0xMzg1LSAqL1xcbmJsb2NrL2JhZGJsb2Nrcy5jOjEzODY6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXFxuYmxvY2svYmFkYmxvY2tzLmMtMTM4Ny17XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM4ODpcXHRyZXR1cm4gX2JhZGJsb2Nrc19jbGVhcihiYiwgcywgc2VjdG9ycyk7XFxuYmxvY2svYmFkYmxvY2tzLmMtMTM4OS19XFxuYmxvY2svYmFkYmxvY2tzLmM6MTM5MDpFWFBPUlRfU1lNQk9MX0dQTChiYWRibG9ja3NfY2xlYXIpO1xcbmJsb2NrL2JhZGJsb2Nrcy5jLTEzOTEtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjctXFx0XFx0XFx0cmV0ID0gY291bnQ7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTY4OlxcdH0gZWxzZSBpZiAoYmFkYmxvY2tzX2NsZWFyKFxcdTAwMjZ0X2Rldi1cXHUwMDNlYmFkYmxvY2tzLCBzdGFydCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NjktXFx0XFx0XFx0XFx0ICAgZW5kIC0gc3RhcnQgKyAxKSkge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM0Nj1ibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM1OC1cXHRpZiAoY21kLVxcdTAwM2VucS1cXHUwMDNlZGV2LVxcdTAwM2ViYWRibG9ja3Nfb25jZSlcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzU5OlxcdFxcdGJhZGJsb2Nrc19jbGVhcihiYiwgZmlyc3RfYmFkLCBiYWRfc2VjdG9ycyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM2MC1cXG4tLVxcbmRyaXZlcnMvbWQvbWQuYz0xMDU5Nj12b2lkIHJkZXZfY2xlYXJfYmFkYmxvY2tzKHN0cnVjdCBtZF9yZGV2ICpyZGV2LCBzZWN0b3JfdCBzLCBpbnQgc2VjdG9ycyxcXG4tLVxcbmRyaXZlcnMvbWQvbWQuYy0xMDYwMy1cXG5kcml2ZXJzL21kL21kLmM6MTA2MDQ6XFx0aWYgKCFiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnJkZXYtXFx1MDAzZWJhZGJsb2Nrcywgcywgc2VjdG9ycykpXFxuZHJpdmVycy9tZC9tZC5jLTEwNjA1LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J1cy5jPTE2ND1zdGF0aWMgaW50IG52ZGltbV9jbGVhcl9iYWRibG9ja3NfcmVnaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL2J1cy5jLTE4My1cXHRzZWN0b3IgPSAoY3R4LVxcdTAwM2VwaHlzIC0gbmRfcmVnaW9uLVxcdTAwM2VuZHJfc3RhcnQpIC8gNTEyO1xcbmRyaXZlcnMvbnZkaW1tL2J1cy5jOjE4NDpcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNm5kX3JlZ2lvbi1cXHUwMDNlYmIsIHNlY3RvciwgY3R4LVxcdTAwM2VjbGVhcmVkIC8gNTEyKTtcXG5kcml2ZXJzL252ZGltbS9idXMuYy0xODUtXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jPTIzMz1zdGF0aWMgaW50IG5zaW9fcndfYnl0ZXMoc3RydWN0IG5kX25hbWVzcGFjZV9jb21tb24gKm5kbnMsXFxuLS1cXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jLTI2OS1cXHRcXHRcXHRcXHRjbGVhcmVkIC89IDUxMjtcXG5kcml2ZXJzL252ZGltbS9jbGFpbS5jOjI3MDpcXHRcXHRcXHRcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNm5zaW8tXFx1MDAzZWJiLCBzZWN0b3IsIGNsZWFyZWQpO1xcbmRyaXZlcnMvbnZkaW1tL2NsYWltLmMtMjcxLVxcdFxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz04OD1zdGF0aWMgdm9pZCBwbWVtX2NsZWFyX2JiKHN0cnVjdCBwbWVtX2RldmljZSAqcG1lbSwgc2VjdG9yX3Qgc2VjdG9yLCBsb25nIGJsa3MpXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wbWVtLmMtOTEtXFx0XFx0cmV0dXJuO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYzo5MjpcXHRiYWRibG9ja3NfY2xlYXIoXFx1MDAyNnBtZW0tXFx1MDAzZWJiLCBzZWN0b3IsIGJsa3MpO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy05My1cXHRpZiAocG1lbS1cXHUwMDNlYmJfc3RhdGUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oPTUzPWJvb2wgYmFkYmxvY2tzX3NldChzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycyxcXG5pbmNsdWRlL2xpbnV4L2JhZGJsb2Nrcy5oLTU0LVxcdFxcdCAgIGludCBhY2tub3dsZWRnZWQpO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmg6NTU6Ym9vbCBiYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpO1xcbmluY2x1ZGUvbGludXgvYmFkYmxvY2tzLmgtNTYtdm9pZCBhY2tfYWxsX2JhZGJsb2NrcyhzdHJ1Y3QgYmFkYmxvY2tzICpiYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjI3LjIxMTAwMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MTE2NTQ1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJhZCBCbG9jayBIYW5kbGluZyBDb2RlKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBpbml0aWFsbHksIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGRpcmVjdGx5IGFsdGVyZWQgYXBwZWFyIHRvIGJlIGBfYmFkYmxvY2tzX3NldGAsIGBfYmFkYmxvY2tzX2NsZWFyYCwgYW5kIGBiYWRibG9ja3NfY2hlY2tgLiAgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcyBpbXByZXNzaW9uLlxuXG5GaXJzdCwgSSBoYWQgdG8gY2xhcmlmeSB3aGV0aGVyIGBiYWRibG9ja3Nfc3RvcmVgIHdhcyBtb2RpZmllZCwgYnV0IGl0J3Mgbm90LiBUaG91Z2ggaXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCBpdCdzIGNhbGxlZCBieSBgYmFkYmxvY2tzX3NldGAgYW5kIGBiYWRibG9ja3NfY2xlYXJgLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGNlbnRlciBhcm91bmQgdGhlc2UgdGhyZWUuIEkgc2hvdWxkIGZvY3VzIG15IGF0dGVudGlvbiBvbiB0aGVzZSBrZXkgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIG5lZWRlZCB0byBjb25maXJtIHRoYXQgdGhlIGBiYWRibG9ja3MuY2AgbW9kdWxlIGlzLCBpbiBmYWN0LCBjb21waWxlZCBieSBkZWZhdWx0LiBBIHF1aWNrIGNoZWNrIG9mIHRoZSBgYmxvY2svTWFrZWZpbGVgIGFuZCB0aGUgYG9iai15YCBzZXR0aW5nIGNvbmZpcm1lZCB0aGlzLlxuXG5Ob3csIGxldCBtZSBpbnZlc3RpZ2F0ZSB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBJIHJlbWVtYmVyIHRoYXQgYENPTkZJR19CTEtfREVWX05VTExfQkxLYCBpcyBiZW5lZmljaWFsLCBhcyBpdCBleHBvc2VzIGJhZGJsb2NrcyB0aHJvdWdoIGNvbmZpZ2ZzLiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgbG9jYXRpb25zLlxuXG5BaCwgdGhlcmUncyBhbm90aGVyIHBvaW50LiBgYmFkYmxvY2tzX3N0b3JlYCBpcyBhbHNvIGV4cG9zZWQgdGhyb3VnaCBgZGlza19iYWRibG9ja3Nfc3RvcmVgIHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIEknbGwgbmVlZCB0byByZW1lbWJlciB0byBsb29rIGF0IHRoYXQgZnVuY3Rpb24sIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzE0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjMyLjE3MjE3MDc1M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDE4NDcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaXNrX2JhZGJsb2Nrc19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9nZW5oZC5jPTg1MT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODYyLVxcbmJsb2NrL2dlbmhkLmM6ODYzOnN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG5ibG9jay9nZW5oZC5jLTg2NC1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTE3Mj1zdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XFxuYmxvY2svZ2VuaGQuYzoxMTczOnN0YXRpYyBERVZJQ0VfQVRUUihiYWRibG9ja3MsIDA2NDQsIGRpc2tfYmFkYmxvY2tzX3Nob3csIGRpc2tfYmFkYmxvY2tzX3N0b3JlKTtcXG5ibG9jay9nZW5oZC5jLTExNzQtc3RhdGljIERFVklDRV9BVFRSKGRpc2tzZXEsIDA0NDQsIGRpc2tzZXFfc2hvdywgTlVMTCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjM0LjEyNjM2MjIwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQ4MjQ4ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkFuYWx5emluZyB0aGUgYGRpc2tfYmFkYmxvY2tzYCBzeXNmcyBBdHRyaWJ1dGUgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdHJhY2luZyB0aGUgaW1wbGljYXRpb25zIGhlcmUuIEl0IHNlZW1zIGxpa2UgYW55IGJsb2NrIGRldmljZSB3aGVyZSB0aGUgYGRpc2stXHUwMDNlYmJgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBpcyBhdXRvbWF0aWNhbGx5IGdvaW5nIHRvIGhhdmUgdGhlIHN5c2ZzIGF0dHJpYnV0ZSByZWxhdGVkIHRvIGJhZCBibG9ja3MgZnVuY3Rpb25hbGl0eSBhdmFpbGFibGUuIFRoYXQncyB0aGUgY29yZSBhc3N1bXB0aW9uLCBlc3NlbnRpYWxseSB0eWluZyB0aGUgcHJlc2VuY2Ugb2YgdGhhdCBhdHRyaWJ1dGUgZGlyZWN0bHkgdG8gdGhhdCBgZGlzay1cdTAwM2ViYmAgaW5pdGlhbGl6YXRpb24uXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIGhvdyB0aGF0J3MgaW1wbGVtZW50ZWQuIEFoLCB5ZXMsIGxvb2tpbmcgYXQgdGhlIGNvZGUgZm9yIHRoZSBgZGlza19iYWRibG9ja3Nfc3RvcmVgIGZ1bmN0aW9uLCBpdCBzcGVjaWZpY2FsbHkgY2hlY2tzIGlmIGBkaXNrLVx1MDAzZWJiYCBpcyAqbm90KiBOVUxMLiBUaGF0IGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IEkganVzdCBoeXBvdGhlc2l6ZWQ6IGlmIGBkaXNrLVx1MDAzZWJiYCBpcyBOVUxMLCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBkaXNhYmxlZCwgYW5kIHRoZSBzeXNmcyBhdHRyaWJ1dGUgcHJlc3VtYWJseSB3b24ndCBldmVuIGJlIGNyZWF0ZWQgb3Igd2lsbCByZXR1cm4gYW4gZXJyb3Igd2hlbiBhY2Nlc3NlZC4gSXQgaXMgYW4gaW1wb3J0YW50IHNhbml0eSBjaGVjay4gU28sIHRoYXQncyB0aGUga2V5IHJlcXVpcmVtZW50IC0gaW5pdGlhbGl6YXRpb24gb2YgYGRpc2stXHUwMDNlYmJgLiBHb3QgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDc2LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6MzcuMzc0NjE0NDc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTMzNDQwNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpc2stXFx1MDAzZWJiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2dlbmhkLmM9ODUxPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy04NTYtXFxuYmxvY2svZ2VuaGQuYzo4NTc6XFx0aWYgKCFkaXNrLVxcdTAwM2ViYilcXG5ibG9jay9nZW5oZC5jLTg1OC1cXHRcXHRyZXR1cm4gc3lzZnNfZW1pdChwYWdlLCBcXFwiXFxcXG5cXFwiKTtcXG5ibG9jay9nZW5oZC5jLTg1OS1cXG5ibG9jay9nZW5oZC5jOjg2MDpcXHRyZXR1cm4gYmFkYmxvY2tzX3Nob3coZGlzay1cXHUwMDNlYmIsIHBhZ2UsIDApO1xcbmJsb2NrL2dlbmhkLmMtODYxLX1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9ODYzPXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODY4LVxcbmJsb2NrL2dlbmhkLmM6ODY5OlxcdGlmICghZGlzay1cXHUwMDNlYmIpXFxuYmxvY2svZ2VuaGQuYy04NzAtXFx0XFx0cmV0dXJuIC1FTlhJTztcXG5ibG9jay9nZW5oZC5jLTg3MS1cXG5ibG9jay9nZW5oZC5jOjg3MjpcXHRyZXR1cm4gYmFkYmxvY2tzX3N0b3JlKGRpc2stXFx1MDAzZWJiLCBwYWdlLCBsZW4sIDApO1xcbmJsb2NrL2dlbmhkLmMtODczLX1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTIzNj1zdGF0aWMgdW1vZGVfdCBkaXNrX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjQwLVxcbmJsb2NrL2dlbmhkLmM6MTI0MTpcXHRpZiAoYSA9PSBcXHUwMDI2ZGV2X2F0dHJfYmFkYmxvY2tzLmF0dHIgXFx1MDAyNlxcdTAwMjYgIWRpc2stXFx1MDAzZWJiKVxcbmJsb2NrL2dlbmhkLmMtMTI0Mi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYz00NDg9c3RhdGljIGludCBwbWVtX2F0dGFjaF9kaXNrKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NTMtXFx0bnZkaW1tX2JhZGJsb2Nrc19wb3B1bGF0ZShuZF9yZWdpb24sIFxcdTAwMjZwbWVtLVxcdTAwM2ViYiwgXFx1MDAyNmJiX3JhbmdlKTtcXG5kcml2ZXJzL252ZGltbS9wbWVtLmM6NTU0OlxcdGRpc2stXFx1MDAzZWJiID0gXFx1MDAyNnBtZW0tXFx1MDAzZWJiO1xcbmRyaXZlcnMvbnZkaW1tL3BtZW0uYy01NTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA0VDE4OjE3OjM5LjMwODA2MDk5OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODEyNjEyMDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gb2YgYGRpc2stXHUwMDNlYmJgLiBJdCBzZWVtcyBsaWtlIGl0J3Mgb25seSBkb25lIGZvciBgcG1lbWAsIG9yIE5WUkFNLiBIbW0sIHdoYXQgYWJvdXQgYG51bGxfYmxrYD8gVGhhdCBtb2R1bGUgdXRpbGl6ZXMgYHRfZGV2LVx1MDAzZWJhZGJsb2Nrc2AgYnV0IGV4cG9zZXMgaXQgdGhyb3VnaCBjb25maWdmcyBpbnN0ZWFkIG9mIHN5c2ZzLiBSaWdodCwgYW5kIHRoZW4gSSByZW1lbWJlciB0aGF0IGBtZGAgYWxzbyBoYW5kbGVzIGJhZGJsb2NrcywgYnV0IGV4cG9zZXMgdGhlbSBkaWZmZXJlbnRseS4gSXQgdXNlcyBgcmRldi1cdTAwM2ViYWRibG9ja3NgIGFuZCBwdXRzIHRoZW0gaW4gc3lzZnMgdW5kZXIgYG1kL2Rldi14eHgvYmFkX2Jsb2Nrc2AuIFRoaXMgbWVhbnMgdGhhdCBlbmFibGluZyBib3RoIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AgYW5kIGBDT05GSUdfTURgIHdvdWxkIGJlIGEgZ29vZCBhcHByb2FjaCwgSSBzaG91bGQgYWRkIGBCTEtfREVWX05VTExfQkxLYCBhbmQgYE1EYCB0byBgRW5hYmxlQ29uZmlnc2Agbm93LlxuXG5Ob3cgSSBzaG91bGQganVzdCB0YWtlIGEgcXVpY2sgbG9vayBhdCBob3cgYENPTkZJR19NRGAgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NTIsIk91dHB1dFRva2VucyI6MTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6NDMuMTIwNjc1NDUzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkyOTAwNjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Nsay9xY29tL0tjb25maWc9NTYzPWNvbmZpZyBNU01fTENDXzg5NjBcXG4tLVxcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01NzEtXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjU3Mjpjb25maWcgTURNX0dDQ185NjA3XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTU3My1cXHR0cmlzdGF0ZSBcXFwiTURNOTYwNyBHbG9iYWwgQ2xvY2sgQ29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvY2xrL3Fjb20vS2NvbmZpZy01NzktXFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnOjU4MDpjb25maWcgTURNX0dDQ185NjE1XFxuZHJpdmVycy9jbGsvcWNvbS9LY29uZmlnLTU4MS1cXHR0cmlzdGF0ZSBcXFwiTURNOTYxNSBHbG9iYWwgQ2xvY2sgQ29udHJvbGxlclxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy01LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTURcXG5kcml2ZXJzL21kL0tjb25maWctNy1cXHRib29sIFxcXCJNdWx0aXBsZSBkZXZpY2VzIGRyaXZlciBzdXBwb3J0IChSQUlEIGFuZCBMVk0pXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnPTE1PWNvbmZpZyBCTEtfREVWX01EXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMzktXFxuZHJpdmVycy9tZC9LY29uZmlnOjQwOmNvbmZpZyBNRF9CSVRNQVBcXG5kcml2ZXJzL21kL0tjb25maWctNDEtXFx0Ym9vbCBcXFwiTUQgUkFJRCBiaXRtYXAgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy01NC1cXG5kcml2ZXJzL21kL0tjb25maWc6NTU6Y29uZmlnIE1EX0xMQklUTUFQXFxuZHJpdmVycy9tZC9LY29uZmlnLTU2LVxcdGJvb2wgXFxcIk1EIFJBSUQgbG9ja2xlc3MgYml0bWFwIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctNjUtXFxuZHJpdmVycy9tZC9LY29uZmlnOjY2OmNvbmZpZyBNRF9BVVRPREVURUNUXFxuZHJpdmVycy9tZC9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkF1dG9kZXRlY3QgUkFJRCBhcnJheXMgZHVyaW5nIGtlcm5lbCBib290XFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTc5LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzo4MDpjb25maWcgTURfQklUTUFQX0ZJTEVcXG5kcml2ZXJzL21kL0tjb25maWctODEtXFx0Ym9vbCBcXFwiTUQgYml0bWFwIGZpbGUgc3VwcG9ydCAoZGVwcmVjYXRlZClcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctOTAtXFxuZHJpdmVycy9tZC9LY29uZmlnOjkxOmNvbmZpZyBNRF9MSU5FQVJcXG5kcml2ZXJzL21kL0tjb25maWctOTItXFx0dHJpc3RhdGUgXFxcIkxpbmVhciAoYXBwZW5kKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTEwMy1cXG5kcml2ZXJzL21kL0tjb25maWc6MTA0OmNvbmZpZyBNRF9SQUlEMFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xMDUtXFx0dHJpc3RhdGUgXFxcIlJBSUQtMCAoc3RyaXBpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTIzLVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxMjQ6Y29uZmlnIE1EX1JBSUQxXFxuZHJpdmVycy9tZC9LY29uZmlnLTEyNS1cXHR0cmlzdGF0ZSBcXFwiUkFJRC0xIChtaXJyb3JpbmcpIG1vZGVcXFwiXFxuLS1cXG5kcml2ZXJzL21kL0tjb25maWctMTQ1LVxcbmRyaXZlcnMvbWQvS2NvbmZpZzoxNDY6Y29uZmlnIE1EX1JBSUQxMFxcbmRyaXZlcnMvbWQvS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIlJBSUQtMTAgKG1pcnJvcmVkIHN0cmlwaW5nKSBtb2RlXFxcIlxcbi0tXFxuZHJpdmVycy9tZC9LY29uZmlnLTE2NC1cXG5kcml2ZXJzL21kL0tjb25maWc6MTY1OmNvbmZpZyBNRF9SQUlENDU2XFxuZHJpdmVycy9tZC9LY29uZmlnLTE2Ni1cXHR0cmlzdGF0ZSBcXFwiUkFJRC00L1JBSUQtNS9SQUlELTYgbW9kZVxcXCJcXG4tLVxcbmRyaXZlcnMvbWQvS2NvbmZpZy0yMDEtXFxuZHJpdmVycy9tZC9LY29uZmlnOjIwMjpjb25maWcgTURfQ0xVU1RFUlxcbmRyaXZlcnMvbWQvS2NvbmZpZy0yMDMtXFx0dHJpc3RhdGUgXFxcIkNsdXN0ZXIgU3VwcG9ydCBmb3IgTURcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnPTEzPWlmIEVUSEVSTkVUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnOjE1OmNvbmZpZyBNRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE5PWNvbmZpZyBBQ1BJX01ESU9cXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMy1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MjQ6Y29uZmlnIE1ESU9fQUlST0hBXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgQU43NTgzIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjMxOmNvbmZpZyBNRElPX1NVTjRJXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTMyLVxcdHRyaXN0YXRlIFxcXCJBbGx3aW5uZXIgc3VuNGkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0zOC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mzk6Y29uZmlnIE1ESU9fWEdFTkVcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNDAtXFx0dHJpc3RhdGUgXFxcIkFQTSBYLUdlbmUgU29DIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNDUtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjQ2OmNvbmZpZyBNRElPX0FTUEVFRFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy00Ny1cXHR0cmlzdGF0ZSBcXFwiQVNQRUVEIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNTgtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjU5OmNvbmZpZyBNRElPX0JJVEJBTkdcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNjAtXFx0dHJpc3RhdGUgXFxcIkJpdGJhbmdlZCBNRElPIGJ1c2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTY3LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo2ODpjb25maWcgTURJT19CQ01fSVBST0NcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNjktXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIGlQcm9jIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzYtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjc3OmNvbmZpZyBNRElPX0JDTV9VTklNQUNcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctNzgtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIFVuaU1BQyBNRElPIGJ1cyBjb250cm9sbGVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTg1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo4Njpjb25maWcgTURJT19DQVZJVU1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctODctXFx0dHJpc3RhdGVcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctODgtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjg5OmNvbmZpZyBNRElPX0dQSU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctOTAtXFx0dHJpc3RhdGUgXFxcIkdQSU8gbGliLWJhc2VkIGJpdGJhbmdlZCBNRElPIGJ1c2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTk4LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzo5OTpjb25maWcgTURJT19ISVNJX0ZFTUFDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwMC1cXHR0cmlzdGF0ZSBcXFwiSGlzaWxpY29uIEZFTUFDIE1ESU8gYnVzIGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTA1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMDY6Y29uZmlnIE1ESU9fSTJDXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEwNy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExNS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTE2OmNvbmZpZyBNRElPX01WVVNCXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTExNy1cXHR0cmlzdGF0ZSBcXFwiTWFydmVsbCBVU0IgdG8gTURJTyBBZGFwdGVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEyMi1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTIzOmNvbmZpZyBNRElPX01TQ0NfTUlJTVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMjQtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc2VtaSBNSUlNIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzMC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTMxOmNvbmZpZyBNRElPX01PWEFSVFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xMzItXFx0dHJpc3RhdGUgXFxcIk1PWEEgQVJUIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTM3LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxMzg6Y29uZmlnIE1ESU9fT0NURU9OXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTEzOS1cXHR0cmlzdGF0ZSBcXFwiT2N0ZW9uIGFuZCBzb21lIFRodW5kZXJYIFNPQ3MgTURJTyBidXNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNDctXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE0ODpjb25maWcgTURJT19QSUM2NEhQU0NcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTQ5LVxcdHRyaXN0YXRlIFxcXCJQSUM2NC1IUFNDL0hYIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTU1LVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNTY6Y29uZmlnIE1ESU9fSVBRNDAxOVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNTctXFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIElQUTQwMTkgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNjMtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE2NDpjb25maWcgTURJT19JUFE4MDY0XFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE2NS1cXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gSVBRODA2NCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3MS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTcyOmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTc5OmNvbmZpZyBNRElPX1JFR01BUFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xODAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xODktXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE5MDpjb25maWcgTURJT19USFVOREVSXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE5MS1cXHR0cmlzdGF0ZSBcXFwiVGh1bmRlclggU09DcyBNRElPIGJ1c2VzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTIwMD1jb21tZW50IFxcXCJNRElPIE11bHRpcGxleGVyc1xcXCJcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjAxLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoyMDI6Y29uZmlnIE1ESU9fQlVTX01VWFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMDMtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMTAtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIxMTpjb25maWcgTURJT19CVVNfTVVYX01FU09OX0cxMkFcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjEyLVxcdHRyaXN0YXRlIFxcXCJBbWxvZ2ljIEcxMmEgYmFzZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjIxLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoyMjI6Y29uZmlnIE1ESU9fQlVTX01VWF9NRVNPTl9HWExcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjIzLVxcdHRyaXN0YXRlIFxcXCJBbWxvZ2ljIEdYTCBiYXNlZCBNRElPIGJ1cyBtdWx0aXBsZXhlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yMzItXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjIzMzpjb25maWcgTURJT19CVVNfTVVYX0JDTTYzNjhcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjM0LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBCQ002MzY4IE1ESU8gYnVzIG11bHRpcGxleGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNDMtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI0NDpjb25maWcgTURJT19CVVNfTVVYX0JDTV9JUFJPQ1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNDUtXFx0dHJpc3RhdGUgXFxcIkJyb2FkY29tIGlQcm9jIGJhc2VkIE1ESU8gYnVzIG11bHRpcGxleGVyc1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNTQtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjI1NTpjb25maWcgTURJT19CVVNfTVVYX0dQSU9cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjU2LVxcdHRyaXN0YXRlIFxcXCJHUElPIGNvbnRyb2xsZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI2NC1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MjY1OmNvbmZpZyBNRElPX0JVU19NVVhfTVVMVElQTEVYRVJcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMjY2LVxcdHRyaXN0YXRlIFxcXCJNRElPIGJ1cyBtdWx0aXBsZXhlciB1c2luZyBrZXJuZWwgbXVsdGlwbGV4ZXIgc3Vic3lzdGVtXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTI3Ni1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6Mjc3OmNvbmZpZyBNRElPX0JVU19NVVhfTU1JT1JFR1xcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0yNzgtXFx0dHJpc3RhdGUgXFxcIk1NSU8gZGV2aWNlLWNvbnRyb2xsZWQgTURJTyBidXMgbXVsdGlwbGV4ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNFQxODoxNzo0NS4xMTM1ODY4MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1OTY1MTEyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgYENPTkZJR19CTEtfREVWX01EYCBjbGlja3Mg4oCTIHRoYXQncyB0aGUgTUQgY29uZmlnLiBJIG5lZWQgdG8gaW5jbHVkZSBgQkxLX0RFVl9NRGAgYW5kIGFsc28gYEJMS19ERVZfTlVMTF9CTEtgLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGluIGBibG9jay9iYWRibG9ja3MuY2AsIHJpZ2h0PyBSaWdodCwgYW5kIHRoZSByZWFzb24gZm9yIGZ1enppbmcgaXM6IGl0IGFkZHJlc3NlcyBhbiBvdmVyZmxvdyBhbmQgc29tZSBpbmNvcnJlY3QgbWFjcm8gdXNhZ2UgcmVsYXRlZCB0byBgcm91bmRkb3duYCBhbmQgYHJvdW5kdXBgIGluIHRoZSBiYWRibG9ja3MgYmxvY2sgbGF5ZXIgQVBJLiBHb29kLCB0aGF0IEFQSSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMgYW5kIGNvbmZpZ2ZzIOKAkyB0aGlua2luZyBudWxsX2JsayBhbmQgbWQgaGVyZSDigJMgc28gaXQncyBhY3R1YWxseSB0ZXN0YWJsZS4gVGhhdCdzIGEgaHVnZSBwbHVzLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBpdCdzOiBgX2JhZGJsb2Nrc19zZXRgLCBgX2JhZGJsb2Nrc19jbGVhcmAsIGFuZCBgYmFkYmxvY2tzX2NoZWNrYC4gWWVwLCB0aG9zZSBtYWtlIHNlbnNlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZXNjcmliZWQgdnVsbmVyYWJpbGl0eS4gSSdsbCBkZWZpbml0ZWx5IGFkZCB0aG9zZS5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbSBxdWlja2x5IGNvbmZpcm1pbmcgcmVhY2hhYmlsaXR5IG9mIGBiYWRibG9ja3NfY2hlY2tgLiBJdCdzIGNhbGxlZCBieSBgbnVsbF9oYW5kbGVfYmFkYmxvY2tzYCBpbiBgbnVsbF9ibGtgLCB3aGljaCBpcyBpdHNlbGYgaW52b2tlZCBvbiBldmVyeSBJTyBpZiBiYWRibG9ja3MgYXJlIGNvbmZpZ3VyZWQuIFBlcmZlY3QuIGBfYmFkYmxvY2tzX3NldGAgaXMgY2FsbGVkIGJ5IGBiYWRibG9ja3Nfc2V0YCB3aGljaCBpcyBjYWxsZWQgYnkgYG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmVgIGluIGBudWxsX2Jsa2AgYW5kIGBkaXNrX2JhZGJsb2Nrc19zdG9yZWAgaW4gYGdlbmhkLmNgIGFuZCBgYmJfc3RvcmVgIGluIGBtZC5jYC4gQW5kIGBfYmFkYmxvY2tzX2NsZWFyYCBpcyBjYWxsZWQgYnkgYGJhZGJsb2Nrc19jbGVhcmAgd2hpY2ggaXMgY2FsbGVkIGJ5IGBudWxsYl9kZXZpY2VfYmFkYmxvY2tzX3N0b3JlYCBhbmQgYG51bGxfaGFuZGxlX2JhZGJsb2Nrc2AgYW5kIGByZGV2X2NsZWFyX2JhZGJsb2Nrc2AuXG5cblNvLCB5ZWFoLCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgc3BvdCBvbi4gVGhlIGNvbmZpZyBzZWxlY3Rpb25zIGFyZSBjb3JyZWN0IGZvciBjb3ZlcmFnZS4gVGhlIHJlYXNvbmluZyBtYWtlcyB0b3RhbCBzZW5zZS4gQWxsIHN5c3RlbXMgYXJlIGdvLiBJJ20gc2F0aXNmaWVkLiBMZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDEyMSwiT3V0cHV0VG9rZW5zIjoxMjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDRUMTg6MTc6NTIuODczMjQwMzA1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MjM0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIixcbiAgICBcIkJMS19ERVZfTURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfYmFkYmxvY2tzX3NldFwiLFxuICAgIFwiX2JhZGJsb2Nrc19jbGVhclwiLFxuICAgIFwiYmFkYmxvY2tzX2NoZWNrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gb3ZlcmZsb3cgaXNzdWUgYW5kIGluY29ycmVjdCB1c2FnZSBvZiByb3VuZGRvd24vcm91bmR1cCBtYWNyb3MgaW4gdGhlIGJhZGJsb2NrcyBibG9jayBsYXllciBBUEkuIFRoZSBiYWRibG9ja3MgQVBJIGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGNvbmZpZ2ZzIChlLmcuLCBudWxsX2JsaywgbWQpLCBtYWtpbmcgaXQgZnVuY3Rpb25hbCBhbmQgdGVzdGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiLFxuICAgIFwiQkxLX0RFVl9NRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9iYWRibG9ja3Nfc2V0XCIsXG4gICAgXCJfYmFkYmxvY2tzX2NsZWFyXCIsXG4gICAgXCJiYWRibG9ja3NfY2hlY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBvdmVyZmxvdyBpc3N1ZSBhbmQgaW5jb3JyZWN0IHVzYWdlIG9mIHJvdW5kZG93bi9yb3VuZHVwIG1hY3JvcyBpbiB0aGUgYmFkYmxvY2tzIGJsb2NrIGxheWVyIEFQSS4gVGhlIGJhZGJsb2NrcyBBUEkgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgY29uZmlnZnMgKGUuZy4sIG51bGxfYmxrLCBtZCksIG1ha2luZyBpdCBmdW5jdGlvbmFsIGFuZCB0ZXN0YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowgqz95[1] Phase: Succeeded StartedAt: 2026-07-04 18:18:35 +0000 UTC FinishedAt: 2026-07-04 18:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-04 18:18:35 +0000 UTC FinishedAt: 2026-07-04 18:18:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2] Phase: Succeeded StartedAt: 2026-07-04 18:18:35 +0000 UTC FinishedAt: 2026-07-04 20:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-04 18:18:35 +0000 UTC FinishedAt: 2026-07-04 20:00:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-04 18:18:35 +0000 UTC FinishedAt: 2026-07-04 18:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-04 18:18:35 +0000 UTC FinishedAt: 2026-07-04 18:18:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowgqz95/series-workflowgqz95-convert-artifact-4280541197/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-04 18:18:45 +0000 UTC FinishedAt: 2026-07-04 18:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-04 18:18:45 +0000 UTC FinishedAt: 2026-07-04 18:42: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:*a80de531-fa4a-486a-a42d-5335f5df4667,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-workflowgqz95/series-workflowgqz95-convert-artifact-4280541197/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": "3cae2347-1501-464a-8a0f-79507c8f5560", "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-workflowgqz95/series-workflowgqz95-build-action-4024122243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-04 18:18:45 +0000 UTC FinishedAt: 2026-07-04 18:41:40 +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:*a80de531-fa4a-486a-a42d-5335f5df4667,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-workflowgqz95/series-workflowgqz95-convert-artifact-4280541197/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": "3cae2347-1501-464a-8a0f-79507c8f5560", "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-workflowgqz95/series-workflowgqz95-build-action-4024122243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-04 18:42:03 +0000 UTC FinishedAt: 2026-07-04 18:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-04 18:42:03 +0000 UTC FinishedAt: 2026-07-04 18:42:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-04 18:42:03 +0000 UTC FinishedAt: 2026-07-04 18:42:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-04 18:42:03 +0000 UTC FinishedAt: 2026-07-04 18:42:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowgqz95/series-workflowgqz95-convert-artifact-2612272232/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-04 18:42:13 +0000 UTC FinishedAt: 2026-07-04 18:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-04 18:42:13 +0000 UTC FinishedAt: 2026-07-04 18:44:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3cae2347-1501-464a-8a0f-79507c8f5560,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-workflowgqz95/series-workflowgqz95-build-action-4024122243/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-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-04 18:44:32 +0000 UTC FinishedAt: 2026-07-04 18:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-04 18:44:32 +0000 UTC FinishedAt: 2026-07-04 18:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-04 18:44:32 +0000 UTC FinishedAt: 2026-07-04 19:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-04 18:44:32 +0000 UTC FinishedAt: 2026-07-04 19:06:03 +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:*a80de531-fa4a-486a-a42d-5335f5df4667,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-workflowgqz95/series-workflowgqz95-convert-artifact-2612272232/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": "d99538df-254b-46b8-bd34-d5d940d0ae1a", "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-workflowgqz95/series-workflowgqz95-build-action-3282097172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-04 18:44:32 +0000 UTC FinishedAt: 2026-07-04 19:05:53 +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:*a80de531-fa4a-486a-a42d-5335f5df4667,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-workflowgqz95/series-workflowgqz95-convert-artifact-2612272232/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": "d99538df-254b-46b8-bd34-d5d940d0ae1a", "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-workflowgqz95/series-workflowgqz95-build-action-3282097172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-04 19:06:03 +0000 UTC FinishedAt: 2026-07-04 19:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-04 19:06:03 +0000 UTC FinishedAt: 2026-07-04 19:06:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-04 19:06:03 +0000 UTC FinishedAt: 2026-07-04 19:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-04 19:06:03 +0000 UTC FinishedAt: 2026-07-04 19:08:14 +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:*d99538df-254b-46b8-bd34-d5d940d0ae1a,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-workflowgqz95/series-workflowgqz95-build-action-3282097172/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-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-04 19:08:24 +0000 UTC FinishedAt: 2026-07-04 20:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-04 19:08:24 +0000 UTC FinishedAt: 2026-07-04 20:00:44 +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":["_badblocks_set","_badblocks_clear","badblocks_check"],"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:*3cae2347-1501-464a-8a0f-79507c8f5560,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d99538df-254b-46b8-bd34-d5d940d0ae1a,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-workflowgqz95/series-workflowgqz95-build-action-4024122243/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-workflowgqz95/series-workflowgqz95-build-action-3282097172/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-04 19:08:24 +0000 UTC FinishedAt: 2026-07-04 19:08:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-04 19:08:24 +0000 UTC FinishedAt: 2026-07-04 19:08:30 +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":["_badblocks_set","_badblocks_clear","badblocks_check"],"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-workflowgqz95/series-workflowgqz95-convert-artifact-2285736353/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-04 19:08:24 +0000 UTC FinishedAt: 2026-07-04 19:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-04 19:08:24 +0000 UTC FinishedAt: 2026-07-04 19:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-04 19:08:24 +0000 UTC FinishedAt: 2026-07-04 19:08:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-04 19:08:45 +0000 UTC FinishedAt: 2026-07-04 20:00:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqz95[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["_badblocks_set","_badblocks_clear","badblocks_check"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1e9cdc2ea15adf4a821eefedabf6c0c8cf0b6a55","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK","BLK_DEV_MD"],"series_id":"e42c4ea0-1149-4d34-99b2-3b053a0e3f9a","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-04 19:08:45 +0000 UTC FinishedAt: 2026-07-04 20:00:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3cae2347-1501-464a-8a0f-79507c8f5560,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d99538df-254b-46b8-bd34-d5d940d0ae1a,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-workflowgqz95/series-workflowgqz95-build-action-4024122243/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-workflowgqz95/series-workflowgqz95-build-action-3282097172/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-workflowgqz95/series-workflowgqz95-convert-artifact-2285736353/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,}