Name: series-workflowjbql2 Phase: Succeeded StartedAt: 2026-08-26 17:30:26 +0000 UTC FinishedAt: 2026-08-26 18:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[0] Phase: Succeeded StartedAt: 2026-08-26 17:30:26 +0000 UTC FinishedAt: 2026-08-26 17:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 17:30:26 +0000 UTC FinishedAt: 2026-08-26 17:48:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "a33c093a-8bc6-497f-9ce9-3e400dba0cd0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "p54_parse_eeprom", "p54_read_eeprom", "p54_download_eeprom" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQNTRfQ09NTU9OJiMzNDssCiAgICAmIzM0O1A1NF9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfcGFyc2VfZWVwcm9tJiMzNDssCiAgICAmIzM0O3A1NF9yZWFkX2VlcHJvbSYjMzQ7LAogICAgJiMzNDtwNTRfZG93bmxvYWRfZWVwcm9tJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiBwNTRfcGFyc2VfZWVwcm9tLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIG9yIGludG8gYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgaW52b2x2ZWQgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHA1NF9wYXJzZV9lZXByb21gIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiB0aGUgSW50ZXJzaWwgUHJpc201NCB3aXJlbGVzcyBkcml2ZXIuIFRoZSBFRVBST00gZGF0YSBpcyByZWFkIGZyb20gdGhlIGRldmljZSB2aWEgYHA1NF9kb3dubG9hZF9lZXByb21gLCB3aGljaCBzZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGRldmljZSBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoaXMgY2FuIGJlIHJlYWNoZWQgYnkgZW11bGF0aW5nIGEgVVNCIFByaXNtNTQgZGV2aWNlIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCwgd2hpY2ggd2lsbCB0cmlnZ2VyIGZpcm13YXJlIGxvYWRpbmcgYW5kIHN1YnNlcXVlbnQgRUVQUk9NIHJlYWRpbmcuIFNpbmNlIHRoZSBlbXVsYXRlZCBkZXZpY2UgY2FuIHJldHVybiBhcmJpdHJhcnkgRUVQUk9NIGRhdGEsIHRoZSBwYXJzaW5nIGxvZ2ljIGlzIGZ1bGx5IGF0dGFja2VyLWNvbnRyb2xsZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG5pbmRleCA5NTU4MDkyMWQ5MzM4Li40NzJlZGVjZjU1NzcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbkBAIC03NjMsNiAmIzQzOzc2Myw4IEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuIFx0XHRjYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQToge1xuIFx0XHRcdHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9XG4gXHRcdFx0XHQoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopZW50cnktXHUwMDNlZGF0YTtcbiYjNDM7XHRcdFx0c2l6ZV90IG5lZWRlZDtcbiYjNDM7XG4gXHRcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBlcnI7XG5AQCAtNzcwLDkgJiM0Mzs3NzIsMjMgQEAgaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXG4gXG4gXHRcdFx0c3dpdGNoIChjdXJ2ZV9kYXRhLVx1MDAzZWNhbF9tZXRob2RfcmV2KSB7XG4gXHRcdFx0Y2FzZSAwOlxuJiM0MztcdFx0XHRcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXHUwMDNlY2hhbm5lbHMgKlxuJiM0MztcdFx0XHRcdFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjApICpcbiYjNDM7XHRcdFx0XHRcdCBjdXJ2ZV9kYXRhLVx1MDAzZXBvaW50c19wZXJfY2hhbm5lbCAmIzQzOyAyKTtcbiYjNDM7XHRcdFx0XHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFx1MDAzYyBuZWVkZWQpIHtcbiYjNDM7XHRcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdFx0XHR9XG4gXHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIDE6XG4mIzQzO1x0XHRcdFx0bmVlZGVkID0gY3VydmVfZGF0YS1cdTAwM2VjaGFubmVscyAqXG4mIzQzO1x0XHRcdFx0XHQoc2l6ZW9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSkgKlxuJiM0MztcdFx0XHRcdFx0IGN1cnZlX2RhdGEtXHUwMDNlcG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDMpO1xuJiM0MztcdFx0XHRcdGlmIChkYXRhX2xlbiAtIHNpemVvZigqY3VydmVfZGF0YSkgXHUwMDNjIG5lZWRlZCkge1xuJiM0MztcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG5AQCAtODAxLDcgJiM0Mzs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6XG4gXHRcdFx0dG1wID0gZW50cnktXHUwMDNlZGF0YTtcbi1cdFx0XHR3aGlsZSAoKHU4ICopdG1wIFx1MDAzYyBlbnRyeS1cdTAwM2VkYXRhICYjNDM7IGRhdGFfbGVuKSB7XG4mIzQzO1x0XHRcdHdoaWxlICgodTggKil0bXAgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBleHBfaWYpIFx1MDAzYz1cbiYjNDM7XHRcdFx0ICAgICAgIGVudHJ5LVx1MDAzZWRhdGEgJiM0MzsgZGF0YV9sZW4pIHtcbiBcdFx0XHRcdHN0cnVjdCBleHBfaWYgKmV4cF9pZiA9IHRtcDtcbiBcdFx0XHRcdGlmIChleHBfaWYtXHUwMDNlaWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKVxuIFx0XHRcdFx0XHRzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi1cdTAwM2V2YXJpYW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xNW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9lZXByb20mIzM0OywKICAgICYjMzQ7cDU0X3JlYWRfZWVwcm9tJiMzNDssCiAgICAmIzM0O3A1NF9kb3dubG9hZF9lZXByb20mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHA1NF9wYXJzZV9lZXByb21gIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiB0aGUgSW50ZXJzaWwgUHJpc201NCB3aXJlbGVzcyBkcml2ZXIuIFRoZSBFRVBST00gZGF0YSBpcyByZWFkIGZyb20gdGhlIGRldmljZSB2aWEgYHA1NF9kb3dubG9hZF9lZXByb21gLCB3aGljaCBzZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGRldmljZSBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoaXMgY2FuIGJlIHJlYWNoZWQgYnkgZW11bGF0aW5nIGEgVVNCIFByaXNtNTQgZGV2aWNlIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCwgd2hpY2ggd2lsbCB0cmlnZ2VyIGZpcm13YXJlIGxvYWRpbmcgYW5kIHN1YnNlcXVlbnQgRUVQUk9NIHJlYWRpbmcuIFNpbmNlIHRoZSBlbXVsYXRlZCBkZXZpY2UgY2FuIHJldHVybiBhcmJpdHJhcnkgRUVQUk9NIGRhdGEsIHRoZSBwYXJzaW5nIGxvZ2ljIGlzIGZ1bGx5IGF0dGFja2VyLWNvbnRyb2xsZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMKaW5kZXggOTU1ODA5MjFkOTMzOC4uNDcyZWRlY2Y1NTc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYwpAQCAtNzYzLDYgJiM0Mzs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHsKIAkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CiAJCQkJKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LSZndDtkYXRhOwomIzQzOwkJCXNpemVfdCBuZWVkZWQ7CiYjNDM7CiAJCQlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGVycjsKQEAgLTc3MCw5ICYjNDM7NzcyLDIzIEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQogCiAJCQlzd2l0Y2ggKGN1cnZlX2RhdGEtJmd0O2NhbF9tZXRob2RfcmV2KSB7CiAJCQljYXNlIDA6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDIpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDMpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYxKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtODAxLDcgJiM0Mzs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKIAkJCXRtcCA9IGVudHJ5LSZndDtkYXRhOwotCQkJd2hpbGUgKCh1OCAqKXRtcCAmbHQ7IGVudHJ5LSZndDtkYXRhICYjNDM7IGRhdGFfbGVuKSB7CiYjNDM7CQkJd2hpbGUgKCh1OCAqKXRtcCAmIzQzOyBzaXplb2Yoc3RydWN0IGV4cF9pZikgJmx0Oz0KJiM0MzsJCQkgICAgICAgZW50cnktJmd0O2RhdGEgJiM0MzsgZGF0YV9sZW4pIHsKIAkJCQlzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7CiAJCQkJaWYgKGV4cF9pZi0mZ3Q7aWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKQogCQkJCQlzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi0mZ3Q7dmFyaWFudCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBzb21lIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYHA1NF9wYXJzZV9lZXByb21gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBwYXJzaW5nIG9mIGBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFgIGFuZCBgUERSX0lOVEVSRkFDRV9MSVNUYC4gVGhhdCYjMzk7cyBnb29kLCBhbHdheXMgYSBwbHVzIHRvIHNlZSB0aGF0IGtpbmQgb2YgaGFyZGVuaW5nLiBUaGlzIGlzIGZvciB0aGUgSW50ZXJzaWwgUHJpc201NCB3aXJlbGVzcyBjYXJkcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcmVhY2hhYmlsaXR5LgoKVGhlIGtleSBxdWVzdGlvbiBpczogY2FuIHRoaXMgY29kZSBldmVuICpiZSogdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEluIG15IGV4cGVyaWVuY2UsIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIHdpcmVsZXNzIGRyaXZlcnMg4oCTIEludGVyc2lsIFByaXNtNTQgaW4gdGhpcyBjYXNlIOKAkyB1c3VhbGx5IHJlcXVpcmUgdGhlICphY3R1YWwqIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQuIE9yLCBwb3NzaWJseSwgYSBjbGV2ZXIgVVNCIGRldmljZSBlbXVsYXRpb24gdXNpbmcgc29tZXRoaW5nIGxpa2UgVVNCIGdhZGdldCBvciBkdW1teV9oY2QgaWYgaXQmIzM5O3MgYSBVU0Igd2lyZWxlc3MgZGV2aWNlLiBNYXliZSwgaWYgaXQmIzM5O3MgUENJLCB3ZSBoYXZlIHNvbWV0aGluZyB0byB3b3JrIHdpdGggdGhlcmUuIEl0JiMzOTtzIHJhcmUgdG8gZ2V0IGEgZGlyZWN0IGhpdCBvbiBzdWNoIGEgdGFyZ2V0ZWQgcGllY2Ugb2YgaGFyZHdhcmUgaW4gdmlydHVhbGl6YXRpb24gd2l0aG91dCBzcGVjaWZpYyBkZXZpY2UgcGFzc3Rocm91Z2ggb3IgY2xldmVyIGVtdWxhdGlvbi4KClNvLCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIG9mIHRoaXMgYHA1NGAgZHJpdmVyLiBJcyBpdCBVU0I/IFBDST8gQnVpbHQtaW4/IFRoZW4gSSBjYW4gZm9ybSBhIHNvbGlkIGh5cG90aGVzaXMgYWJvdXQgd2hlbiBhbmQgaG93IHRoaXMgYm91bmRzIGNoZWNrIHdvdWxkIGFjdHVhbGx5IGJlIGhpdCBkdXJpbmcgdGVzdGluZywgZnV6emluZywgb3Igc2VjdXJpdHkgYXVkaXRzLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwNTRfcGFyc2VfZWVwcm9tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9Njk4PXN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI1OmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk1OC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTU5OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05NjE9aW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5ODk6XHRyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgZWVwcm9tLCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk5MC1mcmVlOlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD0yNjk9aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjI3MDppbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjcxLWludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM9MTYyPXN0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTc0LVx0XHRkZXZfaW5mbyhcdTAwMjZwcml2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O2xvYWRpbmcgZGVmYXVsdCBlZXByb20uLi5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jOjE3NTpcdFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsICh2b2lkICopIHA1NHNwaV9lZXByb20sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTc2LVx0XHRcdFx0ICAgICAgIHNpemVvZihwNTRzcGlfZWVwcm9tKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTE4MS1cdFx0ZGV2X2luZm8oXHUwMDI2cHJpdi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcJiMzNDtsb2FkaW5nIHVzZXIgZWVwcm9tLi4uXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYzoxODI6XHRcdHJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCAodm9pZCAqKSBlZXByb20tXHUwMDNlZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0xODMtXHRcdFx0XHQgICAgICAgKGludCllZXByb20tXHUwMDNlc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKlRyYWNpbmcgdGhlIEVFUFJPTSBSZWFkIE9wZXJhdGlvbnMqKgoKT2theSwgc28gYHA1NF9wYXJzZV9lZXByb21gIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGBwNTRfcmVhZF9lZXByb21gIGFuZCBgcDU0c3BpX3JlcXVlc3RfZWVwcm9tYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZXNlIEVFUFJPTSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkmIzM5O3JlICppbml0aWF0ZWQqLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgcDU0X3JlYWRfZWVwcm9tYCBpcyBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGVyZSBpdCBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9yZWFkX2VlcHJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTk1OT1FWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZWVwcm9tKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTYxOmludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk2Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk5My19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTk0OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTI3MD1pbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6MjcxOmludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNzItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTQ5Nj1zdGF0aWMgdm9pZCBwNTRwX2Zpcm13YXJlX3N0ZXAyKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTUxNC1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM6NTE1Olx0ZXJyID0gcDU0X3JlYWRfZWVwcm9tKGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmMtNTE2LVx0cDU0cF9zdG9wKGRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTg2Nz1zdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTg5NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo4OTY6XHRyZXQgPSBwNTRfcmVhZF9lZXByb20oZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04OTctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIGBwNTRfcmVhZF9lZXByb21gIGlzIGNhbGxlZCBmcm9tIGBwNTR1c2IuY2AsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhpbmtpbmcgYWJvdXQgaG93IFVTQiBkZXZpY2VzIGFyZSBlbXVsYXRlZCwgSSBzZWUgdGhhdCB3ZSBoYXZlIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gVGhhdCBtZWFucyBJIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIHNldHVwLiBNYWtlcyB0aGluZ3MgbXVjaCBtb3JlIGludGVyZXN0aW5nLiBOb3cgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYHA1NHVfc3RhcnRfb3BzYCBpbiBgcDU0dXNiLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgb3IgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NHVfc3RhcnRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9ODU0PXN0YXRpYyBpbnQgcDU0X2ZpbmRfdHlwZShzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6ODY3OnN0YXRpYyBpbnQgcDU0dV9zdGFydF9vcHMoc3RydWN0IHA1NHVfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04Njgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz05MTk9c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTkyOC1cdFx0cHJpdi1cdTAwM2VmdyA9IGZpcm13YXJlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjkyOTpcdFx0ZXJyID0gcDU0dV9zdGFydF9vcHMocHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTMwLVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGaXJtd2FyZSBMb2FkaW5nIHZpYSBVU0IgRW11bGF0aW9uKioKCk9rYXksIHNvIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgdHJpZ2dlcmVkIHdoZW4gZmlybXdhcmUgaXMgbG9hZGVkLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCB0aGUgVVNCIGVtdWxhdGlvbiBwYXRod2F5LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBzcGVjaWZpYyBhcmVhIHRvIGZvY3VzIG9uLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyB3aXRoaW4gdGhhdCBVU0IgZW11bGF0aW9uIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgc2V0dGluZ3MsIHBhcmFtZXRlcnMsIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgZXNzZW50aWFsIHRvIG1ha2UgdGhpcyB3b3JrIGNvcnJlY3RseS4gTGV0IG1lIGRpZyBpbnRvIHRoZSBjb25maWdzIGFuZCBkb2N1bWVudGF0aW9uIHN1cnJvdW5kaW5nIHRoaXMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQNTRfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZz0yPWNvbmZpZyBQNTRfQ09NTU9OXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxNzpjb25maWcgUDU0X1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFVTQiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWdgIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBQNTQgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mgd2l0aCB0aGlzIEludGVyc2lsIFA1NCB3aXJlbGVzcyBkcml2ZXIgS2NvbmZpZyBmaWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZXhwZWN0aW5nIGEgY2xlYW4sIHdlbGwtc3RydWN0dXJlZCBjb25maWd1cmF0aW9uIHN5c3RlbSwgZm9sbG93aW5nIHRoZSBlc3RhYmxpc2hlZCBrZXJuZWwgY29udmVudGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGEgY2xlYXIgaGllcmFyY2h5LCBsb2dpY2FsIGRlcGVuZGVuY2llcywgYW5kIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzLiBUaGUgYGNvbmZpZ2AgZGlyZWN0aXZlcywgbmF0dXJhbGx5LCBhcmUgd2hhdCBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgb2YgdGhpcyBkcml2ZXIgYXJlIGVuYWJsZWQgYW5kIGRpc2FibGVkLCBhbmQgd2hhdCBraW5kIG9mIGdyYW51bGFyaXR5IHRoZSBkZXZlbG9wZXJzIGhhdmUgcHJvdmlkZWQuCgpJJiMzOTttIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIOKAkyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuIFRoZXNlIGFyZSBjcnVjaWFsLiBUaGlzIHdpbGwgZGVtb25zdHJhdGUgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIGFuZCBvcHRpb25zIGludGVycmVsYXRlLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcz8gQXJlIHRoZSBjaG9pY2VzIGNsZWFybHkgZXhwbGFpbmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgbHVya2luZyBpbiB0aGUgc2hhZG93cz8KClRoZW4gSSYjMzk7bGwgc2NydXRpbml6ZSB0aGUgdmFyaW91cyAmIzM0O2hlbHAmIzM0OyBzZWN0aW9ucy4gVGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbiBpbiB0aGVzZSBzZWN0aW9ucyBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIG92ZXJhbGwgY29kZSBxdWFsaXR5LiBBcmUgdGhlIGV4cGxhbmF0aW9ucyBjbGVhciwgY29uY2lzZSwgYW5kIGFjY3VyYXRlPyBEbyB0aGV5IG9mZmVyIGVub3VnaCBjb250ZXh0IGZvciBhIHVzZXIgdG8gbWFrZSBpbmZvcm1lZCBjaG9pY2VzPyBBcmUgdGhlcmUgYW55IGdvdGNoYXMgb3IgY2F2ZWF0cyBtZW50aW9uZWQ/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4gRG8gdGhleSBzZWVtIHJlYXNvbmFibGUgZm9yIHRoZSBleHBlY3RlZCB1c2UgY2FzZXM/IEFyZSB0aGV5IGNvbmZpZ3VyYWJsZSBpbiBhIHNlbnNpYmxlIHJhbmdlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGRlZmF1bHRzPyBJZGVhbGx5LCB0aGV5IHNob3VsZCBwcmlvcml0aXplIGEgYmFsYW5jZSBiZXR3ZWVuIGZ1bmN0aW9uYWxpdHkgYW5kIHNlY3VyaXR5LCBkZWZhdWx0aW5nIHRvIHRoZSBtb3JlIHNlY3VyZSBjb25maWd1cmF0aW9uIHdoZXJlIHBvc3NpYmxlLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIG5vbi1zdGFuZGFyZCBwcmFjdGljZXMuIFRoaXMgY291bGQgYmUgYSBzaWduIG9mIGEgZGVlcGVyIHByb2JsZW0gb3IgYW4gYXJlYSB0aGF0IHJlcXVpcmVzIG1vcmUgaW52ZXN0aWdhdGlvbi4gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGFueSB1bm5lY2Vzc2FyeSBjb21wbGV4aXRpZXM/IElzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUgd2VsbC1vcmdhbml6ZWQgYW5kIGVhc3kgdG8gbmF2aWdhdGU/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCB0byBlbnN1cmUgdGhhdCBpdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBhbmQgdGhhdCBpdCBpbnRlZ3JhdGVzIHNtb290aGx5IGludG8gbXkgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQNTRfQ09NTU9OXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAgNjpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXG4gICA5Olx0XHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xuICAxMDpcdFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxuICAxMTpcdFxuICAxMjpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMTM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFA1NF9VU0JcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgVVNCIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgVVNCXG4gIDIwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMjU6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMjY6XHRcbiAgMjc6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTR1c2IuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFA1NF9QQ0lcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgUENJIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgUENJXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0kgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbW9zdCBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGVcbiAgMzU6XHRcdCAgZnVsbG1hYyBwcmlzbTU0IGRyaXZlciBwbHVzIG1hbnkgZGV2aWNlcyB3aGljaCBhcmUgbm90XG4gIDM2Olx0XHQgIHN1cHBvcnRlZCBieSB0aGUgZnVsbG1hYyBkcml2ZXIvZmlybXdhcmUuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDM5Olx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0cGNpLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBQNTRfU1BJXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgU1BJX01BU1RFUlxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcbiAgNDg6XHRcdCAgc3VjaCBhcyBOb2tpYSYjMzk7cyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHNwaS5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgUDU0X1NQSV9ERUZBVUxUX0VFUFJPTVxuICA1MzpcdFx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZhbGxiYWNrIEVFUFJPTSBibG9iXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFA1NF9TUElcbiAgNTU6XHRcdGRlZmF1bHQgblxuICA1NjpcdFx0aGVscFxuICA1NzpcdFx0IFVubGlrZSB0aGUgUENJIG9yIFVTQiBkZXZpY2VzLCB0aGUgU1BJIHZhcmlhbnRzIGRvbiYjMzk7dCBoYXZlXG4gIDU4Olx0XHQgYSBkZWRpY2F0ZWQgRUVQUk9NIGNoaXAgdG8gc3RvcmUgYWxsIGRldmljZSBzcGVjaWZpYyB2YWx1ZXNcbiAgNTk6XHRcdCBmb3IgY2FsaWJyYXRpb24sIGNvdW50cnkgYW5kIGludGVyZmFjZSBzZXR0aW5ncy5cbiAgNjA6XHRcbiAgNjE6XHRcdCBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIGltYWdlIFwmIzM0OzM4MjYuZWVwcm9tXCYjMzQ7LCBpZiB0aGVcbiAgNjI6XHRcdCBmaWxlIGlzIHB1dCBhdCB0aGUgcmlnaHQgcGxhY2UuICh1c3VhbGx5IC9saWIvZmlybXdhcmUuKVxuICA2MzpcdFxuICA2NDpcdFx0IE9ubHkgaWYgdGhpcyByZXF1ZXN0IGZhaWxzLCB0aGlzIG9wdGlvbiB3aWxsIHByb3ZpZGUgYVxuICA2NTpcdFx0IGJhY2t1cCBzZXQgb2YgZ2VuZXJpYyB2YWx1ZXMgdG8gZ2V0IHRoZSBkZXZpY2Ugd29ya2luZy5cbiAgNjY6XHRcbiAgNjc6XHRcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgUDU0X0xFRFNcbiAgNzA6XHRcdGJvb2xcbiAgNzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgTUFDODAyMTFfTEVEUyBcdTAwMjZcdTAwMjYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBQNTRfQ09NTU9OKVxuICA3MjpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHA1NCBVU0IgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgUDU0X1VTQmAgYW5kIGBQNTRfQ09NTU9OYCwgd2l0aCBgTUFDODAyMTFgIGFzIGEgZGVwZW5kZW5jeS4gSSBzaG91bGQgcHJvYmFibHkgZW5hYmxlIGBQNTRfUENJYCBhbmQgYFA1NF9TUElgIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGJ1dCBgUDU0X1VTQmAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0IGJlY2F1c2UgYHN5el91c2JfY29ubmVjdGAgaXMgaG93IHdlJiMzOTtyZSByZWFjaGluZyBpdC4gQWgsIEkgc2VlIHRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYHA1NF9wYXJzZV9lZXByb21gIOKAkyB0aGF0JiMzOTtzIGEga2V5IGRldGFpbC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gaXRzIGxvY2F0aW9uOyBpdCYjMzk7cyB3aXRoaW4gYHA1NC9lZXByb20uY2AuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgcmVhY2ggaXQ/IEEgcXVpY2sgdHJhY2UgY29uZmlybXMgdGhhdCBgcDU0X3JlYWRfZWVwcm9tYCBjYWxscyBpdCwgd2hpY2ggaXMgZ29vZC4gTm93LCB3aGVyZSBpcyBgcDU0X3JlYWRfZWVwcm9tYCB1c2VkPyBBbHJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcDU0dV9zdGFydF9vcHNgIGluIGBwNTR1c2IuY2AuIFRoYXQmIzM5O3MgcHJvZ3Jlc3MuCgpOb3csIGBwNTR1X3N0YXJ0X29wc2AgaXMgY2FsbGVkIGZyb20gYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAuIE9rYXksIHRoaXMgaXMgYSBmaXJtd2FyZSBjYWxsYmFjay4gQmluZ28hIElmIGEgZmlybXdhcmUgY2FsbGJhY2sgaXMgaW52b2x2ZWQsIHdlJiMzOTtyZSBsaWtlbHkgbG9va2luZyBhdCBhIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlcmVkIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGBzeXpfdXNiX2Nvbm5lY3RgIHBsYXkgYSByb2xlIGluIGZpcm13YXJlIGxvYWRpbmc/IEl0IGNvdWxkIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCBtaWdodCByZXF1ZXN0IG9yIHRyaWdnZXIgYSBmaXJtd2FyZSBsb2FkLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIGBwNTR1X3Byb2JlYCB3aXRoaW4gYHA1NHVzYi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0dV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTk1Mz1zdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5ODQ6c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4NS1cdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MTEyND1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjYtXHQuaWRfdGFibGUgPSBwNTR1X3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjc6XHQucHJvYmUgPSBwNTR1X3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjgtXHQuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgcDU0dV9wcm9iZWAgYW5kIGBwNTR1X2xvYWRfZmlybXdhcmVgKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsaWtlbHkgc3RhdGUgb2YgYHA1NHVfcHJvYmVgIGFuZCBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgcDU0dSBkcml2ZXIsIGFuZCB0aG9zZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gYHA1NHVfcHJvYmVgIGlzLCBvZiBjb3Vyc2UsIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMg4oCTIHRoZSBpbml0aWFsIGRldmljZSBkZXRlY3Rpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBsaWtlbHksIGEgZmlyc3QgY3JhY2sgYXQgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IFBDSSBkZXZpY2UgSURzIGFuZCB0aGUgcG93ZXItdXAgc2VxdWVuY2UsIG1ha2luZyBzdXJlIGl0IGRvZXNuJiMzOTt0IGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZCBvbiByZXNvdXJjZSBjbGFpbWluZywgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgbmFzdHkgbG9ja3VwLgoKVGhlbiwgdGhlcmXigJlzIGBwNTR1X2xvYWRfZmlybXdhcmVgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGNvbXBsZXhpdHkgb2Z0ZW4gbGl2ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBsb2FkcyB0aGUgY29ycmVjdCBmaXJtd2FyZSBpbWFnZSwgaGFuZGxlcyBwb3RlbnRpYWwgdmVyc2lvbiBtaXNtYXRjaGVzIGdyYWNlZnVsbHkgKGVycm9yIGhhbmRsaW5nIGlzIGtleSBoZXJlKSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHZlcmlmaWVzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGxvYWRlZCBmaXJtd2FyZS4gQ29ycnVwdGlvbiBjYW4gYmUgYSBuaWdodG1hcmUgdG8gZGVidWcuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlJiMzOTtzIGZpcm13YXJlIGxvYWRpbmcgbWVjaGFuaXNtLiBEb2VzIGl0IHVzZSBETUE/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIGRvdWJsZS1jaGVjayBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nIGVycm9yczsgd2hhdCYjMzk7cyB0aGUgcmVjb3ZlcnkgcGF0aCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gQXJlIHRoZXJlIGFueSByZXRyeSBtZWNoYW5pc21zPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGlzc3VlcyBoZXJlIGNvdWxkIGNhdXNlIGJvb3QgZmFpbHVyZXMgb3IgZXJyYXRpYyBiZWhhdmlvciBkb3duIHRoZSByb2FkLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBtZW50YWwgY2hlY2tsaXN0IGZvciB0aG9zZSB0d28uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUzOlx0c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuIDk1NDpcdFx0XHRcdCAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDk1NTpcdHtcbiA5NTY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiA5NTc6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiA5NTg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldmljZSA9IFx1MDAyNnVkZXYtXHUwMDNlZGV2O1xuIDk1OTpcdFx0aW50IGVyciwgaTtcbiA5NjA6XHRcbiA5NjE6XHRcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHA1NHVfZndsaXN0KSAhPSBfX05VTV9QNTRVX0hXVFlQRVMpO1xuIDk2MjpcdFxuIDk2MzpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlZndfd2FpdF9sb2FkKTtcbiA5NjQ6XHRcdGkgPSBwNTRfZmluZF90eXBlKHByaXYpO1xuIDk2NTpcdFx0aWYgKGkgXHUwMDNjIDApXG4gOTY2Olx0XHRcdHJldHVybiBpO1xuIDk2NzpcdFxuIDk2ODpcdFx0ZGV2X2luZm8oXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7TG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXFxuXCYjMzQ7LFxuIDk2OTpcdFx0ICAgICAgIHA1NHVfZndsaXN0W2ldLmZ3KTtcbiA5NzA6XHRcbiA5NzE6XHRcdHVzYl9nZXRfaW50ZihpbnRmKTtcbiA5NzI6XHRcdGVyciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBwNTR1X2Z3bGlzdFtpXS5mdyxcbiA5NzM6XHRcdFx0XHRcdCAgICAgIGRldmljZSwgR0ZQX0tFUk5FTCwgcHJpdixcbiA5NzQ6XHRcdFx0XHRcdCAgICAgIHA1NHVfbG9hZF9maXJtd2FyZV9jYik7XG4gOTc1Olx0XHRpZiAoZXJyKSB7XG4gOTc2Olx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7KHA1NHVzYikgY2Fubm90IGxvYWQgZmlybXdhcmUgJXMgXCYjMzQ7XG4gOTc3Olx0XHRcdFx0XHRcdCAgXCYjMzQ7KCVkKSFcXG5cJiMzNDssIHA1NHVfZndsaXN0W2ldLmZ3LCBlcnIpO1xuIDk3ODpcdFx0XHR1c2JfcHV0X2ludGYoaW50Zik7XG4gOTc5Olx0XHR9XG4gOTgwOlx0XG4gOTgxOlx0XHRyZXR1cm4gZXJyO1xuIDk4MjpcdH1cbiA5ODM6XHRcbiA5ODQ6XHRzdGF0aWMgaW50IHA1NHVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gOTg1Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4gOTg2Olx0e1xuIDk4NzpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIDk4ODpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2O1xuIDk4OTpcdFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdjtcbiA5OTA6XHRcdGludCBlcnI7XG4gOTkxOlx0XHR1bnNpZ25lZCBpbnQgaSwgcmVjb2duaXplZF9waXBlcztcbiA5OTI6XHRcbiA5OTM6XHRcdGRldiA9IHA1NF9pbml0X2NvbW1vbihzaXplb2YoKnByaXYpKTtcbiA5OTQ6XHRcbiA5OTU6XHRcdGlmICghZGV2KSB7XG4gOTk2Olx0XHRcdGRldl9lcnIoXHUwMDI2dWRldi1cdTAwM2VkZXYsIFwmIzM0OyhwNTR1c2IpIGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuIDk5NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5OTg6XHRcdH1cbiA5OTk6XHRcbjEwMDA6XHRcdHByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbjEwMDE6XHRcdHByaXYtXHUwMDNlaHdfdHlwZSA9IFA1NFVfSU5WQUxJRF9IVztcbjEwMDI6XHRcbjEwMDM6XHRcdFNFVF9JRUVFODAyMTFfREVWKGRldiwgXHUwMDI2aW50Zi1cdTAwM2VkZXYpO1xuMTAwNDpcdFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xuMTAwNTpcdFx0cHJpdi1cdTAwM2V1ZGV2ID0gdWRldjtcbjEwMDY6XHRcdHByaXYtXHUwMDNlaW50ZiA9IGludGY7XG4xMDA3Olx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcnhfcXVldWUpO1xuMTAwODpcdFx0aW5pdF91c2JfYW5jaG9yKFx1MDAyNnByaXYtXHUwMDNlc3VibWl0dGVkKTtcbjEwMDk6XHRcbjEwMTA6XHRcdC8qIHJlYWxseSBsYXp5IGFuZCBzaW1wbGUgd2F5IG9mIGZpZ3VyaW5nIG91dCBpZiB3ZSYjMzk7cmUgYSAzODg3ICovXG4xMDExOlx0XHQvKiBUT0RPOiBzaG91bGQganVzdCBzdGljayB0aGUgaWRlbnRpZmljYXRpb24gaW4gdGhlIGRldmljZSB0YWJsZSAqL1xuMTAxMjpcdFx0aSA9IGludGYtXHUwMDNlYWx0c2V0dGluZy1cdTAwM2VkZXNjLmJOdW1FbmRwb2ludHM7XG4xMDEzOlx0XHRyZWNvZ25pemVkX3BpcGVzID0gMDtcbjEwMTQ6XHRcdHdoaWxlIChpLS0pIHtcbjEwMTU6XHRcdFx0c3dpdGNoIChpbnRmLVx1MDAzZWFsdHNldHRpbmctXHUwMDNlZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSB7XG4xMDE2Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0RBVEE6XG4xMDE3Olx0XHRcdGNhc2UgUDU0VV9QSVBFX01HTVQ6XG4xMDE4Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0JSRzpcbjEwMTk6XHRcdFx0Y2FzZSBQNTRVX1BJUEVfREVWOlxuMTAyMDpcdFx0XHRjYXNlIFA1NFVfUElQRV9EQVRBIHwgVVNCX0RJUl9JTjpcbjEwMjE6XHRcdFx0Y2FzZSBQNTRVX1BJUEVfTUdNVCB8IFVTQl9ESVJfSU46XG4xMDIyOlx0XHRcdGNhc2UgUDU0VV9QSVBFX0JSRyB8IFVTQl9ESVJfSU46XG4xMDIzOlx0XHRcdGNhc2UgUDU0VV9QSVBFX0RFViB8IFVTQl9ESVJfSU46XG4xMDI0Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0lOVCB8IFVTQl9ESVJfSU46XG4xMDI1Olx0XHRcdFx0cmVjb2duaXplZF9waXBlcyYjNDM7JiM0Mzs7XG4xMDI2Olx0XHRcdH1cbjEwMjc6XHRcdH1cbjEwMjg6XHRcdHByaXYtXHUwMDNlY29tbW9uLm9wZW4gPSBwNTR1X29wZW47XG4xMDI5Olx0XHRwcml2LVx1MDAzZWNvbW1vbi5zdG9wID0gcDU0dV9zdG9wO1xuMTAzMDpcdFx0aWYgKHJlY29nbml6ZWRfcGlwZXMgXHUwMDNjIFA1NFVfUElQRV9OVU1CRVIpIHtcbjEwMzE6XHQjaWZkZWYgQ09ORklHX1BNXG4xMDMyOlx0XHRcdC8qIElTTDM4ODcgbmVlZHMgYSBmdWxsIHJlc2V0IG9uIHJlc3VtZSAqL1xuMTAzMzpcdFx0XHR1ZGV2LVx1MDAzZXJlc2V0X3Jlc3VtZSA9IDE7XG4xMDM0Olx0I2VuZGlmIC8qIENPTkZJR19QTSAqL1xuMTAzNTpcdFx0XHRlcnIgPSBwNTR1X2RldmljZV9yZXNldChkZXYpO1xuMTAzNjpcdFxuMTAzNzpcdFx0XHRwcml2LVx1MDAzZWh3X3R5cGUgPSBQNTRVXzM4ODc7XG4xMDM4Olx0XHRcdGRldi1cdTAwM2VleHRyYV90eF9oZWFkcm9vbSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XG4xMDM5Olx0XHRcdHByaXYtXHUwMDNlY29tbW9uLnR4X2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGxtODdfdHhfaGRyKTtcbjEwNDA6XHRcdFx0cHJpdi1cdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X2xtODc7XG4xMDQxOlx0XHRcdHByaXYtXHUwMDNldXBsb2FkX2Z3ID0gcDU0dV91cGxvYWRfZmlybXdhcmVfMzg4NztcbjEwNDI6XHRcdH0gZWxzZSB7XG4xMDQzOlx0XHRcdHByaXYtXHUwMDNlaHdfdHlwZSA9IFA1NFVfTkVUMjI4MDtcbjEwNDQ6XHRcdFx0ZGV2LVx1MDAzZWV4dHJhX3R4X2hlYWRyb29tICYjNDM7PSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcbjEwNDU6XHRcdFx0cHJpdi1cdTAwM2Vjb21tb24udHhfaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbmV0MjI4MF90eF9oZHIpO1xuMTA0NjpcdFx0XHRwcml2LVx1MDAzZWNvbW1vbi50eCA9IHA1NHVfdHhfbmV0MjI4MDtcbjEwNDc6XHRcdFx0cHJpdi1cdTAwM2V1cGxvYWRfZncgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV9uZXQyMjgwO1xuMTA0ODpcdFx0fVxuMTA0OTpcdFx0ZXJyID0gcDU0dV9sb2FkX2Zpcm13YXJlKGRldiwgaW50Zik7XG4xMDUwOlx0XHRpZiAoZXJyKVxuMTA1MTpcdFx0XHRwNTRfZnJlZV9jb21tb24oZGV2KTtcbjEwNTI6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBwNTR1IEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBwNTR1X3Byb2JlYCBraWNrcyBvZmYgdGhlIGZpcm13YXJlIGxvYWRpbmcgc2VxdWVuY2UgYnkgY2FsbGluZyBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gVGhhdCB0aGVuIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gU28gZmFyLCBzbyBnb29kLiBUaGVuLCB3aGVuIHRoZSBmaXJtd2FyZSYjMzk7cyBhY3R1YWxseSBsb2FkZWQsIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIGdldHMgaW52b2tlZC4gVGhhdCBmdW5jdGlvbiB0aGVuIHRyaWdnZXJzIGBwNTR1X3N0YXJ0X29wc2AsIHdoaWNoIGl0c2VsZiBjYWxscyBgcDU0X3JlYWRfZWVwcm9tYC4gRmluYWxseSwgd2UgZ2V0IHRvIGBwNTRfcGFyc2VfZWVwcm9tYC4gU28sIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgd2hvbGUgZmxvdyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIHdlIHVzZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgbWFuYWdlIHRvIGdldCB0aGUgZmlybXdhcmUgdG8gbG9hZC4gQnV0LCBoYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGlzIGltcG9ydGFudC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQgZXhhY3RseSBpcyBgcDU0X3JlYWRfZWVwcm9tYCBkb2luZz8gSXMgaXQgcmVhZGluZyB0aGUgRUVQUk9NIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlIGl0c2VsZiwgb3IgaXMgaXQgcGFyc2luZyBkYXRhIGZyb20gdGhlICpsb2FkZWQgZmlybXdhcmUqPyBJIG5lZWQgdG8gY2hlY2sgdGhhdC4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYHA1NF9yZWFkX2VlcHJvbWAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MTpcdGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuIDk2MjpcdHtcbiA5NjM6XHRcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG4gOTY0Olx0XHRzaXplX3QgZWVwcm9tX3NpemUgPSAweDIwMjAsIG9mZnNldCA9IDAsIGJsb2Nrc2l6ZSwgbWF4YmxvY2tzaXplO1xuIDk2NTpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gOTY2Olx0XHR2b2lkICplZXByb207XG4gOTY3Olx0XG4gOTY4Olx0XHRtYXhibG9ja3NpemUgPSBFRVBST01fUkVBREJBQ0tfTEVOO1xuIDk2OTpcdFx0aWYgKHByaXYtXHUwMDNlZndfdmFyIFx1MDAzZT0gMHg1MDkpXG4gOTcwOlx0XHRcdG1heGJsb2Nrc2l6ZSAtPSAweGM7XG4gOTcxOlx0XHRlbHNlXG4gOTcyOlx0XHRcdG1heGJsb2Nrc2l6ZSAtPSAweDQ7XG4gOTczOlx0XG4gOTc0Olx0XHRlZXByb20gPSBremFsbG9jKGVlcHJvbV9zaXplLCBHRlBfS0VSTkVMKTtcbiA5NzU6XHRcdGlmICh1bmxpa2VseSghZWVwcm9tKSlcbiA5NzY6XHRcdFx0Z290byBmcmVlO1xuIDk3NzpcdFxuIDk3ODpcdFx0d2hpbGUgKGVlcHJvbV9zaXplKSB7XG4gOTc5Olx0XHRcdGJsb2Nrc2l6ZSA9IG1pbihlZXByb21fc2l6ZSwgbWF4YmxvY2tzaXplKTtcbiA5ODA6XHRcdFx0cmV0ID0gcDU0X2Rvd25sb2FkX2VlcHJvbShwcml2LCBlZXByb20gJiM0Mzsgb2Zmc2V0LFxuIDk4MTpcdFx0XHRcdFx0XHQgIG9mZnNldCwgYmxvY2tzaXplKTtcbiA5ODI6XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gOTgzOlx0XHRcdFx0Z290byBmcmVlO1xuIDk4NDpcdFxuIDk4NTpcdFx0XHRvZmZzZXQgJiM0Mzs9IGJsb2Nrc2l6ZTtcbiA5ODY6XHRcdFx0ZWVwcm9tX3NpemUgLT0gYmxvY2tzaXplO1xuIDk4NzpcdFx0fVxuIDk4ODpcdFxuIDk4OTpcdFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsIGVlcHJvbSwgb2Zmc2V0KTtcbiA5OTA6XHRmcmVlOlxuIDk5MTpcdFx0a2ZyZWUoZWVwcm9tKTtcbiA5OTI6XHRcdHJldHVybiByZXQ7XG4gOTkzOlx0fVxuIDk5NDpcdEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEVFUFJPTSBEb3dubG9hZCBQcm9jZXNzKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoZSBvcGVyYXRpb24gc2VlbXMgdG8gYmUgdGhlIGBwNTRfZG93bmxvYWRfZWVwcm9tYCBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGdvaW5nIG9uLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29scyBiZWluZyB1c2VkLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQgd2l0aGluIGBwNTRfZG93bmxvYWRfZWVwcm9tYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0LiBJcyB0aGlzIHJlc3BvbnNpYmxlIGZvciBqdXN0IHRoZSBpbml0aWFsIHJlYWQsIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQ/IEFueSBraW5kIG9mIGFuYWx5c2lzIHdvdWxkIGJlIGxpbWl0ZWQgd2l0aG91dCBwcm9wZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29yZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X2Rvd25sb2FkX2VlcHJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTk2MT1pbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTc5LVx0XHRibG9ja3NpemUgPSBtaW4oZWVwcm9tX3NpemUsIG1heGJsb2Nrc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTgwOlx0XHRyZXQgPSBwNTRfZG93bmxvYWRfZWVwcm9tKHByaXYsIGVlcHJvbSAmIzQzOyBvZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTgxLVx0XHRcdFx0XHQgIG9mZnNldCwgYmxvY2tzaXplKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTE4ND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBoZHJfZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjIxMDppbnQgcDU0X2Rvd25sb2FkX2VlcHJvbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqYnVmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMTEtXHRcdFx0dTE2IG9mZnNldCwgdTE2IGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oPTU0OD1pbnQgcDU0X3VwbG9hZF9rZXkoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4IGFsZ28sIGludCBzbG90LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtNTUxLS8qIGVlcHJvbSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaDo1NTI6aW50IHA1NF9kb3dubG9hZF9lZXByb20oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmJ1ZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtNTUzLVx0XHRcdHUxNiBvZmZzZXQsIHUxNiBsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgRG93bmxvYWQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBgcDU0X2Rvd25sb2FkX2VlcHJvbWAgYW5kIG15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBrZXkgaW4gdGhpcyBlbnRpcmUgZmlybXdhcmUgcHJvY2Vzcy4gSSBrbm93IGl0IHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB0aGVuIGp1c3QuLi53YWl0cyBmb3IgdGhhdCByZXNwb25zZS4gTWFrZXMgc2Vuc2UuIFR5cGljYWwgcHJvdG9jb2wuIFJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgZXhwZWN0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb21tdW5pY2F0aW9uLiBXaGVyZSBkbyBJIHN0YXJ0PyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgaW4gYGZ3aW8uY2AuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBhbnkgcG90ZW50aWFsIGVycm9yIGNoZWNraW5nIGFuZCB0aW1lb3V0IGhhbmRsaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0aW50IHA1NF9kb3dubG9hZF9lZXByb20oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmJ1ZixcbiAyMTE6XHRcdFx0XHR1MTYgb2Zmc2V0LCB1MTYgbGVuKVxuIDIxMjpcdHtcbiAyMTM6XHRcdHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKmVlcHJvbV9oZHI7XG4gMjE0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDIxNTpcdFx0c2l6ZV90IGVlcHJvbV9oZHJfc2l6ZTtcbiAyMTY6XHRcdGludCByZXQgPSAwO1xuIDIxNzpcdFx0bG9uZyB0aW1lX2xlZnQ7XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAocHJpdi1cdTAwM2Vmd192YXIgXHUwMDNlPSAweDUwOSlcbiAyMjA6XHRcdFx0ZWVwcm9tX2hkcl9zaXplID0gc2l6ZW9mKCplZXByb21faGRyKTtcbiAyMjE6XHRcdGVsc2VcbiAyMjI6XHRcdFx0ZWVwcm9tX2hkcl9zaXplID0gMHg0O1xuIDIyMzpcdFxuIDIyNDpcdFx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgZWVwcm9tX2hkcl9zaXplICYjNDM7XG4gMjI1Olx0XHRcdFx0ICAgIGxlbiwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssXG4gMjI2Olx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuIDIyNzpcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIDIyODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMjk6XHRcbiAyMzA6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VlZXByb21fbXV0ZXgpO1xuIDIzMTpcdFx0cHJpdi1cdTAwM2VlZXByb20gPSBidWY7XG4gMjMyOlx0XHRwcml2LVx1MDAzZWVlcHJvbV9zbGljZV9zaXplID0gbGVuO1xuIDIzMzpcdFx0ZWVwcm9tX2hkciA9IHNrYl9wdXQoc2tiLCBlZXByb21faGRyX3NpemUgJiM0MzsgbGVuKTtcbiAyMzQ6XHRcbiAyMzU6XHRcdGlmIChwcml2LVx1MDAzZWZ3X3ZhciBcdTAwM2MgMHg1MDkpIHtcbiAyMzY6XHRcdFx0ZWVwcm9tX2hkci1cdTAwM2V2MS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpO1xuIDIzNzpcdFx0XHRlZXByb21faGRyLVx1MDAzZXYxLmxlbiA9IGNwdV90b19sZTE2KGxlbik7XG4gMjM4Olx0XHR9IGVsc2Uge1xuIDIzOTpcdFx0XHRlZXByb21faGRyLVx1MDAzZXYyLm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCk7XG4gMjQwOlx0XHRcdGVlcHJvbV9oZHItXHUwMDNldjIubGVuID0gY3B1X3RvX2xlMTYobGVuKTtcbiAyNDE6XHRcdFx0ZWVwcm9tX2hkci1cdTAwM2V2Mi5tYWdpYzIgPSAweGY7XG4gMjQyOlx0XHRcdG1lbWNweShlZXByb21faGRyLVx1MDAzZXYyLm1hZ2ljLCAoY29uc3QgY2hhciAqKVwmIzM0O0xPQ0tcJiMzNDssIDQpO1xuIDI0MzpcdFx0fVxuIDI0NDpcdFxuIDI0NTpcdFx0cDU0X3R4KHByaXYsIHNrYik7XG4gMjQ2Olx0XG4gMjQ3Olx0XHR0aW1lX2xlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChcbiAyNDg6XHRcdFx0XHRcdTAwMjZwcml2LVx1MDAzZWVlcHJvbV9jb21wLCBIWik7XG4gMjQ5Olx0XHRpZiAodGltZV9sZWZ0IFx1MDAzYz0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIwNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRUVQUk9NIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSBzZWUgaG93IHRoaXMgaXMgd29ya2luZy4gVGhlIHByb2Nlc3MgZ29lcyBsaWtlIHRoaXM6IGEgY29tbWFuZCBpcyBzZW50IHRvIHRoZSBkZXZpY2UsIGl0IHdhaXRzIGZvciBhIHJlc3BvbnNlLiBUaGUgcmVzcG9uc2UgY29tZXMgaW4gYW5kIGlzIGhhbmRsZWQgYnkgYW4gaW50ZXJydXB0IHJvdXRpbmUgb3IgUlggaGFuZGxlciDigJMgdHlwaWNhbC4gVGhpcyByb3V0aW5lIHRoZW4gY29waWVzIGRhdGEgaW50byBgcHJpdi0mZ3Q7ZWVwcm9tYCBhbmQgY29tcGxldGVzIGBwcml2LSZndDtlZXByb21fY29tcGAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGUgZGV2aWNlICpjYW4qIGJlIGVtdWxhdGVkLCB3aGljaCBtZWFucyB0aGUgcmVzcG9uc2UsIGFuZCB0aGVyZWZvcmUgdGhlIEVFUFJPTSBkYXRhLCBpcyBmdWxseSB1bmRlciBhbiBhdHRhY2tlciYjMzk7cyBjb250cm9sLiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4KClRoZSBwYXRjaCBpbXBsZW1lbnRzIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYHA1NF9wYXJzZV9lZXByb21gLCB3aGljaCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWV0aGluZy4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZyDigJMgSSBjYW4gc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmVhbGx5IG5hc3R5IGJ1ZyBoZXJlLgoKVGltZSB0byBpZGVudGlmeSBzb21lIGludGVyZXN0aW5nIHN5bWJvbHMuIGBwNTRfcGFyc2VfZWVwcm9tYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQsIG9idmlvdXNseS4gYHA1NF9yZWFkX2VlcHJvbWAgYWxzbyBsb29rcyBwcm9taXNpbmcuIEkgYWxzbyBzZWUgYHA1NF9jb252ZXJ0X3JldjBgIGFuZCBgcDU0X2NvbnZlcnRfcmV2MWAg4oCTIHRob3NlIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZWVwcm9tLmNgLCB3aGljaCBjb3VsZCBiZSB1c2VkIHRvIG9iZnVzY2F0ZSB0aGUgd29ya2luZ3MuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXkmIzM5O3JlIGFjdHVhbGx5IHN0YXRpYy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X2NvbnZlcnRfcmV2MCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTMxOT1zdGF0aWMgaW50IHA1NF9nZW5lcmF0ZV9jaGFubmVsX2xpc3RzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQxNjpzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQxNy1cdFx0XHQgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz03MjU9aW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4MS1cdFx0XHRcdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3ODI6XHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzgzLVx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcDU0X3BhcnNlX2VlcHJvbSBGdW5jdGlvbiBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCwgdGhlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoaXMgYXJlIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdGhlIGBwNTRfcGFyc2VfZWVwcm9tYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBzeW1ib2wgSSBuZWVkIHRvIHVuZGVyc3RhbmQuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBmaXJzdCBvbmUgSSBuZWVkIHRvIHZlcmlmeSBpcyBgUDU0X1VTQmAuIFRoYXQmIzM5O3MgdGhlIG1haW4gY29uZmlndXJhdGlvbiBpdGVtLCBJIGFzc3VtZS4gT2theSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIEFoLCBpdCBsb29rcyBsaWtlIGBQNTRfQ09NTU9OYCBpcyAqbm90KiBzZWxlY3RlZCAqYnkqIGBQNTRfVVNCYCwgYnV0IHJhdGhlciBgUDU0X1VTQmAgKmRlcGVuZHMqIG9uIGBQNTRfQ09NTU9OYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhlIEtjb25maWcgZmlsZSBmb3IgYFA1NF9VU0JgIHRvIGNvbmZpcm0gYW5kIGVuc3VyZSBJIGhhdmUgdGhlIGRlcGVuZGVuY3kgdHJlZSBjb3JyZWN0IGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgUDU0X0NPTU1PTlxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U29mdG1hYyBQcmlzbTU0IHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgIDY6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBpcyBjb21tb24gY29kZSBmb3IgaXNsMzh4eC9zdGxjNDV4eCBiYXNlZCBtb2R1bGVzLlxuICAgOTpcdFx0ICBUaGlzIG1vZHVsZSBkb2VzIG5vdGhpbmcgYnkgaXRzZWxmIC0gdGhlIFVTQi9QQ0kvU1BJIGZyb250LWVuZHNcbiAgMTA6XHRcdCAgYWxzbyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBhbnkgZGV2aWNlcy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDEzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDE0Olx0XG4gIDE1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0Y29tbW9uLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBQNTRfVVNCXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFVTQlxuICAyMDpcdFx0c2VsZWN0IENSQzMyXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDI1Olx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDI2Olx0XG4gIDI3Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0dXNiLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBQNTRfUENJXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFBDSSBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFBDSVxuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgUENJIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXG4gIDM0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG1vc3QgZGV2aWNlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlXG4gIDM1Olx0XHQgIGZ1bGxtYWMgcHJpc201NCBkcml2ZXIgcGx1cyBtYW55IGRldmljZXMgd2hpY2ggYXJlIG5vdFxuICAzNjpcdFx0ICBzdXBwb3J0ZWQgYnkgdGhlIGZ1bGxtYWMgZHJpdmVyL2Zpcm13YXJlLlxuICAzNzpcdFxuICAzODpcdFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuICAzOTpcdFx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHBjaS5cbiAgNDI6XHRcbiAgNDM6XHRjb25maWcgUDU0X1NQSVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJpc201NCBTUEkgKHN0bGM0NXh4KSBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFNQSV9NQVNURVJcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIHN0bGM0NTUwIG9yIHN0bGM0NTYwIGJhc2VkIHdpcmVsZXNzIGNoaXBzXG4gIDQ4Olx0XHQgIHN1Y2ggYXMgTm9raWEmIzM5O3MgTjgwMC9OODEwIFBvcnRhYmxlIEludGVybmV0IFRhYmxldC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRzcGkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIHRoZSBwNTQgV2lyZWxlc3MgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgbW9kdWxlcyB0byBlbmFibGUuIEZyb20gdGhlIGluaXRpYWwgY2x1ZXMsIGl0IGxvb2tzIGxpa2Ugd2UgZGVmaW5pdGVseSBuZWVkIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGluY2x1ZGluZyBgUDU0X1BDSWAgYW5kIGBQNTRfU1BJYCBhcyB3ZWxsLCBqdXN0IHRvIGNvdmVyIGFsbCBiYXNlcywgdGhvdWdoIGBQNTRfVVNCYCBzZWVtcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgZ2l2ZW4gdGhhdCBgc3l6X3VzYl9jb25uZWN0YCBpcyBtZW50aW9uZWQuCgpXYWl0IGEgc2Vjb25kLCBsZXQgbWUgcmUtZXZhbHVhdGUuLi50aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBwNTRfcGFyc2VfZWVwcm9tYCwgd2hpY2ggSSBrbm93IHJlc2lkZXMgaW4gYGVlcHJvbS5jYC4gQWgsIHJpZ2h0LCBgZWVwcm9tLmNgIGlzIGFjdHVhbGx5IHBhcnQgb2YgYHA1NGNvbW1vbmAuIFRoYXQgc29saWRpZmllcyBpdDogYFA1NF9DT01NT05gIGlzIGRlZmluaXRlbHkgdGhlIGtleSBtb2R1bGUgdG8gZW5hYmxlIGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybSB0aGlzIGJ5IHF1aWNrbHkgcmVmZXJlbmNpbmcgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0cDU0Y29tbW9uLW9ianNcdFx0XHQ6PSBlZXByb20ubyBmd2lvLm8gdHhyeC5vIG1haW4ub1xuICAgMzpcdHA1NGNvbW1vbi0kKENPTkZJR19QNTRfTEVEUylcdCYjNDM7PSBsZWQub1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19QNTRfQ09NTU9OKVx0JiM0Mzs9IHA1NGNvbW1vbi5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1A1NF9VU0IpXHRcdCYjNDM7PSBwNTR1c2Iub1xuICAgNzpcdG9iai0kKENPTkZJR19QNTRfUENJKVx0XHQmIzQzOz0gcDU0cGNpLm9cbiAgIDg6XHRvYmotJChDT05GSUdfUDU0X1NQSSlcdFx0JiM0Mzs9IHA1NHNwaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODMxCgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHJpc201NCBFRVBST00gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgZWVwcm9tLm9gIGlzIGluZGVlZCB3aXRoaW4gYHA1NGNvbW1vbmAuIFRoYXQgbWVhbnMgZW5hYmxpbmcgYFA1NF9DT01NT05gIGlzIGVzc2VudGlhbCBmb3IgdGhpcy4gVG8gYWN0dWFsbHkgZ2V0IGF0IGl0IHRocm91Z2ggc3l6a2FsbGVyLCB3ZSYjMzk7bGwgbmVlZCBhIGZyb250LWVuZCBtb2R1bGUsIGFuZCBgUDU0X1VTQmAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZS4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIHBhdGggaW4uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmVzaWRlcyBgcDU0X3BhcnNlX2VlcHJvbWAsIHdoaWNoIEkga25vdyB0aGUgcGF0Y2ggdGFyZ2V0cywgSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gYHA1NF9yZWFkX2VlcHJvbWAgYW5kIGBwNTRfZG93bmxvYWRfZWVwcm9tYC4gVGhleSYjMzk7cmUgYWxsIGludGVyY29ubmVjdGVkLCBzbyBpdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2guIExldCYjMzk7cyBhZGQgdGhvc2UgdG8gYEZvY3VzU3ltYm9sc2AuCgpNeSBgRm9jdXNTeW1ib2xzYCBhcmUgbm93OgoKKiAgIGBwNTRfcGFyc2VfZWVwcm9tYAoqICAgYHA1NF9yZWFkX2VlcHJvbWAKKiAgIGBwNTRfZG93bmxvYWRfZWVwcm9tYAoKQW5kIGhlcmUgYXJlIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgOgoKKiAgIGBQNTRfQ09NTU9OYAoqICAgYFA1NF9VU0JgCiogICBgTUFDODAyMTFgCgpUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJvdW5kcy1jaGVja2luZyBpc3N1ZSBpbiBgcDU0X3BhcnNlX2VlcHJvbWAuIEl0JiMzOTtzIHBhcnNpbmcgRUVQUk9NIGRhdGEgd2l0aGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIGtleSBpcyB0aGF0IGBwNTRfZG93bmxvYWRfZWVwcm9tYCBpcyB1c2VkIHRvIGdldCB0aGUgRUVQUk9NIGRhdGEuIEl0IHNlbmRzIGEgY29tbWFuZCwgd2FpdHMgZm9yIGEgcmVzcG9uc2UuIEluIGEgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSB3ZSYjMzk7cmUgZGlzY3Vzc2luZywgdGhpcyBtZWFucyB3ZSBjYW4gdXNlIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCB0byBlbXVsYXRlIGEgVVNCIFByaXNtNTQgZGV2aWNlLiBUaGF0JiMzOTtsbCB0cmlnZ2VyIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBFRVBST00gcmVhZGluZywgYW5kIHNpbmNlIHdlJiMzOTtyZSAqZW11bGF0aW5nKiB0aGUgZGV2aWNlLCB3ZSBoYXZlIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB0aGUgRUVQUk9NIGRhdGEgdGhhdCBnZXRzIHJldHVybmVkLiBUaGF0IG1ha2VzIHRoZSBwYXJzaW5nIGxvZ2ljIGNvbXBsZXRlbHkgYXR0YWNrZXItY29udHJvbGxlZCwgYW5kIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cDU0X3BhcnNlX2VlcHJvbSYjMzQ7LAogICAgJiMzNDtwNTRfcmVhZF9lZXByb20mIzM0OywKICAgICYjMzQ7cDU0X2Rvd25sb2FkX2VlcHJvbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cDU0X3BhcnNlX2VlcHJvbSYjMzQ7LAogICAgJiMzNDtwNTRfcmVhZF9lZXByb20mIzM0OywKICAgICYjMzQ7cDU0X2Rvd25sb2FkX2VlcHJvbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMKaW5kZXggOTU1ODA5MjFkOTMzOC4uNDcyZWRlY2Y1NTc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYwpAQCAtNzYzLDYgJiM0Mzs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHsKIAkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CiAJCQkJKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LSZndDtkYXRhOwomIzQzOwkJCXNpemVfdCBuZWVkZWQ7CiYjNDM7CiAJCQlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGVycjsKQEAgLTc3MCw5ICYjNDM7NzcyLDIzIEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQogCiAJCQlzd2l0Y2ggKGN1cnZlX2RhdGEtJmd0O2NhbF9tZXRob2RfcmV2KSB7CiAJCQljYXNlIDA6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDIpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDMpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYxKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtODAxLDcgJiM0Mzs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKIAkJCXRtcCA9IGVudHJ5LSZndDtkYXRhOwotCQkJd2hpbGUgKCh1OCAqKXRtcCAmbHQ7IGVudHJ5LSZndDtkYXRhICYjNDM7IGRhdGFfbGVuKSB7CiYjNDM7CQkJd2hpbGUgKCh1OCAqKXRtcCAmIzQzOyBzaXplb2Yoc3RydWN0IGV4cF9pZikgJmx0Oz0KJiM0MzsJCQkgICAgICAgZW50cnktJmd0O2RhdGEgJiM0MzsgZGF0YV9sZW4pIHsKIAkJCQlzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7CiAJCQkJaWYgKGV4cF9pZi0mZ3Q7aWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKQogCQkJCQlzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi0mZ3Q7dmFyaWFudCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI5CgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBQNTQgRUVQUk9NIFBhcnNpbmcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB0byB0aGUgYHA1NF9wYXJzZV9lZXByb21gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgRUVQUk9NIGRhdGEgYnVmZmVyIGluIHRoZSBgaW50ZXJzaWwvcDU0YCB3aXJlbGVzcyBkcml2ZXIuIFRoZSBjaGVjayBpbnZvbHZlcyBjYWxjdWxhdGluZyBhIGBuZWVkZWRgIHNpemUgYmFzZWQgb24gY2hhbm5lbCBhbmQgcG9pbnRzIGRhdGEgZnJvbSBgY3VydmVfZGF0YWAgYW5kIGNvbXBhcmluZyBpdCBhZ2FpbnN0IHRoZSBhdmFpbGFibGUgYGRhdGFfbGVuYC4gSXQgYWxzbyBmaXhlcyBhIGB3aGlsZWAgbG9vcCB0byBwcmV2ZW50IGdvaW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIGRhdGEgZm9yIGEgY2VydGFpbiBpbnRlcmZhY2UgbGlzdC4KCk15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzIEtNU0FOJiMzOTtzIGRvbWFpbi4gVGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgRUVQUk9NLCB3aGljaCwgYXQgbGVhc3QgaWRlYWxseSwgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBJZiB0aGUgYm91bmRzIGNoZWNrcyB3ZXJlIG1pc3NpbmcsIHdlJiMzOTtkIGJlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyBFRVBST00gZGF0YSwgd2hpY2ggaXMgZGVmaW5pdGVseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhvc2UgT09CIHJlYWRzLiBUaGUgcGF0Y2ggaXMgcHJldmVudGluZyByZWFkcyBwYXN0IHRoZSBlbmQgb2YgYSBidWZmZXI7IHRoZXJlZm9yZSwgYSBLTVNBTiBjaGVjayBpcyB1bm5lY2Vzc2FyeS4KClRoaW5raW5nIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseSwgdGhlIGBwNTRfcGFyc2VfZWVwcm9tYCBmdW5jdGlvbiB3b3JrcyB3aXRoIGEgYnVmZmVyIGNhbGxlZCBgZWVwcm9tYC4gVGhlIGBkYXRhX2xlbmAgaXMgdGhlIGxlbmd0aCBvZiBlYWNoIFBEUiBlbnRyeSB3aXRoaW4gdGhlIGJ1ZmZlci4gTm93LCBpbnNpZGUgdGhlIGZ1bmN0aW9uJiMzOTtzIGxvb3AsIHRoZXJlJiMzOTtzIHRoaXMgYHN3aXRjaGAgc3RhdGVtZW50IHRoYXQgY2FsY3VsYXRlcyBgbmVlZGVkYC4gSWYgYG5lZWRlZGAgZXhjZWVkcyB3aGF0JiMzOTtzIGF2YWlsYWJsZSBpbiBgZGF0YV9sZW5gLCB0aGVuIHRoZSBjb2RlIHRyaWVzIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGVudHJ5LCBwb3NzaWJseSBpbnRvIHRoZSBuZXh0IGVudHJ5IG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgZW50aXJlIGBlZXByb21gIGJ1ZmZlci4KCklmIGl0IHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGVlcHJvbWAgYnVmZmVyLCBLQVNBTiB3aWxsIGNhdGNoIGl0IGFzIGFuIE9PQiByZWFkLiBJZiBpdCByZWFkcyBpbnRvIHRoZSBuZXh0IGVudHJ5LCBpdCYjMzk7cyBqdXN0IHBhcnNpbmcgZ2FyYmFnZSBidXQgbm90IHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGlzIGlzIHB1cmVseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgY2F1c2VkIGJ5IGluc3VmZmljaWVudCBib3VuZHMgY2hlY2tpbmcuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgZGV0ZWN0aW5nIGFuZCBwcmV2ZW50aW5nIHRoaXMuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gbGVha2luZyB0byB0aGUgdXNlci4gSSYjMzk7bSBjb21mb3J0YWJsZSBpbiBjb25jbHVkaW5nIHRoYXQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiBwNTRfcGFyc2VfZWVwcm9tLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIG9yIGludG8gYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgaW52b2x2ZWQgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzI6MzcuOTM1ODc4MjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0Mjc4Mzc3MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicDU0X3BhcnNlX2VlcHJvbVwiLFxuICAgIFwicDU0X3JlYWRfZWVwcm9tXCIsXG4gICAgXCJwNTRfZG93bmxvYWRfZWVwcm9tXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwNTRfcGFyc2VfZWVwcm9tYCB3aGVuIHBhcnNpbmcgRUVQUk9NIGRhdGEgaW4gdGhlIEludGVyc2lsIFByaXNtNTQgd2lyZWxlc3MgZHJpdmVyLiBUaGUgRUVQUk9NIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBkZXZpY2UgdmlhIGBwNTRfZG93bmxvYWRfZWVwcm9tYCwgd2hpY2ggc2VuZHMgYSBjb21tYW5kIHRvIHRoZSBkZXZpY2UgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGlzIGNhbiBiZSByZWFjaGVkIGJ5IGVtdWxhdGluZyBhIFVTQiBQcmlzbTU0IGRldmljZSB1c2luZyBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIHdpbGwgdHJpZ2dlciBmaXJtd2FyZSBsb2FkaW5nIGFuZCBzdWJzZXF1ZW50IEVFUFJPTSByZWFkaW5nLiBTaW5jZSB0aGUgZW11bGF0ZWQgZGV2aWNlIGNhbiByZXR1cm4gYXJiaXRyYXJ5IEVFUFJPTSBkYXRhLCB0aGUgcGFyc2luZyBsb2dpYyBpcyBmdWxseSBhdHRhY2tlci1jb250cm9sbGVkIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjozNy45MzU4OTczMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzkzODU2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjMyOjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uY1xcbmluZGV4IDk1NTgwOTIxZDkzMzguLjQ3MmVkZWNmNTU3NzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXFxuQEAgLTc2Myw2ICs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcXG4gXFx0XFx0Y2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHtcXG4gXFx0XFx0XFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cXG4gXFx0XFx0XFx0XFx0KHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LVxcdTAwM2VkYXRhO1xcbitcXHRcXHRcXHRzaXplX3QgbmVlZGVkO1xcbitcXG4gXFx0XFx0XFx0aWYgKGRhdGFfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG5AQCAtNzcwLDkgKzc3MiwyMyBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcXG4gXFxuIFxcdFxcdFxcdHN3aXRjaCAoY3VydmVfZGF0YS1cXHUwMDNlY2FsX21ldGhvZF9yZXYpIHtcXG4gXFx0XFx0XFx0Y2FzZSAwOlxcbitcXHRcXHRcXHRcXHRuZWVkZWQgPSBjdXJ2ZV9kYXRhLVxcdTAwM2VjaGFubmVscyAqXFxuK1xcdFxcdFxcdFxcdFxcdChzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwKSAqXFxuK1xcdFxcdFxcdFxcdFxcdCBjdXJ2ZV9kYXRhLVxcdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwgKyAyKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGRhdGFfbGVuIC0gc2l6ZW9mKCpjdXJ2ZV9kYXRhKSBcXHUwMDNjIG5lZWRlZCkge1xcbitcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIDE6XFxuK1xcdFxcdFxcdFxcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXFx1MDAzZWNoYW5uZWxzICpcXG4rXFx0XFx0XFx0XFx0XFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEpICpcXG4rXFx0XFx0XFx0XFx0XFx0IGN1cnZlX2RhdGEtXFx1MDAzZXBvaW50c19wZXJfY2hhbm5lbCArIDMpO1xcbitcXHRcXHRcXHRcXHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFxcdTAwM2MgbmVlZGVkKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGRlZmF1bHQ6XFxuQEAgLTgwMSw3ICs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgUERSX0lOVEVSRkFDRV9MSVNUOlxcbiBcXHRcXHRcXHR0bXAgPSBlbnRyeS1cXHUwMDNlZGF0YTtcXG4tXFx0XFx0XFx0d2hpbGUgKCh1OCAqKXRtcCBcXHUwMDNjIGVudHJ5LVxcdTAwM2VkYXRhICsgZGF0YV9sZW4pIHtcXG4rXFx0XFx0XFx0d2hpbGUgKCh1OCAqKXRtcCArIHNpemVvZihzdHJ1Y3QgZXhwX2lmKSBcXHUwMDNjPVxcbitcXHRcXHRcXHQgICAgICAgZW50cnktXFx1MDAzZWRhdGEgKyBkYXRhX2xlbikge1xcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7XFxuIFxcdFxcdFxcdFxcdGlmIChleHBfaWYtXFx1MDAzZWlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0lTTDM5MDAwKSlcXG4gXFx0XFx0XFx0XFx0XFx0c3ludGggPSBsZTE2X3RvX2NwdShleHBfaWYtXFx1MDAzZXZhcmlhbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjozOS40MTYyNDk4NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTE4ODgzMjIxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZWVwcm9tXCIsXG4gICAgXCJwNTRfcmVhZF9lZXByb21cIixcbiAgICBcInA1NF9kb3dubG9hZF9lZXByb21cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTBhZGE0YmY4ZDBjNWQ4NmE2NTE5NmYyMDE5ZWQwZGUwYWRlMzY4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjMyOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG5pbmRleCA5NTU4MDkyMWQ5MzM4Li40NzJlZGVjZjU1NzcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbkBAIC03NjMsNiArNzYzLDggQEAgaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXG4gXHRcdGNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBOiB7XG4gXHRcdFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cbiBcdFx0XHRcdChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKillbnRyeS1cdTAwM2VkYXRhO1xuK1x0XHRcdHNpemVfdCBuZWVkZWQ7XG4rXG4gXHRcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBlcnI7XG5AQCAtNzcwLDkgKzc3MiwyMyBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcbiBcdFx0XHRzd2l0Y2ggKGN1cnZlX2RhdGEtXHUwMDNlY2FsX21ldGhvZF9yZXYpIHtcbiBcdFx0XHRjYXNlIDA6XG4rXHRcdFx0XHRuZWVkZWQgPSBjdXJ2ZV9kYXRhLVx1MDAzZWNoYW5uZWxzICpcbitcdFx0XHRcdFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjApICpcbitcdFx0XHRcdFx0IGN1cnZlX2RhdGEtXHUwMDNlcG9pbnRzX3Blcl9jaGFubmVsICsgMik7XG4rXHRcdFx0XHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFx1MDAzYyBuZWVkZWQpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIDE6XG4rXHRcdFx0XHRuZWVkZWQgPSBjdXJ2ZV9kYXRhLVx1MDAzZWNoYW5uZWxzICpcbitcdFx0XHRcdFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEpICpcbitcdFx0XHRcdFx0IGN1cnZlX2RhdGEtXHUwMDNlcG9pbnRzX3Blcl9jaGFubmVsICsgMyk7XG4rXHRcdFx0XHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFx1MDAzYyBuZWVkZWQpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYxKGRldiwgY3VydmVfZGF0YSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRkZWZhdWx0OlxuQEAgLTgwMSw3ICs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6XG4gXHRcdFx0dG1wID0gZW50cnktXHUwMDNlZGF0YTtcbi1cdFx0XHR3aGlsZSAoKHU4ICopdG1wIFx1MDAzYyBlbnRyeS1cdTAwM2VkYXRhICsgZGF0YV9sZW4pIHtcbitcdFx0XHR3aGlsZSAoKHU4ICopdG1wICsgc2l6ZW9mKHN0cnVjdCBleHBfaWYpIFx1MDAzYz1cbitcdFx0XHQgICAgICAgZW50cnktXHUwMDNlZGF0YSArIGRhdGFfbGVuKSB7XG4gXHRcdFx0XHRzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7XG4gXHRcdFx0XHRpZiAoZXhwX2lmLVx1MDAzZWlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0lTTDM5MDAwKSlcbiBcdFx0XHRcdFx0c3ludGggPSBsZTE2X3RvX2NwdShleHBfaWYtXHUwMDNldmFyaWFudCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjozOS40MTYyNTE4NDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTM0NTM0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBzb21lIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYHA1NF9wYXJzZV9lZXByb21gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBwYXJzaW5nIG9mIGBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFgIGFuZCBgUERSX0lOVEVSRkFDRV9MSVNUYC4gVGhhdCdzIGdvb2QsIGFsd2F5cyBhIHBsdXMgdG8gc2VlIHRoYXQga2luZCBvZiBoYXJkZW5pbmcuIFRoaXMgaXMgZm9yIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGNhcmRzLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCByZWFjaGFiaWxpdHkuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXM6IGNhbiB0aGlzIGNvZGUgZXZlbiAqYmUqIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJbiBteSBleHBlcmllbmNlLCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyB3aXJlbGVzcyBkcml2ZXJzIOKAkyBJbnRlcnNpbCBQcmlzbTU0IGluIHRoaXMgY2FzZSDigJMgdXN1YWxseSByZXF1aXJlIHRoZSAqYWN0dWFsKiBoYXJkd2FyZSB0byBiZSBwcmVzZW50LiBPciwgcG9zc2libHksIGEgY2xldmVyIFVTQiBkZXZpY2UgZW11bGF0aW9uIHVzaW5nIHNvbWV0aGluZyBsaWtlIFVTQiBnYWRnZXQgb3IgZHVtbXlfaGNkIGlmIGl0J3MgYSBVU0Igd2lyZWxlc3MgZGV2aWNlLiBNYXliZSwgaWYgaXQncyBQQ0ksIHdlIGhhdmUgc29tZXRoaW5nIHRvIHdvcmsgd2l0aCB0aGVyZS4gSXQncyByYXJlIHRvIGdldCBhIGRpcmVjdCBoaXQgb24gc3VjaCBhIHRhcmdldGVkIHBpZWNlIG9mIGhhcmR3YXJlIGluIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgc3BlY2lmaWMgZGV2aWNlIHBhc3N0aHJvdWdoIG9yIGNsZXZlciBlbXVsYXRpb24uXG5cblNvLCBmaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgb2YgdGhpcyBgcDU0YCBkcml2ZXIuIElzIGl0IFVTQj8gUENJPyBCdWlsdC1pbj8gVGhlbiBJIGNhbiBmb3JtIGEgc29saWQgaHlwb3RoZXNpcyBhYm91dCB3aGVuIGFuZCBob3cgdGhpcyBib3VuZHMgY2hlY2sgd291bGQgYWN0dWFsbHkgYmUgaGl0IGR1cmluZyB0ZXN0aW5nLCBmdXp6aW5nLCBvciBzZWN1cml0eSBhdWRpdHMuIFRoYXQncyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjo0Ny45NTA3OTIyNjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzc3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInA1NF9wYXJzZV9lZXByb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9Njk4PXN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI1OmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk1OC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk1OTpFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZWVwcm9tKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05NjE9aW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5ODk6XFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsIGVlcHJvbSwgb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTkwLWZyZWU6XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MjY5PWludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6MjcwOmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjcxLWludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYz0xNjI9c3RhdGljIGludCBwNTRzcGlfcmVxdWVzdF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTE3NC1cXHRcXHRkZXZfaW5mbyhcXHUwMDI2cHJpdi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJsb2FkaW5nIGRlZmF1bHQgZWVwcm9tLi4uXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MTc1OlxcdFxcdHJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCAodm9pZCAqKSBwNTRzcGlfZWVwcm9tLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0xNzYtXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihwNTRzcGlfZWVwcm9tKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTgxLVxcdFxcdGRldl9pbmZvKFxcdTAwMjZwcml2LVxcdTAwM2VzcGktXFx1MDAzZWRldiwgXFxcImxvYWRpbmcgdXNlciBlZXByb20uLi5cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYzoxODI6XFx0XFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsICh2b2lkICopIGVlcHJvbS1cXHUwMDNlZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTgzLVxcdFxcdFxcdFxcdCAgICAgICAoaW50KWVlcHJvbS1cXHUwMDNlc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjMyOjQ4LjEwMTE3NjIwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzExNzI2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgRUVQUk9NIFJlYWQgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBwNTRfcGFyc2VfZWVwcm9tYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGFuZCBpdCdzIGNhbGxlZCBieSBib3RoIGBwNTRfcmVhZF9lZXByb21gIGFuZCBgcDU0c3BpX3JlcXVlc3RfZWVwcm9tYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZXNlIEVFUFJPTSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkncmUgKmluaXRpYXRlZCouIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgYHA1NF9yZWFkX2VlcHJvbWAgaXMgY2FsbGVkIGZyb20uIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGVyZSBpdCBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzI6NTMuMDcyMzUzNDM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg2Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfcmVhZF9lZXByb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9OTU5PUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk2MTppbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05OTMtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5OTQ6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlYWRfZWVwcm9tKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD0yNzA9aW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoyNzE6aW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNzItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM9NDk2PXN0YXRpYyB2b2lkIHA1NHBfZmlybXdhcmVfc3RlcDIoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYy01MTQtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jOjUxNTpcXHRlcnIgPSBwNTRfcmVhZF9lZXByb20oZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmMtNTE2LVxcdHA1NHBfc3RvcChkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTg2Nz1zdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo4OTY6XFx0cmV0ID0gcDU0X3JlYWRfZWVwcm9tKGRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTg5Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjo1My4yMzIyMjMwMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk4OTI3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBgcDU0X3JlYWRfZWVwcm9tYCBpcyBjYWxsZWQgZnJvbSBgcDU0dXNiLmNgLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIFRoaW5raW5nIGFib3V0IGhvdyBVU0IgZGV2aWNlcyBhcmUgZW11bGF0ZWQsIEkgc2VlIHRoYXQgd2UgaGF2ZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFRoYXQgbWVhbnMgSSBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gTWFrZXMgdGhpbmdzIG11Y2ggbW9yZSBpbnRlcmVzdGluZy4gTm93IEknbGwgdGFrZSBhIGxvb2sgYXQgYHA1NHVfc3RhcnRfb3BzYCBpbiBgcDU0dXNiLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgb3IgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzg2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzM6MDAuMzMxMTUzODY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzM3NzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTR1X3N0YXJ0X29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz04NTQ9c3RhdGljIGludCBwNTRfZmluZF90eXBlKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo4Njc6c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04Njgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTkxOT1zdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05MjgtXFx0XFx0cHJpdi1cXHUwMDNlZncgPSBmaXJtd2FyZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6OTI5OlxcdFxcdGVyciA9IHA1NHVfc3RhcnRfb3BzKHByaXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05MzAtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzM6MDAuNDU4NTM4ODM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzMTIwNjAyOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGaXJtd2FyZSBMb2FkaW5nIHZpYSBVU0IgRW11bGF0aW9uKipcblxuT2theSwgc28gYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiBmaXJtd2FyZSBpcyBsb2FkZWQuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBlbXVsYXRpb24gcGF0aHdheS4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBzcGVjaWZpYyBhcmVhIHRvIGZvY3VzIG9uLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyB3aXRoaW4gdGhhdCBVU0IgZW11bGF0aW9uIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgc2V0dGluZ3MsIHBhcmFtZXRlcnMsIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgZXNzZW50aWFsIHRvIG1ha2UgdGhpcyB3b3JrIGNvcnJlY3RseS4gTGV0IG1lIGRpZyBpbnRvIHRoZSBjb25maWdzIGFuZCBkb2N1bWVudGF0aW9uIHN1cnJvdW5kaW5nIHRoaXMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0MzowMy41NzkxNDU4MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDEyNjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUDU0X1VTQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTI9Y29uZmlnIFA1NF9DT01NT05cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjE3OmNvbmZpZyBQNTRfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgVVNCIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQzOjAzLjY4OTI3ODg5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDcwMTI2NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnYCBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQNTQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIHdpdGggdGhpcyBJbnRlcnNpbCBQNTQgd2lyZWxlc3MgZHJpdmVyIEtjb25maWcgZmlsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gZXhwZWN0aW5nIGEgY2xlYW4sIHdlbGwtc3RydWN0dXJlZCBjb25maWd1cmF0aW9uIHN5c3RlbSwgZm9sbG93aW5nIHRoZSBlc3RhYmxpc2hlZCBrZXJuZWwgY29udmVudGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgYSBjbGVhciBoaWVyYXJjaHksIGxvZ2ljYWwgZGVwZW5kZW5jaWVzLCBhbmQgc2Vuc2libGUgZGVmYXVsdCB2YWx1ZXMuIFRoZSBgY29uZmlnYCBkaXJlY3RpdmVzLCBuYXR1cmFsbHksIGFyZSB3aGF0IEknbSBtb3N0IGludGVyZXN0ZWQgaW4uIEkgd2FudCB0byBzZWUgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIG9mIHRoaXMgZHJpdmVyIGFyZSBlbmFibGVkIGFuZCBkaXNhYmxlZCwgYW5kIHdoYXQga2luZCBvZiBncmFudWxhcml0eSB0aGUgZGV2ZWxvcGVycyBoYXZlIHByb3ZpZGVkLlxuXG5JJ20ga2VlcGluZyBhbiBleWUgb3V0IGZvciBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMg4oCTIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGV0Yy4gVGhlc2UgYXJlIGNydWNpYWwuIFRoaXMgd2lsbCBkZW1vbnN0cmF0ZSBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIG9wdGlvbnMgaW50ZXJyZWxhdGUuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBBcmUgdGhlIGNob2ljZXMgY2xlYXJseSBleHBsYWluZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBsdXJraW5nIGluIHRoZSBzaGFkb3dzP1xuXG5UaGVuIEknbGwgc2NydXRpbml6ZSB0aGUgdmFyaW91cyBcImhlbHBcIiBzZWN0aW9ucy4gVGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbiBpbiB0aGVzZSBzZWN0aW9ucyBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIG92ZXJhbGwgY29kZSBxdWFsaXR5LiBBcmUgdGhlIGV4cGxhbmF0aW9ucyBjbGVhciwgY29uY2lzZSwgYW5kIGFjY3VyYXRlPyBEbyB0aGV5IG9mZmVyIGVub3VnaCBjb250ZXh0IGZvciBhIHVzZXIgdG8gbWFrZSBpbmZvcm1lZCBjaG9pY2VzPyBBcmUgdGhlcmUgYW55IGdvdGNoYXMgb3IgY2F2ZWF0cyBtZW50aW9uZWQ/XG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuIERvIHRoZXkgc2VlbSByZWFzb25hYmxlIGZvciB0aGUgZXhwZWN0ZWQgdXNlIGNhc2VzPyBBcmUgdGhleSBjb25maWd1cmFibGUgaW4gYSBzZW5zaWJsZSByYW5nZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBkZWZhdWx0cz8gSWRlYWxseSwgdGhleSBzaG91bGQgcHJpb3JpdGl6ZSBhIGJhbGFuY2UgYmV0d2VlbiBmdW5jdGlvbmFsaXR5IGFuZCBzZWN1cml0eSwgZGVmYXVsdGluZyB0byB0aGUgbW9yZSBzZWN1cmUgY29uZmlndXJhdGlvbiB3aGVyZSBwb3NzaWJsZS5cblxuRmluYWxseSwgSSdsbCBiZSBzY2FubmluZyBmb3IgYW55IHVudXN1YWwgb3Igbm9uLXN0YW5kYXJkIHByYWN0aWNlcy4gVGhpcyBjb3VsZCBiZSBhIHNpZ24gb2YgYSBkZWVwZXIgcHJvYmxlbSBvciBhbiBhcmVhIHRoYXQgcmVxdWlyZXMgbW9yZSBpbnZlc3RpZ2F0aW9uLiBBcmUgdGhlcmUgYW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgYW55IHVubmVjZXNzYXJ5IGNvbXBsZXhpdGllcz8gSXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZmlsZSB3ZWxsLW9yZ2FuaXplZCBhbmQgZWFzeSB0byBuYXZpZ2F0ZT8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCB0aGF0IGl0IGludGVncmF0ZXMgc21vb3RobHkgaW50byBteSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0MzoyNC4zOTA1Njg4MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBQNTRfQ09NTU9OXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU29mdG1hYyBQcmlzbTU0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIGlzbDM4eHgvc3RsYzQ1eHggYmFzZWQgbW9kdWxlcy5cXG4gICA5OlxcdFxcdCAgVGhpcyBtb2R1bGUgZG9lcyBub3RoaW5nIGJ5IGl0c2VsZiAtIHRoZSBVU0IvUENJL1NQSSBmcm9udC1lbmRzXFxuICAxMDpcXHRcXHQgIGFsc28gbmVlZCB0byBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHN1cHBvcnQgYW55IGRldmljZXMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuICAxMzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0Y29tbW9uLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgUDU0X1VTQlxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgVVNCIHN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgVVNCXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMjU6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHVzYi5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFA1NF9QQ0lcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFBDSSBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgUENJIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXFxuICAzNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG1vc3QgZGV2aWNlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGZ1bGxtYWMgcHJpc201NCBkcml2ZXIgcGx1cyBtYW55IGRldmljZXMgd2hpY2ggYXJlIG5vdFxcbiAgMzY6XFx0XFx0ICBzdXBwb3J0ZWQgYnkgdGhlIGZ1bGxtYWMgZHJpdmVyL2Zpcm13YXJlLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuICAzOTpcXHRcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0cGNpLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgUDU0X1NQSVxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgU1BJIChzdGxjNDV4eCkgc3VwcG9ydFxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBTUElfTUFTVEVSXFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBzdGxjNDU1MCBvciBzdGxjNDU2MCBiYXNlZCB3aXJlbGVzcyBjaGlwc1xcbiAgNDg6XFx0XFx0ICBzdWNoIGFzIE5va2lhJ3MgTjgwMC9OODEwIFBvcnRhYmxlIEludGVybmV0IFRhYmxldC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0c3BpLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgUDU0X1NQSV9ERUZBVUxUX0VFUFJPTVxcbiAgNTM6XFx0XFx0Ym9vbCBcXFwiSW5jbHVkZSBmYWxsYmFjayBFRVBST00gYmxvYlxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gUDU0X1NQSVxcbiAgNTU6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NjpcXHRcXHRoZWxwXFxuICA1NzpcXHRcXHQgVW5saWtlIHRoZSBQQ0kgb3IgVVNCIGRldmljZXMsIHRoZSBTUEkgdmFyaWFudHMgZG9uJ3QgaGF2ZVxcbiAgNTg6XFx0XFx0IGEgZGVkaWNhdGVkIEVFUFJPTSBjaGlwIHRvIHN0b3JlIGFsbCBkZXZpY2Ugc3BlY2lmaWMgdmFsdWVzXFxuICA1OTpcXHRcXHQgZm9yIGNhbGlicmF0aW9uLCBjb3VudHJ5IGFuZCBpbnRlcmZhY2Ugc2V0dGluZ3MuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIGltYWdlIFxcXCIzODI2LmVlcHJvbVxcXCIsIGlmIHRoZVxcbiAgNjI6XFx0XFx0IGZpbGUgaXMgcHV0IGF0IHRoZSByaWdodCBwbGFjZS4gKHVzdWFsbHkgL2xpYi9maXJtd2FyZS4pXFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdCBPbmx5IGlmIHRoaXMgcmVxdWVzdCBmYWlscywgdGhpcyBvcHRpb24gd2lsbCBwcm92aWRlIGFcXG4gIDY1OlxcdFxcdCBiYWNrdXAgc2V0IG9mIGdlbmVyaWMgdmFsdWVzIHRvIGdldCB0aGUgZGV2aWNlIHdvcmtpbmcuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIFA1NF9MRURTXFxuICA3MDpcXHRcXHRib29sXFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgTUFDODAyMTFfTEVEUyBcXHUwMDI2XFx1MDAyNiAoTEVEU19DTEFTUyA9IHkgfHwgTEVEU19DTEFTUyA9IFA1NF9DT01NT04pXFxuICA3MjpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6MjQuMzkzMTc4MTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNjI3ODczNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBwNTQgVVNCIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgUDU0X1VTQmAgYW5kIGBQNTRfQ09NTU9OYCwgd2l0aCBgTUFDODAyMTFgIGFzIGEgZGVwZW5kZW5jeS4gSSBzaG91bGQgcHJvYmFibHkgZW5hYmxlIGBQNTRfUENJYCBhbmQgYFA1NF9TUElgIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGJ1dCBgUDU0X1VTQmAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0IGJlY2F1c2UgYHN5el91c2JfY29ubmVjdGAgaXMgaG93IHdlJ3JlIHJlYWNoaW5nIGl0LiBBaCwgSSBzZWUgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgcDU0X3BhcnNlX2VlcHJvbWAg4oCTIHRoYXQncyBhIGtleSBkZXRhaWwuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBpdHMgbG9jYXRpb247IGl0J3Mgd2l0aGluIGBwNTQvZWVwcm9tLmNgLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHJlYWNoIGl0PyBBIHF1aWNrIHRyYWNlIGNvbmZpcm1zIHRoYXQgYHA1NF9yZWFkX2VlcHJvbWAgY2FsbHMgaXQsIHdoaWNoIGlzIGdvb2QuIE5vdywgd2hlcmUgaXMgYHA1NF9yZWFkX2VlcHJvbWAgdXNlZD8gQWxyaWdodCwgaXQncyBjYWxsZWQgZnJvbSBgcDU0dV9zdGFydF9vcHNgIGluIGBwNTR1c2IuY2AuIFRoYXQncyBwcm9ncmVzcy5cblxuTm93LCBgcDU0dV9zdGFydF9vcHNgIGlzIGNhbGxlZCBmcm9tIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgLiBPa2F5LCB0aGlzIGlzIGEgZmlybXdhcmUgY2FsbGJhY2suIEJpbmdvISBJZiBhIGZpcm13YXJlIGNhbGxiYWNrIGlzIGludm9sdmVkLCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBhIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlcmVkIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGBzeXpfdXNiX2Nvbm5lY3RgIHBsYXkgYSByb2xlIGluIGZpcm13YXJlIGxvYWRpbmc/IEl0IGNvdWxkIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCBtaWdodCByZXF1ZXN0IG9yIHRyaWdnZXIgYSBmaXJtd2FyZSBsb2FkLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYHA1NHVfcHJvYmVgIHdpdGhpbiBgcDU0dXNiLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6NDguMDIxMDU1NjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU0NzI1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0dV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz05NTM9c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6OTg0OnN0YXRpYyBpbnQgcDU0dV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTg1LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz0xMTI0PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwNTR1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMTI2LVxcdC5pZF90YWJsZSA9IHA1NHVfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjc6XFx0LnByb2JlID0gcDU0dV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTEyOC1cXHQuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6NDguMTM2NTMzNTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTg4MTg4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGBwNTR1X3Byb2JlYCBhbmQgYHA1NHVfbG9hZF9maXJtd2FyZWAqKlxuXG5SaWdodCwgbGV0J3MganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsaWtlbHkgc3RhdGUgb2YgYHA1NHVfcHJvYmVgIGFuZCBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBwNTR1IGRyaXZlciwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBgcDU0dV9wcm9iZWAgaXMsIG9mIGNvdXJzZSwgd2hlcmUgdGhlIG1hZ2ljIHN0YXJ0cyDigJMgdGhlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGxpa2VseSwgYSBmaXJzdCBjcmFjayBhdCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBQQ0kgZGV2aWNlIElEcyBhbmQgdGhlIHBvd2VyLXVwIHNlcXVlbmNlLCBtYWtpbmcgc3VyZSBpdCBkb2Vzbid0IGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZCBvbiByZXNvdXJjZSBjbGFpbWluZywgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgbmFzdHkgbG9ja3VwLlxuXG5UaGVuLCB0aGVyZeKAmXMgYHA1NHVfbG9hZF9maXJtd2FyZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSBvZnRlbiBsaXZlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGxvYWRzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGltYWdlLCBoYW5kbGVzIHBvdGVudGlhbCB2ZXJzaW9uIG1pc21hdGNoZXMgZ3JhY2VmdWxseSAoZXJyb3IgaGFuZGxpbmcgaXMga2V5IGhlcmUpLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgdmVyaWZpZXMgdGhlIGludGVncml0eSBvZiB0aGUgbG9hZGVkIGZpcm13YXJlLiBDb3JydXB0aW9uIGNhbiBiZSBhIG5pZ2h0bWFyZSB0byBkZWJ1Zy4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUncyBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbS4gRG9lcyBpdCB1c2UgRE1BPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBwcm9iYWJseSB3YW50IHRvIGRvdWJsZS1jaGVjayBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nIGVycm9yczsgd2hhdCdzIHRoZSByZWNvdmVyeSBwYXRoIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBBcmUgdGhlcmUgYW55IHJldHJ5IG1lY2hhbmlzbXM/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpc3N1ZXMgaGVyZSBjb3VsZCBjYXVzZSBib290IGZhaWx1cmVzIG9yIGVycmF0aWMgYmVoYXZpb3IgZG93biB0aGUgcm9hZC4gQWxyaWdodCwgdGhhdCdzIHRoZSBtZW50YWwgY2hlY2tsaXN0IGZvciB0aG9zZSB0d28uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQzOjUyLjI5NTM1NTQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUzLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MzpcXHRzdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuIDk1NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gOTU1OlxcdHtcXG4gOTU2OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4gOTU3OlxcdFxcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuIDk1ODpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSBcXHUwMDI2dWRldi1cXHUwMDNlZGV2O1xcbiA5NTk6XFx0XFx0aW50IGVyciwgaTtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0XFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUocDU0dV9md2xpc3QpICE9IF9fTlVNX1A1NFVfSFdUWVBFUyk7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cHJpdi1cXHUwMDNlZndfd2FpdF9sb2FkKTtcXG4gOTY0OlxcdFxcdGkgPSBwNTRfZmluZF90eXBlKHByaXYpO1xcbiA5NjU6XFx0XFx0aWYgKGkgXFx1MDAzYyAwKVxcbiA5NjY6XFx0XFx0XFx0cmV0dXJuIGk7XFxuIDk2NzpcXHRcXG4gOTY4OlxcdFxcdGRldl9pbmZvKFxcdTAwMjZwcml2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYsIFxcXCJMb2FkaW5nIGZpcm13YXJlIGZpbGUgJXNcXFxcblxcXCIsXFxuIDk2OTpcXHRcXHQgICAgICAgcDU0dV9md2xpc3RbaV0uZncpO1xcbiA5NzA6XFx0XFxuIDk3MTpcXHRcXHR1c2JfZ2V0X2ludGYoaW50Zik7XFxuIDk3MjpcXHRcXHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgMSwgcDU0dV9md2xpc3RbaV0uZncsXFxuIDk3MzpcXHRcXHRcXHRcXHRcXHQgICAgICBkZXZpY2UsIEdGUF9LRVJORUwsIHByaXYsXFxuIDk3NDpcXHRcXHRcXHRcXHRcXHQgICAgICBwNTR1X2xvYWRfZmlybXdhcmVfY2IpO1xcbiA5NzU6XFx0XFx0aWYgKGVycikge1xcbiA5NzY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwiKHA1NHVzYikgY2Fubm90IGxvYWQgZmlybXdhcmUgJXMgXFxcIlxcbiA5Nzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiKCVkKSFcXFxcblxcXCIsIHA1NHVfZndsaXN0W2ldLmZ3LCBlcnIpO1xcbiA5Nzg6XFx0XFx0XFx0dXNiX3B1dF9pbnRmKGludGYpO1xcbiA5Nzk6XFx0XFx0fVxcbiA5ODA6XFx0XFxuIDk4MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiA5ODI6XFx0fVxcbiA5ODM6XFx0XFxuIDk4NDpcXHRzdGF0aWMgaW50IHA1NHVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIDk4NTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDk4NjpcXHR7XFxuIDk4NzpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDk4ODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7XFxuIDk4OTpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2O1xcbiA5OTA6XFx0XFx0aW50IGVycjtcXG4gOTkxOlxcdFxcdHVuc2lnbmVkIGludCBpLCByZWNvZ25pemVkX3BpcGVzO1xcbiA5OTI6XFx0XFxuIDk5MzpcXHRcXHRkZXYgPSBwNTRfaW5pdF9jb21tb24oc2l6ZW9mKCpwcml2KSk7XFxuIDk5NDpcXHRcXG4gOTk1OlxcdFxcdGlmICghZGV2KSB7XFxuIDk5NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1ZGV2LVxcdTAwM2VkZXYsIFxcXCIocDU0dXNiKSBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG4gOTk3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5OTg6XFx0XFx0fVxcbiA5OTk6XFx0XFxuMTAwMDpcXHRcXHRwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbjEwMDE6XFx0XFx0cHJpdi1cXHUwMDNlaHdfdHlwZSA9IFA1NFVfSU5WQUxJRF9IVztcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0U0VUX0lFRUU4MDIxMV9ERVYoZGV2LCBcXHUwMDI2aW50Zi1cXHUwMDNlZGV2KTtcXG4xMDA0OlxcdFxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTtcXG4xMDA1OlxcdFxcdHByaXYtXFx1MDAzZXVkZXYgPSB1ZGV2O1xcbjEwMDY6XFx0XFx0cHJpdi1cXHUwMDNlaW50ZiA9IGludGY7XFxuMTAwNzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VyeF9xdWV1ZSk7XFxuMTAwODpcXHRcXHRpbml0X3VzYl9hbmNob3IoXFx1MDAyNnByaXYtXFx1MDAzZXN1Ym1pdHRlZCk7XFxuMTAwOTpcXHRcXG4xMDEwOlxcdFxcdC8qIHJlYWxseSBsYXp5IGFuZCBzaW1wbGUgd2F5IG9mIGZpZ3VyaW5nIG91dCBpZiB3ZSdyZSBhIDM4ODcgKi9cXG4xMDExOlxcdFxcdC8qIFRPRE86IHNob3VsZCBqdXN0IHN0aWNrIHRoZSBpZGVudGlmaWNhdGlvbiBpbiB0aGUgZGV2aWNlIHRhYmxlICovXFxuMTAxMjpcXHRcXHRpID0gaW50Zi1cXHUwMDNlYWx0c2V0dGluZy1cXHUwMDNlZGVzYy5iTnVtRW5kcG9pbnRzO1xcbjEwMTM6XFx0XFx0cmVjb2duaXplZF9waXBlcyA9IDA7XFxuMTAxNDpcXHRcXHR3aGlsZSAoaS0tKSB7XFxuMTAxNTpcXHRcXHRcXHRzd2l0Y2ggKGludGYtXFx1MDAzZWFsdHNldHRpbmctXFx1MDAzZWVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcykge1xcbjEwMTY6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfREFUQTpcXG4xMDE3OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX01HTVQ6XFxuMTAxODpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9CUkc6XFxuMTAxOTpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9ERVY6XFxuMTAyMDpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9EQVRBIHwgVVNCX0RJUl9JTjpcXG4xMDIxOlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX01HTVQgfCBVU0JfRElSX0lOOlxcbjEwMjI6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfQlJHIHwgVVNCX0RJUl9JTjpcXG4xMDIzOlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0RFViB8IFVTQl9ESVJfSU46XFxuMTAyNDpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9JTlQgfCBVU0JfRElSX0lOOlxcbjEwMjU6XFx0XFx0XFx0XFx0cmVjb2duaXplZF9waXBlcysrO1xcbjEwMjY6XFx0XFx0XFx0fVxcbjEwMjc6XFx0XFx0fVxcbjEwMjg6XFx0XFx0cHJpdi1cXHUwMDNlY29tbW9uLm9wZW4gPSBwNTR1X29wZW47XFxuMTAyOTpcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24uc3RvcCA9IHA1NHVfc3RvcDtcXG4xMDMwOlxcdFxcdGlmIChyZWNvZ25pemVkX3BpcGVzIFxcdTAwM2MgUDU0VV9QSVBFX05VTUJFUikge1xcbjEwMzE6XFx0I2lmZGVmIENPTkZJR19QTVxcbjEwMzI6XFx0XFx0XFx0LyogSVNMMzg4NyBuZWVkcyBhIGZ1bGwgcmVzZXQgb24gcmVzdW1lICovXFxuMTAzMzpcXHRcXHRcXHR1ZGV2LVxcdTAwM2VyZXNldF9yZXN1bWUgPSAxO1xcbjEwMzQ6XFx0I2VuZGlmIC8qIENPTkZJR19QTSAqL1xcbjEwMzU6XFx0XFx0XFx0ZXJyID0gcDU0dV9kZXZpY2VfcmVzZXQoZGV2KTtcXG4xMDM2OlxcdFxcbjEwMzc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHdfdHlwZSA9IFA1NFVfMzg4NztcXG4xMDM4OlxcdFxcdFxcdGRldi1cXHUwMDNlZXh0cmFfdHhfaGVhZHJvb20gKz0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XFxuMTAzOTpcXHRcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24udHhfaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbG04N190eF9oZHIpO1xcbjEwNDA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY29tbW9uLnR4ID0gcDU0dV90eF9sbTg3O1xcbjEwNDE6XFx0XFx0XFx0cHJpdi1cXHUwMDNldXBsb2FkX2Z3ID0gcDU0dV91cGxvYWRfZmlybXdhcmVfMzg4NztcXG4xMDQyOlxcdFxcdH0gZWxzZSB7XFxuMTA0MzpcXHRcXHRcXHRwcml2LVxcdTAwM2Vod190eXBlID0gUDU0VV9ORVQyMjgwO1xcbjEwNDQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2VleHRyYV90eF9oZWFkcm9vbSArPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcXG4xMDQ1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi50eF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXQyMjgwX3R4X2hkcik7XFxuMTA0NjpcXHRcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X25ldDIyODA7XFxuMTA0NzpcXHRcXHRcXHRwcml2LVxcdTAwM2V1cGxvYWRfZncgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV9uZXQyMjgwO1xcbjEwNDg6XFx0XFx0fVxcbjEwNDk6XFx0XFx0ZXJyID0gcDU0dV9sb2FkX2Zpcm13YXJlKGRldiwgaW50Zik7XFxuMTA1MDpcXHRcXHRpZiAoZXJyKVxcbjEwNTE6XFx0XFx0XFx0cDU0X2ZyZWVfY29tbW9uKGRldik7XFxuMTA1MjpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0Mzo1Mi4yOTU1NjY3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA1NTQxNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBwNTR1IEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBwNTR1X3Byb2JlYCBraWNrcyBvZmYgdGhlIGZpcm13YXJlIGxvYWRpbmcgc2VxdWVuY2UgYnkgY2FsbGluZyBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gVGhhdCB0aGVuIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gU28gZmFyLCBzbyBnb29kLiBUaGVuLCB3aGVuIHRoZSBmaXJtd2FyZSdzIGFjdHVhbGx5IGxvYWRlZCwgYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgZ2V0cyBpbnZva2VkLiBUaGF0IGZ1bmN0aW9uIHRoZW4gdHJpZ2dlcnMgYHA1NHVfc3RhcnRfb3BzYCwgd2hpY2ggaXRzZWxmIGNhbGxzIGBwNTRfcmVhZF9lZXByb21gLiBGaW5hbGx5LCB3ZSBnZXQgdG8gYHA1NF9wYXJzZV9lZXByb21gLiBTbywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHdob2xlIGZsb3cgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgd2hlbiB3ZSB1c2UgYHN5el91c2JfY29ubmVjdGAgYW5kIG1hbmFnZSB0byBnZXQgdGhlIGZpcm13YXJlIHRvIGxvYWQuIEJ1dCwgaGFuZyBvbiBhIHNlY29uZC4gVGhpcyBpcyBpbXBvcnRhbnQuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCB3aGF0IGV4YWN0bHkgaXMgYHA1NF9yZWFkX2VlcHJvbWAgZG9pbmc/IElzIGl0IHJlYWRpbmcgdGhlIEVFUFJPTSBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZSBpdHNlbGYsIG9yIGlzIGl0IHBhcnNpbmcgZGF0YSBmcm9tIHRoZSAqbG9hZGVkIGZpcm13YXJlKj8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGBwNTRfcmVhZF9lZXByb21gIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTI1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6NTcuOTAxMTE0MDk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTYxOlxcdGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbiA5NjI6XFx0e1xcbiA5NjM6XFx0XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuIDk2NDpcXHRcXHRzaXplX3QgZWVwcm9tX3NpemUgPSAweDIwMjAsIG9mZnNldCA9IDAsIGJsb2Nrc2l6ZSwgbWF4YmxvY2tzaXplO1xcbiA5NjU6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuIDk2NjpcXHRcXHR2b2lkICplZXByb207XFxuIDk2NzpcXHRcXG4gOTY4OlxcdFxcdG1heGJsb2Nrc2l6ZSA9IEVFUFJPTV9SRUFEQkFDS19MRU47XFxuIDk2OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZndfdmFyIFxcdTAwM2U9IDB4NTA5KVxcbiA5NzA6XFx0XFx0XFx0bWF4YmxvY2tzaXplIC09IDB4YztcXG4gOTcxOlxcdFxcdGVsc2VcXG4gOTcyOlxcdFxcdFxcdG1heGJsb2Nrc2l6ZSAtPSAweDQ7XFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdGVlcHJvbSA9IGt6YWxsb2MoZWVwcm9tX3NpemUsIEdGUF9LRVJORUwpO1xcbiA5NzU6XFx0XFx0aWYgKHVubGlrZWx5KCFlZXByb20pKVxcbiA5NzY6XFx0XFx0XFx0Z290byBmcmVlO1xcbiA5Nzc6XFx0XFxuIDk3ODpcXHRcXHR3aGlsZSAoZWVwcm9tX3NpemUpIHtcXG4gOTc5OlxcdFxcdFxcdGJsb2Nrc2l6ZSA9IG1pbihlZXByb21fc2l6ZSwgbWF4YmxvY2tzaXplKTtcXG4gOTgwOlxcdFxcdFxcdHJldCA9IHA1NF9kb3dubG9hZF9lZXByb20ocHJpdiwgZWVwcm9tICsgb2Zmc2V0LFxcbiA5ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXQsIGJsb2Nrc2l6ZSk7XFxuIDk4MjpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gOTgzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0XFx0b2Zmc2V0ICs9IGJsb2Nrc2l6ZTtcXG4gOTg2OlxcdFxcdFxcdGVlcHJvbV9zaXplIC09IGJsb2Nrc2l6ZTtcXG4gOTg3OlxcdFxcdH1cXG4gOTg4OlxcdFxcbiA5ODk6XFx0XFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsIGVlcHJvbSwgb2Zmc2V0KTtcXG4gOTkwOlxcdGZyZWU6XFxuIDk5MTpcXHRcXHRrZnJlZShlZXByb20pO1xcbiA5OTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTkzOlxcdH1cXG4gOTk0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQzOjU3LjkwMTMxMDkxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQyNTEwNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRUVQUk9NIERvd25sb2FkIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIHRoZSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAgZnVuY3Rpb24gY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHByZWNpc2VseSB3aGF0J3MgZ29pbmcgb24uXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2xzIGJlaW5nIHVzZWQsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhhdCdzIGltcGxlbWVudGVkIHdpdGhpbiBgcDU0X2Rvd25sb2FkX2VlcHJvbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdC4gSXMgdGhpcyByZXNwb25zaWJsZSBmb3IganVzdCB0aGUgaW5pdGlhbCByZWFkLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkPyBBbnkga2luZCBvZiBhbmFseXNpcyB3b3VsZCBiZSBsaW1pdGVkIHdpdGhvdXQgcHJvcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvcmUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTAwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDowMi40NDM4NDM0ODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQzNTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfZG93bmxvYWRfZWVwcm9tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTk2MT1pbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzktXFx0XFx0YmxvY2tzaXplID0gbWluKGVlcHJvbV9zaXplLCBtYXhibG9ja3NpemUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5ODA6XFx0XFx0cmV0ID0gcDU0X2Rvd25sb2FkX2VlcHJvbShwcml2LCBlZXByb20gKyBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk4MS1cXHRcXHRcXHRcXHRcXHQgIG9mZnNldCwgYmxvY2tzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9MTg0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcDU0X2FsbG9jX3NrYihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IGhkcl9mbGFncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjEwOmludCBwNTRfZG93bmxvYWRfZWVwcm9tKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB2b2lkICpidWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMTEtXFx0XFx0XFx0dTE2IG9mZnNldCwgdTE2IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg9NTQ4PWludCBwNTRfdXBsb2FkX2tleShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTggYWxnbywgaW50IHNsb3QsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1MS0vKiBlZXByb20gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oOjU1MjppbnQgcDU0X2Rvd25sb2FkX2VlcHJvbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqYnVmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtNTUzLVxcdFxcdFxcdHUxNiBvZmZzZXQsIHUxNiBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDowMi41ODUyODU4MDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5OTY4NzQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIERvd25sb2FkKipcblxuT2theSwgc28gd2UndmUgZ290IGBwNTRfZG93bmxvYWRfZWVwcm9tYCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0J3Mga2V5IGluIHRoaXMgZW50aXJlIGZpcm13YXJlIHByb2Nlc3MuIEkga25vdyBpdCBzZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGRldmljZSBhbmQgdGhlbiBqdXN0Li4ud2FpdHMgZm9yIHRoYXQgcmVzcG9uc2UuIE1ha2VzIHNlbnNlLiBUeXBpY2FsIHByb3RvY29sLiBSaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgZXhwZWN0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbW11bmljYXRpb24uIFdoZXJlIGRvIEkgc3RhcnQ/IEFoLCByaWdodCwgdGhhdCdzIGluIGBmd2lvLmNgLiBMZXQncyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGFueSBwb3RlbnRpYWwgZXJyb3IgY2hlY2tpbmcgYW5kIHRpbWVvdXQgaGFuZGxpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDowNi45ODQ5NzcxNThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdGludCBwNTRfZG93bmxvYWRfZWVwcm9tKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB2b2lkICpidWYsXFxuIDIxMTpcXHRcXHRcXHRcXHR1MTYgb2Zmc2V0LCB1MTYgbGVuKVxcbiAyMTI6XFx0e1xcbiAyMTM6XFx0XFx0c3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjtcXG4gMjE0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDIxNTpcXHRcXHRzaXplX3QgZWVwcm9tX2hkcl9zaXplO1xcbiAyMTY6XFx0XFx0aW50IHJldCA9IDA7XFxuIDIxNzpcXHRcXHRsb25nIHRpbWVfbGVmdDtcXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWZ3X3ZhciBcXHUwMDNlPSAweDUwOSlcXG4gMjIwOlxcdFxcdFxcdGVlcHJvbV9oZHJfc2l6ZSA9IHNpemVvZigqZWVwcm9tX2hkcik7XFxuIDIyMTpcXHRcXHRlbHNlXFxuIDIyMjpcXHRcXHRcXHRlZXByb21faGRyX3NpemUgPSAweDQ7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIGVlcHJvbV9oZHJfc2l6ZSArXFxuIDIyNTpcXHRcXHRcXHRcXHQgICAgbGVuLCBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSyxcXG4gMjI2OlxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4gMjI3OlxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gMjI4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VlZXByb21fbXV0ZXgpO1xcbiAyMzE6XFx0XFx0cHJpdi1cXHUwMDNlZWVwcm9tID0gYnVmO1xcbiAyMzI6XFx0XFx0cHJpdi1cXHUwMDNlZWVwcm9tX3NsaWNlX3NpemUgPSBsZW47XFxuIDIzMzpcXHRcXHRlZXByb21faGRyID0gc2tiX3B1dChza2IsIGVlcHJvbV9oZHJfc2l6ZSArIGxlbik7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdGlmIChwcml2LVxcdTAwM2Vmd192YXIgXFx1MDAzYyAweDUwOSkge1xcbiAyMzY6XFx0XFx0XFx0ZWVwcm9tX2hkci1cXHUwMDNldjEub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTtcXG4gMjM3OlxcdFxcdFxcdGVlcHJvbV9oZHItXFx1MDAzZXYxLmxlbiA9IGNwdV90b19sZTE2KGxlbik7XFxuIDIzODpcXHRcXHR9IGVsc2Uge1xcbiAyMzk6XFx0XFx0XFx0ZWVwcm9tX2hkci1cXHUwMDNldjIub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KTtcXG4gMjQwOlxcdFxcdFxcdGVlcHJvbV9oZHItXFx1MDAzZXYyLmxlbiA9IGNwdV90b19sZTE2KGxlbik7XFxuIDI0MTpcXHRcXHRcXHRlZXByb21faGRyLVxcdTAwM2V2Mi5tYWdpYzIgPSAweGY7XFxuIDI0MjpcXHRcXHRcXHRtZW1jcHkoZWVwcm9tX2hkci1cXHUwMDNldjIubWFnaWMsIChjb25zdCBjaGFyICopXFxcIkxPQ0tcXFwiLCA0KTtcXG4gMjQzOlxcdFxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cDU0X3R4KHByaXYsIHNrYik7XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KFxcbiAyNDg6XFx0XFx0XFx0XFx0XFx1MDAyNnByaXYtXFx1MDAzZWVlcHJvbV9jb21wLCBIWik7XFxuIDI0OTpcXHRcXHRpZiAodGltZV9sZWZ0IFxcdTAwM2M9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MDYuOTg1MjEwOTM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTI2ODMxOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFRVBST00gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkgc2VlIGhvdyB0aGlzIGlzIHdvcmtpbmcuIFRoZSBwcm9jZXNzIGdvZXMgbGlrZSB0aGlzOiBhIGNvbW1hbmQgaXMgc2VudCB0byB0aGUgZGV2aWNlLCBpdCB3YWl0cyBmb3IgYSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIGNvbWVzIGluIGFuZCBpcyBoYW5kbGVkIGJ5IGFuIGludGVycnVwdCByb3V0aW5lIG9yIFJYIGhhbmRsZXIg4oCTIHR5cGljYWwuIFRoaXMgcm91dGluZSB0aGVuIGNvcGllcyBkYXRhIGludG8gYHByaXYtXHUwMDNlZWVwcm9tYCBhbmQgY29tcGxldGVzIGBwcml2LVx1MDAzZWVlcHJvbV9jb21wYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBkZXZpY2UgKmNhbiogYmUgZW11bGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXNwb25zZSwgYW5kIHRoZXJlZm9yZSB0aGUgRUVQUk9NIGRhdGEsIGlzIGZ1bGx5IHVuZGVyIGFuIGF0dGFja2VyJ3MgY29udHJvbC4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy5cblxuVGhlIHBhdGNoIGltcGxlbWVudHMgYm91bmRzIGNoZWNraW5nIHdpdGhpbiBgcDU0X3BhcnNlX2VlcHJvbWAsIHdoaWNoIHNvdW5kcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBzb21ldGhpbmcuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcg4oCTIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBhIHJlYWxseSBuYXN0eSBidWcgaGVyZS5cblxuVGltZSB0byBpZGVudGlmeSBzb21lIGludGVyZXN0aW5nIHN5bWJvbHMuIGBwNTRfcGFyc2VfZWVwcm9tYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQsIG9idmlvdXNseS4gYHA1NF9yZWFkX2VlcHJvbWAgYWxzbyBsb29rcyBwcm9taXNpbmcuIEkgYWxzbyBzZWUgYHA1NF9jb252ZXJ0X3JldjBgIGFuZCBgcDU0X2NvbnZlcnRfcmV2MWAg4oCTIHRob3NlIGxvb2sgbGlrZSB0aGV5J3JlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBlZXByb20uY2AsIHdoaWNoIGNvdWxkIGJlIHVzZWQgdG8gb2JmdXNjYXRlIHRoZSB3b3JraW5ncy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSdyZSBhY3R1YWxseSBzdGF0aWMuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjA0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MjIuMTEyMDQ3MDMxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxNzQzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0X2NvbnZlcnRfcmV2MFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz0zMTk9c3RhdGljIGludCBwNTRfZ2VuZXJhdGVfY2hhbm5lbF9saXN0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0MTY6c3RhdGljIGludCBwNTRfY29udmVydF9yZXYwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9NzI1PWludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4MS1cXHRcXHRcXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc4MjpcXHRcXHRcXHRcXHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4My1cXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MjIuMjY3MjI4MTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDM1Njc5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBwNTRfcGFyc2VfZWVwcm9tIEZ1bmN0aW9uIGFuZCBpdHMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCwgdGhlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoaXMgYXJlIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYHA1NF9wYXJzZV9lZXByb21gIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIGNlbnRyYWwgc3ltYm9sIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb25maWd1cmF0aW9ucy4gVGhlIGZpcnN0IG9uZSBJIG5lZWQgdG8gdmVyaWZ5IGlzIGBQNTRfVVNCYC4gVGhhdCdzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSwgSSBhc3N1bWUuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBBaCwgaXQgbG9va3MgbGlrZSBgUDU0X0NPTU1PTmAgaXMgKm5vdCogc2VsZWN0ZWQgKmJ5KiBgUDU0X1VTQmAsIGJ1dCByYXRoZXIgYFA1NF9VU0JgICpkZXBlbmRzKiBvbiBgUDU0X0NPTU1PTmAuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBLY29uZmlnIGZpbGUgZm9yIGBQNTRfVVNCYCB0byBjb25maXJtIGFuZCBlbnN1cmUgSSBoYXZlIHRoZSBkZXBlbmRlbmN5IHRyZWUgY29ycmVjdCBpbiBteSBoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA0MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDoyNy41MTA4MDA3ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgUDU0X0NPTU1PTlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvZnRtYWMgUHJpc201NCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXFxuICAgOTpcXHRcXHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xcbiAgMTA6XFx0XFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMTM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NGNvbW1vbi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFA1NF9VU0JcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFVTQiBzdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFVTQlxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTR1c2IuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBQNTRfUENJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBQQ0kgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSSBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxcbiAgMzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBtb3N0IGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBmdWxsbWFjIHByaXNtNTQgZHJpdmVyIHBsdXMgbWFueSBkZXZpY2VzIHdoaWNoIGFyZSBub3RcXG4gIDM2OlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoZSBmdWxsbWFjIGRyaXZlci9maXJtd2FyZS5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHBjaS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIFA1NF9TUElcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJX01BU1RFUlxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcXG4gIDQ4OlxcdFxcdCAgc3VjaCBhcyBOb2tpYSdzIE44MDAvTjgxMCBQb3J0YWJsZSBJbnRlcm5ldCBUYWJsZXQuXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHNwaS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MjcuNTEwOTk0NjAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDU4NTAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgdGhlIHA1NCBXaXJlbGVzcyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgbW9kdWxlcyB0byBlbmFibGUuIEZyb20gdGhlIGluaXRpYWwgY2x1ZXMsIGl0IGxvb2tzIGxpa2Ugd2UgZGVmaW5pdGVseSBuZWVkIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIEknbSBsZWFuaW5nIHRvd2FyZHMgaW5jbHVkaW5nIGBQNTRfUENJYCBhbmQgYFA1NF9TUElgIGFzIHdlbGwsIGp1c3QgdG8gY292ZXIgYWxsIGJhc2VzLCB0aG91Z2ggYFA1NF9VU0JgIHNlZW1zIHBhcnRpY3VsYXJseSByZWxldmFudCBnaXZlbiB0aGF0IGBzeXpfdXNiX2Nvbm5lY3RgIGlzIG1lbnRpb25lZC5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIHJlLWV2YWx1YXRlLi4udGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcDU0X3BhcnNlX2VlcHJvbWAsIHdoaWNoIEkga25vdyByZXNpZGVzIGluIGBlZXByb20uY2AuIEFoLCByaWdodCwgYGVlcHJvbS5jYCBpcyBhY3R1YWxseSBwYXJ0IG9mIGBwNTRjb21tb25gLiBUaGF0IHNvbGlkaWZpZXMgaXQ6IGBQNTRfQ09NTU9OYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgbW9kdWxlIHRvIGVuYWJsZSBoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhpcyBieSBxdWlja2x5IHJlZmVyZW5jaW5nIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTc4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MzMuNDU2ODQ4NTgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRwNTRjb21tb24tb2Jqc1xcdFxcdFxcdDo9IGVlcHJvbS5vIGZ3aW8ubyB0eHJ4Lm8gbWFpbi5vXFxuICAgMzpcXHRwNTRjb21tb24tJChDT05GSUdfUDU0X0xFRFMpXFx0Kz0gbGVkLm9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1A1NF9DT01NT04pXFx0Kz0gcDU0Y29tbW9uLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19QNTRfVVNCKVxcdFxcdCs9IHA1NHVzYi5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfUDU0X1BDSSlcXHRcXHQrPSBwNTRwY2kub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1A1NF9TUEkpXFx0XFx0Kz0gcDU0c3BpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MzMuNDU2OTU2NDYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NzY5NTQxNjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHJpc201NCBFRVBST00gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGVlcHJvbS5vYCBpcyBpbmRlZWQgd2l0aGluIGBwNTRjb21tb25gLiBUaGF0IG1lYW5zIGVuYWJsaW5nIGBQNTRfQ09NTU9OYCBpcyBlc3NlbnRpYWwgZm9yIHRoaXMuIFRvIGFjdHVhbGx5IGdldCBhdCBpdCB0aHJvdWdoIHN5emthbGxlciwgd2UnbGwgbmVlZCBhIGZyb250LWVuZCBtb2R1bGUsIGFuZCBgUDU0X1VTQmAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZS4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIHBhdGggaW4uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEJlc2lkZXMgYHA1NF9wYXJzZV9lZXByb21gLCB3aGljaCBJIGtub3cgdGhlIHBhdGNoIHRhcmdldHMsIEkgYWxzbyBuZWVkIHRvIGZvY3VzIG9uIGBwNTRfcmVhZF9lZXByb21gIGFuZCBgcDU0X2Rvd25sb2FkX2VlcHJvbWAuIFRoZXkncmUgYWxsIGludGVyY29ubmVjdGVkLCBzbyBpdCdzIGEgZ29vZCBhcHByb2FjaC4gTGV0J3MgYWRkIHRob3NlIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCBhcmUgbm93OlxuXG4qICAgYHA1NF9wYXJzZV9lZXByb21gXG4qICAgYHA1NF9yZWFkX2VlcHJvbWBcbiogICBgcDU0X2Rvd25sb2FkX2VlcHJvbWBcblxuQW5kIGhlcmUgYXJlIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgOlxuXG4qICAgYFA1NF9DT01NT05gXG4qICAgYFA1NF9VU0JgXG4qICAgYE1BQzgwMjExYFxuXG5UaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJvdW5kcy1jaGVja2luZyBpc3N1ZSBpbiBgcDU0X3BhcnNlX2VlcHJvbWAuIEl0J3MgcGFyc2luZyBFRVBST00gZGF0YSB3aXRoaW4gdGhlIEludGVyc2lsIFByaXNtNTQgd2lyZWxlc3MgZHJpdmVyLiBUaGUga2V5IGlzIHRoYXQgYHA1NF9kb3dubG9hZF9lZXByb21gIGlzIHVzZWQgdG8gZ2V0IHRoZSBFRVBST00gZGF0YS4gSXQgc2VuZHMgYSBjb21tYW5kLCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIHdlJ3JlIGRpc2N1c3NpbmcsIHRoaXMgbWVhbnMgd2UgY2FuIHVzZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAgdG8gZW11bGF0ZSBhIFVTQiBQcmlzbTU0IGRldmljZS4gVGhhdCdsbCB0cmlnZ2VyIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBFRVBST00gcmVhZGluZywgYW5kIHNpbmNlIHdlJ3JlICplbXVsYXRpbmcqIHRoZSBkZXZpY2UsIHdlIGhhdmUgY29tcGxldGUgY29udHJvbCBvdmVyIHRoZSBFRVBST00gZGF0YSB0aGF0IGdldHMgcmV0dXJuZWQuIFRoYXQgbWFrZXMgdGhlIHBhcnNpbmcgbG9naWMgY29tcGxldGVseSBhdHRhY2tlci1jb250cm9sbGVkLCBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODMxLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQ3OjUxLjE1MjM3NjA3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjE5MTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZWVwcm9tXCIsXG4gICAgXCJwNTRfcmVhZF9lZXByb21cIixcbiAgICBcInA1NF9kb3dubG9hZF9lZXByb21cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQNTRfQ09NTU9OXCIsXG4gICAgXCJQNTRfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9wYXJzZV9lZXByb21cIixcbiAgICBcInA1NF9yZWFkX2VlcHJvbVwiLFxuICAgIFwicDU0X2Rvd25sb2FkX2VlcHJvbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwNTRfcGFyc2VfZWVwcm9tYCB3aGVuIHBhcnNpbmcgRUVQUk9NIGRhdGEgaW4gdGhlIEludGVyc2lsIFByaXNtNTQgd2lyZWxlc3MgZHJpdmVyLiBUaGUgRUVQUk9NIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBkZXZpY2UgdmlhIGBwNTRfZG93bmxvYWRfZWVwcm9tYCwgd2hpY2ggc2VuZHMgYSBjb21tYW5kIHRvIHRoZSBkZXZpY2UgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGlzIGNhbiBiZSByZWFjaGVkIGJ5IGVtdWxhdGluZyBhIFVTQiBQcmlzbTU0IGRldmljZSB1c2luZyBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIHdpbGwgdHJpZ2dlciBmaXJtd2FyZSBsb2FkaW5nIGFuZCBzdWJzZXF1ZW50IEVFUFJPTSByZWFkaW5nLiBTaW5jZSB0aGUgZW11bGF0ZWQgZGV2aWNlIGNhbiByZXR1cm4gYXJiaXRyYXJ5IEVFUFJPTSBkYXRhLCB0aGUgcGFyc2luZyBsb2dpYyBpcyBmdWxseSBhdHRhY2tlci1jb250cm9sbGVkIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0Nzo1MS4zMDQ1Nzc1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MDk2NjkwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0Nzo1MS4zMDY1MDU4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDkwNzczNzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiBwNTRfcGFyc2VfZWVwcm9tLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIG9yIGludG8gYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgaW52b2x2ZWQgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbmluZGV4IDk1NTgwOTIxZDkzMzguLjQ3MmVkZWNmNTU3NzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uY1xuQEAgLTc2Myw2ICs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcdFx0Y2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHtcbiBcdFx0XHRzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPVxuIFx0XHRcdFx0KHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LVx1MDAzZWRhdGE7XG4rXHRcdFx0c2l6ZV90IG5lZWRlZDtcbitcbiBcdFx0XHRpZiAoZGF0YV9sZW4gXHUwMDNjIHNpemVvZigqY3VydmVfZGF0YSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0XHRnb3RvIGVycjtcbkBAIC03NzAsOSArNzcyLDIzIEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuIFxuIFx0XHRcdHN3aXRjaCAoY3VydmVfZGF0YS1cdTAwM2VjYWxfbWV0aG9kX3Jldikge1xuIFx0XHRcdGNhc2UgMDpcbitcdFx0XHRcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXHUwMDNlY2hhbm5lbHMgKlxuK1x0XHRcdFx0XHQoc2l6ZW9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MCkgKlxuK1x0XHRcdFx0XHQgY3VydmVfZGF0YS1cdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwgKyAyKTtcbitcdFx0XHRcdGlmIChkYXRhX2xlbiAtIHNpemVvZigqY3VydmVfZGF0YSkgXHUwMDNjIG5lZWRlZCkge1xuK1x0XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0XHRnb3RvIGVycjtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjAoZGV2LCBjdXJ2ZV9kYXRhKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgMTpcbitcdFx0XHRcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXHUwMDNlY2hhbm5lbHMgKlxuK1x0XHRcdFx0XHQoc2l6ZW9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSkgKlxuK1x0XHRcdFx0XHQgY3VydmVfZGF0YS1cdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwgKyAzKTtcbitcdFx0XHRcdGlmIChkYXRhX2xlbiAtIHNpemVvZigqY3VydmVfZGF0YSkgXHUwMDNjIG5lZWRlZCkge1xuK1x0XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0XHRnb3RvIGVycjtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG5AQCAtODAxLDcgKzgxNyw4IEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDpcbiBcdFx0XHR0bXAgPSBlbnRyeS1cdTAwM2VkYXRhO1xuLVx0XHRcdHdoaWxlICgodTggKil0bXAgXHUwMDNjIGVudHJ5LVx1MDAzZWRhdGEgKyBkYXRhX2xlbikge1xuK1x0XHRcdHdoaWxlICgodTggKil0bXAgKyBzaXplb2Yoc3RydWN0IGV4cF9pZikgXHUwMDNjPVxuK1x0XHRcdCAgICAgICBlbnRyeS1cdTAwM2VkYXRhICsgZGF0YV9sZW4pIHtcbiBcdFx0XHRcdHN0cnVjdCBleHBfaWYgKmV4cF9pZiA9IHRtcDtcbiBcdFx0XHRcdGlmIChleHBfaWYtXHUwMDNlaWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKVxuIFx0XHRcdFx0XHRzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi1cdTAwM2V2YXJpYW50KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQ3OjUxLjMwNjUwODAyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA3NzE3MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFA1NCBFRVBST00gUGFyc2luZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBib3VuZHMgY2hlY2tpbmcgdG8gdGhlIGBwNTRfcGFyc2VfZWVwcm9tYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIG1ha2luZyBzdXJlIHdlIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBFRVBST00gZGF0YSBidWZmZXIgaW4gdGhlIGBpbnRlcnNpbC9wNTRgIHdpcmVsZXNzIGRyaXZlci4gVGhlIGNoZWNrIGludm9sdmVzIGNhbGN1bGF0aW5nIGEgYG5lZWRlZGAgc2l6ZSBiYXNlZCBvbiBjaGFubmVsIGFuZCBwb2ludHMgZGF0YSBmcm9tIGBjdXJ2ZV9kYXRhYCBhbmQgY29tcGFyaW5nIGl0IGFnYWluc3QgdGhlIGF2YWlsYWJsZSBgZGF0YV9sZW5gLiBJdCBhbHNvIGZpeGVzIGEgYHdoaWxlYCBsb29wIHRvIHByZXZlbnQgZ29pbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgZGF0YSBmb3IgYSBjZXJ0YWluIGludGVyZmFjZSBsaXN0LlxuXG5NeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTidzIGRvbWFpbi4gVGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgRUVQUk9NLCB3aGljaCwgYXQgbGVhc3QgaWRlYWxseSwgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBJZiB0aGUgYm91bmRzIGNoZWNrcyB3ZXJlIG1pc3NpbmcsIHdlJ2QgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBjb250YWluaW5nIEVFUFJPTSBkYXRhLCB3aGljaCBpcyBkZWZpbml0ZWx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gS0FTQU4gd2lsbCByZWxpYWJseSBjYXRjaCB0aG9zZSBPT0IgcmVhZHMuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHJlYWRzIHBhc3QgdGhlIGVuZCBvZiBhIGJ1ZmZlcjsgdGhlcmVmb3JlLCBhIEtNU0FOIGNoZWNrIGlzIHVubmVjZXNzYXJ5LlxuXG5UaGlua2luZyB0aGlzIHRocm91Z2ggbW9yZSBjYXJlZnVsbHksIHRoZSBgcDU0X3BhcnNlX2VlcHJvbWAgZnVuY3Rpb24gd29ya3Mgd2l0aCBhIGJ1ZmZlciBjYWxsZWQgYGVlcHJvbWAuIFRoZSBgZGF0YV9sZW5gIGlzIHRoZSBsZW5ndGggb2YgZWFjaCBQRFIgZW50cnkgd2l0aGluIHRoZSBidWZmZXIuIE5vdywgaW5zaWRlIHRoZSBmdW5jdGlvbidzIGxvb3AsIHRoZXJlJ3MgdGhpcyBgc3dpdGNoYCBzdGF0ZW1lbnQgdGhhdCBjYWxjdWxhdGVzIGBuZWVkZWRgLiBJZiBgbmVlZGVkYCBleGNlZWRzIHdoYXQncyBhdmFpbGFibGUgaW4gYGRhdGFfbGVuYCwgdGhlbiB0aGUgY29kZSB0cmllcyB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBlbnRyeSwgcG9zc2libHkgaW50byB0aGUgbmV4dCBlbnRyeSBvciBwYXN0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSBgZWVwcm9tYCBidWZmZXIuXG5cbklmIGl0IHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGVlcHJvbWAgYnVmZmVyLCBLQVNBTiB3aWxsIGNhdGNoIGl0IGFzIGFuIE9PQiByZWFkLiBJZiBpdCByZWFkcyBpbnRvIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGp1c3QgcGFyc2luZyBnYXJiYWdlIGJ1dCBub3QgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGlzICpub3QqIGEgS01TQU4gaXNzdWUuIFRoaXMgaXMgcHVyZWx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjYXVzZWQgYnkgaW5zdWZmaWNpZW50IGJvdW5kcyBjaGVja2luZy5cblxuU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIGRldGVjdGluZyBhbmQgcHJldmVudGluZyB0aGlzLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gbGVha2luZyB0byB0aGUgdXNlci4gSSdtIGNvbWZvcnRhYmxlIGluIGNvbmNsdWRpbmcgdGhhdCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjksIk91dHB1dFRva2VucyI6MTE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDg6MDIuMjE0MjI4ODk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgRUVQUk9NIGRhdGEgaW4gcDU0X3BhcnNlX2VlcHJvbS4gTWlzc2luZyBib3VuZHMgY2hlY2tzIGxlYWQgdG8gcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciBvciBpbnRvIGFkamFjZW50IGRhdGEgc3RydWN0dXJlcywgd2hpY2ggaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIGludm9sdmVkIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjbql2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 17:30:26 +0000 UTC FinishedAt: 2026-08-26 17:48:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "66fb95a521110da673090294561844c9f76ebe64", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "P54_COMMON", "P54_USB", "MAC80211" ], "series_id": "a33c093a-8bc6-497f-9ce9-3e400dba0cd0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "p54_parse_eeprom", "p54_read_eeprom", "p54_download_eeprom" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQNTRfQ09NTU9OJiMzNDssCiAgICAmIzM0O1A1NF9VU0ImIzM0OywKICAgICYjMzQ7TUFDODAyMTEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwNTRfcGFyc2VfZWVwcm9tJiMzNDssCiAgICAmIzM0O3A1NF9yZWFkX2VlcHJvbSYjMzQ7LAogICAgJiMzNDtwNTRfZG93bmxvYWRfZWVwcm9tJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiBwNTRfcGFyc2VfZWVwcm9tLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIG9yIGludG8gYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgaW52b2x2ZWQgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHA1NF9wYXJzZV9lZXByb21gIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiB0aGUgSW50ZXJzaWwgUHJpc201NCB3aXJlbGVzcyBkcml2ZXIuIFRoZSBFRVBST00gZGF0YSBpcyByZWFkIGZyb20gdGhlIGRldmljZSB2aWEgYHA1NF9kb3dubG9hZF9lZXByb21gLCB3aGljaCBzZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGRldmljZSBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoaXMgY2FuIGJlIHJlYWNoZWQgYnkgZW11bGF0aW5nIGEgVVNCIFByaXNtNTQgZGV2aWNlIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCwgd2hpY2ggd2lsbCB0cmlnZ2VyIGZpcm13YXJlIGxvYWRpbmcgYW5kIHN1YnNlcXVlbnQgRUVQUk9NIHJlYWRpbmcuIFNpbmNlIHRoZSBlbXVsYXRlZCBkZXZpY2UgY2FuIHJldHVybiBhcmJpdHJhcnkgRUVQUk9NIGRhdGEsIHRoZSBwYXJzaW5nIGxvZ2ljIGlzIGZ1bGx5IGF0dGFja2VyLWNvbnRyb2xsZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG5pbmRleCA5NTU4MDkyMWQ5MzM4Li40NzJlZGVjZjU1NzcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbkBAIC03NjMsNiAmIzQzOzc2Myw4IEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuIFx0XHRjYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQToge1xuIFx0XHRcdHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9XG4gXHRcdFx0XHQoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopZW50cnktXHUwMDNlZGF0YTtcbiYjNDM7XHRcdFx0c2l6ZV90IG5lZWRlZDtcbiYjNDM7XG4gXHRcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBlcnI7XG5AQCAtNzcwLDkgJiM0Mzs3NzIsMjMgQEAgaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXG4gXG4gXHRcdFx0c3dpdGNoIChjdXJ2ZV9kYXRhLVx1MDAzZWNhbF9tZXRob2RfcmV2KSB7XG4gXHRcdFx0Y2FzZSAwOlxuJiM0MztcdFx0XHRcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXHUwMDNlY2hhbm5lbHMgKlxuJiM0MztcdFx0XHRcdFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjApICpcbiYjNDM7XHRcdFx0XHRcdCBjdXJ2ZV9kYXRhLVx1MDAzZXBvaW50c19wZXJfY2hhbm5lbCAmIzQzOyAyKTtcbiYjNDM7XHRcdFx0XHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFx1MDAzYyBuZWVkZWQpIHtcbiYjNDM7XHRcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycjtcbiYjNDM7XHRcdFx0XHR9XG4gXHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIDE6XG4mIzQzO1x0XHRcdFx0bmVlZGVkID0gY3VydmVfZGF0YS1cdTAwM2VjaGFubmVscyAqXG4mIzQzO1x0XHRcdFx0XHQoc2l6ZW9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSkgKlxuJiM0MztcdFx0XHRcdFx0IGN1cnZlX2RhdGEtXHUwMDNlcG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDMpO1xuJiM0MztcdFx0XHRcdGlmIChkYXRhX2xlbiAtIHNpemVvZigqY3VydmVfZGF0YSkgXHUwMDNjIG5lZWRlZCkge1xuJiM0MztcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyO1xuJiM0MztcdFx0XHRcdH1cbiBcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG5AQCAtODAxLDcgJiM0Mzs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6XG4gXHRcdFx0dG1wID0gZW50cnktXHUwMDNlZGF0YTtcbi1cdFx0XHR3aGlsZSAoKHU4ICopdG1wIFx1MDAzYyBlbnRyeS1cdTAwM2VkYXRhICYjNDM7IGRhdGFfbGVuKSB7XG4mIzQzO1x0XHRcdHdoaWxlICgodTggKil0bXAgJiM0Mzsgc2l6ZW9mKHN0cnVjdCBleHBfaWYpIFx1MDAzYz1cbiYjNDM7XHRcdFx0ICAgICAgIGVudHJ5LVx1MDAzZWRhdGEgJiM0MzsgZGF0YV9sZW4pIHtcbiBcdFx0XHRcdHN0cnVjdCBleHBfaWYgKmV4cF9pZiA9IHRtcDtcbiBcdFx0XHRcdGlmIChleHBfaWYtXHUwMDNlaWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKVxuIFx0XHRcdFx0XHRzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi1cdTAwM2V2YXJpYW50KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xNW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1A1NF9DT01NT04mIzM0OywKICAgICYjMzQ7UDU0X1VTQiYjMzQ7LAogICAgJiMzNDtNQUM4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3A1NF9wYXJzZV9lZXByb20mIzM0OywKICAgICYjMzQ7cDU0X3JlYWRfZWVwcm9tJiMzNDssCiAgICAmIzM0O3A1NF9kb3dubG9hZF9lZXByb20mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYHA1NF9wYXJzZV9lZXByb21gIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiB0aGUgSW50ZXJzaWwgUHJpc201NCB3aXJlbGVzcyBkcml2ZXIuIFRoZSBFRVBST00gZGF0YSBpcyByZWFkIGZyb20gdGhlIGRldmljZSB2aWEgYHA1NF9kb3dubG9hZF9lZXByb21gLCB3aGljaCBzZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGRldmljZSBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2UuIEluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoaXMgY2FuIGJlIHJlYWNoZWQgYnkgZW11bGF0aW5nIGEgVVNCIFByaXNtNTQgZGV2aWNlIHVzaW5nIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCwgd2hpY2ggd2lsbCB0cmlnZ2VyIGZpcm13YXJlIGxvYWRpbmcgYW5kIHN1YnNlcXVlbnQgRUVQUk9NIHJlYWRpbmcuIFNpbmNlIHRoZSBlbXVsYXRlZCBkZXZpY2UgY2FuIHJldHVybiBhcmJpdHJhcnkgRUVQUk9NIGRhdGEsIHRoZSBwYXJzaW5nIGxvZ2ljIGlzIGZ1bGx5IGF0dGFja2VyLWNvbnRyb2xsZWQgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMKaW5kZXggOTU1ODA5MjFkOTMzOC4uNDcyZWRlY2Y1NTc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYwpAQCAtNzYzLDYgJiM0Mzs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHsKIAkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CiAJCQkJKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LSZndDtkYXRhOwomIzQzOwkJCXNpemVfdCBuZWVkZWQ7CiYjNDM7CiAJCQlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGVycjsKQEAgLTc3MCw5ICYjNDM7NzcyLDIzIEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQogCiAJCQlzd2l0Y2ggKGN1cnZlX2RhdGEtJmd0O2NhbF9tZXRob2RfcmV2KSB7CiAJCQljYXNlIDA6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDIpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDMpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYxKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtODAxLDcgJiM0Mzs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKIAkJCXRtcCA9IGVudHJ5LSZndDtkYXRhOwotCQkJd2hpbGUgKCh1OCAqKXRtcCAmbHQ7IGVudHJ5LSZndDtkYXRhICYjNDM7IGRhdGFfbGVuKSB7CiYjNDM7CQkJd2hpbGUgKCh1OCAqKXRtcCAmIzQzOyBzaXplb2Yoc3RydWN0IGV4cF9pZikgJmx0Oz0KJiM0MzsJCQkgICAgICAgZW50cnktJmd0O2RhdGEgJiM0MzsgZGF0YV9sZW4pIHsKIAkJCQlzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7CiAJCQkJaWYgKGV4cF9pZi0mZ3Q7aWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKQogCQkJCQlzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi0mZ3Q7dmFyaWFudCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MzIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQmIzM5O3MgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBzb21lIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYHA1NF9wYXJzZV9lZXByb21gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBwYXJzaW5nIG9mIGBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFgIGFuZCBgUERSX0lOVEVSRkFDRV9MSVNUYC4gVGhhdCYjMzk7cyBnb29kLCBhbHdheXMgYSBwbHVzIHRvIHNlZSB0aGF0IGtpbmQgb2YgaGFyZGVuaW5nLiBUaGlzIGlzIGZvciB0aGUgSW50ZXJzaWwgUHJpc201NCB3aXJlbGVzcyBjYXJkcywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcmVhY2hhYmlsaXR5LgoKVGhlIGtleSBxdWVzdGlvbiBpczogY2FuIHRoaXMgY29kZSBldmVuICpiZSogdHJpZ2dlcmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEluIG15IGV4cGVyaWVuY2UsIHRoZXNlIGhhcmR3YXJlLXNwZWNpZmljIHdpcmVsZXNzIGRyaXZlcnMg4oCTIEludGVyc2lsIFByaXNtNTQgaW4gdGhpcyBjYXNlIOKAkyB1c3VhbGx5IHJlcXVpcmUgdGhlICphY3R1YWwqIGhhcmR3YXJlIHRvIGJlIHByZXNlbnQuIE9yLCBwb3NzaWJseSwgYSBjbGV2ZXIgVVNCIGRldmljZSBlbXVsYXRpb24gdXNpbmcgc29tZXRoaW5nIGxpa2UgVVNCIGdhZGdldCBvciBkdW1teV9oY2QgaWYgaXQmIzM5O3MgYSBVU0Igd2lyZWxlc3MgZGV2aWNlLiBNYXliZSwgaWYgaXQmIzM5O3MgUENJLCB3ZSBoYXZlIHNvbWV0aGluZyB0byB3b3JrIHdpdGggdGhlcmUuIEl0JiMzOTtzIHJhcmUgdG8gZ2V0IGEgZGlyZWN0IGhpdCBvbiBzdWNoIGEgdGFyZ2V0ZWQgcGllY2Ugb2YgaGFyZHdhcmUgaW4gdmlydHVhbGl6YXRpb24gd2l0aG91dCBzcGVjaWZpYyBkZXZpY2UgcGFzc3Rocm91Z2ggb3IgY2xldmVyIGVtdWxhdGlvbi4KClNvLCBmaXJzdCB0aGluZyYjMzk7cyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgc3RydWN0dXJlIG9mIHRoaXMgYHA1NGAgZHJpdmVyLiBJcyBpdCBVU0I/IFBDST8gQnVpbHQtaW4/IFRoZW4gSSBjYW4gZm9ybSBhIHNvbGlkIGh5cG90aGVzaXMgYWJvdXQgd2hlbiBhbmQgaG93IHRoaXMgYm91bmRzIGNoZWNrIHdvdWxkIGFjdHVhbGx5IGJlIGhpdCBkdXJpbmcgdGVzdGluZywgZnV6emluZywgb3Igc2VjdXJpdHkgYXVkaXRzLiBUaGF0JiMzOTtzIHRoZSBjcnVjaWFsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwNTRfcGFyc2VfZWVwcm9tJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9Njk4PXN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI1OmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk1OC19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTU5OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05NjE9aW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5ODk6XHRyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgZWVwcm9tLCBvZmZzZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk5MC1mcmVlOlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD0yNjk9aW50IHA1NF9wYXJzZV9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oOjI3MDppbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjcxLWludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM9MTYyPXN0YXRpYyBpbnQgcDU0c3BpX3JlcXVlc3RfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTc0LVx0XHRkZXZfaW5mbyhcdTAwMjZwcml2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O2xvYWRpbmcgZGVmYXVsdCBlZXByb20uLi5cXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jOjE3NTpcdFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsICh2b2lkICopIHA1NHNwaV9lZXByb20sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTc2LVx0XHRcdFx0ICAgICAgIHNpemVvZihwNTRzcGlfZWVwcm9tKSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTE4MS1cdFx0ZGV2X2luZm8oXHUwMDI2cHJpdi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcJiMzNDtsb2FkaW5nIHVzZXIgZWVwcm9tLi4uXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYzoxODI6XHRcdHJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCAodm9pZCAqKSBlZXByb20tXHUwMDNlZGF0YSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0xODMtXHRcdFx0XHQgICAgICAgKGludCllZXByb20tXHUwMDNlc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyNQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKlRyYWNpbmcgdGhlIEVFUFJPTSBSZWFkIE9wZXJhdGlvbnMqKgoKT2theSwgc28gYHA1NF9wYXJzZV9lZXByb21gIGlzIHRoZSB3b3JraG9yc2UgaGVyZSwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBib3RoIGBwNTRfcmVhZF9lZXByb21gIGFuZCBgcDU0c3BpX3JlcXVlc3RfZWVwcm9tYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZXNlIEVFUFJPTSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkmIzM5O3JlICppbml0aWF0ZWQqLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB3aGVyZSBgcDU0X3JlYWRfZWVwcm9tYCBpcyBjYWxsZWQgZnJvbS4gSSYjMzk7bGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGVyZSBpdCBnb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NF9yZWFkX2VlcHJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTk1OT1FWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZWVwcm9tKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTYxOmludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk2Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk5My19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTk0OkVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NC5oPTI3MD1pbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6MjcxOmludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNzItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jPTQ5Nj1zdGF0aWMgdm9pZCBwNTRwX2Zpcm13YXJlX3N0ZXAyKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jLTUxNC1cdFx0Z290byBvdXQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM6NTE1Olx0ZXJyID0gcDU0X3JlYWRfZWVwcm9tKGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmMtNTE2LVx0cDU0cF9zdG9wKGRldik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTg2Nz1zdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTg5NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo4OTY6XHRyZXQgPSBwNTRfcmVhZF9lZXByb20oZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04OTctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIGBwNTRfcmVhZF9lZXByb21gIGlzIGNhbGxlZCBmcm9tIGBwNTR1c2IuY2AsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVGhpbmtpbmcgYWJvdXQgaG93IFVTQiBkZXZpY2VzIGFyZSBlbXVsYXRlZCwgSSBzZWUgdGhhdCB3ZSBoYXZlIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YC4gVGhhdCBtZWFucyBJIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIHNldHVwLiBNYWtlcyB0aGluZ3MgbXVjaCBtb3JlIGludGVyZXN0aW5nLiBOb3cgSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgYHA1NHVfc3RhcnRfb3BzYCBpbiBgcDU0dXNiLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgb3IgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3A1NHVfc3RhcnRfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9ODU0PXN0YXRpYyBpbnQgcDU0X2ZpbmRfdHlwZShzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04NjYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6ODY3OnN0YXRpYyBpbnQgcDU0dV9zdGFydF9vcHMoc3RydWN0IHA1NHVfcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04Njgte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz05MTk9c3RhdGljIHZvaWQgcDU0dV9sb2FkX2Zpcm13YXJlX2NiKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTkyOC1cdFx0cHJpdi1cdTAwM2VmdyA9IGZpcm13YXJlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjkyOTpcdFx0ZXJyID0gcDU0dV9zdGFydF9vcHMocHJpdik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTMwLVx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipGaXJtd2FyZSBMb2FkaW5nIHZpYSBVU0IgRW11bGF0aW9uKioKCk9rYXksIHNvIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgdHJpZ2dlcmVkIHdoZW4gZmlybXdhcmUgaXMgbG9hZGVkLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBpdCYjMzk7cyByZWFjaGFibGUgdGhyb3VnaCB0aGUgVVNCIGVtdWxhdGlvbiBwYXRod2F5LiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBzcGVjaWZpYyBhcmVhIHRvIGZvY3VzIG9uLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyB3aXRoaW4gdGhhdCBVU0IgZW11bGF0aW9uIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgc2V0dGluZ3MsIHBhcmFtZXRlcnMsIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgZXNzZW50aWFsIHRvIG1ha2UgdGhpcyB3b3JrIGNvcnJlY3RseS4gTGV0IG1lIGRpZyBpbnRvIHRoZSBjb25maWdzIGFuZCBkb2N1bWVudGF0aW9uIHN1cnJvdW5kaW5nIHRoaXMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQNTRfVVNCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZz0yPWNvbmZpZyBQNTRfQ09NTU9OXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZzoxNzpjb25maWcgUDU0X1VTQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFVTQiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTMKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWdgIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBQNTQgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3Mgd2l0aCB0aGlzIEludGVyc2lsIFA1NCB3aXJlbGVzcyBkcml2ZXIgS2NvbmZpZyBmaWxlLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZXhwZWN0aW5nIGEgY2xlYW4sIHdlbGwtc3RydWN0dXJlZCBjb25maWd1cmF0aW9uIHN5c3RlbSwgZm9sbG93aW5nIHRoZSBlc3RhYmxpc2hlZCBrZXJuZWwgY29udmVudGlvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGEgY2xlYXIgaGllcmFyY2h5LCBsb2dpY2FsIGRlcGVuZGVuY2llcywgYW5kIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzLiBUaGUgYGNvbmZpZ2AgZGlyZWN0aXZlcywgbmF0dXJhbGx5LCBhcmUgd2hhdCBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgb2YgdGhpcyBkcml2ZXIgYXJlIGVuYWJsZWQgYW5kIGRpc2FibGVkLCBhbmQgd2hhdCBraW5kIG9mIGdyYW51bGFyaXR5IHRoZSBkZXZlbG9wZXJzIGhhdmUgcHJvdmlkZWQuCgpJJiMzOTttIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIOKAkyBgZGVwZW5kcyBvbmAsIGBzZWxlY3RgLCBldGMuIFRoZXNlIGFyZSBjcnVjaWFsLiBUaGlzIHdpbGwgZGVtb25zdHJhdGUgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIGFuZCBvcHRpb25zIGludGVycmVsYXRlLiBBcmUgdGhlcmUgYW55IGhhcmR3YXJlLXNwZWNpZmljIGRlcGVuZGVuY2llcz8gQXJlIHRoZSBjaG9pY2VzIGNsZWFybHkgZXhwbGFpbmVkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgbHVya2luZyBpbiB0aGUgc2hhZG93cz8KClRoZW4gSSYjMzk7bGwgc2NydXRpbml6ZSB0aGUgdmFyaW91cyAmIzM0O2hlbHAmIzM0OyBzZWN0aW9ucy4gVGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbiBpbiB0aGVzZSBzZWN0aW9ucyBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIG92ZXJhbGwgY29kZSBxdWFsaXR5LiBBcmUgdGhlIGV4cGxhbmF0aW9ucyBjbGVhciwgY29uY2lzZSwgYW5kIGFjY3VyYXRlPyBEbyB0aGV5IG9mZmVyIGVub3VnaCBjb250ZXh0IGZvciBhIHVzZXIgdG8gbWFrZSBpbmZvcm1lZCBjaG9pY2VzPyBBcmUgdGhlcmUgYW55IGdvdGNoYXMgb3IgY2F2ZWF0cyBtZW50aW9uZWQ/CgpJJiMzOTtsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlcy4gRG8gdGhleSBzZWVtIHJlYXNvbmFibGUgZm9yIHRoZSBleHBlY3RlZCB1c2UgY2FzZXM/IEFyZSB0aGV5IGNvbmZpZ3VyYWJsZSBpbiBhIHNlbnNpYmxlIHJhbmdlPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGRlZmF1bHRzPyBJZGVhbGx5LCB0aGV5IHNob3VsZCBwcmlvcml0aXplIGEgYmFsYW5jZSBiZXR3ZWVuIGZ1bmN0aW9uYWxpdHkgYW5kIHNlY3VyaXR5LCBkZWZhdWx0aW5nIHRvIHRoZSBtb3JlIHNlY3VyZSBjb25maWd1cmF0aW9uIHdoZXJlIHBvc3NpYmxlLgoKRmluYWxseSwgSSYjMzk7bGwgYmUgc2Nhbm5pbmcgZm9yIGFueSB1bnVzdWFsIG9yIG5vbi1zdGFuZGFyZCBwcmFjdGljZXMuIFRoaXMgY291bGQgYmUgYSBzaWduIG9mIGEgZGVlcGVyIHByb2JsZW0gb3IgYW4gYXJlYSB0aGF0IHJlcXVpcmVzIG1vcmUgaW52ZXN0aWdhdGlvbi4gQXJlIHRoZXJlIGFueSB1bmV4cGVjdGVkIGRlcGVuZGVuY2llcz8gQXJlIHRoZXJlIGFueSB1bm5lY2Vzc2FyeSBjb21wbGV4aXRpZXM/IElzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZpbGUgd2VsbC1vcmdhbml6ZWQgYW5kIGVhc3kgdG8gbmF2aWdhdGU/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBkcml2ZXIgaXMgY29uZmlndXJlZCB0byBlbnN1cmUgdGhhdCBpdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBhbmQgdGhhdCBpdCBpbnRlZ3JhdGVzIHNtb290aGx5IGludG8gbXkgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQNTRfQ09NTU9OXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxuICAgNTpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICAgNjpcdFx0c2VsZWN0IENSQ19DQ0lUVFxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXG4gICA5Olx0XHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xuICAxMDpcdFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxuICAxMTpcdFxuICAxMjpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMTM6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRjb21tb24uXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIFA1NF9VU0JcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgVVNCIHN1cHBvcnRcJiMzNDtcbiAgMTk6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgVVNCXG4gIDIwOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxuICAyMzpcdFxuICAyNDpcdFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcbiAgMjU6XHRcdCAgXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcdTAwM2VcbiAgMjY6XHRcbiAgMjc6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTR1c2IuXG4gIDI4Olx0XG4gIDI5Olx0Y29uZmlnIFA1NF9QQ0lcbiAgMzA6XHRcdHRyaXN0YXRlIFwmIzM0O1ByaXNtNTQgUENJIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgUENJXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBQQ0kgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cbiAgMzQ6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgbW9zdCBkZXZpY2VzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSB0aGVcbiAgMzU6XHRcdCAgZnVsbG1hYyBwcmlzbTU0IGRyaXZlciBwbHVzIG1hbnkgZGV2aWNlcyB3aGljaCBhcmUgbm90XG4gIDM2Olx0XHQgIHN1cHBvcnRlZCBieSB0aGUgZnVsbG1hYyBkcml2ZXIvZmlybXdhcmUuXG4gIDM3Olx0XG4gIDM4Olx0XHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDM5Olx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDQwOlx0XG4gIDQxOlx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0cGNpLlxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBQNTRfU1BJXG4gIDQ0Olx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcJiMzNDtcbiAgNDU6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgU1BJX01BU1RFUlxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcbiAgNDg6XHRcdCAgc3VjaCBhcyBOb2tpYSYjMzk7cyBOODAwL044MTAgUG9ydGFibGUgSW50ZXJuZXQgVGFibGV0LlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHNwaS5cbiAgNTE6XHRcbiAgNTI6XHRjb25maWcgUDU0X1NQSV9ERUZBVUxUX0VFUFJPTVxuICA1MzpcdFx0Ym9vbCBcJiMzNDtJbmNsdWRlIGZhbGxiYWNrIEVFUFJPTSBibG9iXCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIFA1NF9TUElcbiAgNTU6XHRcdGRlZmF1bHQgblxuICA1NjpcdFx0aGVscFxuICA1NzpcdFx0IFVubGlrZSB0aGUgUENJIG9yIFVTQiBkZXZpY2VzLCB0aGUgU1BJIHZhcmlhbnRzIGRvbiYjMzk7dCBoYXZlXG4gIDU4Olx0XHQgYSBkZWRpY2F0ZWQgRUVQUk9NIGNoaXAgdG8gc3RvcmUgYWxsIGRldmljZSBzcGVjaWZpYyB2YWx1ZXNcbiAgNTk6XHRcdCBmb3IgY2FsaWJyYXRpb24sIGNvdW50cnkgYW5kIGludGVyZmFjZSBzZXR0aW5ncy5cbiAgNjA6XHRcbiAgNjE6XHRcdCBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIGltYWdlIFwmIzM0OzM4MjYuZWVwcm9tXCYjMzQ7LCBpZiB0aGVcbiAgNjI6XHRcdCBmaWxlIGlzIHB1dCBhdCB0aGUgcmlnaHQgcGxhY2UuICh1c3VhbGx5IC9saWIvZmlybXdhcmUuKVxuICA2MzpcdFxuICA2NDpcdFx0IE9ubHkgaWYgdGhpcyByZXF1ZXN0IGZhaWxzLCB0aGlzIG9wdGlvbiB3aWxsIHByb3ZpZGUgYVxuICA2NTpcdFx0IGJhY2t1cCBzZXQgb2YgZ2VuZXJpYyB2YWx1ZXMgdG8gZ2V0IHRoZSBkZXZpY2Ugd29ya2luZy5cbiAgNjY6XHRcbiAgNjc6XHRcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cbiAgNjg6XHRcbiAgNjk6XHRjb25maWcgUDU0X0xFRFNcbiAgNzA6XHRcdGJvb2xcbiAgNzE6XHRcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcdTAwMjZcdTAwMjYgTUFDODAyMTFfTEVEUyBcdTAwMjZcdTAwMjYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBQNTRfQ09NTU9OKVxuICA3MjpcdFx0ZGVmYXVsdCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyOTkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIHA1NCBVU0IgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgUDU0X1VTQmAgYW5kIGBQNTRfQ09NTU9OYCwgd2l0aCBgTUFDODAyMTFgIGFzIGEgZGVwZW5kZW5jeS4gSSBzaG91bGQgcHJvYmFibHkgZW5hYmxlIGBQNTRfUENJYCBhbmQgYFA1NF9TUElgIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGJ1dCBgUDU0X1VTQmAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0IGJlY2F1c2UgYHN5el91c2JfY29ubmVjdGAgaXMgaG93IHdlJiMzOTtyZSByZWFjaGluZyBpdC4gQWgsIEkgc2VlIHRoZSBwYXRjaCBpcyBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgYHA1NF9wYXJzZV9lZXByb21gIOKAkyB0aGF0JiMzOTtzIGEga2V5IGRldGFpbC4KCkxldCYjMzk7cyBxdWlja2x5IGNvbmZpcm0gaXRzIGxvY2F0aW9uOyBpdCYjMzk7cyB3aXRoaW4gYHA1NC9lZXByb20uY2AuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCBob3cgZG8gd2UgcmVhY2ggaXQ/IEEgcXVpY2sgdHJhY2UgY29uZmlybXMgdGhhdCBgcDU0X3JlYWRfZWVwcm9tYCBjYWxscyBpdCwgd2hpY2ggaXMgZ29vZC4gTm93LCB3aGVyZSBpcyBgcDU0X3JlYWRfZWVwcm9tYCB1c2VkPyBBbHJpZ2h0LCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcDU0dV9zdGFydF9vcHNgIGluIGBwNTR1c2IuY2AuIFRoYXQmIzM5O3MgcHJvZ3Jlc3MuCgpOb3csIGBwNTR1X3N0YXJ0X29wc2AgaXMgY2FsbGVkIGZyb20gYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAuIE9rYXksIHRoaXMgaXMgYSBmaXJtd2FyZSBjYWxsYmFjay4gQmluZ28hIElmIGEgZmlybXdhcmUgY2FsbGJhY2sgaXMgaW52b2x2ZWQsIHdlJiMzOTtyZSBsaWtlbHkgbG9va2luZyBhdCBhIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlcmVkIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGBzeXpfdXNiX2Nvbm5lY3RgIHBsYXkgYSByb2xlIGluIGZpcm13YXJlIGxvYWRpbmc/IEl0IGNvdWxkIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCBtaWdodCByZXF1ZXN0IG9yIHRyaWdnZXIgYSBmaXJtd2FyZSBsb2FkLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGJ5IGNoZWNraW5nIGBwNTR1X3Byb2JlYCB3aXRoaW4gYHA1NHVzYi5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0dV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTk1Mz1zdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo5ODQ6c3RhdGljIGludCBwNTR1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4NS1cdFx0XHRcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM9MTEyND1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgcDU0dV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjYtXHQuaWRfdGFibGUgPSBwNTR1X3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjc6XHQucHJvYmUgPSBwNTR1X3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTExMjgtXHQuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMyMwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBgcDU0dV9wcm9iZWAgYW5kIGBwNTR1X2xvYWRfZmlybXdhcmVgKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsaWtlbHkgc3RhdGUgb2YgYHA1NHVfcHJvYmVgIGFuZCBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgcDU0dSBkcml2ZXIsIGFuZCB0aG9zZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4gYHA1NHVfcHJvYmVgIGlzLCBvZiBjb3Vyc2UsIHdoZXJlIHRoZSBtYWdpYyBzdGFydHMg4oCTIHRoZSBpbml0aWFsIGRldmljZSBkZXRlY3Rpb24sIHJlc291cmNlIGFsbG9jYXRpb24sIGFuZCBsaWtlbHksIGEgZmlyc3QgY3JhY2sgYXQgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IFBDSSBkZXZpY2UgSURzIGFuZCB0aGUgcG93ZXItdXAgc2VxdWVuY2UsIG1ha2luZyBzdXJlIGl0IGRvZXNuJiMzOTt0IGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZCBvbiByZXNvdXJjZSBjbGFpbWluZywgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgbmFzdHkgbG9ja3VwLgoKVGhlbiwgdGhlcmXigJlzIGBwNTR1X2xvYWRfZmlybXdhcmVgLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIGNvbXBsZXhpdHkgb2Z0ZW4gbGl2ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBsb2FkcyB0aGUgY29ycmVjdCBmaXJtd2FyZSBpbWFnZSwgaGFuZGxlcyBwb3RlbnRpYWwgdmVyc2lvbiBtaXNtYXRjaGVzIGdyYWNlZnVsbHkgKGVycm9yIGhhbmRsaW5nIGlzIGtleSBoZXJlKSwgYW5kIG1vc3QgaW1wb3J0YW50bHksIHZlcmlmaWVzIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGxvYWRlZCBmaXJtd2FyZS4gQ29ycnVwdGlvbiBjYW4gYmUgYSBuaWdodG1hcmUgdG8gZGVidWcuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlJiMzOTtzIGZpcm13YXJlIGxvYWRpbmcgbWVjaGFuaXNtLiBEb2VzIGl0IHVzZSBETUE/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIGRvdWJsZS1jaGVjayBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nIGVycm9yczsgd2hhdCYjMzk7cyB0aGUgcmVjb3ZlcnkgcGF0aCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZz8gQXJlIHRoZXJlIGFueSByZXRyeSBtZWNoYW5pc21zPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGlzc3VlcyBoZXJlIGNvdWxkIGNhdXNlIGJvb3QgZmFpbHVyZXMgb3IgZXJyYXRpYyBiZWhhdmlvciBkb3duIHRoZSByb2FkLiBBbHJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBtZW50YWwgY2hlY2tsaXN0IGZvciB0aG9zZSB0d28uIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTUzOlx0c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuIDk1NDpcdFx0XHRcdCAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuIDk1NTpcdHtcbiA5NTY6XHRcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcbiA5NTc6XHRcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbiA5NTg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldmljZSA9IFx1MDAyNnVkZXYtXHUwMDNlZGV2O1xuIDk1OTpcdFx0aW50IGVyciwgaTtcbiA5NjA6XHRcbiA5NjE6XHRcdEJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHA1NHVfZndsaXN0KSAhPSBfX05VTV9QNTRVX0hXVFlQRVMpO1xuIDk2MjpcdFxuIDk2MzpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlZndfd2FpdF9sb2FkKTtcbiA5NjQ6XHRcdGkgPSBwNTRfZmluZF90eXBlKHByaXYpO1xuIDk2NTpcdFx0aWYgKGkgXHUwMDNjIDApXG4gOTY2Olx0XHRcdHJldHVybiBpO1xuIDk2NzpcdFxuIDk2ODpcdFx0ZGV2X2luZm8oXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7TG9hZGluZyBmaXJtd2FyZSBmaWxlICVzXFxuXCYjMzQ7LFxuIDk2OTpcdFx0ICAgICAgIHA1NHVfZndsaXN0W2ldLmZ3KTtcbiA5NzA6XHRcbiA5NzE6XHRcdHVzYl9nZXRfaW50ZihpbnRmKTtcbiA5NzI6XHRcdGVyciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBwNTR1X2Z3bGlzdFtpXS5mdyxcbiA5NzM6XHRcdFx0XHRcdCAgICAgIGRldmljZSwgR0ZQX0tFUk5FTCwgcHJpdixcbiA5NzQ6XHRcdFx0XHRcdCAgICAgIHA1NHVfbG9hZF9maXJtd2FyZV9jYik7XG4gOTc1Olx0XHRpZiAoZXJyKSB7XG4gOTc2Olx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2V1ZGV2LVx1MDAzZWRldiwgXCYjMzQ7KHA1NHVzYikgY2Fubm90IGxvYWQgZmlybXdhcmUgJXMgXCYjMzQ7XG4gOTc3Olx0XHRcdFx0XHRcdCAgXCYjMzQ7KCVkKSFcXG5cJiMzNDssIHA1NHVfZndsaXN0W2ldLmZ3LCBlcnIpO1xuIDk3ODpcdFx0XHR1c2JfcHV0X2ludGYoaW50Zik7XG4gOTc5Olx0XHR9XG4gOTgwOlx0XG4gOTgxOlx0XHRyZXR1cm4gZXJyO1xuIDk4MjpcdH1cbiA5ODM6XHRcbiA5ODQ6XHRzdGF0aWMgaW50IHA1NHVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXG4gOTg1Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4gOTg2Olx0e1xuIDk4NzpcdFx0c3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpO1xuIDk4ODpcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqZGV2O1xuIDk4OTpcdFx0c3RydWN0IHA1NHVfcHJpdiAqcHJpdjtcbiA5OTA6XHRcdGludCBlcnI7XG4gOTkxOlx0XHR1bnNpZ25lZCBpbnQgaSwgcmVjb2duaXplZF9waXBlcztcbiA5OTI6XHRcbiA5OTM6XHRcdGRldiA9IHA1NF9pbml0X2NvbW1vbihzaXplb2YoKnByaXYpKTtcbiA5OTQ6XHRcbiA5OTU6XHRcdGlmICghZGV2KSB7XG4gOTk2Olx0XHRcdGRldl9lcnIoXHUwMDI2dWRldi1cdTAwM2VkZXYsIFwmIzM0OyhwNTR1c2IpIGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcXG5cJiMzNDspO1xuIDk5NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5OTg6XHRcdH1cbiA5OTk6XHRcbjEwMDA6XHRcdHByaXYgPSBkZXYtXHUwMDNlcHJpdjtcbjEwMDE6XHRcdHByaXYtXHUwMDNlaHdfdHlwZSA9IFA1NFVfSU5WQUxJRF9IVztcbjEwMDI6XHRcbjEwMDM6XHRcdFNFVF9JRUVFODAyMTFfREVWKGRldiwgXHUwMDI2aW50Zi1cdTAwM2VkZXYpO1xuMTAwNDpcdFx0dXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpO1xuMTAwNTpcdFx0cHJpdi1cdTAwM2V1ZGV2ID0gdWRldjtcbjEwMDY6XHRcdHByaXYtXHUwMDNlaW50ZiA9IGludGY7XG4xMDA3Olx0XHRza2JfcXVldWVfaGVhZF9pbml0KFx1MDAyNnByaXYtXHUwMDNlcnhfcXVldWUpO1xuMTAwODpcdFx0aW5pdF91c2JfYW5jaG9yKFx1MDAyNnByaXYtXHUwMDNlc3VibWl0dGVkKTtcbjEwMDk6XHRcbjEwMTA6XHRcdC8qIHJlYWxseSBsYXp5IGFuZCBzaW1wbGUgd2F5IG9mIGZpZ3VyaW5nIG91dCBpZiB3ZSYjMzk7cmUgYSAzODg3ICovXG4xMDExOlx0XHQvKiBUT0RPOiBzaG91bGQganVzdCBzdGljayB0aGUgaWRlbnRpZmljYXRpb24gaW4gdGhlIGRldmljZSB0YWJsZSAqL1xuMTAxMjpcdFx0aSA9IGludGYtXHUwMDNlYWx0c2V0dGluZy1cdTAwM2VkZXNjLmJOdW1FbmRwb2ludHM7XG4xMDEzOlx0XHRyZWNvZ25pemVkX3BpcGVzID0gMDtcbjEwMTQ6XHRcdHdoaWxlIChpLS0pIHtcbjEwMTU6XHRcdFx0c3dpdGNoIChpbnRmLVx1MDAzZWFsdHNldHRpbmctXHUwMDNlZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzKSB7XG4xMDE2Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0RBVEE6XG4xMDE3Olx0XHRcdGNhc2UgUDU0VV9QSVBFX01HTVQ6XG4xMDE4Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0JSRzpcbjEwMTk6XHRcdFx0Y2FzZSBQNTRVX1BJUEVfREVWOlxuMTAyMDpcdFx0XHRjYXNlIFA1NFVfUElQRV9EQVRBIHwgVVNCX0RJUl9JTjpcbjEwMjE6XHRcdFx0Y2FzZSBQNTRVX1BJUEVfTUdNVCB8IFVTQl9ESVJfSU46XG4xMDIyOlx0XHRcdGNhc2UgUDU0VV9QSVBFX0JSRyB8IFVTQl9ESVJfSU46XG4xMDIzOlx0XHRcdGNhc2UgUDU0VV9QSVBFX0RFViB8IFVTQl9ESVJfSU46XG4xMDI0Olx0XHRcdGNhc2UgUDU0VV9QSVBFX0lOVCB8IFVTQl9ESVJfSU46XG4xMDI1Olx0XHRcdFx0cmVjb2duaXplZF9waXBlcyYjNDM7JiM0Mzs7XG4xMDI2Olx0XHRcdH1cbjEwMjc6XHRcdH1cbjEwMjg6XHRcdHByaXYtXHUwMDNlY29tbW9uLm9wZW4gPSBwNTR1X29wZW47XG4xMDI5Olx0XHRwcml2LVx1MDAzZWNvbW1vbi5zdG9wID0gcDU0dV9zdG9wO1xuMTAzMDpcdFx0aWYgKHJlY29nbml6ZWRfcGlwZXMgXHUwMDNjIFA1NFVfUElQRV9OVU1CRVIpIHtcbjEwMzE6XHQjaWZkZWYgQ09ORklHX1BNXG4xMDMyOlx0XHRcdC8qIElTTDM4ODcgbmVlZHMgYSBmdWxsIHJlc2V0IG9uIHJlc3VtZSAqL1xuMTAzMzpcdFx0XHR1ZGV2LVx1MDAzZXJlc2V0X3Jlc3VtZSA9IDE7XG4xMDM0Olx0I2VuZGlmIC8qIENPTkZJR19QTSAqL1xuMTAzNTpcdFx0XHRlcnIgPSBwNTR1X2RldmljZV9yZXNldChkZXYpO1xuMTAzNjpcdFxuMTAzNzpcdFx0XHRwcml2LVx1MDAzZWh3X3R5cGUgPSBQNTRVXzM4ODc7XG4xMDM4Olx0XHRcdGRldi1cdTAwM2VleHRyYV90eF9oZWFkcm9vbSAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XG4xMDM5Olx0XHRcdHByaXYtXHUwMDNlY29tbW9uLnR4X2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IGxtODdfdHhfaGRyKTtcbjEwNDA6XHRcdFx0cHJpdi1cdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X2xtODc7XG4xMDQxOlx0XHRcdHByaXYtXHUwMDNldXBsb2FkX2Z3ID0gcDU0dV91cGxvYWRfZmlybXdhcmVfMzg4NztcbjEwNDI6XHRcdH0gZWxzZSB7XG4xMDQzOlx0XHRcdHByaXYtXHUwMDNlaHdfdHlwZSA9IFA1NFVfTkVUMjI4MDtcbjEwNDQ6XHRcdFx0ZGV2LVx1MDAzZWV4dHJhX3R4X2hlYWRyb29tICYjNDM7PSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcbjEwNDU6XHRcdFx0cHJpdi1cdTAwM2Vjb21tb24udHhfaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbmV0MjI4MF90eF9oZHIpO1xuMTA0NjpcdFx0XHRwcml2LVx1MDAzZWNvbW1vbi50eCA9IHA1NHVfdHhfbmV0MjI4MDtcbjEwNDc6XHRcdFx0cHJpdi1cdTAwM2V1cGxvYWRfZncgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV9uZXQyMjgwO1xuMTA0ODpcdFx0fVxuMTA0OTpcdFx0ZXJyID0gcDU0dV9sb2FkX2Zpcm13YXJlKGRldiwgaW50Zik7XG4xMDUwOlx0XHRpZiAoZXJyKVxuMTA1MTpcdFx0XHRwNTRfZnJlZV9jb21tb24oZGV2KTtcbjEwNTI6XHRcdHJldHVybiBlcnI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI1CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBwNTR1IEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGBwNTR1X3Byb2JlYCBraWNrcyBvZmYgdGhlIGZpcm13YXJlIGxvYWRpbmcgc2VxdWVuY2UgYnkgY2FsbGluZyBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gVGhhdCB0aGVuIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gU28gZmFyLCBzbyBnb29kLiBUaGVuLCB3aGVuIHRoZSBmaXJtd2FyZSYjMzk7cyBhY3R1YWxseSBsb2FkZWQsIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgIGdldHMgaW52b2tlZC4gVGhhdCBmdW5jdGlvbiB0aGVuIHRyaWdnZXJzIGBwNTR1X3N0YXJ0X29wc2AsIHdoaWNoIGl0c2VsZiBjYWxscyBgcDU0X3JlYWRfZWVwcm9tYC4gRmluYWxseSwgd2UgZ2V0IHRvIGBwNTRfcGFyc2VfZWVwcm9tYC4gU28sIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgd2hvbGUgZmxvdyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aGVuIHdlIHVzZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgbWFuYWdlIHRvIGdldCB0aGUgZmlybXdhcmUgdG8gbG9hZC4gQnV0LCBoYW5nIG9uIGEgc2Vjb25kLiBUaGlzIGlzIGltcG9ydGFudC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIHdoYXQgZXhhY3RseSBpcyBgcDU0X3JlYWRfZWVwcm9tYCBkb2luZz8gSXMgaXQgcmVhZGluZyB0aGUgRUVQUk9NIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlIGl0c2VsZiwgb3IgaXMgaXQgcGFyc2luZyBkYXRhIGZyb20gdGhlICpsb2FkZWQgZmlybXdhcmUqPyBJIG5lZWQgdG8gY2hlY2sgdGhhdC4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYHA1NF9yZWFkX2VlcHJvbWAgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NjEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk2MTpcdGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxuIDk2MjpcdHtcbiA5NjM6XHRcdHN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LVx1MDAzZXByaXY7XG4gOTY0Olx0XHRzaXplX3QgZWVwcm9tX3NpemUgPSAweDIwMjAsIG9mZnNldCA9IDAsIGJsb2Nrc2l6ZSwgbWF4YmxvY2tzaXplO1xuIDk2NTpcdFx0aW50IHJldCA9IC1FTk9NRU07XG4gOTY2Olx0XHR2b2lkICplZXByb207XG4gOTY3Olx0XG4gOTY4Olx0XHRtYXhibG9ja3NpemUgPSBFRVBST01fUkVBREJBQ0tfTEVOO1xuIDk2OTpcdFx0aWYgKHByaXYtXHUwMDNlZndfdmFyIFx1MDAzZT0gMHg1MDkpXG4gOTcwOlx0XHRcdG1heGJsb2Nrc2l6ZSAtPSAweGM7XG4gOTcxOlx0XHRlbHNlXG4gOTcyOlx0XHRcdG1heGJsb2Nrc2l6ZSAtPSAweDQ7XG4gOTczOlx0XG4gOTc0Olx0XHRlZXByb20gPSBremFsbG9jKGVlcHJvbV9zaXplLCBHRlBfS0VSTkVMKTtcbiA5NzU6XHRcdGlmICh1bmxpa2VseSghZWVwcm9tKSlcbiA5NzY6XHRcdFx0Z290byBmcmVlO1xuIDk3NzpcdFxuIDk3ODpcdFx0d2hpbGUgKGVlcHJvbV9zaXplKSB7XG4gOTc5Olx0XHRcdGJsb2Nrc2l6ZSA9IG1pbihlZXByb21fc2l6ZSwgbWF4YmxvY2tzaXplKTtcbiA5ODA6XHRcdFx0cmV0ID0gcDU0X2Rvd25sb2FkX2VlcHJvbShwcml2LCBlZXByb20gJiM0Mzsgb2Zmc2V0LFxuIDk4MTpcdFx0XHRcdFx0XHQgIG9mZnNldCwgYmxvY2tzaXplKTtcbiA5ODI6XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4gOTgzOlx0XHRcdFx0Z290byBmcmVlO1xuIDk4NDpcdFxuIDk4NTpcdFx0XHRvZmZzZXQgJiM0Mzs9IGJsb2Nrc2l6ZTtcbiA5ODY6XHRcdFx0ZWVwcm9tX3NpemUgLT0gYmxvY2tzaXplO1xuIDk4NzpcdFx0fVxuIDk4ODpcdFxuIDk4OTpcdFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsIGVlcHJvbSwgb2Zmc2V0KTtcbiA5OTA6XHRmcmVlOlxuIDk5MTpcdFx0a2ZyZWUoZWVwcm9tKTtcbiA5OTI6XHRcdHJldHVybiByZXQ7XG4gOTkzOlx0fVxuIDk5NDpcdEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTAwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIEVFUFJPTSBEb3dubG9hZCBQcm9jZXNzKioKCkFscmlnaHQsIHNvIHRoZSBjb3JlIG9mIHRoZSBvcGVyYXRpb24gc2VlbXMgdG8gYmUgdGhlIGBwNTRfZG93bmxvYWRfZWVwcm9tYCBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHByZWNpc2VseSB3aGF0JiMzOTtzIGdvaW5nIG9uLiYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3csIHRoZSBjb21tdW5pY2F0aW9uIHByb3RvY29scyBiZWluZyB1c2VkLCBhbmQgYW55IGVycm9yIGhhbmRsaW5nIHRoYXQmIzM5O3MgaW1wbGVtZW50ZWQgd2l0aGluIGBwNTRfZG93bmxvYWRfZWVwcm9tYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIG9mIGl0LiBJcyB0aGlzIHJlc3BvbnNpYmxlIGZvciBqdXN0IHRoZSBpbml0aWFsIHJlYWQsIG9yIGlzIHRoZXJlIG1vcmUgaW52b2x2ZWQ/IEFueSBraW5kIG9mIGFuYWx5c2lzIHdvdWxkIGJlIGxpbWl0ZWQgd2l0aG91dCBwcm9wZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29yZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X2Rvd25sb2FkX2VlcHJvbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTk2MT1pbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTc5LVx0XHRibG9ja3NpemUgPSBtaW4oZWVwcm9tX3NpemUsIG1heGJsb2Nrc2l6ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6OTgwOlx0XHRyZXQgPSBwNTRfZG93bmxvYWRfZWVwcm9tKHByaXYsIGVlcHJvbSAmIzQzOyBvZmZzZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTgxLVx0XHRcdFx0XHQgIG9mZnNldCwgYmxvY2tzaXplKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jPTE4ND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnA1NF9hbGxvY19za2Ioc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHUxNiBoZHJfZmxhZ3MsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZndpby5jOjIxMDppbnQgcDU0X2Rvd25sb2FkX2VlcHJvbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqYnVmLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMTEtXHRcdFx0dTE2IG9mZnNldCwgdTE2IGxlbilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oPTU0OD1pbnQgcDU0X3VwbG9hZF9rZXkoc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHU4IGFsZ28sIGludCBzbG90LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtNTUxLS8qIGVlcHJvbSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2xtYWMuaDo1NTI6aW50IHA1NF9kb3dubG9hZF9lZXByb20oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmJ1ZixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtNTUzLVx0XHRcdHUxNiBvZmZzZXQsIHUxNiBsZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIzMgoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgRG93bmxvYWQqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBgcDU0X2Rvd25sb2FkX2VlcHJvbWAgYW5kIG15IGd1dCB0ZWxscyBtZSBpdCYjMzk7cyBrZXkgaW4gdGhpcyBlbnRpcmUgZmlybXdhcmUgcHJvY2Vzcy4gSSBrbm93IGl0IHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB0aGVuIGp1c3QuLi53YWl0cyBmb3IgdGhhdCByZXNwb25zZS4gTWFrZXMgc2Vuc2UuIFR5cGljYWwgcHJvdG9jb2wuIFJpZ2h0LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgZXhwZWN0LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb21tdW5pY2F0aW9uLiBXaGVyZSBkbyBJIHN0YXJ0PyBBaCwgcmlnaHQsIHRoYXQmIzM5O3MgaW4gYGZ3aW8uY2AuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gbG9va2luZyBhdCBhbnkgcG90ZW50aWFsIGVycm9yIGNoZWNraW5nIGFuZCB0aW1lb3V0IGhhbmRsaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0aW50IHA1NF9kb3dubG9hZF9lZXByb20oc3RydWN0IHA1NF9jb21tb24gKnByaXYsIHZvaWQgKmJ1ZixcbiAyMTE6XHRcdFx0XHR1MTYgb2Zmc2V0LCB1MTYgbGVuKVxuIDIxMjpcdHtcbiAyMTM6XHRcdHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgKmVlcHJvbV9oZHI7XG4gMjE0Olx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuIDIxNTpcdFx0c2l6ZV90IGVlcHJvbV9oZHJfc2l6ZTtcbiAyMTY6XHRcdGludCByZXQgPSAwO1xuIDIxNzpcdFx0bG9uZyB0aW1lX2xlZnQ7XG4gMjE4Olx0XG4gMjE5Olx0XHRpZiAocHJpdi1cdTAwM2Vmd192YXIgXHUwMDNlPSAweDUwOSlcbiAyMjA6XHRcdFx0ZWVwcm9tX2hkcl9zaXplID0gc2l6ZW9mKCplZXByb21faGRyKTtcbiAyMjE6XHRcdGVsc2VcbiAyMjI6XHRcdFx0ZWVwcm9tX2hkcl9zaXplID0gMHg0O1xuIDIyMzpcdFxuIDIyNDpcdFx0c2tiID0gcDU0X2FsbG9jX3NrYihwcml2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgZWVwcm9tX2hkcl9zaXplICYjNDM7XG4gMjI1Olx0XHRcdFx0ICAgIGxlbiwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssXG4gMjI2Olx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuIDIyNzpcdFx0aWYgKHVubGlrZWx5KCFza2IpKVxuIDIyODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyMjk6XHRcbiAyMzA6XHRcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VlZXByb21fbXV0ZXgpO1xuIDIzMTpcdFx0cHJpdi1cdTAwM2VlZXByb20gPSBidWY7XG4gMjMyOlx0XHRwcml2LVx1MDAzZWVlcHJvbV9zbGljZV9zaXplID0gbGVuO1xuIDIzMzpcdFx0ZWVwcm9tX2hkciA9IHNrYl9wdXQoc2tiLCBlZXByb21faGRyX3NpemUgJiM0MzsgbGVuKTtcbiAyMzQ6XHRcbiAyMzU6XHRcdGlmIChwcml2LVx1MDAzZWZ3X3ZhciBcdTAwM2MgMHg1MDkpIHtcbiAyMzY6XHRcdFx0ZWVwcm9tX2hkci1cdTAwM2V2MS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpO1xuIDIzNzpcdFx0XHRlZXByb21faGRyLVx1MDAzZXYxLmxlbiA9IGNwdV90b19sZTE2KGxlbik7XG4gMjM4Olx0XHR9IGVsc2Uge1xuIDIzOTpcdFx0XHRlZXByb21faGRyLVx1MDAzZXYyLm9mZnNldCA9IGNwdV90b19sZTMyKG9mZnNldCk7XG4gMjQwOlx0XHRcdGVlcHJvbV9oZHItXHUwMDNldjIubGVuID0gY3B1X3RvX2xlMTYobGVuKTtcbiAyNDE6XHRcdFx0ZWVwcm9tX2hkci1cdTAwM2V2Mi5tYWdpYzIgPSAweGY7XG4gMjQyOlx0XHRcdG1lbWNweShlZXByb21faGRyLVx1MDAzZXYyLm1hZ2ljLCAoY29uc3QgY2hhciAqKVwmIzM0O0xPQ0tcJiMzNDssIDQpO1xuIDI0MzpcdFx0fVxuIDI0NDpcdFxuIDI0NTpcdFx0cDU0X3R4KHByaXYsIHNrYik7XG4gMjQ2Olx0XG4gMjQ3Olx0XHR0aW1lX2xlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChcbiAyNDg6XHRcdFx0XHRcdTAwMjZwcml2LVx1MDAzZWVlcHJvbV9jb21wLCBIWik7XG4gMjQ5Olx0XHRpZiAodGltZV9sZWZ0IFx1MDAzYz0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzIwNAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgRUVQUk9NIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSBzZWUgaG93IHRoaXMgaXMgd29ya2luZy4gVGhlIHByb2Nlc3MgZ29lcyBsaWtlIHRoaXM6IGEgY29tbWFuZCBpcyBzZW50IHRvIHRoZSBkZXZpY2UsIGl0IHdhaXRzIGZvciBhIHJlc3BvbnNlLiBUaGUgcmVzcG9uc2UgY29tZXMgaW4gYW5kIGlzIGhhbmRsZWQgYnkgYW4gaW50ZXJydXB0IHJvdXRpbmUgb3IgUlggaGFuZGxlciDigJMgdHlwaWNhbC4gVGhpcyByb3V0aW5lIHRoZW4gY29waWVzIGRhdGEgaW50byBgcHJpdi0mZ3Q7ZWVwcm9tYCBhbmQgY29tcGxldGVzIGBwcml2LSZndDtlZXByb21fY29tcGAuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGUgZGV2aWNlICpjYW4qIGJlIGVtdWxhdGVkLCB3aGljaCBtZWFucyB0aGUgcmVzcG9uc2UsIGFuZCB0aGVyZWZvcmUgdGhlIEVFUFJPTSBkYXRhLCBpcyBmdWxseSB1bmRlciBhbiBhdHRhY2tlciYjMzk7cyBjb250cm9sLiBUaGF0JiMzOTtzIGEgaHVnZSByZWQgZmxhZy4KClRoZSBwYXRjaCBpbXBsZW1lbnRzIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYHA1NF9wYXJzZV9lZXByb21gLCB3aGljaCBzb3VuZHMgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIHNvbWV0aGluZy4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZyDigJMgSSBjYW4gc2VlIHRoZSBwb3RlbnRpYWwgZm9yIGEgcmVhbGx5IG5hc3R5IGJ1ZyBoZXJlLgoKVGltZSB0byBpZGVudGlmeSBzb21lIGludGVyZXN0aW5nIHN5bWJvbHMuIGBwNTRfcGFyc2VfZWVwcm9tYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQsIG9idmlvdXNseS4gYHA1NF9yZWFkX2VlcHJvbWAgYWxzbyBsb29rcyBwcm9taXNpbmcuIEkgYWxzbyBzZWUgYHA1NF9jb252ZXJ0X3JldjBgIGFuZCBgcDU0X2NvbnZlcnRfcmV2MWAg4oCTIHRob3NlIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgZWVwcm9tLmNgLCB3aGljaCBjb3VsZCBiZSB1c2VkIHRvIG9iZnVzY2F0ZSB0aGUgd29ya2luZ3MuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoZXkmIzM5O3JlIGFjdHVhbGx5IHN0YXRpYy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cDU0X2NvbnZlcnRfcmV2MCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTMxOT1zdGF0aWMgaW50IHA1NF9nZW5lcmF0ZV9jaGFubmVsX2xpc3RzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjQxNjpzdGF0aWMgaW50IHA1NF9jb252ZXJ0X3JldjAoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTQxNy1cdFx0XHQgICAgc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz03MjU9aW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4MS1cdFx0XHRcdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo3ODI6XHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNzgzLVx0XHRcdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgcDU0X3BhcnNlX2VlcHJvbSBGdW5jdGlvbiBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCwgdGhlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoaXMgYXJlIHN0YXRpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cuIE15IHByaW1hcnkgY29uY2VybiByaWdodCBub3cgaXMgdGhlIGBwNTRfcGFyc2VfZWVwcm9tYCBmdW5jdGlvbiDigJMgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBzeW1ib2wgSSBuZWVkIHRvIHVuZGVyc3RhbmQuCgpOb3csIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29uZmlndXJhdGlvbnMuIFRoZSBmaXJzdCBvbmUgSSBuZWVkIHRvIHZlcmlmeSBpcyBgUDU0X1VTQmAuIFRoYXQmIzM5O3MgdGhlIG1haW4gY29uZmlndXJhdGlvbiBpdGVtLCBJIGFzc3VtZS4gT2theSwgbGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSByZWxhdGlvbnNoaXBzIGhlcmUuIEFoLCBpdCBsb29rcyBsaWtlIGBQNTRfQ09NTU9OYCBpcyAqbm90KiBzZWxlY3RlZCAqYnkqIGBQNTRfVVNCYCwgYnV0IHJhdGhlciBgUDU0X1VTQmAgKmRlcGVuZHMqIG9uIGBQNTRfQ09NTU9OYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhlIEtjb25maWcgZmlsZSBmb3IgYFA1NF9VU0JgIHRvIGNvbmZpcm0gYW5kIGVuc3VyZSBJIGhhdmUgdGhlIGRlcGVuZGVuY3kgdHJlZSBjb3JyZWN0IGluIG15IGhlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgUDU0X0NPTU1PTlxuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7U29mdG1hYyBQcmlzbTU0IHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgIDY6XHRcdHNlbGVjdCBDUkNfQ0NJVFRcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBpcyBjb21tb24gY29kZSBmb3IgaXNsMzh4eC9zdGxjNDV4eCBiYXNlZCBtb2R1bGVzLlxuICAgOTpcdFx0ICBUaGlzIG1vZHVsZSBkb2VzIG5vdGhpbmcgYnkgaXRzZWxmIC0gdGhlIFVTQi9QQ0kvU1BJIGZyb250LWVuZHNcbiAgMTA6XHRcdCAgYWxzbyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBhbnkgZGV2aWNlcy5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDEzOlx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDE0Olx0XG4gIDE1Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0Y29tbW9uLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBQNTRfVVNCXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFVTQiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFVTQlxuICAyMDpcdFx0c2VsZWN0IENSQzMyXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XG4gIDI1Olx0XHQgIFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXHUwMDNlXG4gIDI2Olx0XG4gIDI3Olx0XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgcDU0dXNiLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBQNTRfUENJXG4gIDMwOlx0XHR0cmlzdGF0ZSBcJiMzNDtQcmlzbTU0IFBDSSBzdXBwb3J0XCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFBDSVxuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgUENJIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXG4gIDM0Olx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG1vc3QgZGV2aWNlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlXG4gIDM1Olx0XHQgIGZ1bGxtYWMgcHJpc201NCBkcml2ZXIgcGx1cyBtYW55IGRldmljZXMgd2hpY2ggYXJlIG5vdFxuICAzNjpcdFx0ICBzdXBwb3J0ZWQgYnkgdGhlIGZ1bGxtYWMgZHJpdmVyL2Zpcm13YXJlLlxuICAzNzpcdFxuICAzODpcdFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxuICAzOTpcdFx0ICBcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFx1MDAzZVxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkIHA1NHBjaS5cbiAgNDI6XHRcbiAgNDM6XHRjb25maWcgUDU0X1NQSVxuICA0NDpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJpc201NCBTUEkgKHN0bGM0NXh4KSBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXHUwMDI2XHUwMDI2IFNQSV9NQVNURVJcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIHN0bGM0NTUwIG9yIHN0bGM0NTYwIGJhc2VkIHdpcmVsZXNzIGNoaXBzXG4gIDQ4Olx0XHQgIHN1Y2ggYXMgTm9raWEmIzM5O3MgTjgwMC9OODEwIFBvcnRhYmxlIEludGVybmV0IFRhYmxldC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBwNTRzcGkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTc4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gU3RyYXRlZ3kgZm9yIHRoZSBwNTQgV2lyZWxlc3MgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgbW9kdWxlcyB0byBlbmFibGUuIEZyb20gdGhlIGluaXRpYWwgY2x1ZXMsIGl0IGxvb2tzIGxpa2Ugd2UgZGVmaW5pdGVseSBuZWVkIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIEkmIzM5O20gbGVhbmluZyB0b3dhcmRzIGluY2x1ZGluZyBgUDU0X1BDSWAgYW5kIGBQNTRfU1BJYCBhcyB3ZWxsLCBqdXN0IHRvIGNvdmVyIGFsbCBiYXNlcywgdGhvdWdoIGBQNTRfVVNCYCBzZWVtcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgZ2l2ZW4gdGhhdCBgc3l6X3VzYl9jb25uZWN0YCBpcyBtZW50aW9uZWQuCgpXYWl0IGEgc2Vjb25kLCBsZXQgbWUgcmUtZXZhbHVhdGUuLi50aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBwNTRfcGFyc2VfZWVwcm9tYCwgd2hpY2ggSSBrbm93IHJlc2lkZXMgaW4gYGVlcHJvbS5jYC4gQWgsIHJpZ2h0LCBgZWVwcm9tLmNgIGlzIGFjdHVhbGx5IHBhcnQgb2YgYHA1NGNvbW1vbmAuIFRoYXQgc29saWRpZmllcyBpdDogYFA1NF9DT01NT05gIGlzIGRlZmluaXRlbHkgdGhlIGtleSBtb2R1bGUgdG8gZW5hYmxlIGhlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybSB0aGlzIGJ5IHF1aWNrbHkgcmVmZXJlbmNpbmcgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0cDU0Y29tbW9uLW9ianNcdFx0XHQ6PSBlZXByb20ubyBmd2lvLm8gdHhyeC5vIG1haW4ub1xuICAgMzpcdHA1NGNvbW1vbi0kKENPTkZJR19QNTRfTEVEUylcdCYjNDM7PSBsZWQub1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19QNTRfQ09NTU9OKVx0JiM0Mzs9IHA1NGNvbW1vbi5vXG4gICA2Olx0b2JqLSQoQ09ORklHX1A1NF9VU0IpXHRcdCYjNDM7PSBwNTR1c2Iub1xuICAgNzpcdG9iai0kKENPTkZJR19QNTRfUENJKVx0XHQmIzQzOz0gcDU0cGNpLm9cbiAgIDg6XHRvYmotJChDT05GSUdfUDU0X1NQSSlcdFx0JiM0Mzs9IHA1NHNwaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE3OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODMxCgkJCQkJCQlvdXRwdXQ6IDIyNQoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUHJpc201NCBFRVBST00gVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgZWVwcm9tLm9gIGlzIGluZGVlZCB3aXRoaW4gYHA1NGNvbW1vbmAuIFRoYXQgbWVhbnMgZW5hYmxpbmcgYFA1NF9DT01NT05gIGlzIGVzc2VudGlhbCBmb3IgdGhpcy4gVG8gYWN0dWFsbHkgZ2V0IGF0IGl0IHRocm91Z2ggc3l6a2FsbGVyLCB3ZSYjMzk7bGwgbmVlZCBhIGZyb250LWVuZCBtb2R1bGUsIGFuZCBgUDU0X1VTQmAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZS4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIHBhdGggaW4uCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gQmVzaWRlcyBgcDU0X3BhcnNlX2VlcHJvbWAsIHdoaWNoIEkga25vdyB0aGUgcGF0Y2ggdGFyZ2V0cywgSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gYHA1NF9yZWFkX2VlcHJvbWAgYW5kIGBwNTRfZG93bmxvYWRfZWVwcm9tYC4gVGhleSYjMzk7cmUgYWxsIGludGVyY29ubmVjdGVkLCBzbyBpdCYjMzk7cyBhIGdvb2QgYXBwcm9hY2guIExldCYjMzk7cyBhZGQgdGhvc2UgdG8gYEZvY3VzU3ltYm9sc2AuCgpNeSBgRm9jdXNTeW1ib2xzYCBhcmUgbm93OgoKKiAgIGBwNTRfcGFyc2VfZWVwcm9tYAoqICAgYHA1NF9yZWFkX2VlcHJvbWAKKiAgIGBwNTRfZG93bmxvYWRfZWVwcm9tYAoKQW5kIGhlcmUgYXJlIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgOgoKKiAgIGBQNTRfQ09NTU9OYAoqICAgYFA1NF9VU0JgCiogICBgTUFDODAyMTFgCgpUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJvdW5kcy1jaGVja2luZyBpc3N1ZSBpbiBgcDU0X3BhcnNlX2VlcHJvbWAuIEl0JiMzOTtzIHBhcnNpbmcgRUVQUk9NIGRhdGEgd2l0aGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIGtleSBpcyB0aGF0IGBwNTRfZG93bmxvYWRfZWVwcm9tYCBpcyB1c2VkIHRvIGdldCB0aGUgRUVQUk9NIGRhdGEuIEl0IHNlbmRzIGEgY29tbWFuZCwgd2FpdHMgZm9yIGEgcmVzcG9uc2UuIEluIGEgdmlydHVhbGl6ZWQgc2V0dXAgbGlrZSB3ZSYjMzk7cmUgZGlzY3Vzc2luZywgdGhpcyBtZWFucyB3ZSBjYW4gdXNlIGBkdW1teV9oY2RgIGFuZCBgc3l6X3VzYl9jb25uZWN0YCB0byBlbXVsYXRlIGEgVVNCIFByaXNtNTQgZGV2aWNlLiBUaGF0JiMzOTtsbCB0cmlnZ2VyIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBFRVBST00gcmVhZGluZywgYW5kIHNpbmNlIHdlJiMzOTtyZSAqZW11bGF0aW5nKiB0aGUgZGV2aWNlLCB3ZSBoYXZlIGNvbXBsZXRlIGNvbnRyb2wgb3ZlciB0aGUgRUVQUk9NIGRhdGEgdGhhdCBnZXRzIHJldHVybmVkLiBUaGF0IG1ha2VzIHRoZSBwYXJzaW5nIGxvZ2ljIGNvbXBsZXRlbHkgYXR0YWNrZXItY29udHJvbGxlZCwgYW5kIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cDU0X3BhcnNlX2VlcHJvbSYjMzQ7LAogICAgJiMzNDtwNTRfcmVhZF9lZXByb20mIzM0OywKICAgICYjMzQ7cDU0X2Rvd25sb2FkX2VlcHJvbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UDU0X0NPTU1PTiYjMzQ7LAogICAgJiMzNDtQNTRfVVNCJiMzNDssCiAgICAmIzM0O01BQzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cDU0X3BhcnNlX2VlcHJvbSYjMzQ7LAogICAgJiMzNDtwNTRfcmVhZF9lZXByb20mIzM0OywKICAgICYjMzQ7cDU0X2Rvd25sb2FkX2VlcHJvbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMKaW5kZXggOTU1ODA5MjFkOTMzOC4uNDcyZWRlY2Y1NTc3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYwpAQCAtNzYzLDYgJiM0Mzs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHsKIAkJCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YSA9CiAJCQkJKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LSZndDtkYXRhOwomIzQzOwkJCXNpemVfdCBuZWVkZWQ7CiYjNDM7CiAJCQlpZiAoZGF0YV9sZW4gJmx0OyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIGVycjsKQEAgLTc3MCw5ICYjNDM7NzcyLDIzIEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKQogCiAJCQlzd2l0Y2ggKGN1cnZlX2RhdGEtJmd0O2NhbF9tZXRob2RfcmV2KSB7CiAJCQljYXNlIDA6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDIpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6CiYjNDM7CQkJCW5lZWRlZCA9IGN1cnZlX2RhdGEtJmd0O2NoYW5uZWxzICoKJiM0MzsJCQkJCShzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYxKSAqCiYjNDM7CQkJCQkgY3VydmVfZGF0YS0mZ3Q7cG9pbnRzX3Blcl9jaGFubmVsICYjNDM7IDMpOwomIzQzOwkJCQlpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpICZsdDsgbmVlZGVkKSB7CiYjNDM7CQkJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCQkJZ290byBlcnI7CiYjNDM7CQkJCX0KIAkJCQllcnIgPSBwNTRfY29udmVydF9yZXYxKGRldiwgY3VydmVfZGF0YSk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtODAxLDcgJiM0Mzs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDoKIAkJCXRtcCA9IGVudHJ5LSZndDtkYXRhOwotCQkJd2hpbGUgKCh1OCAqKXRtcCAmbHQ7IGVudHJ5LSZndDtkYXRhICYjNDM7IGRhdGFfbGVuKSB7CiYjNDM7CQkJd2hpbGUgKCh1OCAqKXRtcCAmIzQzOyBzaXplb2Yoc3RydWN0IGV4cF9pZikgJmx0Oz0KJiM0MzsJCQkgICAgICAgZW50cnktJmd0O2RhdGEgJiM0MzsgZGF0YV9sZW4pIHsKIAkJCQlzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7CiAJCQkJaWYgKGV4cF9pZi0mZ3Q7aWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKQogCQkJCQlzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi0mZ3Q7dmFyaWFudCk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTI5CgkJCQkJCQlvdXRwdXQ6IDExNgoJCQkJCQkJdGhvdWdodHM6IDczNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBQNTQgRUVQUk9NIFBhcnNpbmcgRml4KioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWRkaW5nIGJvdW5kcyBjaGVja2luZyB0byB0aGUgYHA1NF9wYXJzZV9lZXByb21gIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1ha2luZyBzdXJlIHdlIGRvbiYjMzk7dCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgRUVQUk9NIGRhdGEgYnVmZmVyIGluIHRoZSBgaW50ZXJzaWwvcDU0YCB3aXJlbGVzcyBkcml2ZXIuIFRoZSBjaGVjayBpbnZvbHZlcyBjYWxjdWxhdGluZyBhIGBuZWVkZWRgIHNpemUgYmFzZWQgb24gY2hhbm5lbCBhbmQgcG9pbnRzIGRhdGEgZnJvbSBgY3VydmVfZGF0YWAgYW5kIGNvbXBhcmluZyBpdCBhZ2FpbnN0IHRoZSBhdmFpbGFibGUgYGRhdGFfbGVuYC4gSXQgYWxzbyBmaXhlcyBhIGB3aGlsZWAgbG9vcCB0byBwcmV2ZW50IGdvaW5nIGJleW9uZCB0aGUgYWxsb2NhdGVkIGRhdGEgZm9yIGEgY2VydGFpbiBpbnRlcmZhY2UgbGlzdC4KCk15IG1haW4gY29uY2VybiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzIEtNU0FOJiMzOTtzIGRvbWFpbi4gVGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgRUVQUk9NLCB3aGljaCwgYXQgbGVhc3QgaWRlYWxseSwgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBJZiB0aGUgYm91bmRzIGNoZWNrcyB3ZXJlIG1pc3NpbmcsIHdlJiMzOTtkIGJlIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyBFRVBST00gZGF0YSwgd2hpY2ggaXMgZGVmaW5pdGVseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIEtBU0FOIHdpbGwgcmVsaWFibHkgY2F0Y2ggdGhvc2UgT09CIHJlYWRzLiBUaGUgcGF0Y2ggaXMgcHJldmVudGluZyByZWFkcyBwYXN0IHRoZSBlbmQgb2YgYSBidWZmZXI7IHRoZXJlZm9yZSwgYSBLTVNBTiBjaGVjayBpcyB1bm5lY2Vzc2FyeS4KClRoaW5raW5nIHRoaXMgdGhyb3VnaCBtb3JlIGNhcmVmdWxseSwgdGhlIGBwNTRfcGFyc2VfZWVwcm9tYCBmdW5jdGlvbiB3b3JrcyB3aXRoIGEgYnVmZmVyIGNhbGxlZCBgZWVwcm9tYC4gVGhlIGBkYXRhX2xlbmAgaXMgdGhlIGxlbmd0aCBvZiBlYWNoIFBEUiBlbnRyeSB3aXRoaW4gdGhlIGJ1ZmZlci4gTm93LCBpbnNpZGUgdGhlIGZ1bmN0aW9uJiMzOTtzIGxvb3AsIHRoZXJlJiMzOTtzIHRoaXMgYHN3aXRjaGAgc3RhdGVtZW50IHRoYXQgY2FsY3VsYXRlcyBgbmVlZGVkYC4gSWYgYG5lZWRlZGAgZXhjZWVkcyB3aGF0JiMzOTtzIGF2YWlsYWJsZSBpbiBgZGF0YV9sZW5gLCB0aGVuIHRoZSBjb2RlIHRyaWVzIHRvIHJlYWQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGVudHJ5LCBwb3NzaWJseSBpbnRvIHRoZSBuZXh0IGVudHJ5IG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgZW50aXJlIGBlZXByb21gIGJ1ZmZlci4KCklmIGl0IHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGVlcHJvbWAgYnVmZmVyLCBLQVNBTiB3aWxsIGNhdGNoIGl0IGFzIGFuIE9PQiByZWFkLiBJZiBpdCByZWFkcyBpbnRvIHRoZSBuZXh0IGVudHJ5LCBpdCYjMzk7cyBqdXN0IHBhcnNpbmcgZ2FyYmFnZSBidXQgbm90IHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBpdCBpcyAqbm90KiBhIEtNU0FOIGlzc3VlLiBUaGlzIGlzIHB1cmVseSBhbiBvdXQtb2YtYm91bmRzIHJlYWQgY2F1c2VkIGJ5IGluc3VmZmljaWVudCBib3VuZHMgY2hlY2tpbmcuCgpTbywgdGhlIHBhdGNoIGlzIGZpeGluZyBvdXQtb2YtYm91bmRzIHJlYWRzLiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBmb3IgZGV0ZWN0aW5nIGFuZCBwcmV2ZW50aW5nIHRoaXMuIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gbGVha2luZyB0byB0aGUgdXNlci4gSSYjMzk7bSBjb21mb3J0YWJsZSBpbiBjb25jbHVkaW5nIHRoYXQgS01TQU4gaXMgbm90IG5lZWRlZCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiBwNTRfcGFyc2VfZWVwcm9tLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIG9yIGludG8gYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgaW52b2x2ZWQgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzI6MzcuOTM1ODc4MjUxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI0Mjc4Mzc3MjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlA1NF9DT01NT05cIixcbiAgICBcIlA1NF9VU0JcIixcbiAgICBcIk1BQzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicDU0X3BhcnNlX2VlcHJvbVwiLFxuICAgIFwicDU0X3JlYWRfZWVwcm9tXCIsXG4gICAgXCJwNTRfZG93bmxvYWRfZWVwcm9tXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwNTRfcGFyc2VfZWVwcm9tYCB3aGVuIHBhcnNpbmcgRUVQUk9NIGRhdGEgaW4gdGhlIEludGVyc2lsIFByaXNtNTQgd2lyZWxlc3MgZHJpdmVyLiBUaGUgRUVQUk9NIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBkZXZpY2UgdmlhIGBwNTRfZG93bmxvYWRfZWVwcm9tYCwgd2hpY2ggc2VuZHMgYSBjb21tYW5kIHRvIHRoZSBkZXZpY2UgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGlzIGNhbiBiZSByZWFjaGVkIGJ5IGVtdWxhdGluZyBhIFVTQiBQcmlzbTU0IGRldmljZSB1c2luZyBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIHdpbGwgdHJpZ2dlciBmaXJtd2FyZSBsb2FkaW5nIGFuZCBzdWJzZXF1ZW50IEVFUFJPTSByZWFkaW5nLiBTaW5jZSB0aGUgZW11bGF0ZWQgZGV2aWNlIGNhbiByZXR1cm4gYXJiaXRyYXJ5IEVFUFJPTSBkYXRhLCB0aGUgcGFyc2luZyBsb2dpYyBpcyBmdWxseSBhdHRhY2tlci1jb250cm9sbGVkIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjozNy45MzU4OTczMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzkzODU2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjMyOjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uY1xcbmluZGV4IDk1NTgwOTIxZDkzMzguLjQ3MmVkZWNmNTU3NzIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXFxuQEAgLTc2Myw2ICs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcXG4gXFx0XFx0Y2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHtcXG4gXFx0XFx0XFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cXG4gXFx0XFx0XFx0XFx0KHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LVxcdTAwM2VkYXRhO1xcbitcXHRcXHRcXHRzaXplX3QgbmVlZGVkO1xcbitcXG4gXFx0XFx0XFx0aWYgKGRhdGFfbGVuIFxcdTAwM2Mgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSkge1xcbiBcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiBcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG5AQCAtNzcwLDkgKzc3MiwyMyBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcXG4gXFxuIFxcdFxcdFxcdHN3aXRjaCAoY3VydmVfZGF0YS1cXHUwMDNlY2FsX21ldGhvZF9yZXYpIHtcXG4gXFx0XFx0XFx0Y2FzZSAwOlxcbitcXHRcXHRcXHRcXHRuZWVkZWQgPSBjdXJ2ZV9kYXRhLVxcdTAwM2VjaGFubmVscyAqXFxuK1xcdFxcdFxcdFxcdFxcdChzaXplb2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9yZXYwKSAqXFxuK1xcdFxcdFxcdFxcdFxcdCBjdXJ2ZV9kYXRhLVxcdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwgKyAyKTtcXG4rXFx0XFx0XFx0XFx0aWYgKGRhdGFfbGVuIC0gc2l6ZW9mKCpjdXJ2ZV9kYXRhKSBcXHUwMDNjIG5lZWRlZCkge1xcbitcXHRcXHRcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycjtcXG4rXFx0XFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRcXHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIDE6XFxuK1xcdFxcdFxcdFxcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXFx1MDAzZWNoYW5uZWxzICpcXG4rXFx0XFx0XFx0XFx0XFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEpICpcXG4rXFx0XFx0XFx0XFx0XFx0IGN1cnZlX2RhdGEtXFx1MDAzZXBvaW50c19wZXJfY2hhbm5lbCArIDMpO1xcbitcXHRcXHRcXHRcXHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFxcdTAwM2MgbmVlZGVkKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdFxcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGRlZmF1bHQ6XFxuQEAgLTgwMSw3ICs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgUERSX0lOVEVSRkFDRV9MSVNUOlxcbiBcXHRcXHRcXHR0bXAgPSBlbnRyeS1cXHUwMDNlZGF0YTtcXG4tXFx0XFx0XFx0d2hpbGUgKCh1OCAqKXRtcCBcXHUwMDNjIGVudHJ5LVxcdTAwM2VkYXRhICsgZGF0YV9sZW4pIHtcXG4rXFx0XFx0XFx0d2hpbGUgKCh1OCAqKXRtcCArIHNpemVvZihzdHJ1Y3QgZXhwX2lmKSBcXHUwMDNjPVxcbitcXHRcXHRcXHQgICAgICAgZW50cnktXFx1MDAzZWRhdGEgKyBkYXRhX2xlbikge1xcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7XFxuIFxcdFxcdFxcdFxcdGlmIChleHBfaWYtXFx1MDAzZWlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0lTTDM5MDAwKSlcXG4gXFx0XFx0XFx0XFx0XFx0c3ludGggPSBsZTE2X3RvX2NwdShleHBfaWYtXFx1MDAzZXZhcmlhbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjozOS40MTYyNDk4NzhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MTE4ODgzMjIxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZWVwcm9tXCIsXG4gICAgXCJwNTRfcmVhZF9lZXByb21cIixcbiAgICBcInA1NF9kb3dubG9hZF9lZXByb21cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTBhZGE0YmY4ZDBjNWQ4NmE2NTE5NmYyMDE5ZWQwZGUwYWRlMzY4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDE3OjMyOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG5pbmRleCA5NTU4MDkyMWQ5MzM4Li40NzJlZGVjZjU1NzcyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbkBAIC03NjMsNiArNzYzLDggQEAgaW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pXG4gXHRcdGNhc2UgUERSX1BSSVNNX1BBX0NBTF9DVVJWRV9EQVRBOiB7XG4gXHRcdFx0c3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID1cbiBcdFx0XHRcdChzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKillbnRyeS1cdTAwM2VkYXRhO1xuK1x0XHRcdHNpemVfdCBuZWVkZWQ7XG4rXG4gXHRcdFx0aWYgKGRhdGFfbGVuIFx1MDAzYyBzaXplb2YoKmN1cnZlX2RhdGEpKSB7XG4gXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdFx0Z290byBlcnI7XG5AQCAtNzcwLDkgKzc3MiwyMyBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcbiBcdFx0XHRzd2l0Y2ggKGN1cnZlX2RhdGEtXHUwMDNlY2FsX21ldGhvZF9yZXYpIHtcbiBcdFx0XHRjYXNlIDA6XG4rXHRcdFx0XHRuZWVkZWQgPSBjdXJ2ZV9kYXRhLVx1MDAzZWNoYW5uZWxzICpcbitcdFx0XHRcdFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjApICpcbitcdFx0XHRcdFx0IGN1cnZlX2RhdGEtXHUwMDNlcG9pbnRzX3Blcl9jaGFubmVsICsgMik7XG4rXHRcdFx0XHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFx1MDAzYyBuZWVkZWQpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIDE6XG4rXHRcdFx0XHRuZWVkZWQgPSBjdXJ2ZV9kYXRhLVx1MDAzZWNoYW5uZWxzICpcbitcdFx0XHRcdFx0KHNpemVvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGFfc2FtcGxlX3JldjEpICpcbitcdFx0XHRcdFx0IGN1cnZlX2RhdGEtXHUwMDNlcG9pbnRzX3Blcl9jaGFubmVsICsgMyk7XG4rXHRcdFx0XHRpZiAoZGF0YV9sZW4gLSBzaXplb2YoKmN1cnZlX2RhdGEpIFx1MDAzYyBuZWVkZWQpIHtcbitcdFx0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbitcdFx0XHRcdFx0Z290byBlcnI7XG4rXHRcdFx0XHR9XG4gXHRcdFx0XHRlcnIgPSBwNTRfY29udmVydF9yZXYxKGRldiwgY3VydmVfZGF0YSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRkZWZhdWx0OlxuQEAgLTgwMSw3ICs4MTcsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcdFx0XHRicmVhaztcbiBcdFx0Y2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6XG4gXHRcdFx0dG1wID0gZW50cnktXHUwMDNlZGF0YTtcbi1cdFx0XHR3aGlsZSAoKHU4ICopdG1wIFx1MDAzYyBlbnRyeS1cdTAwM2VkYXRhICsgZGF0YV9sZW4pIHtcbitcdFx0XHR3aGlsZSAoKHU4ICopdG1wICsgc2l6ZW9mKHN0cnVjdCBleHBfaWYpIFx1MDAzYz1cbitcdFx0XHQgICAgICAgZW50cnktXHUwMDNlZGF0YSArIGRhdGFfbGVuKSB7XG4gXHRcdFx0XHRzdHJ1Y3QgZXhwX2lmICpleHBfaWYgPSB0bXA7XG4gXHRcdFx0XHRpZiAoZXhwX2lmLVx1MDAzZWlmX2lkID09IGNwdV90b19sZTE2KElGX0lEX0lTTDM5MDAwKSlcbiBcdFx0XHRcdFx0c3ludGggPSBsZTE2X3RvX2NwdShleHBfaWYtXHUwMDNldmFyaWFudCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjozOS40MTYyNTE4NDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTM0NTM0NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBzb21lIGJvdW5kcyBjaGVja2luZyB3aXRoaW4gYHA1NF9wYXJzZV9lZXByb21gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBwYXJzaW5nIG9mIGBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFgIGFuZCBgUERSX0lOVEVSRkFDRV9MSVNUYC4gVGhhdCdzIGdvb2QsIGFsd2F5cyBhIHBsdXMgdG8gc2VlIHRoYXQga2luZCBvZiBoYXJkZW5pbmcuIFRoaXMgaXMgZm9yIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGNhcmRzLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCByZWFjaGFiaWxpdHkuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXM6IGNhbiB0aGlzIGNvZGUgZXZlbiAqYmUqIHRyaWdnZXJlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBJbiBteSBleHBlcmllbmNlLCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyB3aXJlbGVzcyBkcml2ZXJzIOKAkyBJbnRlcnNpbCBQcmlzbTU0IGluIHRoaXMgY2FzZSDigJMgdXN1YWxseSByZXF1aXJlIHRoZSAqYWN0dWFsKiBoYXJkd2FyZSB0byBiZSBwcmVzZW50LiBPciwgcG9zc2libHksIGEgY2xldmVyIFVTQiBkZXZpY2UgZW11bGF0aW9uIHVzaW5nIHNvbWV0aGluZyBsaWtlIFVTQiBnYWRnZXQgb3IgZHVtbXlfaGNkIGlmIGl0J3MgYSBVU0Igd2lyZWxlc3MgZGV2aWNlLiBNYXliZSwgaWYgaXQncyBQQ0ksIHdlIGhhdmUgc29tZXRoaW5nIHRvIHdvcmsgd2l0aCB0aGVyZS4gSXQncyByYXJlIHRvIGdldCBhIGRpcmVjdCBoaXQgb24gc3VjaCBhIHRhcmdldGVkIHBpZWNlIG9mIGhhcmR3YXJlIGluIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgc3BlY2lmaWMgZGV2aWNlIHBhc3N0aHJvdWdoIG9yIGNsZXZlciBlbXVsYXRpb24uXG5cblNvLCBmaXJzdCB0aGluZydzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBzdHJ1Y3R1cmUgb2YgdGhpcyBgcDU0YCBkcml2ZXIuIElzIGl0IFVTQj8gUENJPyBCdWlsdC1pbj8gVGhlbiBJIGNhbiBmb3JtIGEgc29saWQgaHlwb3RoZXNpcyBhYm91dCB3aGVuIGFuZCBob3cgdGhpcyBib3VuZHMgY2hlY2sgd291bGQgYWN0dWFsbHkgYmUgaGl0IGR1cmluZyB0ZXN0aW5nLCBmdXp6aW5nLCBvciBzZWN1cml0eSBhdWRpdHMuIFRoYXQncyB0aGUgY3J1Y2lhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjo0Ny45NTA3OTIyNjdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMzc3NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInA1NF9wYXJzZV9lZXByb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9Njk4PXN0YXRpYyBzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqcDU0X2NvbnZlcnRfZGIoc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciAqc3JjLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTcyNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM6NzI1OmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy03MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk1OC19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk1OTpFWFBPUlRfU1lNQk9MX0dQTChwNTRfcGFyc2VfZWVwcm9tKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz05NjE9aW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5ODk6XFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsIGVlcHJvbSwgb2Zmc2V0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTkwLWZyZWU6XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg9MjY5PWludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0Lmg6MjcwOmludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0LmgtMjcxLWludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYz0xNjI9c3RhdGljIGludCBwNTRzcGlfcmVxdWVzdF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHNwaS5jLTE3NC1cXHRcXHRkZXZfaW5mbyhcXHUwMDI2cHJpdi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJsb2FkaW5nIGRlZmF1bHQgZWVwcm9tLi4uXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmM6MTc1OlxcdFxcdHJldCA9IHA1NF9wYXJzZV9lZXByb20oZGV2LCAodm9pZCAqKSBwNTRzcGlfZWVwcm9tLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYy0xNzYtXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihwNTRzcGlfZWVwcm9tKSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTgxLVxcdFxcdGRldl9pbmZvKFxcdTAwMjZwcml2LVxcdTAwM2VzcGktXFx1MDAzZWRldiwgXFxcImxvYWRpbmcgdXNlciBlZXByb20uLi5cXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRzcGkuYzoxODI6XFx0XFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsICh2b2lkICopIGVlcHJvbS1cXHUwMDNlZGF0YSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0c3BpLmMtMTgzLVxcdFxcdFxcdFxcdCAgICAgICAoaW50KWVlcHJvbS1cXHUwMDNlc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjMyOjQ4LjEwMTE3NjIwNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzExNzI2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyB0aGUgRUVQUk9NIFJlYWQgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBwNTRfcGFyc2VfZWVwcm9tYCBpcyB0aGUgd29ya2hvcnNlIGhlcmUsIGFuZCBpdCdzIGNhbGxlZCBieSBib3RoIGBwNTRfcmVhZF9lZXByb21gIGFuZCBgcDU0c3BpX3JlcXVlc3RfZWVwcm9tYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IG9mIHRoZXNlIEVFUFJPTSBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkncmUgKmluaXRpYXRlZCouIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgYHA1NF9yZWFkX2VlcHJvbWAgaXMgY2FsbGVkIGZyb20uIEknbGwgc3RhcnQgdGhlcmUgYW5kIHNlZSB3aGVyZSBpdCBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTI1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzI6NTMuMDcyMzUzNDM5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg2Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfcmVhZF9lZXByb21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9OTU5PUVYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjk2MTppbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtOTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05OTMtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5OTQ6RVhQT1JUX1NZTUJPTF9HUEwocDU0X3JlYWRfZWVwcm9tKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaD0yNzA9aW50IHA1NF9wYXJzZV9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB2b2lkICplZXByb20sIGludCBsZW4pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaDoyNzE6aW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTQuaC0yNzItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmM9NDk2PXN0YXRpYyB2b2lkIHA1NHBfZmlybXdhcmVfc3RlcDIoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTRwY2kuYy01MTQtXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHBjaS5jOjUxNTpcXHRlcnIgPSBwNTRfcmVhZF9lZXByb20oZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0cGNpLmMtNTE2LVxcdHA1NHBfc3RvcChkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTg2Nz1zdGF0aWMgaW50IHA1NHVfc3RhcnRfb3BzKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo4OTY6XFx0cmV0ID0gcDU0X3JlYWRfZWVwcm9tKGRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTg5Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzozMjo1My4yMzIyMjMwMzZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDk4OTI3NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBgcDU0X3JlYWRfZWVwcm9tYCBpcyBjYWxsZWQgZnJvbSBgcDU0dXNiLmNgLCB3aGljaCBpcyBnb29kIHRvIGtub3cuIFRoaW5raW5nIGFib3V0IGhvdyBVU0IgZGV2aWNlcyBhcmUgZW11bGF0ZWQsIEkgc2VlIHRoYXQgd2UgaGF2ZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAuIFRoYXQgbWVhbnMgSSBzaG91bGQgYmUgYWJsZSB0byByZWFjaCB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cC4gTWFrZXMgdGhpbmdzIG11Y2ggbW9yZSBpbnRlcmVzdGluZy4gTm93IEknbGwgdGFrZSBhIGxvb2sgYXQgYHA1NHVfc3RhcnRfb3BzYCBpbiBgcDU0dXNiLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyBmdW5jdGlvbiBjYW4gYmUgbWFuaXB1bGF0ZWQgb3IgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Nzg2LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzM6MDAuMzMxMTUzODY3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzM3NzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTR1X3N0YXJ0X29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz04NTQ9c3RhdGljIGludCBwNTRfZmluZF90eXBlKHN0cnVjdCBwNTR1X3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtODY2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYzo4Njc6c3RhdGljIGludCBwNTR1X3N0YXJ0X29wcyhzdHJ1Y3QgcDU0dV9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy04Njgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jPTkxOT1zdGF0aWMgdm9pZCBwNTR1X2xvYWRfZmlybXdhcmVfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05MjgtXFx0XFx0cHJpdi1cXHUwMDNlZncgPSBmaXJtd2FyZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6OTI5OlxcdFxcdGVyciA9IHA1NHVfc3RhcnRfb3BzKHByaXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy05MzAtXFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6MzM6MDAuNDU4NTM4ODM2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAzMTIwNjAyOTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipGaXJtd2FyZSBMb2FkaW5nIHZpYSBVU0IgRW11bGF0aW9uKipcblxuT2theSwgc28gYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiBmaXJtd2FyZSBpcyBsb2FkZWQuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IGl0J3MgcmVhY2hhYmxlIHRocm91Z2ggdGhlIFVTQiBlbXVsYXRpb24gcGF0aHdheS4gVGhhdCdzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBzcGVjaWZpYyBhcmVhIHRvIGZvY3VzIG9uLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpcm13YXJlIGxvYWRpbmcgcHJvY2VzcyB3aXRoaW4gdGhhdCBVU0IgZW11bGF0aW9uIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgc2V0dGluZ3MsIHBhcmFtZXRlcnMsIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgZXNzZW50aWFsIHRvIG1ha2UgdGhpcyB3b3JrIGNvcnJlY3RseS4gTGV0IG1lIGRpZyBpbnRvIHRoZSBjb25maWdzIGFuZCBkb2N1bWVudGF0aW9uIHN1cnJvdW5kaW5nIHRoaXMgYW5kIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0MzowMy41NzkxNDU4MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDEyNjUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUDU0X1VTQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnPTI9Y29uZmlnIFA1NF9DT01NT05cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnOjE3OmNvbmZpZyBQNTRfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L0tjb25maWctMTgtXFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgVVNCIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQzOjAzLjY4OTI3ODg5NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDcwMTI2NTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgcHJvY2Vzc2luZyB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnYCBmaWxlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQNTQgS2NvbmZpZyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIHdpdGggdGhpcyBJbnRlcnNpbCBQNTQgd2lyZWxlc3MgZHJpdmVyIEtjb25maWcgZmlsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJJ20gZXhwZWN0aW5nIGEgY2xlYW4sIHdlbGwtc3RydWN0dXJlZCBjb25maWd1cmF0aW9uIHN5c3RlbSwgZm9sbG93aW5nIHRoZSBlc3RhYmxpc2hlZCBrZXJuZWwgY29udmVudGlvbnMuIEknbGwgYmUgbG9va2luZyBmb3IgYSBjbGVhciBoaWVyYXJjaHksIGxvZ2ljYWwgZGVwZW5kZW5jaWVzLCBhbmQgc2Vuc2libGUgZGVmYXVsdCB2YWx1ZXMuIFRoZSBgY29uZmlnYCBkaXJlY3RpdmVzLCBuYXR1cmFsbHksIGFyZSB3aGF0IEknbSBtb3N0IGludGVyZXN0ZWQgaW4uIEkgd2FudCB0byBzZWUgaG93IHRoZSB2YXJpb3VzIGZlYXR1cmVzIG9mIHRoaXMgZHJpdmVyIGFyZSBlbmFibGVkIGFuZCBkaXNhYmxlZCwgYW5kIHdoYXQga2luZCBvZiBncmFudWxhcml0eSB0aGUgZGV2ZWxvcGVycyBoYXZlIHByb3ZpZGVkLlxuXG5JJ20ga2VlcGluZyBhbiBleWUgb3V0IGZvciBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMg4oCTIGBkZXBlbmRzIG9uYCwgYHNlbGVjdGAsIGV0Yy4gVGhlc2UgYXJlIGNydWNpYWwuIFRoaXMgd2lsbCBkZW1vbnN0cmF0ZSBob3cgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIG9wdGlvbnMgaW50ZXJyZWxhdGUuIEFyZSB0aGVyZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzPyBBcmUgdGhlIGNob2ljZXMgY2xlYXJseSBleHBsYWluZWQ/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBsdXJraW5nIGluIHRoZSBzaGFkb3dzP1xuXG5UaGVuIEknbGwgc2NydXRpbml6ZSB0aGUgdmFyaW91cyBcImhlbHBcIiBzZWN0aW9ucy4gVGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbiBpbiB0aGVzZSBzZWN0aW9ucyBpcyBhIGdvb2QgaW5kaWNhdG9yIG9mIG92ZXJhbGwgY29kZSBxdWFsaXR5LiBBcmUgdGhlIGV4cGxhbmF0aW9ucyBjbGVhciwgY29uY2lzZSwgYW5kIGFjY3VyYXRlPyBEbyB0aGV5IG9mZmVyIGVub3VnaCBjb250ZXh0IGZvciBhIHVzZXIgdG8gbWFrZSBpbmZvcm1lZCBjaG9pY2VzPyBBcmUgdGhlcmUgYW55IGdvdGNoYXMgb3IgY2F2ZWF0cyBtZW50aW9uZWQ/XG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuIERvIHRoZXkgc2VlbSByZWFzb25hYmxlIGZvciB0aGUgZXhwZWN0ZWQgdXNlIGNhc2VzPyBBcmUgdGhleSBjb25maWd1cmFibGUgaW4gYSBzZW5zaWJsZSByYW5nZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBkZWZhdWx0cz8gSWRlYWxseSwgdGhleSBzaG91bGQgcHJpb3JpdGl6ZSBhIGJhbGFuY2UgYmV0d2VlbiBmdW5jdGlvbmFsaXR5IGFuZCBzZWN1cml0eSwgZGVmYXVsdGluZyB0byB0aGUgbW9yZSBzZWN1cmUgY29uZmlndXJhdGlvbiB3aGVyZSBwb3NzaWJsZS5cblxuRmluYWxseSwgSSdsbCBiZSBzY2FubmluZyBmb3IgYW55IHVudXN1YWwgb3Igbm9uLXN0YW5kYXJkIHByYWN0aWNlcy4gVGhpcyBjb3VsZCBiZSBhIHNpZ24gb2YgYSBkZWVwZXIgcHJvYmxlbSBvciBhbiBhcmVhIHRoYXQgcmVxdWlyZXMgbW9yZSBpbnZlc3RpZ2F0aW9uLiBBcmUgdGhlcmUgYW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzPyBBcmUgdGhlcmUgYW55IHVubmVjZXNzYXJ5IGNvbXBsZXhpdGllcz8gSXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZmlsZSB3ZWxsLW9yZ2FuaXplZCBhbmQgZWFzeSB0byBuYXZpZ2F0ZT8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGRyaXZlciBpcyBjb25maWd1cmVkIHRvIGVuc3VyZSB0aGF0IGl0IGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCB0aGF0IGl0IGludGVncmF0ZXMgc21vb3RobHkgaW50byBteSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2OTMsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0MzoyNC4zOTA1Njg4MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNjQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBQNTRfQ09NTU9OXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU29mdG1hYyBQcmlzbTU0IHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExXFxuICAgNTpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAgNjpcXHRcXHRzZWxlY3QgQ1JDX0NDSVRUXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIGlzbDM4eHgvc3RsYzQ1eHggYmFzZWQgbW9kdWxlcy5cXG4gICA5OlxcdFxcdCAgVGhpcyBtb2R1bGUgZG9lcyBub3RoaW5nIGJ5IGl0c2VsZiAtIHRoZSBVU0IvUENJL1NQSSBmcm9udC1lbmRzXFxuICAxMDpcXHRcXHQgIGFsc28gbmVlZCB0byBiZSBlbmFibGVkIGluIG9yZGVyIHRvIHN1cHBvcnQgYW55IGRldmljZXMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuICAxMzpcXHRcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0Y29tbW9uLlxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgUDU0X1VTQlxcbiAgMTg6XFx0XFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgVVNCIHN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgVVNCXFxuICAyMDpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFVTQiBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMjU6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICAyNjpcXHRcXG4gIDI3OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHVzYi5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIFA1NF9QQ0lcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFBDSSBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFBDSVxcbiAgMzI6XFx0XFx0aGVscFxcbiAgMzM6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3IgUENJIGlzbDM4eHggYmFzZWQgd2lyZWxlc3MgY2FyZHMuXFxuICAzNDpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIG1vc3QgZGV2aWNlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlXFxuICAzNTpcXHRcXHQgIGZ1bGxtYWMgcHJpc201NCBkcml2ZXIgcGx1cyBtYW55IGRldmljZXMgd2hpY2ggYXJlIG5vdFxcbiAgMzY6XFx0XFx0ICBzdXBwb3J0ZWQgYnkgdGhlIGZ1bGxtYWMgZHJpdmVyL2Zpcm13YXJlLlxcbiAgMzc6XFx0XFxuICAzODpcXHRcXHQgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0XFxuICAzOTpcXHRcXHQgIFxcdTAwM2NodHRwczovL3dpcmVsZXNzLmRvY3Mua2VybmVsLm9yZy9lbi9sYXRlc3QvZW4vdXNlcnMvZHJpdmVycy9wNTQuaHRtbFxcdTAwM2VcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0cGNpLlxcbiAgNDI6XFx0XFxuICA0MzpcXHRjb25maWcgUDU0X1NQSVxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIlByaXNtNTQgU1BJIChzdGxjNDV4eCkgc3VwcG9ydFxcXCJcXG4gIDQ1OlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBTUElfTUFTVEVSXFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBzdGxjNDU1MCBvciBzdGxjNDU2MCBiYXNlZCB3aXJlbGVzcyBjaGlwc1xcbiAgNDg6XFx0XFx0ICBzdWNoIGFzIE5va2lhJ3MgTjgwMC9OODEwIFBvcnRhYmxlIEludGVybmV0IFRhYmxldC5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgcDU0c3BpLlxcbiAgNTE6XFx0XFxuICA1MjpcXHRjb25maWcgUDU0X1NQSV9ERUZBVUxUX0VFUFJPTVxcbiAgNTM6XFx0XFx0Ym9vbCBcXFwiSW5jbHVkZSBmYWxsYmFjayBFRVBST00gYmxvYlxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gUDU0X1NQSVxcbiAgNTU6XFx0XFx0ZGVmYXVsdCBuXFxuICA1NjpcXHRcXHRoZWxwXFxuICA1NzpcXHRcXHQgVW5saWtlIHRoZSBQQ0kgb3IgVVNCIGRldmljZXMsIHRoZSBTUEkgdmFyaWFudHMgZG9uJ3QgaGF2ZVxcbiAgNTg6XFx0XFx0IGEgZGVkaWNhdGVkIEVFUFJPTSBjaGlwIHRvIHN0b3JlIGFsbCBkZXZpY2Ugc3BlY2lmaWMgdmFsdWVzXFxuICA1OTpcXHRcXHQgZm9yIGNhbGlicmF0aW9uLCBjb3VudHJ5IGFuZCBpbnRlcmZhY2Ugc2V0dGluZ3MuXFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdCBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIGltYWdlIFxcXCIzODI2LmVlcHJvbVxcXCIsIGlmIHRoZVxcbiAgNjI6XFx0XFx0IGZpbGUgaXMgcHV0IGF0IHRoZSByaWdodCBwbGFjZS4gKHVzdWFsbHkgL2xpYi9maXJtd2FyZS4pXFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdCBPbmx5IGlmIHRoaXMgcmVxdWVzdCBmYWlscywgdGhpcyBvcHRpb24gd2lsbCBwcm92aWRlIGFcXG4gIDY1OlxcdFxcdCBiYWNrdXAgc2V0IG9mIGdlbmVyaWMgdmFsdWVzIHRvIGdldCB0aGUgZGV2aWNlIHdvcmtpbmcuXFxuICA2NjpcXHRcXG4gIDY3OlxcdFxcdCBFbmFibGluZyB0aGlzIG9wdGlvbiBhZGRzIGFib3V0IDRrIHRvIHA1NHNwaS5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0Y29uZmlnIFA1NF9MRURTXFxuICA3MDpcXHRcXHRib29sXFxuICA3MTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgTUFDODAyMTFfTEVEUyBcXHUwMDI2XFx1MDAyNiAoTEVEU19DTEFTUyA9IHkgfHwgTEVEU19DTEFTUyA9IFA1NF9DT01NT04pXFxuICA3MjpcXHRcXHRkZWZhdWx0IHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6MjQuMzkzMTc4MTU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzNjI3ODczNDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBwNTQgVVNCIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgZGVmaW5pdGVseSBvbiBgUDU0X1VTQmAgYW5kIGBQNTRfQ09NTU9OYCwgd2l0aCBgTUFDODAyMTFgIGFzIGEgZGVwZW5kZW5jeS4gSSBzaG91bGQgcHJvYmFibHkgZW5hYmxlIGBQNTRfUENJYCBhbmQgYFA1NF9TUElgIGFzIHdlbGwsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIGJ1dCBgUDU0X1VTQmAgaXMgdGhlIHByaW1hcnkgdGFyZ2V0IGJlY2F1c2UgYHN5el91c2JfY29ubmVjdGAgaXMgaG93IHdlJ3JlIHJlYWNoaW5nIGl0LiBBaCwgSSBzZWUgdGhlIHBhdGNoIGlzIHNwZWNpZmljYWxseSB0b3VjaGluZyBgcDU0X3BhcnNlX2VlcHJvbWAg4oCTIHRoYXQncyBhIGtleSBkZXRhaWwuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSBpdHMgbG9jYXRpb247IGl0J3Mgd2l0aGluIGBwNTQvZWVwcm9tLmNgLiBOb3csIHRoZSBjcml0aWNhbCBxdWVzdGlvbiBpcywgaG93IGRvIHdlIHJlYWNoIGl0PyBBIHF1aWNrIHRyYWNlIGNvbmZpcm1zIHRoYXQgYHA1NF9yZWFkX2VlcHJvbWAgY2FsbHMgaXQsIHdoaWNoIGlzIGdvb2QuIE5vdywgd2hlcmUgaXMgYHA1NF9yZWFkX2VlcHJvbWAgdXNlZD8gQWxyaWdodCwgaXQncyBjYWxsZWQgZnJvbSBgcDU0dV9zdGFydF9vcHNgIGluIGBwNTR1c2IuY2AuIFRoYXQncyBwcm9ncmVzcy5cblxuTm93LCBgcDU0dV9zdGFydF9vcHNgIGlzIGNhbGxlZCBmcm9tIGBwNTR1X2xvYWRfZmlybXdhcmVfY2JgLiBPa2F5LCB0aGlzIGlzIGEgZmlybXdhcmUgY2FsbGJhY2suIEJpbmdvISBJZiBhIGZpcm13YXJlIGNhbGxiYWNrIGlzIGludm9sdmVkLCB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBhIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlcmVkIGR1cmluZyBmaXJtd2FyZSBsb2FkaW5nLiBEb2VzIGBzeXpfdXNiX2Nvbm5lY3RgIHBsYXkgYSByb2xlIGluIGZpcm13YXJlIGxvYWRpbmc/IEl0IGNvdWxkIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gdGhlIFVTQiBkZXZpY2UgaXMgcHJvYmVkLCBpdCBtaWdodCByZXF1ZXN0IG9yIHRyaWdnZXIgYSBmaXJtd2FyZSBsb2FkLiBMZXQncyBjb25maXJtIHRoYXQgYnkgY2hlY2tpbmcgYHA1NHVfcHJvYmVgIHdpdGhpbiBgcDU0dXNiLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6NDguMDIxMDU1NjA2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU0NzI1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0dV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz05NTM9c3RhdGljIGludCBwNTR1X2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jLTk4My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmM6OTg0OnN0YXRpYyBpbnQgcDU0dV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtOTg1LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYz0xMTI0PXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwNTR1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9wNTR1c2IuYy0xMTI2LVxcdC5pZF90YWJsZSA9IHA1NHVfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L3A1NHVzYi5jOjExMjc6XFx0LnByb2JlID0gcDU0dV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmMtMTEyOC1cXHQuZGlzY29ubmVjdCA9IHA1NHVfZGlzY29ubmVjdCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6NDguMTM2NTMzNTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTg4MTg4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIGBwNTR1X3Byb2JlYCBhbmQgYHA1NHVfbG9hZF9maXJtd2FyZWAqKlxuXG5SaWdodCwgbGV0J3MganVzdCBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBsaWtlbHkgc3RhdGUgb2YgYHA1NHVfcHJvYmVgIGFuZCBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBwNTR1IGRyaXZlciwgYW5kIHRob3NlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZW50cnkgcG9pbnRzLiBgcDU0dV9wcm9iZWAgaXMsIG9mIGNvdXJzZSwgd2hlcmUgdGhlIG1hZ2ljIHN0YXJ0cyDigJMgdGhlIGluaXRpYWwgZGV2aWNlIGRldGVjdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kIGxpa2VseSwgYSBmaXJzdCBjcmFjayBhdCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBQQ0kgZGV2aWNlIElEcyBhbmQgdGhlIHBvd2VyLXVwIHNlcXVlbmNlLCBtYWtpbmcgc3VyZSBpdCBkb2Vzbid0IGxlYXZlIGFueSBzdG9uZSB1bnR1cm5lZCBvbiByZXNvdXJjZSBjbGFpbWluZywgd2hpY2ggY291bGQgcmVzdWx0IGluIGEgbmFzdHkgbG9ja3VwLlxuXG5UaGVuLCB0aGVyZeKAmXMgYHA1NHVfbG9hZF9maXJtd2FyZWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgY29tcGxleGl0eSBvZnRlbiBsaXZlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGxvYWRzIHRoZSBjb3JyZWN0IGZpcm13YXJlIGltYWdlLCBoYW5kbGVzIHBvdGVudGlhbCB2ZXJzaW9uIG1pc21hdGNoZXMgZ3JhY2VmdWxseSAoZXJyb3IgaGFuZGxpbmcgaXMga2V5IGhlcmUpLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgdmVyaWZpZXMgdGhlIGludGVncml0eSBvZiB0aGUgbG9hZGVkIGZpcm13YXJlLiBDb3JydXB0aW9uIGNhbiBiZSBhIG5pZ2h0bWFyZSB0byBkZWJ1Zy4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaGFyZHdhcmUncyBmaXJtd2FyZSBsb2FkaW5nIG1lY2hhbmlzbS4gRG9lcyBpdCB1c2UgRE1BPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3dzIG9yIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gSSdsbCBwcm9iYWJseSB3YW50IHRvIGRvdWJsZS1jaGVjayBob3cgaXQgaGFuZGxlcyBmaXJtd2FyZSBsb2FkaW5nIGVycm9yczsgd2hhdCdzIHRoZSByZWNvdmVyeSBwYXRoIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nPyBBcmUgdGhlcmUgYW55IHJldHJ5IG1lY2hhbmlzbXM/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpc3N1ZXMgaGVyZSBjb3VsZCBjYXVzZSBib290IGZhaWx1cmVzIG9yIGVycmF0aWMgYmVoYXZpb3IgZG93biB0aGUgcm9hZC4gQWxyaWdodCwgdGhhdCdzIHRoZSBtZW50YWwgY2hlY2tsaXN0IGZvciB0aG9zZSB0d28uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODMyMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQzOjUyLjI5NTM1NTQxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvcDU0dXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUzLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1MzpcXHRzdGF0aWMgaW50IHA1NHVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsXFxuIDk1NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4gOTU1OlxcdHtcXG4gOTU2OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTtcXG4gOTU3OlxcdFxcdHN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuIDk1ODpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSBcXHUwMDI2dWRldi1cXHUwMDNlZGV2O1xcbiA5NTk6XFx0XFx0aW50IGVyciwgaTtcXG4gOTYwOlxcdFxcbiA5NjE6XFx0XFx0QlVJTERfQlVHX09OKEFSUkFZX1NJWkUocDU0dV9md2xpc3QpICE9IF9fTlVNX1A1NFVfSFdUWVBFUyk7XFxuIDk2MjpcXHRcXG4gOTYzOlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2cHJpdi1cXHUwMDNlZndfd2FpdF9sb2FkKTtcXG4gOTY0OlxcdFxcdGkgPSBwNTRfZmluZF90eXBlKHByaXYpO1xcbiA5NjU6XFx0XFx0aWYgKGkgXFx1MDAzYyAwKVxcbiA5NjY6XFx0XFx0XFx0cmV0dXJuIGk7XFxuIDk2NzpcXHRcXG4gOTY4OlxcdFxcdGRldl9pbmZvKFxcdTAwMjZwcml2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXYsIFxcXCJMb2FkaW5nIGZpcm13YXJlIGZpbGUgJXNcXFxcblxcXCIsXFxuIDk2OTpcXHRcXHQgICAgICAgcDU0dV9md2xpc3RbaV0uZncpO1xcbiA5NzA6XFx0XFxuIDk3MTpcXHRcXHR1c2JfZ2V0X2ludGYoaW50Zik7XFxuIDk3MjpcXHRcXHRlcnIgPSByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdChUSElTX01PRFVMRSwgMSwgcDU0dV9md2xpc3RbaV0uZncsXFxuIDk3MzpcXHRcXHRcXHRcXHRcXHQgICAgICBkZXZpY2UsIEdGUF9LRVJORUwsIHByaXYsXFxuIDk3NDpcXHRcXHRcXHRcXHRcXHQgICAgICBwNTR1X2xvYWRfZmlybXdhcmVfY2IpO1xcbiA5NzU6XFx0XFx0aWYgKGVycikge1xcbiA5NzY6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNldWRldi1cXHUwMDNlZGV2LCBcXFwiKHA1NHVzYikgY2Fubm90IGxvYWQgZmlybXdhcmUgJXMgXFxcIlxcbiA5Nzc6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXFwiKCVkKSFcXFxcblxcXCIsIHA1NHVfZndsaXN0W2ldLmZ3LCBlcnIpO1xcbiA5Nzg6XFx0XFx0XFx0dXNiX3B1dF9pbnRmKGludGYpO1xcbiA5Nzk6XFx0XFx0fVxcbiA5ODA6XFx0XFxuIDk4MTpcXHRcXHRyZXR1cm4gZXJyO1xcbiA5ODI6XFx0fVxcbiA5ODM6XFx0XFxuIDk4NDpcXHRzdGF0aWMgaW50IHA1NHVfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuIDk4NTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuIDk4NjpcXHR7XFxuIDk4NzpcXHRcXHRzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7XFxuIDk4ODpcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXY7XFxuIDk4OTpcXHRcXHRzdHJ1Y3QgcDU0dV9wcml2ICpwcml2O1xcbiA5OTA6XFx0XFx0aW50IGVycjtcXG4gOTkxOlxcdFxcdHVuc2lnbmVkIGludCBpLCByZWNvZ25pemVkX3BpcGVzO1xcbiA5OTI6XFx0XFxuIDk5MzpcXHRcXHRkZXYgPSBwNTRfaW5pdF9jb21tb24oc2l6ZW9mKCpwcml2KSk7XFxuIDk5NDpcXHRcXG4gOTk1OlxcdFxcdGlmICghZGV2KSB7XFxuIDk5NjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1ZGV2LVxcdTAwM2VkZXYsIFxcXCIocDU0dXNiKSBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXFxcXG5cXFwiKTtcXG4gOTk3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5OTg6XFx0XFx0fVxcbiA5OTk6XFx0XFxuMTAwMDpcXHRcXHRwcml2ID0gZGV2LVxcdTAwM2Vwcml2O1xcbjEwMDE6XFx0XFx0cHJpdi1cXHUwMDNlaHdfdHlwZSA9IFA1NFVfSU5WQUxJRF9IVztcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0U0VUX0lFRUU4MDIxMV9ERVYoZGV2LCBcXHUwMDI2aW50Zi1cXHUwMDNlZGV2KTtcXG4xMDA0OlxcdFxcdHVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTtcXG4xMDA1OlxcdFxcdHByaXYtXFx1MDAzZXVkZXYgPSB1ZGV2O1xcbjEwMDY6XFx0XFx0cHJpdi1cXHUwMDNlaW50ZiA9IGludGY7XFxuMTAwNzpcXHRcXHRza2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VyeF9xdWV1ZSk7XFxuMTAwODpcXHRcXHRpbml0X3VzYl9hbmNob3IoXFx1MDAyNnByaXYtXFx1MDAzZXN1Ym1pdHRlZCk7XFxuMTAwOTpcXHRcXG4xMDEwOlxcdFxcdC8qIHJlYWxseSBsYXp5IGFuZCBzaW1wbGUgd2F5IG9mIGZpZ3VyaW5nIG91dCBpZiB3ZSdyZSBhIDM4ODcgKi9cXG4xMDExOlxcdFxcdC8qIFRPRE86IHNob3VsZCBqdXN0IHN0aWNrIHRoZSBpZGVudGlmaWNhdGlvbiBpbiB0aGUgZGV2aWNlIHRhYmxlICovXFxuMTAxMjpcXHRcXHRpID0gaW50Zi1cXHUwMDNlYWx0c2V0dGluZy1cXHUwMDNlZGVzYy5iTnVtRW5kcG9pbnRzO1xcbjEwMTM6XFx0XFx0cmVjb2duaXplZF9waXBlcyA9IDA7XFxuMTAxNDpcXHRcXHR3aGlsZSAoaS0tKSB7XFxuMTAxNTpcXHRcXHRcXHRzd2l0Y2ggKGludGYtXFx1MDAzZWFsdHNldHRpbmctXFx1MDAzZWVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcykge1xcbjEwMTY6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfREFUQTpcXG4xMDE3OlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX01HTVQ6XFxuMTAxODpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9CUkc6XFxuMTAxOTpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9ERVY6XFxuMTAyMDpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9EQVRBIHwgVVNCX0RJUl9JTjpcXG4xMDIxOlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX01HTVQgfCBVU0JfRElSX0lOOlxcbjEwMjI6XFx0XFx0XFx0Y2FzZSBQNTRVX1BJUEVfQlJHIHwgVVNCX0RJUl9JTjpcXG4xMDIzOlxcdFxcdFxcdGNhc2UgUDU0VV9QSVBFX0RFViB8IFVTQl9ESVJfSU46XFxuMTAyNDpcXHRcXHRcXHRjYXNlIFA1NFVfUElQRV9JTlQgfCBVU0JfRElSX0lOOlxcbjEwMjU6XFx0XFx0XFx0XFx0cmVjb2duaXplZF9waXBlcysrO1xcbjEwMjY6XFx0XFx0XFx0fVxcbjEwMjc6XFx0XFx0fVxcbjEwMjg6XFx0XFx0cHJpdi1cXHUwMDNlY29tbW9uLm9wZW4gPSBwNTR1X29wZW47XFxuMTAyOTpcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24uc3RvcCA9IHA1NHVfc3RvcDtcXG4xMDMwOlxcdFxcdGlmIChyZWNvZ25pemVkX3BpcGVzIFxcdTAwM2MgUDU0VV9QSVBFX05VTUJFUikge1xcbjEwMzE6XFx0I2lmZGVmIENPTkZJR19QTVxcbjEwMzI6XFx0XFx0XFx0LyogSVNMMzg4NyBuZWVkcyBhIGZ1bGwgcmVzZXQgb24gcmVzdW1lICovXFxuMTAzMzpcXHRcXHRcXHR1ZGV2LVxcdTAwM2VyZXNldF9yZXN1bWUgPSAxO1xcbjEwMzQ6XFx0I2VuZGlmIC8qIENPTkZJR19QTSAqL1xcbjEwMzU6XFx0XFx0XFx0ZXJyID0gcDU0dV9kZXZpY2VfcmVzZXQoZGV2KTtcXG4xMDM2OlxcdFxcbjEwMzc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlaHdfdHlwZSA9IFA1NFVfMzg4NztcXG4xMDM4OlxcdFxcdFxcdGRldi1cXHUwMDNlZXh0cmFfdHhfaGVhZHJvb20gKz0gc2l6ZW9mKHN0cnVjdCBsbTg3X3R4X2hkcik7XFxuMTAzOTpcXHRcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24udHhfaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgbG04N190eF9oZHIpO1xcbjEwNDA6XFx0XFx0XFx0cHJpdi1cXHUwMDNlY29tbW9uLnR4ID0gcDU0dV90eF9sbTg3O1xcbjEwNDE6XFx0XFx0XFx0cHJpdi1cXHUwMDNldXBsb2FkX2Z3ID0gcDU0dV91cGxvYWRfZmlybXdhcmVfMzg4NztcXG4xMDQyOlxcdFxcdH0gZWxzZSB7XFxuMTA0MzpcXHRcXHRcXHRwcml2LVxcdTAwM2Vod190eXBlID0gUDU0VV9ORVQyMjgwO1xcbjEwNDQ6XFx0XFx0XFx0ZGV2LVxcdTAwM2VleHRyYV90eF9oZWFkcm9vbSArPSBzaXplb2Yoc3RydWN0IG5ldDIyODBfdHhfaGRyKTtcXG4xMDQ1OlxcdFxcdFxcdHByaXYtXFx1MDAzZWNvbW1vbi50eF9oZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXQyMjgwX3R4X2hkcik7XFxuMTA0NjpcXHRcXHRcXHRwcml2LVxcdTAwM2Vjb21tb24udHggPSBwNTR1X3R4X25ldDIyODA7XFxuMTA0NzpcXHRcXHRcXHRwcml2LVxcdTAwM2V1cGxvYWRfZncgPSBwNTR1X3VwbG9hZF9maXJtd2FyZV9uZXQyMjgwO1xcbjEwNDg6XFx0XFx0fVxcbjEwNDk6XFx0XFx0ZXJyID0gcDU0dV9sb2FkX2Zpcm13YXJlKGRldiwgaW50Zik7XFxuMTA1MDpcXHRcXHRpZiAoZXJyKVxcbjEwNTE6XFx0XFx0XFx0cDU0X2ZyZWVfY29tbW9uKGRldik7XFxuMTA1MjpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0Mzo1Mi4yOTU1NjY3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjA1NTQxNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBwNTR1IEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBwNTR1X3Byb2JlYCBraWNrcyBvZmYgdGhlIGZpcm13YXJlIGxvYWRpbmcgc2VxdWVuY2UgYnkgY2FsbGluZyBgcDU0dV9sb2FkX2Zpcm13YXJlYC4gVGhhdCB0aGVuIGNhbGxzIGByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdGAsIHdoaWNoIGlzIHN0YW5kYXJkIHByb2NlZHVyZS4gU28gZmFyLCBzbyBnb29kLiBUaGVuLCB3aGVuIHRoZSBmaXJtd2FyZSdzIGFjdHVhbGx5IGxvYWRlZCwgYHA1NHVfbG9hZF9maXJtd2FyZV9jYmAgZ2V0cyBpbnZva2VkLiBUaGF0IGZ1bmN0aW9uIHRoZW4gdHJpZ2dlcnMgYHA1NHVfc3RhcnRfb3BzYCwgd2hpY2ggaXRzZWxmIGNhbGxzIGBwNTRfcmVhZF9lZXByb21gLiBGaW5hbGx5LCB3ZSBnZXQgdG8gYHA1NF9wYXJzZV9lZXByb21gLiBTbywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIHdob2xlIGZsb3cgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgd2hlbiB3ZSB1c2UgYHN5el91c2JfY29ubmVjdGAgYW5kIG1hbmFnZSB0byBnZXQgdGhlIGZpcm13YXJlIHRvIGxvYWQuIEJ1dCwgaGFuZyBvbiBhIHNlY29uZC4gVGhpcyBpcyBpbXBvcnRhbnQuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCB3aGF0IGV4YWN0bHkgaXMgYHA1NF9yZWFkX2VlcHJvbWAgZG9pbmc/IElzIGl0IHJlYWRpbmcgdGhlIEVFUFJPTSBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZSBpdHNlbGYsIG9yIGlzIGl0IHBhcnNpbmcgZGF0YSBmcm9tIHRoZSAqbG9hZGVkIGZpcm13YXJlKj8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGBwNTRfcmVhZF9lZXByb21gIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTI1LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDM6NTcuOTAxMTE0MDk3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTYxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTYxOlxcdGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KVxcbiA5NjI6XFx0e1xcbiA5NjM6XFx0XFx0c3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtXFx1MDAzZXByaXY7XFxuIDk2NDpcXHRcXHRzaXplX3QgZWVwcm9tX3NpemUgPSAweDIwMjAsIG9mZnNldCA9IDAsIGJsb2Nrc2l6ZSwgbWF4YmxvY2tzaXplO1xcbiA5NjU6XFx0XFx0aW50IHJldCA9IC1FTk9NRU07XFxuIDk2NjpcXHRcXHR2b2lkICplZXByb207XFxuIDk2NzpcXHRcXG4gOTY4OlxcdFxcdG1heGJsb2Nrc2l6ZSA9IEVFUFJPTV9SRUFEQkFDS19MRU47XFxuIDk2OTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlZndfdmFyIFxcdTAwM2U9IDB4NTA5KVxcbiA5NzA6XFx0XFx0XFx0bWF4YmxvY2tzaXplIC09IDB4YztcXG4gOTcxOlxcdFxcdGVsc2VcXG4gOTcyOlxcdFxcdFxcdG1heGJsb2Nrc2l6ZSAtPSAweDQ7XFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdGVlcHJvbSA9IGt6YWxsb2MoZWVwcm9tX3NpemUsIEdGUF9LRVJORUwpO1xcbiA5NzU6XFx0XFx0aWYgKHVubGlrZWx5KCFlZXByb20pKVxcbiA5NzY6XFx0XFx0XFx0Z290byBmcmVlO1xcbiA5Nzc6XFx0XFxuIDk3ODpcXHRcXHR3aGlsZSAoZWVwcm9tX3NpemUpIHtcXG4gOTc5OlxcdFxcdFxcdGJsb2Nrc2l6ZSA9IG1pbihlZXByb21fc2l6ZSwgbWF4YmxvY2tzaXplKTtcXG4gOTgwOlxcdFxcdFxcdHJldCA9IHA1NF9kb3dubG9hZF9lZXByb20ocHJpdiwgZWVwcm9tICsgb2Zmc2V0LFxcbiA5ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICBvZmZzZXQsIGJsb2Nrc2l6ZSk7XFxuIDk4MjpcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSlcXG4gOTgzOlxcdFxcdFxcdFxcdGdvdG8gZnJlZTtcXG4gOTg0OlxcdFxcbiA5ODU6XFx0XFx0XFx0b2Zmc2V0ICs9IGJsb2Nrc2l6ZTtcXG4gOTg2OlxcdFxcdFxcdGVlcHJvbV9zaXplIC09IGJsb2Nrc2l6ZTtcXG4gOTg3OlxcdFxcdH1cXG4gOTg4OlxcdFxcbiA5ODk6XFx0XFx0cmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsIGVlcHJvbSwgb2Zmc2V0KTtcXG4gOTkwOlxcdGZyZWU6XFxuIDk5MTpcXHRcXHRrZnJlZShlZXByb20pO1xcbiA5OTI6XFx0XFx0cmV0dXJuIHJldDtcXG4gOTkzOlxcdH1cXG4gOTk0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWFkX2VlcHJvbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQzOjU3LjkwMTMxMDkxN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQyNTEwNTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgRUVQUk9NIERvd25sb2FkIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29yZSBvZiB0aGUgb3BlcmF0aW9uIHNlZW1zIHRvIGJlIHRoZSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAgZnVuY3Rpb24gY2FsbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgc2VlIHByZWNpc2VseSB3aGF0J3MgZ29pbmcgb24uXCIgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggdGhlIGRldmljZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdywgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2xzIGJlaW5nIHVzZWQsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgdGhhdCdzIGltcGxlbWVudGVkIHdpdGhpbiBgcDU0X2Rvd25sb2FkX2VlcHJvbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzY29wZSBvZiBpdC4gSXMgdGhpcyByZXNwb25zaWJsZSBmb3IganVzdCB0aGUgaW5pdGlhbCByZWFkLCBvciBpcyB0aGVyZSBtb3JlIGludm9sdmVkPyBBbnkga2luZCBvZiBhbmFseXNpcyB3b3VsZCBiZSBsaW1pdGVkIHdpdGhvdXQgcHJvcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvcmUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTAwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDowMi40NDM4NDM0ODhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTQzNTc5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwNTRfZG93bmxvYWRfZWVwcm9tXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jPTk2MT1pbnQgcDU0X3JlYWRfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYy05NzktXFx0XFx0YmxvY2tzaXplID0gbWluKGVlcHJvbV9zaXplLCBtYXhibG9ja3NpemUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo5ODA6XFx0XFx0cmV0ID0gcDU0X2Rvd25sb2FkX2VlcHJvbShwcml2LCBlZXByb20gKyBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTk4MS1cXHRcXHRcXHRcXHRcXHQgIG9mZnNldCwgYmxvY2tzaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM9MTg0PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcDU0X2FsbG9jX3NrYihzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTE2IGhkcl9mbGFncyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmMtMjA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmM6MjEwOmludCBwNTRfZG93bmxvYWRfZWVwcm9tKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB2b2lkICpidWYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2Z3aW8uYy0yMTEtXFx0XFx0XFx0dTE2IG9mZnNldCwgdTE2IGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmg9NTQ4PWludCBwNTRfdXBsb2FkX2tleShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdTggYWxnbywgaW50IHNsb3QsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oLTU1MS0vKiBlZXByb20gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvbG1hYy5oOjU1MjppbnQgcDU0X2Rvd25sb2FkX2VlcHJvbShzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiwgdm9pZCAqYnVmLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9sbWFjLmgtNTUzLVxcdFxcdFxcdHUxNiBvZmZzZXQsIHUxNiBsZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDowMi41ODUyODU4MDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5OTY4NzQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIERvd25sb2FkKipcblxuT2theSwgc28gd2UndmUgZ290IGBwNTRfZG93bmxvYWRfZWVwcm9tYCBhbmQgbXkgZ3V0IHRlbGxzIG1lIGl0J3Mga2V5IGluIHRoaXMgZW50aXJlIGZpcm13YXJlIHByb2Nlc3MuIEkga25vdyBpdCBzZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGRldmljZSBhbmQgdGhlbiBqdXN0Li4ud2FpdHMgZm9yIHRoYXQgcmVzcG9uc2UuIE1ha2VzIHNlbnNlLiBUeXBpY2FsIHByb3RvY29sLiBSaWdodCwgbGV0J3MganVzdCBtYWtlIHN1cmUgdGhpcyBpcyB3aGF0IEkgZXhwZWN0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIGNvbW11bmljYXRpb24uIFdoZXJlIGRvIEkgc3RhcnQ/IEFoLCByaWdodCwgdGhhdCdzIGluIGBmd2lvLmNgLiBMZXQncyBkaWcgaW50byB0aGF0IGZ1bmN0aW9uIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgY29ycmVjdCBwbGFjZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBsb29raW5nIGF0IGFueSBwb3RlbnRpYWwgZXJyb3IgY2hlY2tpbmcgYW5kIHRpbWVvdXQgaGFuZGxpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzIsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDowNi45ODQ5NzcxNThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9md2lvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjEwOlxcdGludCBwNTRfZG93bmxvYWRfZWVwcm9tKHN0cnVjdCBwNTRfY29tbW9uICpwcml2LCB2b2lkICpidWYsXFxuIDIxMTpcXHRcXHRcXHRcXHR1MTYgb2Zmc2V0LCB1MTYgbGVuKVxcbiAyMTI6XFx0e1xcbiAyMTM6XFx0XFx0c3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjtcXG4gMjE0OlxcdFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIDIxNTpcXHRcXHRzaXplX3QgZWVwcm9tX2hkcl9zaXplO1xcbiAyMTY6XFx0XFx0aW50IHJldCA9IDA7XFxuIDIxNzpcXHRcXHRsb25nIHRpbWVfbGVmdDtcXG4gMjE4OlxcdFxcbiAyMTk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWZ3X3ZhciBcXHUwMDNlPSAweDUwOSlcXG4gMjIwOlxcdFxcdFxcdGVlcHJvbV9oZHJfc2l6ZSA9IHNpemVvZigqZWVwcm9tX2hkcik7XFxuIDIyMTpcXHRcXHRlbHNlXFxuIDIyMjpcXHRcXHRcXHRlZXByb21faGRyX3NpemUgPSAweDQ7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdHNrYiA9IHA1NF9hbGxvY19za2IocHJpdiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIGVlcHJvbV9oZHJfc2l6ZSArXFxuIDIyNTpcXHRcXHRcXHRcXHQgICAgbGVuLCBQNTRfQ09OVFJPTF9UWVBFX0VFUFJPTV9SRUFEQkFDSyxcXG4gMjI2OlxcdFxcdFxcdFxcdCAgICBHRlBfS0VSTkVMKTtcXG4gMjI3OlxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gMjI4OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VlZXByb21fbXV0ZXgpO1xcbiAyMzE6XFx0XFx0cHJpdi1cXHUwMDNlZWVwcm9tID0gYnVmO1xcbiAyMzI6XFx0XFx0cHJpdi1cXHUwMDNlZWVwcm9tX3NsaWNlX3NpemUgPSBsZW47XFxuIDIzMzpcXHRcXHRlZXByb21faGRyID0gc2tiX3B1dChza2IsIGVlcHJvbV9oZHJfc2l6ZSArIGxlbik7XFxuIDIzNDpcXHRcXG4gMjM1OlxcdFxcdGlmIChwcml2LVxcdTAwM2Vmd192YXIgXFx1MDAzYyAweDUwOSkge1xcbiAyMzY6XFx0XFx0XFx0ZWVwcm9tX2hkci1cXHUwMDNldjEub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTtcXG4gMjM3OlxcdFxcdFxcdGVlcHJvbV9oZHItXFx1MDAzZXYxLmxlbiA9IGNwdV90b19sZTE2KGxlbik7XFxuIDIzODpcXHRcXHR9IGVsc2Uge1xcbiAyMzk6XFx0XFx0XFx0ZWVwcm9tX2hkci1cXHUwMDNldjIub2Zmc2V0ID0gY3B1X3RvX2xlMzIob2Zmc2V0KTtcXG4gMjQwOlxcdFxcdFxcdGVlcHJvbV9oZHItXFx1MDAzZXYyLmxlbiA9IGNwdV90b19sZTE2KGxlbik7XFxuIDI0MTpcXHRcXHRcXHRlZXByb21faGRyLVxcdTAwM2V2Mi5tYWdpYzIgPSAweGY7XFxuIDI0MjpcXHRcXHRcXHRtZW1jcHkoZWVwcm9tX2hkci1cXHUwMDNldjIubWFnaWMsIChjb25zdCBjaGFyICopXFxcIkxPQ0tcXFwiLCA0KTtcXG4gMjQzOlxcdFxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cDU0X3R4KHByaXYsIHNrYik7XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KFxcbiAyNDg6XFx0XFx0XFx0XFx0XFx1MDAyNnByaXYtXFx1MDAzZWVlcHJvbV9jb21wLCBIWik7XFxuIDI0OTpcXHRcXHRpZiAodGltZV9sZWZ0IFxcdTAwM2M9IDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MDYuOTg1MjEwOTM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTI2ODMxOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFRVBST00gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkgc2VlIGhvdyB0aGlzIGlzIHdvcmtpbmcuIFRoZSBwcm9jZXNzIGdvZXMgbGlrZSB0aGlzOiBhIGNvbW1hbmQgaXMgc2VudCB0byB0aGUgZGV2aWNlLCBpdCB3YWl0cyBmb3IgYSByZXNwb25zZS4gVGhlIHJlc3BvbnNlIGNvbWVzIGluIGFuZCBpcyBoYW5kbGVkIGJ5IGFuIGludGVycnVwdCByb3V0aW5lIG9yIFJYIGhhbmRsZXIg4oCTIHR5cGljYWwuIFRoaXMgcm91dGluZSB0aGVuIGNvcGllcyBkYXRhIGludG8gYHByaXYtXHUwMDNlZWVwcm9tYCBhbmQgY29tcGxldGVzIGBwcml2LVx1MDAzZWVlcHJvbV9jb21wYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoZSBkZXZpY2UgKmNhbiogYmUgZW11bGF0ZWQsIHdoaWNoIG1lYW5zIHRoZSByZXNwb25zZSwgYW5kIHRoZXJlZm9yZSB0aGUgRUVQUk9NIGRhdGEsIGlzIGZ1bGx5IHVuZGVyIGFuIGF0dGFja2VyJ3MgY29udHJvbC4gVGhhdCdzIGEgaHVnZSByZWQgZmxhZy5cblxuVGhlIHBhdGNoIGltcGxlbWVudHMgYm91bmRzIGNoZWNraW5nIHdpdGhpbiBgcDU0X3BhcnNlX2VlcHJvbWAsIHdoaWNoIHNvdW5kcyBsaWtlIGl0J3MgYWRkcmVzc2luZyBzb21ldGhpbmcuIFRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcg4oCTIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGZvciBhIHJlYWxseSBuYXN0eSBidWcgaGVyZS5cblxuVGltZSB0byBpZGVudGlmeSBzb21lIGludGVyZXN0aW5nIHN5bWJvbHMuIGBwNTRfcGFyc2VfZWVwcm9tYCBpcyB0aGUgcHJpbWFyeSB0YXJnZXQsIG9idmlvdXNseS4gYHA1NF9yZWFkX2VlcHJvbWAgYWxzbyBsb29rcyBwcm9taXNpbmcuIEkgYWxzbyBzZWUgYHA1NF9jb252ZXJ0X3JldjBgIGFuZCBgcDU0X2NvbnZlcnRfcmV2MWAg4oCTIHRob3NlIGxvb2sgbGlrZSB0aGV5J3JlIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBlZXByb20uY2AsIHdoaWNoIGNvdWxkIGJlIHVzZWQgdG8gb2JmdXNjYXRlIHRoZSB3b3JraW5ncy4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhleSdyZSBhY3R1YWxseSBzdGF0aWMuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjA0LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MjIuMTEyMDQ3MDMxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUxNzQzMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicDU0X2NvbnZlcnRfcmV2MFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYz0zMTk9c3RhdGljIGludCBwNTRfZ2VuZXJhdGVfY2hhbm5lbF9saXN0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uYzo0MTY6c3RhdGljIGludCBwNTRfY29udmVydF9yZXYwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMtNDE3LVxcdFxcdFxcdCAgICBzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmM9NzI1PWludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4MS1cXHRcXHRcXHRcXHR9XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jOjc4MjpcXHRcXHRcXHRcXHRlcnIgPSBwNTRfY29udmVydF9yZXYwKGRldiwgY3VydmVfZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L2VlcHJvbS5jLTc4My1cXHRcXHRcXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MjIuMjY3MjI4MTE5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNDM1Njc5NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBwNTRfcGFyc2VfZWVwcm9tIEZ1bmN0aW9uIGFuZCBpdHMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCwgdGhlIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoaXMgYXJlIHN0YXRpYy4gVGhhdCdzIGdvb2QgdG8ga25vdy4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYHA1NF9wYXJzZV9lZXByb21gIGZ1bmN0aW9uIOKAkyB0aGF0J3MgdGhlIGNlbnRyYWwgc3ltYm9sIEkgbmVlZCB0byB1bmRlcnN0YW5kLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBjb25maWd1cmF0aW9ucy4gVGhlIGZpcnN0IG9uZSBJIG5lZWQgdG8gdmVyaWZ5IGlzIGBQNTRfVVNCYC4gVGhhdCdzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gaXRlbSwgSSBhc3N1bWUuIE9rYXksIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcmVsYXRpb25zaGlwcyBoZXJlLiBBaCwgaXQgbG9va3MgbGlrZSBgUDU0X0NPTU1PTmAgaXMgKm5vdCogc2VsZWN0ZWQgKmJ5KiBgUDU0X1VTQmAsIGJ1dCByYXRoZXIgYFA1NF9VU0JgICpkZXBlbmRzKiBvbiBgUDU0X0NPTU1PTmAuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBLY29uZmlnIGZpbGUgZm9yIGBQNTRfVVNCYCB0byBjb25maXJtIGFuZCBlbnN1cmUgSSBoYXZlIHRoZSBkZXBlbmRlbmN5IHRyZWUgY29ycmVjdCBpbiBteSBoZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA0MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0NDoyNy41MTA4MDA3ODFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgUDU0X0NPTU1PTlxcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlNvZnRtYWMgUHJpc201NCBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDU6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgIDY6XFx0XFx0c2VsZWN0IENSQ19DQ0lUVFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBUaGlzIGlzIGNvbW1vbiBjb2RlIGZvciBpc2wzOHh4L3N0bGM0NXh4IGJhc2VkIG1vZHVsZXMuXFxuICAgOTpcXHRcXHQgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kc1xcbiAgMTA6XFx0XFx0ICBhbHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBpbiBvcmRlciB0byBzdXBwb3J0IGFueSBkZXZpY2VzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIFRoZXNlIGRldmljZXMgcmVxdWlyZSBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMTM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NGNvbW1vbi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFA1NF9VU0JcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFVTQiBzdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBQNTRfQ09NTU9OIFxcdTAwMjZcXHUwMDI2IFVTQlxcbiAgMjA6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMTpcXHRcXHRoZWxwXFxuICAyMjpcXHRcXHQgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXRcXG4gIDI1OlxcdFxcdCAgXFx1MDAzY2h0dHBzOi8vd2lyZWxlc3MuZG9jcy5rZXJuZWwub3JnL2VuL2xhdGVzdC9lbi91c2Vycy9kcml2ZXJzL3A1NC5odG1sXFx1MDAzZVxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTR1c2IuXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBQNTRfUENJXFxuICAzMDpcXHRcXHR0cmlzdGF0ZSBcXFwiUHJpc201NCBQQ0kgc3VwcG9ydFxcXCJcXG4gIDMxOlxcdFxcdGRlcGVuZHMgb24gUDU0X0NPTU1PTiBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgZm9yIFBDSSBpc2wzOHh4IGJhc2VkIHdpcmVsZXNzIGNhcmRzLlxcbiAgMzQ6XFx0XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBtb3N0IGRldmljZXMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5IHRoZVxcbiAgMzU6XFx0XFx0ICBmdWxsbWFjIHByaXNtNTQgZHJpdmVyIHBsdXMgbWFueSBkZXZpY2VzIHdoaWNoIGFyZSBub3RcXG4gIDM2OlxcdFxcdCAgc3VwcG9ydGVkIGJ5IHRoZSBmdWxsbWFjIGRyaXZlci9maXJtd2FyZS5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUaGlzIGRyaXZlciByZXF1aXJlcyBzb2Z0bWFjIGZpcm13YXJlIHdoaWNoIGNhbiBiZSBmb3VuZCBhdFxcbiAgMzk6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93aXJlbGVzcy5kb2NzLmtlcm5lbC5vcmcvZW4vbGF0ZXN0L2VuL3VzZXJzL2RyaXZlcnMvcDU0Lmh0bWxcXHUwMDNlXFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHBjaS5cXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIFA1NF9TUElcXG4gIDQ0OlxcdFxcdHRyaXN0YXRlIFxcXCJQcmlzbTU0IFNQSSAoc3RsYzQ1eHgpIHN1cHBvcnRcXFwiXFxuICA0NTpcXHRcXHRkZXBlbmRzIG9uIFA1NF9DT01NT04gXFx1MDAyNlxcdTAwMjYgU1BJX01BU1RFUlxcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBmb3Igc3RsYzQ1NTAgb3Igc3RsYzQ1NjAgYmFzZWQgd2lyZWxlc3MgY2hpcHNcXG4gIDQ4OlxcdFxcdCAgc3VjaCBhcyBOb2tpYSdzIE44MDAvTjgxMCBQb3J0YWJsZSBJbnRlcm5ldCBUYWJsZXQuXFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHNwaS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MjcuNTEwOTk0NjAxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5NDU4NTAxNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSBmb3IgdGhlIHA1NCBXaXJlbGVzcyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgbW9kdWxlcyB0byBlbmFibGUuIEZyb20gdGhlIGluaXRpYWwgY2x1ZXMsIGl0IGxvb2tzIGxpa2Ugd2UgZGVmaW5pdGVseSBuZWVkIGBQNTRfQ09NTU9OYCwgYFA1NF9VU0JgLCBgTUFDODAyMTFgLCBhbmQgYFVTQmAuIEknbSBsZWFuaW5nIHRvd2FyZHMgaW5jbHVkaW5nIGBQNTRfUENJYCBhbmQgYFA1NF9TUElgIGFzIHdlbGwsIGp1c3QgdG8gY292ZXIgYWxsIGJhc2VzLCB0aG91Z2ggYFA1NF9VU0JgIHNlZW1zIHBhcnRpY3VsYXJseSByZWxldmFudCBnaXZlbiB0aGF0IGBzeXpfdXNiX2Nvbm5lY3RgIGlzIG1lbnRpb25lZC5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIHJlLWV2YWx1YXRlLi4udGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgcDU0X3BhcnNlX2VlcHJvbWAsIHdoaWNoIEkga25vdyByZXNpZGVzIGluIGBlZXByb20uY2AuIEFoLCByaWdodCwgYGVlcHJvbS5jYCBpcyBhY3R1YWxseSBwYXJ0IG9mIGBwNTRjb21tb25gLiBUaGF0IHNvbGlkaWZpZXMgaXQ6IGBQNTRfQ09NTU9OYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgbW9kdWxlIHRvIGVuYWJsZSBoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbmZpcm0gdGhpcyBieSBxdWlja2x5IHJlZmVyZW5jaW5nIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZXJzaWwvcDU0L01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTc4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MzMuNDU2ODQ4NTgzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRwNTRjb21tb24tb2Jqc1xcdFxcdFxcdDo9IGVlcHJvbS5vIGZ3aW8ubyB0eHJ4Lm8gbWFpbi5vXFxuICAgMzpcXHRwNTRjb21tb24tJChDT05GSUdfUDU0X0xFRFMpXFx0Kz0gbGVkLm9cXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1A1NF9DT01NT04pXFx0Kz0gcDU0Y29tbW9uLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19QNTRfVVNCKVxcdFxcdCs9IHA1NHVzYi5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfUDU0X1BDSSlcXHRcXHQrPSBwNTRwY2kub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX1A1NF9TUEkpXFx0XFx0Kz0gcDU0c3BpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDQ6MzMuNDU2OTU2NDYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE5NzY5NTQxNjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUHJpc201NCBFRVBST00gVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGVlcHJvbS5vYCBpcyBpbmRlZWQgd2l0aGluIGBwNTRjb21tb25gLiBUaGF0IG1lYW5zIGVuYWJsaW5nIGBQNTRfQ09NTU9OYCBpcyBlc3NlbnRpYWwgZm9yIHRoaXMuIFRvIGFjdHVhbGx5IGdldCBhdCBpdCB0aHJvdWdoIHN5emthbGxlciwgd2UnbGwgbmVlZCBhIGZyb250LWVuZCBtb2R1bGUsIGFuZCBgUDU0X1VTQmAgc2VlbXMgbGlrZSBhIHNvbGlkIGNob2ljZS4gVGhhdCBzaG91bGQgZ2l2ZSB1cyBhIHBhdGggaW4uXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEJlc2lkZXMgYHA1NF9wYXJzZV9lZXByb21gLCB3aGljaCBJIGtub3cgdGhlIHBhdGNoIHRhcmdldHMsIEkgYWxzbyBuZWVkIHRvIGZvY3VzIG9uIGBwNTRfcmVhZF9lZXByb21gIGFuZCBgcDU0X2Rvd25sb2FkX2VlcHJvbWAuIFRoZXkncmUgYWxsIGludGVyY29ubmVjdGVkLCBzbyBpdCdzIGEgZ29vZCBhcHByb2FjaC4gTGV0J3MgYWRkIHRob3NlIHRvIGBGb2N1c1N5bWJvbHNgLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCBhcmUgbm93OlxuXG4qICAgYHA1NF9wYXJzZV9lZXByb21gXG4qICAgYHA1NF9yZWFkX2VlcHJvbWBcbiogICBgcDU0X2Rvd25sb2FkX2VlcHJvbWBcblxuQW5kIGhlcmUgYXJlIHRoZSBuZWNlc3NhcnkgYEVuYWJsZUNvbmZpZ3NgOlxuXG4qICAgYFA1NF9DT01NT05gXG4qICAgYFA1NF9VU0JgXG4qICAgYE1BQzgwMjExYFxuXG5UaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGJvdW5kcy1jaGVja2luZyBpc3N1ZSBpbiBgcDU0X3BhcnNlX2VlcHJvbWAuIEl0J3MgcGFyc2luZyBFRVBST00gZGF0YSB3aXRoaW4gdGhlIEludGVyc2lsIFByaXNtNTQgd2lyZWxlc3MgZHJpdmVyLiBUaGUga2V5IGlzIHRoYXQgYHA1NF9kb3dubG9hZF9lZXByb21gIGlzIHVzZWQgdG8gZ2V0IHRoZSBFRVBST00gZGF0YS4gSXQgc2VuZHMgYSBjb21tYW5kLCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBzZXR1cCBsaWtlIHdlJ3JlIGRpc2N1c3NpbmcsIHRoaXMgbWVhbnMgd2UgY2FuIHVzZSBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAgdG8gZW11bGF0ZSBhIFVTQiBQcmlzbTU0IGRldmljZS4gVGhhdCdsbCB0cmlnZ2VyIHRoZSBmaXJtd2FyZSBsb2FkaW5nIGFuZCBFRVBST00gcmVhZGluZywgYW5kIHNpbmNlIHdlJ3JlICplbXVsYXRpbmcqIHRoZSBkZXZpY2UsIHdlIGhhdmUgY29tcGxldGUgY29udHJvbCBvdmVyIHRoZSBFRVBST00gZGF0YSB0aGF0IGdldHMgcmV0dXJuZWQuIFRoYXQgbWFrZXMgdGhlIHBhcnNpbmcgbG9naWMgY29tcGxldGVseSBhdHRhY2tlci1jb250cm9sbGVkLCBhbmQgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODMxLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQ3OjUxLjE1MjM3NjA3MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjE5MTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUDU0X0NPTU1PTlwiLFxuICAgIFwiUDU0X1VTQlwiLFxuICAgIFwiTUFDODAyMTFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwNTRfcGFyc2VfZWVwcm9tXCIsXG4gICAgXCJwNTRfcmVhZF9lZXByb21cIixcbiAgICBcInA1NF9kb3dubG9hZF9lZXByb21cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgcDU0X3BhcnNlX2VlcHJvbWAgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHRoZSBJbnRlcnNpbCBQcmlzbTU0IHdpcmVsZXNzIGRyaXZlci4gVGhlIEVFUFJPTSBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgZGV2aWNlIHZpYSBgcDU0X2Rvd25sb2FkX2VlcHJvbWAsIHdoaWNoIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgZGV2aWNlIGFuZCB3YWl0cyBmb3IgYSByZXNwb25zZS4gSW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhpcyBjYW4gYmUgcmVhY2hlZCBieSBlbXVsYXRpbmcgYSBVU0IgUHJpc201NCBkZXZpY2UgdXNpbmcgYGR1bW15X2hjZGAgYW5kIGBzeXpfdXNiX2Nvbm5lY3RgLCB3aGljaCB3aWxsIHRyaWdnZXIgZmlybXdhcmUgbG9hZGluZyBhbmQgc3Vic2VxdWVudCBFRVBST00gcmVhZGluZy4gU2luY2UgdGhlIGVtdWxhdGVkIGRldmljZSBjYW4gcmV0dXJuIGFyYml0cmFyeSBFRVBST00gZGF0YSwgdGhlIHBhcnNpbmcgbG9naWMgaXMgZnVsbHkgYXR0YWNrZXItY29udHJvbGxlZCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQNTRfQ09NTU9OXCIsXG4gICAgXCJQNTRfVVNCXCIsXG4gICAgXCJNQUM4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInA1NF9wYXJzZV9lZXByb21cIixcbiAgICBcInA1NF9yZWFkX2VlcHJvbVwiLFxuICAgIFwicDU0X2Rvd25sb2FkX2VlcHJvbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBwNTRfcGFyc2VfZWVwcm9tYCB3aGVuIHBhcnNpbmcgRUVQUk9NIGRhdGEgaW4gdGhlIEludGVyc2lsIFByaXNtNTQgd2lyZWxlc3MgZHJpdmVyLiBUaGUgRUVQUk9NIGRhdGEgaXMgcmVhZCBmcm9tIHRoZSBkZXZpY2UgdmlhIGBwNTRfZG93bmxvYWRfZWVwcm9tYCwgd2hpY2ggc2VuZHMgYSBjb21tYW5kIHRvIHRoZSBkZXZpY2UgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCB0aGlzIGNhbiBiZSByZWFjaGVkIGJ5IGVtdWxhdGluZyBhIFVTQiBQcmlzbTU0IGRldmljZSB1c2luZyBgZHVtbXlfaGNkYCBhbmQgYHN5el91c2JfY29ubmVjdGAsIHdoaWNoIHdpbGwgdHJpZ2dlciBmaXJtd2FyZSBsb2FkaW5nIGFuZCBzdWJzZXF1ZW50IEVFUFJPTSByZWFkaW5nLiBTaW5jZSB0aGUgZW11bGF0ZWQgZGV2aWNlIGNhbiByZXR1cm4gYXJiaXRyYXJ5IEVFUFJPTSBkYXRhLCB0aGUgcGFyc2luZyBsb2dpYyBpcyBmdWxseSBhdHRhY2tlci1jb250cm9sbGVkIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0Nzo1MS4zMDQ1Nzc1NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5MDk2NjkwNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNzo0Nzo1MS4zMDY1MDU4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDkwNzczNzcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBFRVBST00gZGF0YSBpbiBwNTRfcGFyc2VfZWVwcm9tLiBNaXNzaW5nIGJvdW5kcyBjaGVja3MgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgcHJvdmlkZWQgYnVmZmVyIG9yIGludG8gYWRqYWNlbnQgZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQuIE91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWsgaW52b2x2ZWQgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMGFkYTRiZjhkMGM1ZDg2YTY1MTk2ZjIwMTllZDBkZTBhZGUzNjhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTc6MzI6MzUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbmluZGV4IDk1NTgwOTIxZDkzMzguLjQ3MmVkZWNmNTU3NzIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlcnNpbC9wNTQvZWVwcm9tLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVyc2lsL3A1NC9lZXByb20uY1xuQEAgLTc2Myw2ICs3NjMsOCBAQCBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbilcbiBcdFx0Y2FzZSBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEE6IHtcbiBcdFx0XHRzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPVxuIFx0XHRcdFx0KHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKWVudHJ5LVx1MDAzZWRhdGE7XG4rXHRcdFx0c2l6ZV90IG5lZWRlZDtcbitcbiBcdFx0XHRpZiAoZGF0YV9sZW4gXHUwMDNjIHNpemVvZigqY3VydmVfZGF0YSkpIHtcbiBcdFx0XHRcdGVyciA9IC1FSU5WQUw7XG4gXHRcdFx0XHRnb3RvIGVycjtcbkBAIC03NzAsOSArNzcyLDIzIEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuIFxuIFx0XHRcdHN3aXRjaCAoY3VydmVfZGF0YS1cdTAwM2VjYWxfbWV0aG9kX3Jldikge1xuIFx0XHRcdGNhc2UgMDpcbitcdFx0XHRcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXHUwMDNlY2hhbm5lbHMgKlxuK1x0XHRcdFx0XHQoc2l6ZW9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MCkgKlxuK1x0XHRcdFx0XHQgY3VydmVfZGF0YS1cdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwgKyAyKTtcbitcdFx0XHRcdGlmIChkYXRhX2xlbiAtIHNpemVvZigqY3VydmVfZGF0YSkgXHUwMDNjIG5lZWRlZCkge1xuK1x0XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0XHRnb3RvIGVycjtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjAoZGV2LCBjdXJ2ZV9kYXRhKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgMTpcbitcdFx0XHRcdG5lZWRlZCA9IGN1cnZlX2RhdGEtXHUwMDNlY2hhbm5lbHMgKlxuK1x0XHRcdFx0XHQoc2l6ZW9mKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YV9zYW1wbGVfcmV2MSkgKlxuK1x0XHRcdFx0XHQgY3VydmVfZGF0YS1cdTAwM2Vwb2ludHNfcGVyX2NoYW5uZWwgKyAzKTtcbitcdFx0XHRcdGlmIChkYXRhX2xlbiAtIHNpemVvZigqY3VydmVfZGF0YSkgXHUwMDNjIG5lZWRlZCkge1xuK1x0XHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0XHRnb3RvIGVycjtcbitcdFx0XHRcdH1cbiBcdFx0XHRcdGVyciA9IHA1NF9jb252ZXJ0X3JldjEoZGV2LCBjdXJ2ZV9kYXRhKTtcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGRlZmF1bHQ6XG5AQCAtODAxLDcgKzgxNyw4IEBAIGludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFBEUl9JTlRFUkZBQ0VfTElTVDpcbiBcdFx0XHR0bXAgPSBlbnRyeS1cdTAwM2VkYXRhO1xuLVx0XHRcdHdoaWxlICgodTggKil0bXAgXHUwMDNjIGVudHJ5LVx1MDAzZWRhdGEgKyBkYXRhX2xlbikge1xuK1x0XHRcdHdoaWxlICgodTggKil0bXAgKyBzaXplb2Yoc3RydWN0IGV4cF9pZikgXHUwMDNjPVxuK1x0XHRcdCAgICAgICBlbnRyeS1cdTAwM2VkYXRhICsgZGF0YV9sZW4pIHtcbiBcdFx0XHRcdHN0cnVjdCBleHBfaWYgKmV4cF9pZiA9IHRtcDtcbiBcdFx0XHRcdGlmIChleHBfaWYtXHUwMDNlaWZfaWQgPT0gY3B1X3RvX2xlMTYoSUZfSURfSVNMMzkwMDApKVxuIFx0XHRcdFx0XHRzeW50aCA9IGxlMTZfdG9fY3B1KGV4cF9pZi1cdTAwM2V2YXJpYW50KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE3OjQ3OjUxLjMwNjUwODAyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTA3NzE3MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFA1NCBFRVBST00gUGFyc2luZyBGaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBib3VuZHMgY2hlY2tpbmcgdG8gdGhlIGBwNTRfcGFyc2VfZWVwcm9tYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCdzIG1ha2luZyBzdXJlIHdlIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBFRVBST00gZGF0YSBidWZmZXIgaW4gdGhlIGBpbnRlcnNpbC9wNTRgIHdpcmVsZXNzIGRyaXZlci4gVGhlIGNoZWNrIGludm9sdmVzIGNhbGN1bGF0aW5nIGEgYG5lZWRlZGAgc2l6ZSBiYXNlZCBvbiBjaGFubmVsIGFuZCBwb2ludHMgZGF0YSBmcm9tIGBjdXJ2ZV9kYXRhYCBhbmQgY29tcGFyaW5nIGl0IGFnYWluc3QgdGhlIGF2YWlsYWJsZSBgZGF0YV9sZW5gLiBJdCBhbHNvIGZpeGVzIGEgYHdoaWxlYCBsb29wIHRvIHByZXZlbnQgZ29pbmcgYmV5b25kIHRoZSBhbGxvY2F0ZWQgZGF0YSBmb3IgYSBjZXJ0YWluIGludGVyZmFjZSBsaXN0LlxuXG5NeSBtYWluIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpcyBLTVNBTidzIGRvbWFpbi4gVGhlIGRhdGEgY29tZXMgZnJvbSB0aGUgRUVQUk9NLCB3aGljaCwgYXQgbGVhc3QgaWRlYWxseSwgc2hvdWxkIGJlIGluaXRpYWxpemVkLiBJZiB0aGUgYm91bmRzIGNoZWNrcyB3ZXJlIG1pc3NpbmcsIHdlJ2QgYmUgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBjb250YWluaW5nIEVFUFJPTSBkYXRhLCB3aGljaCBpcyBkZWZpbml0ZWx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gS0FTQU4gd2lsbCByZWxpYWJseSBjYXRjaCB0aG9zZSBPT0IgcmVhZHMuIFRoZSBwYXRjaCBpcyBwcmV2ZW50aW5nIHJlYWRzIHBhc3QgdGhlIGVuZCBvZiBhIGJ1ZmZlcjsgdGhlcmVmb3JlLCBhIEtNU0FOIGNoZWNrIGlzIHVubmVjZXNzYXJ5LlxuXG5UaGlua2luZyB0aGlzIHRocm91Z2ggbW9yZSBjYXJlZnVsbHksIHRoZSBgcDU0X3BhcnNlX2VlcHJvbWAgZnVuY3Rpb24gd29ya3Mgd2l0aCBhIGJ1ZmZlciBjYWxsZWQgYGVlcHJvbWAuIFRoZSBgZGF0YV9sZW5gIGlzIHRoZSBsZW5ndGggb2YgZWFjaCBQRFIgZW50cnkgd2l0aGluIHRoZSBidWZmZXIuIE5vdywgaW5zaWRlIHRoZSBmdW5jdGlvbidzIGxvb3AsIHRoZXJlJ3MgdGhpcyBgc3dpdGNoYCBzdGF0ZW1lbnQgdGhhdCBjYWxjdWxhdGVzIGBuZWVkZWRgLiBJZiBgbmVlZGVkYCBleGNlZWRzIHdoYXQncyBhdmFpbGFibGUgaW4gYGRhdGFfbGVuYCwgdGhlbiB0aGUgY29kZSB0cmllcyB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBlbnRyeSwgcG9zc2libHkgaW50byB0aGUgbmV4dCBlbnRyeSBvciBwYXN0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSBgZWVwcm9tYCBidWZmZXIuXG5cbklmIGl0IHJlYWRzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYGVlcHJvbWAgYnVmZmVyLCBLQVNBTiB3aWxsIGNhdGNoIGl0IGFzIGFuIE9PQiByZWFkLiBJZiBpdCByZWFkcyBpbnRvIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGp1c3QgcGFyc2luZyBnYXJiYWdlIGJ1dCBub3QgcmVhZGluZyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGl0IGlzICpub3QqIGEgS01TQU4gaXNzdWUuIFRoaXMgaXMgcHVyZWx5IGFuIG91dC1vZi1ib3VuZHMgcmVhZCBjYXVzZWQgYnkgaW5zdWZmaWNpZW50IGJvdW5kcyBjaGVja2luZy5cblxuU28sIHRoZSBwYXRjaCBpcyBmaXhpbmcgb3V0LW9mLWJvdW5kcyByZWFkcy4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgZm9yIGRldGVjdGluZyBhbmQgcHJldmVudGluZyB0aGlzLiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBhbmQgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gbGVha2luZyB0byB0aGUgdXNlci4gSSdtIGNvbWZvcnRhYmxlIGluIGNvbmNsdWRpbmcgdGhhdCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MjksIk91dHB1dFRva2VucyI6MTE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTc6NDg6MDIuMjE0MjI4ODk4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEVFUFJPTSBkYXRhIGluIHA1NF9wYXJzZV9lZXByb20uIE1pc3NpbmcgYm91bmRzIGNoZWNrcyBsZWFkIHRvIHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRoZSBwcm92aWRlZCBidWZmZXIgb3IgaW50byBhZGphY2VudCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZC4gT3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGtlcm5lbC10by11c2VyIGluZm8tbGVhayBpbnZvbHZlZCBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgRUVQUk9NIGRhdGEgaW4gcDU0X3BhcnNlX2VlcHJvbS4gTWlzc2luZyBib3VuZHMgY2hlY2tzIGxlYWQgdG8gcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIHByb3ZpZGVkIGJ1ZmZlciBvciBpbnRvIGFkamFjZW50IGRhdGEgc3RydWN0dXJlcywgd2hpY2ggaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLiBPdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3Iga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrIGludm9sdmVkIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjbql2[1] Phase: Succeeded StartedAt: 2026-08-26 17:48:38 +0000 UTC FinishedAt: 2026-08-26 17:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 17:48:38 +0000 UTC FinishedAt: 2026-08-26 17:48:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2] Phase: Succeeded StartedAt: 2026-08-26 17:48:38 +0000 UTC FinishedAt: 2026-08-26 18:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 17:48:38 +0000 UTC FinishedAt: 2026-08-26 18:34:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 17:48:38 +0000 UTC FinishedAt: 2026-08-26 17:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 17:48:38 +0000 UTC FinishedAt: 2026-08-26 17:48:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbql2/series-workflowjbql2-convert-artifact-2483307568/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 17:48:49 +0000 UTC FinishedAt: 2026-08-26 18:11:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 17:48:49 +0000 UTC FinishedAt: 2026-08-26 18:11:28 +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:*29622c25-de4a-4073-b668-69fb0a638196,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-workflowjbql2/series-workflowjbql2-convert-artifact-2483307568/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": "587be8e1-48d0-49dc-80c4-4e9dc0e59a8d", "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-workflowjbql2/series-workflowjbql2-build-action-612643126/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 17:48:49 +0000 UTC FinishedAt: 2026-08-26 18:10:58 +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:*29622c25-de4a-4073-b668-69fb0a638196,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-workflowjbql2/series-workflowjbql2-convert-artifact-2483307568/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": "587be8e1-48d0-49dc-80c4-4e9dc0e59a8d", "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-workflowjbql2/series-workflowjbql2-build-action-612643126/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 18:11:28 +0000 UTC FinishedAt: 2026-08-26 18:11:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 18:11:28 +0000 UTC FinishedAt: 2026-08-26 18:11:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 18:11:28 +0000 UTC FinishedAt: 2026-08-26 18:11:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 18:11:28 +0000 UTC FinishedAt: 2026-08-26 18:11:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjbql2/series-workflowjbql2-convert-artifact-830210839/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 18:11:38 +0000 UTC FinishedAt: 2026-08-26 18:13:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 18:11:38 +0000 UTC FinishedAt: 2026-08-26 18:13:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*587be8e1-48d0-49dc-80c4-4e9dc0e59a8d,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-workflowjbql2/series-workflowjbql2-build-action-612643126/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-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 18:13:45 +0000 UTC FinishedAt: 2026-08-26 18:13:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 18:13:45 +0000 UTC FinishedAt: 2026-08-26 18:13:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 18:13:45 +0000 UTC FinishedAt: 2026-08-26 18:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 18:13:45 +0000 UTC FinishedAt: 2026-08-26 18:29:31 +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:*29622c25-de4a-4073-b668-69fb0a638196,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-workflowjbql2/series-workflowjbql2-convert-artifact-830210839/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": "3b0fe5b9-7067-4c4b-a36f-7f38c25089d0", "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-workflowjbql2/series-workflowjbql2-build-action-2171025755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 18:13:45 +0000 UTC FinishedAt: 2026-08-26 18:29:21 +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:*29622c25-de4a-4073-b668-69fb0a638196,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-workflowjbql2/series-workflowjbql2-convert-artifact-830210839/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": "3b0fe5b9-7067-4c4b-a36f-7f38c25089d0", "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-workflowjbql2/series-workflowjbql2-build-action-2171025755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 18:29:31 +0000 UTC FinishedAt: 2026-08-26 18:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 18:29:31 +0000 UTC FinishedAt: 2026-08-26 18:29:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 18:29:31 +0000 UTC FinishedAt: 2026-08-26 18:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 18:29:31 +0000 UTC FinishedAt: 2026-08-26 18:32:54 +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:*3b0fe5b9-7067-4c4b-a36f-7f38c25089d0,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-workflowjbql2/series-workflowjbql2-build-action-2171025755/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-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 18:33:04 +0000 UTC FinishedAt: 2026-08-26 18:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 18:33:04 +0000 UTC FinishedAt: 2026-08-26 18:34:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"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:*587be8e1-48d0-49dc-80c4-4e9dc0e59a8d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3b0fe5b9-7067-4c4b-a36f-7f38c25089d0,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-workflowjbql2/series-workflowjbql2-build-action-612643126/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-workflowjbql2/series-workflowjbql2-build-action-2171025755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 18:33:04 +0000 UTC FinishedAt: 2026-08-26 18:33:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 18:33:04 +0000 UTC FinishedAt: 2026-08-26 18:33:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"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-workflowjbql2/series-workflowjbql2-convert-artifact-2419079120/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 18:33:04 +0000 UTC FinishedAt: 2026-08-26 18:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 18:33:04 +0000 UTC FinishedAt: 2026-08-26 18:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 18:33:04 +0000 UTC FinishedAt: 2026-08-26 18:33:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 18:33:14 +0000 UTC FinishedAt: 2026-08-26 18:34:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjbql2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["p54_parse_eeprom","p54_read_eeprom","p54_download_eeprom"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66fb95a521110da673090294561844c9f76ebe64","config_name":"upstream-apparmor-kasan.config","enable_configs":["P54_COMMON","P54_USB","MAC80211"],"series_id":"a33c093a-8bc6-497f-9ce9-3e400dba0cd0","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 18:33:14 +0000 UTC FinishedAt: 2026-08-26 18:34:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*587be8e1-48d0-49dc-80c4-4e9dc0e59a8d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3b0fe5b9-7067-4c4b-a36f-7f38c25089d0,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-workflowjbql2/series-workflowjbql2-build-action-612643126/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-workflowjbql2/series-workflowjbql2-build-action-2171025755/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-workflowjbql2/series-workflowjbql2-convert-artifact-2419079120/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,}