Name: series-workflowjkvkb Phase: Succeeded StartedAt: 2026-09-02 22:04:32 +0000 UTC FinishedAt: 2026-09-03 01:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[0] Phase: Succeeded StartedAt: 2026-09-02 22:04:32 +0000 UTC FinishedAt: 2026-09-02 22:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 22:04:32 +0000 UTC FinishedAt: 2026-09-02 22:07:27 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HID_ROCCAT", "USB_HID", "HID" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HID_ROCCAT", "USB_HID", "HID" ], "series_id": "f5ba8a12-a0e7-4e56-94c2-7d6099096c6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "roccat_connect", "roccat_disconnect", "roccat_report_event", "roccat_open", "roccat_release", "roccat_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hJRF9ST0NDQVQmIzM0OywKICAgICYjMzQ7VVNCX0hJRCYjMzQ7LAogICAgJiMzNDtISUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyb2NjYXRfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtyb2NjYXRfZGlzY29ubmVjdCYjMzQ7LAogICAgJiMzNDtyb2NjYXRfcmVwb3J0X2V2ZW50JiMzNDssCiAgICAmIzM0O3JvY2NhdF9vcGVuJiMzNDssCiAgICAmIzM0O3JvY2NhdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3JvY2NhdF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cblxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI1YjY2YzFkM2QwY2RhNDc2NDFlNTA4ZmJkYjkxZjA0M2VjNTBlNGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuaW5kZXggNGYxNWViOTUxMDM5Ni4uZWFhNDdiYmI3MGRhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG5AQCAtMjEsOCAmIzQzOzIxLDEwIEBAXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiBcbkBAIC0zNyw2ICYjNDM7MzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7XG4gfTtcbiBcbiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7XG4mIzQzO1x0c3RydWN0IGtyZWYga3JlZjtcbiBcdHVuc2lnbmVkIGludCBtaW5vcjtcbiBcdGludCByZXBvcnRfc2l6ZTtcbiBcdGludCBvcGVuO1xuQEAgLTcwLDggJiM0Mzs3MywxMCBAQCBzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcbiAvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIGRldmljZXMgYXJyYXkgKi9cbiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3N0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4mIzQzO1x0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBST0NDQVRfQ0JVRl9TSVpFOyBpJiM0MzsmIzQzOylcbkBAIC0xNzIsMTEgJiM0MzsxNzcsMjEgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGlmICghZGV2aWNlKSB7XG4gXHRcdHByX2VtZXJnKFwmIzM0O3JvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2VzbiYjMzk7dCBleGlzdFxcblwmIzM0OywgbWlub3IpO1xuIFx0XHRlcnJvciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXhpdF9lcnJfZGV2aWNlcztcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuJiM0MztcdFx0a2ZyZWUocmVhZGVyKTtcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiBcbiYjNDM7XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIWRldmljZS1cdTAwM2VvcGVuJiM0MzsmIzQzOykge1xuIFx0XHQvKiBwb3dlciBvbiBkZXZpY2Ugb24gYWRkaW5nIGZpcnN0IHJlYWRlciAqL1xuIFx0XHRlcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtXHUwMDNlaGlkLCBQTV9ISU5UX0ZVTExPTik7XG5AQCAtMjAwLDQ2ICYjNDM7MjE1LDM1IEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlLCBcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycyk7XG4gXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IHJlYWRlcjtcbiBcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuIGV4aXRfZXJyX3JlYWRlcnM6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4tZXhpdF9lcnJfZGV2aWNlczpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRrZnJlZShyZWFkZXIpO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuJiM0MztcdGtmcmVlKHJlYWRlcik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcbiBcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXG4tXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbi1cdGlmICghZGV2aWNlKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVx0XHRwcl9lbWVyZyhcJiMzNDtyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24mIzM5O3QgZXhpc3RcXG5cJiMzNDssIG1pbm9yKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4mIzQzO1x0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2cmVhZGVyLVx1MDAzZW5vZGUpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuLVx0a2ZyZWUocmVhZGVyKTtcbiBcbiBcdGlmICghLS1kZXZpY2UtXHUwMDNlb3Blbikge1xuIFx0XHQvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqL1xuIFx0XHRpZiAoZGV2aWNlLVx1MDAzZWV4aXN0KSB7XG4gXHRcdFx0aGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcbiBcdFx0XHRoaWRfaHdfY2xvc2UoZGV2aWNlLVx1MDAzZWhpZCk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cm9jY2F0X2ZyZWVfZGV2aWNlKGRldmljZSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiYjNDM7XHRrZnJlZShyZWFkZXIpO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI2MCw3ICYjNDM7MjY0LDEyIEBAIGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXG4gXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xuIFx0dWludDhfdCAqbmV3X3ZhbHVlO1xuIFxuJiM0MztcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuJiM0MztcdGlmICghZGV2aWNlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRuZXdfdmFsdWUgPSBrbWVtZHVwKGRhdGEsIGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIW5ld192YWx1ZSlcbkBAIC0zMTYsNiAmIzQzOzMyNSwxNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0aWYgKCFkZXZpY2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdGtyZWZfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuJiM0MztcdGRldmljZS1cdTAwM2VleGlzdCA9IDE7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWNidWZfZW5kID0gMDtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4gXHRmb3IgKG1pbm9yID0gMDsgbWlub3IgXHUwMDNjIFJPQ0NBVF9NQVhfREVWSUNFUzsgJiM0MzsmIzQzO21pbm9yKSB7XG5AQCAtMzMyLDYgJiM0MzszNTEsOCBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRkZXZpY2UtXHUwMDNlbWlub3IgPSBtaW5vcjtcbiYjNDM7XG4gXHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiBcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiBcdFx0XHRcJiMzNDslcyVzJWRcJiMzNDssIFwmIzM0O3JvY2NhdFwmIzM0OywgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG5AQCAtMzQ2LDE2ICYjNDM7MzY3LDYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnRcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIFxuLVx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycyk7XG4tXHRtdXRleF9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbi1cdGRldmljZS1cdTAwM2VtaW5vciA9IG1pbm9yO1xuLVx0ZGV2aWNlLVx1MDAzZWhpZCA9IGhpZDtcbi1cdGRldmljZS1cdTAwM2VleGlzdCA9IDE7XG4tXHRkZXZpY2UtXHUwMDNlY2J1Zl9lbmQgPSAwO1xuLVx0ZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplID0gcmVwb3J0X3NpemU7XG4tXG4gXHRyZXR1cm4gbWlub3I7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTtcbkBAIC0zNjcsNDIgJiM0MzszNzgsMzcgQEAgdm9pZCByb2NjYXRfZGlzY29ubmVjdChpbnQgbWlub3IpXG4ge1xuIFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiBcbiYjNDM7XHRpZiAobWlub3IgXHUwMDNjIDAgfHwgbWlub3IgXHUwMDNlPSBST0NDQVRfTUFYX0RFVklDRVMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XG4mIzQzO1x0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4tXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwOyAvKiBUT0RPIGV4aXN0IG1heWJlIG5vdCBuZWVkZWQgKi9cbiYjNDM7XHRpZiAoIWRldmljZSlcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cdGRldmljZXNbbWlub3JdID0gTlVMTDtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMDtcbiBcdGlmIChkZXZpY2UtXHUwMDNlb3Blbikge1xuIFx0XHRoaWRfaHdfY2xvc2UoZGV2aWNlLVx1MDAzZWhpZCk7XG4gXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfZGlzY29ubmVjdCk7XG4gXG4gc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbi1cdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4tXHR1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpO1xuJiM0MztcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiBcdGxvbmcgcmV0dmFsID0gMDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbi1cdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0cmV0dmFsID0gLUVOT0RFVjtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiBcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuQEAgLTQxMSw4ICYjNDM7NDE3LDcgQEAgc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHZhbCA9IC1FTk9UVFk7XG4gXHR9XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SElEX1JPQ0NBVCYjMzQ7LAogICAgJiMzNDtVU0JfSElEJiMzNDssCiAgICAmIzM0O0hJRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvY2NhdF9jb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9yZXBvcnRfZXZlbnQmIzM0OywKICAgICYjMzQ7cm9jY2F0X29wZW4mIzM0OywKICAgICYjMzQ7cm9jY2F0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cm9jY2F0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMga3JlZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlZmFjdG9ycyBsb2NraW5nIGFjcm9zcyB0aGUgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlIHN1YnN5c3RlbSAoaGlkLXJvY2NhdCkgdG8gZml4IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgcmFjZXMgYmV0d2VlbiByb2NjYXQgY2hhcmFjdGVyIGRldmljZSBvcGVyYXRpb25zIChvcGVuLCByZWxlYXNlLCBpb2N0bCkgYW5kIGRldmljZSBjb25uZWN0L2Rpc2Nvbm5lY3QvZXZlbnQgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uIChyYXctZ2FkZ2V0L3VoaWQpIGFuZCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNWI2NmMxZDNkMGNkYTQ3NjQxZTUwOGZiZGI5MWYwNDNlYzUwZTRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjowNTo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYwppbmRleCA0ZjE1ZWI5NTEwMzk2Li5lYWE0N2JiYjcwZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCkBAIC0yMSw4ICYjNDM7MjEsMTAgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiAjaW5jbHVkZSAmbHQ7bGludXgvY2Rldi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rcmVmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaGlkLXJvY2NhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogCkBAIC0zNyw2ICYjNDM7MzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7CiB9OwogCiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7CiYjNDM7CXN0cnVjdCBrcmVmIGtyZWY7CiAJdW5zaWduZWQgaW50IG1pbm9yOwogCWludCByZXBvcnRfc2l6ZTsKIAlpbnQgb3BlbjsKQEAgLTcwLDggJiM0Mzs3MywxMCBAQCBzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTsKIC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqLwogc3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spOwogCi1zdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSkKJiM0MztzdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiYjNDM7CXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPQomIzQzOwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBST0NDQVRfQ0JVRl9TSVpFOyBpJiM0MzsmIzQzOykKQEAgLTE3MiwxMSAmIzQzOzE3NywyMSBAQCBzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCWlmICghZGV2aWNlKSB7CiAJCXByX2VtZXJnKCYjMzQ7cm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJiMzOTt0IGV4aXN0XG4mIzM0OywgbWlub3IpOwogCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdF9lcnJfZGV2aWNlczsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7CiYjNDM7CQlrZnJlZShyZWFkZXIpOwomIzQzOwkJcmV0dXJuIGVycm9yOwogCX0KIAomIzQzOwlrcmVmX2dldCgmYW1wO2RldmljZS0mZ3Q7a3JlZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKIAomIzQzOwlpZiAoIWRldmljZS0mZ3Q7ZXhpc3QpIHsKJiM0MzsJCWVycm9yID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gZXhpdF9lcnJfcmVhZGVyczsKJiM0MzsJfQomIzQzOwogCWlmICghZGV2aWNlLSZndDtvcGVuJiM0MzsmIzQzOykgewogCQkvKiBwb3dlciBvbiBkZXZpY2Ugb24gYWRkaW5nIGZpcnN0IHJlYWRlciAqLwogCQllcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtJmd0O2hpZCwgUE1fSElOVF9GVUxMT04pOwpAQCAtMjAwLDQ2ICYjNDM7MjE1LDM1IEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJbGlzdF9hZGRfdGFpbCgmYW1wO3JlYWRlci0mZ3Q7bm9kZSwgJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnMpOwogCWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IHJlYWRlcjsKIAomIzQzOwltdXRleF91bmxvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7CiYjNDM7CXJldHVybiAwOwomIzQzOwogZXhpdF9lcnJfcmVhZGVyczoKIAltdXRleF91bmxvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7Ci1leGl0X2Vycl9kZXZpY2VzOgotCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0JaWYgKGVycm9yKQotCQlrZnJlZShyZWFkZXIpOwomIzQzOwlrcmVmX3B1dCgmYW1wO2RldmljZS0mZ3Q7a3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTsKJiM0MzsJa2ZyZWUocmVhZGVyKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7Ci0KLQltdXRleF9sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQotCWRldmljZSA9IGRldmljZXNbbWlub3JdOwotCWlmICghZGV2aWNlKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0JCXByX2VtZXJnKCYjMzQ7cm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJiMzOTt0IGV4aXN0XG4mIzM0OywgbWlub3IpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiYjNDM7CXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItJmd0O2RldmljZTsKIAogCW11dGV4X2xvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7CiAJbGlzdF9kZWwoJmFtcDtyZWFkZXItJmd0O25vZGUpOwotCW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKLQlrZnJlZShyZWFkZXIpOwogCiAJaWYgKCEtLWRldmljZS0mZ3Q7b3BlbikgewogCQkvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqLwogCQlpZiAoZGV2aWNlLSZndDtleGlzdCkgewogCQkJaGlkX2h3X3Bvd2VyKGRldmljZS0mZ3Q7aGlkLCBQTV9ISU5UX05PUk1BTCk7CiAJCQloaWRfaHdfY2xvc2UoZGV2aWNlLSZndDtoaWQpOwotCQl9IGVsc2UgewotCQkJcm9jY2F0X2ZyZWVfZGV2aWNlKGRldmljZSk7CiAJCX0KIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKIAotCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7CiYjNDM7CWtmcmVlKHJlYWRlcik7CiYjNDM7CWtyZWZfcHV0KCZhbXA7ZGV2aWNlLSZndDtrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjAsNyAmIzQzOzI2NCwxMiBAQCBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKQogCXN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7CiAJdWludDhfdCAqbmV3X3ZhbHVlOwogCiYjNDM7CWlmIChtaW5vciAmbHQ7IDAgfHwgbWlub3IgJmd0Oz0gUk9DQ0FUX01BWF9ERVZJQ0VTKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07CiYjNDM7CWlmICghZGV2aWNlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiAKIAluZXdfdmFsdWUgPSBrbWVtZHVwKGRhdGEsIGRldmljZS0mZ3Q7cmVwb3J0X3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X3ZhbHVlKQpAQCAtMzE2LDYgJiM0MzszMjUsMTYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnQKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJa3JlZl9pbml0KCZhbXA7ZGV2aWNlLSZndDtrcmVmKTsKJiM0MzsJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2RldmljZS0mZ3Q7d2FpdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzKTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2RldmljZS0mZ3Q7Y2J1Zl9sb2NrKTsKJiM0MzsJZGV2aWNlLSZndDtoaWQgPSBoaWQ7CiYjNDM7CWRldmljZS0mZ3Q7ZXhpc3QgPSAxOwomIzQzOwlkZXZpY2UtJmd0O2NidWZfZW5kID0gMDsKJiM0MzsJZGV2aWNlLSZndDtyZXBvcnRfc2l6ZSA9IHJlcG9ydF9zaXplOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCiAJZm9yIChtaW5vciA9IDA7IG1pbm9yICZsdDsgUk9DQ0FUX01BWF9ERVZJQ0VTOyAmIzQzOyYjNDM7bWlub3IpIHsKQEAgLTMzMiw2ICYjNDM7MzUxLDggQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnQKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWRldmljZS0mZ3Q7bWlub3IgPSBtaW5vcjsKJiM0MzsKIAlkZXZpY2UtJmd0O2RldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsICZhbXA7aGlkLSZndDtkZXYsCiAJCQlNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCwKIAkJCSYjMzQ7JXMlcyVkJiMzNDssICYjMzQ7cm9jY2F0JiMzNDssIGhpZC0mZ3Q7ZHJpdmVyLSZndDtuYW1lLCBtaW5vcik7CkBAIC0zNDYsMTYgJiM0MzszNjcsNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydAogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtkZXZpY2UtJmd0O3dhaXQpOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzKTsKLQltdXRleF9pbml0KCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwotCW11dGV4X2luaXQoJmFtcDtkZXZpY2UtJmd0O2NidWZfbG9jayk7Ci0JZGV2aWNlLSZndDttaW5vciA9IG1pbm9yOwotCWRldmljZS0mZ3Q7aGlkID0gaGlkOwotCWRldmljZS0mZ3Q7ZXhpc3QgPSAxOwotCWRldmljZS0mZ3Q7Y2J1Zl9lbmQgPSAwOwotCWRldmljZS0mZ3Q7cmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTsKLQogCXJldHVybiBtaW5vcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTsKQEAgLTM2Nyw0MiAmIzQzOzM3OCwzNyBAQCB2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcikKIHsKIAlzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlOwogCiYjNDM7CWlmIChtaW5vciAmbHQ7IDAgfHwgbWlub3IgJmd0Oz0gUk9DQ0FUX01BWF9ERVZJQ0VTKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCWRldmljZSA9IGRldmljZXNbbWlub3JdOwomIzQzOwlkZXZpY2VzW21pbm9yXSA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKIAotCWRldmljZS0mZ3Q7ZXhpc3QgPSAwOyAvKiBUT0RPIGV4aXN0IG1heWJlIG5vdCBuZWVkZWQgKi8KJiM0MzsJaWYgKCFkZXZpY2UpCiYjNDM7CQlyZXR1cm47CiAKIAlkZXZpY2VfZGVzdHJveShkZXZpY2UtJmd0O2Rldi0mZ3Q7Y2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTsKIAotCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwotCWRldmljZXNbbWlub3JdID0gTlVMTDsKLQltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwotCiYjNDM7CW11dGV4X2xvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7CiYjNDM7CWRldmljZS0mZ3Q7ZXhpc3QgPSAwOwogCWlmIChkZXZpY2UtJmd0O29wZW4pIHsKIAkJaGlkX2h3X2Nsb3NlKGRldmljZS0mZ3Q7aGlkKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7ZGV2aWNlLSZndDt3YWl0KTsKLQl9IGVsc2UgewotCQlyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsKJiM0MzsJa3JlZl9wdXQoJmFtcDtkZXZpY2UtJmd0O2tyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfZGlzY29ubmVjdCk7CiAKIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7Ci0Jc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLSZndDtkZXZpY2U7CiAJbG9uZyByZXR2YWwgPSAwOwogCi0JbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0KLQlkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTsKLQlpZiAoIWRldmljZSkgewotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUk9DQ0FUSU9DR1JFUFNJWkU6CiAJCWlmIChwdXRfdXNlcihkZXZpY2UtJmd0O3JlcG9ydF9zaXplLCAoaW50IF9fdXNlciAqKWFyZykpCkBAIC00MTEsOCAmIzQzOzQxNyw3IEBAIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJZGVmYXVsdDoKIAkJcmV0dmFsID0gLUVOT1RUWTsKIAl9Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsKIAlyZXR1cm4gcmV0dmFsOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb2NjYXQgSElEIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIGBoaWQtcm9jY2F0LmNgIGRyaXZlciBhbmQgc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYGtyZWZgIHRvIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzaWduIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGltcHJvdmVtZW50cywgc3BlY2lmaWNhbGx5IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggaW5kaWNhdGVzIGFuIGF0dGVtcHQgdG8gZml4IHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIHBhcnQgdGhhdCBwZXJrcyB1cCBteSBlYXJzLgoKVGhlIGNvcmUgZnVuY3Rpb25zIOKAkyBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X3JlcG9ydF9ldmVudGAsIGByb2NjYXRfY29ubmVjdGAsIGByb2NjYXRfZGlzY29ubmVjdGAsIGFuZCBgcm9jY2F0X2lvY3RsYCDigJMgYXJlIGFsbCBiZWluZyB1cGRhdGVkIHRvIHV0aWxpemUgdGhpcyBuZXcgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGlzIHN1Z2dlc3RzIHRoZXkgd2VyZSBpbmRlZWQgZmluZGluZyBVQUYgb3IgcmFjZSBpc3N1ZXMgcmVsYXRlZCB0byBkZXZpY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBSb2NjYXQgZHJpdmVyIGFuZCBhcmUgdGFraW5nIHN0ZXBzIHRvIG1pdGlnYXRlIHRoZW0uIFdlIG5lZWQgdG8gcGF5ICp2ZXJ5KiBjbG9zZSBhdHRlbnRpb24gdG8gdGhlc2UgZnVuY3Rpb25zLgoKVGhpbmtpbmcgYWJvdXQgYXR0YWNrIHN1cmZhY2UsIHRoaXMgZHJpdmVyIGV4cG9zZXMgY2hhcmRldiBpbnRlcmZhY2VzIChsaWtlIGByb2NjYXQwYCkgd2hpY2ggbWVhbnMgd2UgY2FuIGxpa2VseSBpbnRlcmFjdCB3aXRoIGl0IHZpYSBgb3BlbmAsIGByZWFkYCwgYHBvbGxgLCBhbmQgYGlvY3RsYCBjYWxscy4gUm9jY2F0IGRldmljZXMgY2FuIGFsc28gYmUgZW11bGF0ZWQgdGhyb3VnaCBVU0Igb3IgVUhJRCwgd2hpY2ggZ2l2ZXMgdXMgbXVsdGlwbGUgd2F5cyB0byB0cmlnZ2VyIGFuZCBzdHJlc3MgdGhlIGRyaXZlci4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZyBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgYEtjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgdGhlIGluY2x1c2lvbiBvZiBgaGlkLXJvY2NhdC5jYC4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBtYXkgYWxzbyBiZSBpbXBhY3RlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8gc2V0IHVwIGFuIGFwcHJvcHJpYXRlIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZW4gSSYjMzk7bGwgc3RhcnQgYnJhaW5zdG9ybWluZyBsaWtlbHkgZm9jdXMgc3ltYm9scyBsaWtlIHRoZSBpb2N0bHMsIG9yIHRoZSBgcm9jY2F0X3JlcG9ydF9ldmVudGAgZnVuY3Rpb24gd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBkcml2ZXIgaGFuZGxlcyByYXcgaW5wdXQuIFRoaXMgd2hvbGUgdGhpbmcgc21lbGxzIGxpa2UgYSBnb29kIHRhcmdldCBmb3Igc29tZSBmb2N1c2VkIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm9jY2F0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMjIwIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2hpZC9NYWtlZmlsZT0xMjU9b2JqLSQoQ09ORklHX0hJRF9SRVRST0RFKVx0JiM0Mzs9IGhpZC1yZXRyb2RlLm9cbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyNjpvYmotJChDT05GSUdfSElEX1JPQ0NBVClcdCYjNDM7PSBoaWQtcm9jY2F0Lm8gaGlkLXJvY2NhdC1jb21tb24ubyBcXFxuZHJpdmVycy9oaWQvTWFrZWZpbGU6MTI3Olx0aGlkLXJvY2NhdC1hcnZvLm8gaGlkLXJvY2NhdC1pc2t1Lm8gaGlkLXJvY2NhdC1rb25lLm8gXFxcbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyODpcdGhpZC1yb2NjYXQta29uZXBsdXMubyBoaWQtcm9jY2F0LWtvbmVwdXJlLm8gaGlkLXJvY2NhdC1rb3ZhcGx1cy5vIFxcXG5kcml2ZXJzL2hpZC9NYWtlZmlsZToxMjk6XHRoaWQtcm9jY2F0LWx1YS5vIGhpZC1yb2NjYXQtcHlyYS5vIGhpZC1yb2NjYXQtcnlvcy5vIGhpZC1yb2NjYXQtc2F2dS5vXG5kcml2ZXJzL2hpZC9NYWtlZmlsZS0xMzAtb2JqLSQoQ09ORklHX0hJRF9STUkpXHRcdCYjNDM7PSBoaWQtcm1pLm9cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjIxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFx1MDAzZVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjItI2luY2x1ZGUgXCYjMzQ7aGlkLWlkcy5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMzojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWNvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyNDojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWFydm8uaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjUtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0yNj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3Nob3dfbW9kZV9rZXkoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM2LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozNzpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX01PREVfS0VZLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzgtXHRcdFx0XHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19tb2RlX2tleSkpO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTQ2PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X21vZGVfa2V5KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy02NC1cdG11dGV4X2xvY2soXHUwMDI2YXJ2by1cdTAwM2VhcnZvX2xvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6NjU6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9NT0RFX0tFWSxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTY2LVx0XHRcdFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fbW9kZV9rZXkpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz03Nj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3Nob3dfa2V5X21hc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTg2LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo4NzpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX0tFWV9NQVNLLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtODgtXHRcdFx0XHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19rZXlfbWFzaykpO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTk2PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X2tleV9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xMTQtXHRtdXRleF9sb2NrKFx1MDAyNmFydm8tXHUwMDNlYXJ2b19sb2NrKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjExNTpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX0tFWV9NQVNLLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTE2LVx0XHRcdFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fa2V5X21hc2spKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0xMjc9c3RhdGljIGludCBhcnZvX2dldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldilcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xMzEtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoxMzI6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTEzMy1cdFx0XHRcdTAwMjZ0ZW1wX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhcnZvX2FjdHVhbF9wcm9maWxlKSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MTUwPXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xNzEtXHRtdXRleF9sb2NrKFx1MDAyNmFydm8tXHUwMDNlYXJ2b19sb2NrKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjE3MjpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX0FDVFVBTF9QUk9GSUxFLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTczLVx0XHRcdFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fYWN0dWFsX3Byb2ZpbGUpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0xODU9c3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTk3LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoxOTg6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTE5OS1cdG11dGV4X3VubG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MjA0PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjE5LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMjA6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTIyMS1cdG11dGV4X3VubG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9Mjg5PXN0YXRpYyBpbnQgYXJ2b19pbml0X3NwZWNpYWxzKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMxNC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjMxNTpcdHJldHZhbCA9IHJvY2NhdF9jb25uZWN0KFx1MDAyNmFydm9fY2xhc3MsIGhkZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozMTY6XHRcdFx0c2l6ZW9mKHN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQpKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMxNy1cdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zMjAtXHRcdGFydm8tXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzIxOlx0XHRhcnZvLVx1MDAzZXJvY2NhdF9jbGFpbWVkID0gMTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMyMi1cdH1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0zMzA9c3RhdGljIHZvaWQgYXJ2b19yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzM5LVx0YXJ2byA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM0MDpcdGlmIChhcnZvLVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzQxOlx0XHRyb2NjYXRfZGlzY29ubmVjdChhcnZvLVx1MDAzZWNocmRldl9taW5vcik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zNDItXHRrZnJlZShhcnZvKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0zODU9c3RhdGljIHZvaWQgYXJ2b19yZXBvcnRfdG9fY2hyZGV2KHN0cnVjdCBhcnZvX2RldmljZSBjb25zdCAqYXJ2byxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zODgtXHRzdHJ1Y3QgYXJ2b19zcGVjaWFsX3JlcG9ydCBjb25zdCAqc3BlY2lhbF9yZXBvcnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozODk6XHRzdHJ1Y3QgYXJ2b19yb2NjYXRfcmVwb3J0IHJvY2NhdF9yZXBvcnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zOTAtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzkyLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzkzOlx0cm9jY2F0X3JlcG9ydC5wcm9maWxlID0gYXJ2by1cdTAwM2VhY3R1YWxfcHJvZmlsZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM5NDpcdHJvY2NhdF9yZXBvcnQuYnV0dG9uID0gc3BlY2lhbF9yZXBvcnQtXHUwMDNlZXZlbnQgXHUwMDI2XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zOTUtXHRcdFx0QVJWT19TUEVDSUFMX1JFUE9SVF9FVkVOVF9NQVNLX0JVVFRPTjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zOTctXHRcdFx0QVJWT19TUEVDSUFMX1JFUE9SVF9FVkVOVF9BQ1RJT05fUFJFU1MpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozOTg6XHRcdHJvY2NhdF9yZXBvcnQuYWN0aW9uID0gQVJWT19ST0NDQVRfUkVQT1JUX0FDVElPTl9QUkVTUztcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM5OS1cdGVsc2VcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQwMDpcdFx0cm9jY2F0X3JlcG9ydC5hY3Rpb24gPSBBUlZPX1JPQ0NBVF9SRVBPUlRfQUNUSU9OX1JFTEVBU0U7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy00MDEtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo0MDI6XHRyb2NjYXRfcmVwb3J0X2V2ZW50KGFydm8tXHUwMDNlY2hyZGV2X21pbm9yLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6NDAzOlx0XHRcdCh1aW50OF90IGNvbnN0ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy00MDQtfVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTQwNj1zdGF0aWMgaW50IGFydm9fcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTQxMy1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQxNDpcdGlmIChhcnZvIFx1MDAyNlx1MDAyNiBhcnZvLVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDE1LVx0XHRhcnZvX3JlcG9ydF90b19jaHJkZXYoYXJ2bywgZGF0YSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg9NTc9ZW51bSBhcnZvX3NwZWNpYWxfcmVwb3J0X2V2ZW50X21hc2tzIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaC02MS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjYyOnN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjMtXHR1aW50OF90IHByb2ZpbGU7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjctXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDo2ODplbnVtIGFydm9fcm9jY2F0X3JlcG9ydF9hY3Rpb24ge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjktXHRBUlZPX1JPQ0NBVF9SRVBPUlRfQUNUSU9OX1JFTEVBU0UgPSAwLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oPTczPXN0cnVjdCBhcnZvX2RldmljZSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDo3NDpcdGludCByb2NjYXRfY2xhaW1lZDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTc1LVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0OiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQtY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTUtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE2OnN0YXRpYyBpbmxpbmUgdWludDE2X3Qgcm9jY2F0X2NvbW1vbjJfZmVhdHVyZV9yZXBvcnQodWludDhfdCByZXBvcnRfaWQpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE3LXtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTIwLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoyMTppbnQgcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCByZXBvcnRfaWQsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTIyLVx0XHR2b2lkICpkYXRhLCB1aW50IHNpemUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0zMy1cdFx0XHRVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzozNDpcdFx0XHRyb2NjYXRfY29tbW9uMl9mZWF0dXJlX3JlcG9ydChyZXBvcnRfaWQpLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0zNS1cdFx0XHQwLCBidWYsIHNpemUsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQwLX1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NDE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQyLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo0MzppbnQgcm9jY2F0X2NvbW1vbjJfc2VuZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCByZXBvcnRfaWQsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQ0LVx0XHR2b2lkIGNvbnN0ICpkYXRhLCB1aW50IHNpemUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy01NS1cdFx0XHRVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NTY6XHRcdFx0cm9jY2F0X2NvbW1vbjJfZmVhdHVyZV9yZXBvcnQocmVwb3J0X2lkKSxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNTctXHRcdFx0MCwgYnVmLCBzaXplLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy02MS19XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjYyOkVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb21tb24yX3NlbmQpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy02My1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NjQ6ZW51bSByb2NjYXRfY29tbW9uMl9jb250cm9sX3N0YXRlcyB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTY1LVx0Uk9DQ0FUX0NPTU1PTl9DT05UUk9MX1NUQVRVU19DUklUSUNBTCA9IDAsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03MS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NzI6c3RhdGljIGludCByb2NjYXRfY29tbW9uMl9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03My17XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc0LVx0aW50IHJldHZhbDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NzU6XHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCBjb250cm9sO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03Ni1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc4LVx0XHRtc2xlZXAoNTApO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo3OTpcdFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy04MC1cdFx0XHRcdFJPQ0NBVF9DT01NT05fQ09NTUFORF9DT05UUk9MLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo4MTpcdFx0XHRcdFx1MDAyNmNvbnRyb2wsIHNpemVvZihzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCkpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy04Mi1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTk3LVx0XHRcdGRldl9lcnIoXHUwMDI2dXNiX2Rldi1cdTAwM2VkZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjk4Olx0XHRcdFx0XHRcJiMzNDtyb2NjYXRfY29tbW9uMl9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzOiBcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtOTktXHRcdFx0XHRcdFwmIzM0O3Vua25vd24gcmVzcG9uc2UgdmFsdWUgMHgleFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEwNi1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTA3OmludCByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMDgtXHRcdHVpbnQgY29tbWFuZCwgdm9pZCBjb25zdCAqYnVmLCB1aW50IHNpemUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMTEtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjExMjpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgY29tbWFuZCwgYnVmLCBzaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTEzLVx0aWYgKHJldHZhbClcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTExNy1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTE4Olx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3JlY2VpdmVfY29udHJvbF9zdGF0dXModXNiX2Rldik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTExOS19XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEyMDpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTIxLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMjI6aW50IHJvY2NhdF9jb21tb24yX2RldmljZV9pbml0X3N0cnVjdChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTIzOlx0XHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlICpkZXYpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyNC17XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMjctfVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMjg6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTI5LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMzA6c3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzMS1cdFx0Y2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMzQtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKS1cdTAwM2VwYXJlbnQtXHUwMDNlcGFyZW50O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMzU6XHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlICpyb2NjYXRfZGV2ID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTM2LVx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNDQtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0NTpcdG11dGV4X2xvY2soXHUwMDI2cm9jY2F0X2Rldi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ2Olx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0NzpcdG11dGV4X3VubG9jayhcdTAwMjZyb2NjYXRfZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNDgtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTAtfVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNTE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE1Mi1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTUzOnNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTU0LVx0XHR2b2lkIGNvbnN0ICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE1Ny1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopLVx1MDAzZXBhcmVudC1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE1ODpcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKnJvY2NhdF9kZXYgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTktXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE2NC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTY1Olx0bXV0ZXhfbG9jayhcdTAwMjZyb2NjYXRfZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjY6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTY3Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJvY2NhdF9kZXYtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE2OC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE3MC19XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE3Mi1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTE0LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoxNTplbnVtIHJvY2NhdF9jb21tb24yX2NvbW1hbmRzIHtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMTYtXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCA9IDB4NCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTE4LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoxOTpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTIwLVx0dWludDhfdCBjb21tYW5kO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjQtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI1OmludCByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjYtXHRcdHZvaWQgKmRhdGEsIHVpbnQgc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI3OmludCByb2NjYXRfY29tbW9uMl9zZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjgtXHRcdHZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI5OmludCByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0zMC1cdFx0dWludCBjb21tYW5kLCB2b2lkIGNvbnN0ICpidWYsIHVpbnQgc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTMxLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozMjpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlIHtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MzM6XHRpbnQgcm9jY2F0X2NsYWltZWQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM0LVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM3LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozODppbnQgcm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozOTpcdFx0c3RydWN0IHJvY2NhdF9jb21tb24yX2RldmljZSAqZGV2KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NDA6c3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQxLVx0XHRjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDItXHRcdHNpemVfdCByZWFsX3NpemUsIHVpbnQgY29tbWFuZCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjQzOnNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDQtXHRcdHZvaWQgY29uc3QgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDctI2RlZmluZSBST0NDQVRfQ09NTU9OMl9TWVNGU19XKHRoaW5neSwgQ09NTUFORCwgU0laRSkgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NDg6c3RhdGljIHNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGVfICMjIHRoaW5neShzdHJ1Y3QgZmlsZSAqZnAsIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQ5LVx0XHRzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIFxcXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC01MS17IFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjUyOlx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTUzLVx0XHRcdFNJWkUsIENPTU1BTkQpOyBcXFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNTYtI2RlZmluZSBST0NDQVRfQ09NTU9OMl9TWVNGU19SKHRoaW5neSwgQ09NTUFORCwgU0laRSkgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NTc6c3RhdGljIHNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZF8gIyMgdGhpbmd5KHN0cnVjdCBmaWxlICpmcCwgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNTgtXHRcdHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTYwLXsgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NjE6XHRyZXR1cm4gcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZChmcCwga29iaiwgYnVmLCBvZmYsIGNvdW50LCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC02Mi1cdFx0XHRTSVpFLCBDT01NQU5EKTsgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl8gIyMgdGhpbmd5ID0geyBcXFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNzMtXHQuc2l6ZSA9IFNJWkUsIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjc0Olx0LnJlYWQgPSByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkXyAjIyB0aGluZ3ksIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjc1Olx0LndyaXRlID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGVfICMjIHRoaW5neSBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC03Ni19XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaD04MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfICMjIHRoaW5neSA9IHsgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTgyLVx0LnNpemUgPSBTSVpFLCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo4MzpcdC5yZWFkID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZF8gIyMgdGhpbmd5LCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC04NC19XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaD04OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfICMjIHRoaW5neSA9IHsgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTkwLVx0LnNpemUgPSBTSVpFLCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo5MTpcdC53cml0ZSA9IHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlXyAjIyB0aGluZ3kgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtOTItfVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MjE6I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yMi0jaW5jbHVkZSBcJiMzNDtoaWQtaWRzLmhcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjIzOiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQtY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjI0OiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQtaXNrdS5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yNS1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMT1zdGF0aWMgaW50IGlza3VfcmVjZWl2ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCBjb21tYW5kLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMzLXtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM0Olx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgY29tbWFuZCwgYnVmLCBzaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTM1LX1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz00Nz1zdGF0aWMgaW50IGlza3Vfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBpbnQgbmV3X3Byb2ZpbGUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtNTMtXHRidWYuYWN0dWFsX3Byb2ZpbGUgPSBuZXdfcHJvZmlsZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjU0Olx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3NlbmRfd2l0aF9zdGF0dXModXNiX2RldixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTU1LVx0XHRcdElTS1VfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSwgXHUwMDI2YnVmLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jPTY3PXN0YXRpYyBzc2l6ZV90IGlza3Vfc3lzZnNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy03My1cdGludCByZXR2YWw7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo3NDpcdHN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTc1LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTk2LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6OTc6XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gSVNLVV9SRVBPUlRfQlVUVE9OX0VWRU5UX1BST0ZJTEU7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo5ODpcdHJvY2NhdF9yZXBvcnQuZGF0YTEgPSBwcm9maWxlICYjNDM7IDE7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo5OTpcdHJvY2NhdF9yZXBvcnQuZGF0YTIgPSAwO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTAwOlx0cm9jY2F0X3JlcG9ydC5wcm9maWxlID0gcHJvZmlsZSAmIzQzOyAxO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTAxOlx0cm9jY2F0X3JlcG9ydF9ldmVudChpc2t1LVx1MDAzZWNocmRldl9taW5vciwgKHVpbnQ4X3QgY29uc3QgKilcdTAwMjZyb2NjYXRfcmVwb3J0KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTEwMi1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0xMzc9c3RhdGljIHNzaXplX3QgaXNrdV9zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTE0OS1cdG11dGV4X2xvY2soXHUwMDI2aXNrdS1cdTAwM2Vpc2t1X2xvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTUwOlx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LCBjb21tYW5kLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMTUxLVx0XHRcdCh2b2lkICopYnVmLCBjb3VudCk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9MjY5PXN0YXRpYyBpbnQgaXNrdV9pbml0X3NwZWNpYWxzKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTI5NC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjI5NTpcdHJldHZhbCA9IHJvY2NhdF9jb25uZWN0KFx1MDAyNmlza3VfY2xhc3MsIGhkZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzoyOTY6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQpKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTI5Ny1cdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zMDAtXHRcdGlza3UtXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MzAxOlx0XHRpc2t1LVx1MDAzZXJvY2NhdF9jbGFpbWVkID0gMTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMwMi1cdH1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMTA9c3RhdGljIHZvaWQgaXNrdV9yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzE5LVx0aXNrdSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjMyMDpcdGlmIChpc2t1LVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MzIxOlx0XHRyb2NjYXRfZGlzY29ubmVjdChpc2t1LVx1MDAzZWNocmRldl9taW5vcik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zMjItXHRrZnJlZShpc2t1KTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zODI9c3RhdGljIHZvaWQgaXNrdV9yZXBvcnRfdG9fY2hyZGV2KHN0cnVjdCBpc2t1X2RldmljZSBjb25zdCAqaXNrdSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zODQte1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzg1Olx0c3RydWN0IGlza3Vfcm9jY2F0X3JlcG9ydCByb2NjYXRfcmVwb3J0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzg2LVx0c3RydWN0IGlza3VfcmVwb3J0X2J1dHRvbiBjb25zdCAqYnV0dG9uX3JlcG9ydDtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zOTItXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTM6XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gYnV0dG9uX3JlcG9ydC1cdTAwM2VldmVudDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5NDpcdHJvY2NhdF9yZXBvcnQuZGF0YTEgPSBidXR0b25fcmVwb3J0LVx1MDAzZWRhdGExO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk1Olx0cm9jY2F0X3JlcG9ydC5kYXRhMiA9IGJ1dHRvbl9yZXBvcnQtXHUwMDNlZGF0YTI7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTY6XHRyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBpc2t1LVx1MDAzZWFjdHVhbF9wcm9maWxlICYjNDM7IDE7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTc6XHRyb2NjYXRfcmVwb3J0X2V2ZW50KGlza3UtXHUwMDNlY2hyZGV2X21pbm9yLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk4Olx0XHRcdCh1aW50OF90IGNvbnN0ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zOTktfVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jPTQwMT1zdGF0aWMgaW50IGlza3VfcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTQxNS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjQxNjpcdGlmIChpc2t1LVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtNDE3LVx0XHRpc2t1X3JlcG9ydF90b19jaHJkZXYoaXNrdSwgZGF0YSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1Lmg9Nzc9ZW51bSBpc2t1X3JlcG9ydF9idXR0b25fZXZlbnRzIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaC04MC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjgxOnN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmgtODItXHR1aW50OF90IGV2ZW50O1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oPTg4PXN0cnVjdCBpc2t1X2RldmljZSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaDo4OTpcdGludCByb2NjYXRfY2xhaW1lZDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTkwLVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy0yOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjMwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFx1MDAzZVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtMzEtI2luY2x1ZGUgXCYjMzQ7aGlkLWlkcy5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzozMjojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWNvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzozMzojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWtvbmUuaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtMzQtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9NDU9c3RhdGljIHZvaWQga29uZV9wcm9maWxlX3JlcG9ydChzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUsIHVpbnQgbmV3X3Byb2ZpbGUpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy00Ni17XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo0NzpcdHN0cnVjdCBrb25lX3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTQ4LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NDk6XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0ga29uZV9tb3VzZV9ldmVudF9zd2l0Y2hfcHJvZmlsZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjUwOlx0cm9jY2F0X3JlcG9ydC52YWx1ZSA9IG5ld19wcm9maWxlO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NTE6XHRyb2NjYXRfcmVwb3J0LmtleSA9IDA7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo1MjpcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cdTAwM2VjaHJkZXZfbWlub3IsICh1aW50OF90ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy01My19XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9NjU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICprb25lX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTY1OC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjY1OTovKiBrb25lX2NsYXNzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHN5c2ZzIGF0dHJpYnV0ZXMgdmlhIHJvY2NhdCBjaGFyIGRldmljZSAqL1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNjYwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3Mga29uZV9jbGFzcyA9IHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz02OTk9c3RhdGljIGludCBrb25lX2luaXRfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzE5LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzIwOlx0XHRyZXR2YWwgPSByb2NjYXRfY29ubmVjdChcdTAwMjZrb25lX2NsYXNzLCBoZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzIxOlx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGtvbmVfcm9jY2F0X3JlcG9ydCkpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzIyLVx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzI1LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzI2Olx0XHRcdGtvbmUtXHUwMDNlcm9jY2F0X2NsYWltZWQgPSAxO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzI3LVx0XHRcdGtvbmUtXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTczOT1zdGF0aWMgdm9pZCBrb25lX3JlbW92ZV9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy03NDYtXHRcdGtvbmUgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3NDc6XHRcdGlmIChrb25lLVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzQ4Olx0XHRcdHJvY2NhdF9kaXNjb25uZWN0KGtvbmUtXHUwMDNlY2hyZGV2X21pbm9yKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTc0OS1cdFx0a2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz04MTM9c3RhdGljIHZvaWQga29uZV9yZXBvcnRfdG9fY2hyZGV2KHN0cnVjdCBrb25lX2RldmljZSBjb25zdCAqa29uZSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MTUte1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODE2Olx0c3RydWN0IGtvbmVfcm9jY2F0X3JlcG9ydCByb2NjYXRfcmVwb3J0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODE3LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTgyMi1cdGNhc2Uga29uZV9tb3VzZV9ldmVudF9vc2RfZHBpOlxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODIzOlx0XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gZXZlbnQtXHUwMDNlZXZlbnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MjQ6XHRcdHJvY2NhdF9yZXBvcnQudmFsdWUgPSBldmVudC1cdTAwM2V2YWx1ZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNTpcdFx0cm9jY2F0X3JlcG9ydC5rZXkgPSAwO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODI2Olx0XHRyb2NjYXRfcmVwb3J0X2V2ZW50KGtvbmUtXHUwMDNlY2hyZGV2X21pbm9yLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODI3Olx0XHRcdFx0KHVpbnQ4X3QgKilcdTAwMjZyb2NjYXRfcmVwb3J0KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTgyOC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODMxLVx0XHRpZiAoZXZlbnQtXHUwMDNldmFsdWUgPT0ga29uZV9rZXlzdHJva2VfYWN0aW9uX3ByZXNzKSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzI6XHRcdFx0cm9jY2F0X3JlcG9ydC5ldmVudCA9IGV2ZW50LVx1MDAzZWV2ZW50O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODMzOlx0XHRcdHJvY2NhdF9yZXBvcnQudmFsdWUgPSBrb25lLVx1MDAzZWFjdHVhbF9wcm9maWxlO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODM0Olx0XHRcdHJvY2NhdF9yZXBvcnQua2V5ID0gZXZlbnQtXHUwMDNlbWFjcm9fa2V5O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODM1Olx0XHRcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cdTAwM2VjaHJkZXZfbWlub3IsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzY6XHRcdFx0XHRcdCh1aW50OF90ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MzctXHRcdH1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz04NDg9c3RhdGljIGludCBrb25lX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04NzMtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4NzQ6XHRpZiAoa29uZS1cdTAwM2Vyb2NjYXRfY2xhaW1lZClcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTg3NS1cdFx0a29uZV9yZXBvcnRfdG9fY2hyZGV2KGtvbmUsIGV2ZW50KTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz05NzM9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBrb25lX3Rlc3Rfc3VpdGUgPSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo5NzQ6XHQubmFtZSA9IFwmIzM0O2hpZC1yb2NjYXQta29uZVwmIzM0OyxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTk3NS1cdC50ZXN0X2Nhc2VzID0ga29uZV90ZXN0X2Nhc2VzLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oPTE3Nz1lbnVtIGtvbmVfY29tbWFuZHMge1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTE4Ni1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oOjE4NzpzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0IHtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTE4OC1cdHVpbnQ4X3QgZXZlbnQ7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg9MTkzPXN0cnVjdCBrb25lX2RldmljZSB7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMjIxLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg6MjIyOlx0aW50IHJvY2NhdF9jbGFpbWVkO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMjIzLVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6MjI6I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtMjMtI2luY2x1ZGUgXCYjMzQ7aGlkLWlkcy5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6MjQ6I2luY2x1ZGUgXCYjMzQ7aGlkLXJvY2NhdC1jb21tb24uaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjI1OiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQta29uZXBsdXMuaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTI2LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYz0zNT1zdGF0aWMgaW50IGtvbmVwbHVzX3NlbmRfY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCB2YWx1ZSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtMzcte1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjM4Olx0c3RydWN0IHJvY2NhdF9jb21tb24yX2NvbnRyb2wgY29udHJvbDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy0zOS1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNDgtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6NDk6XHRyZXR1cm4gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTUwLVx0XHRcdFJPQ0NBVF9DT01NT05fQ09NTUFORF9DT05UUk9MLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjUxOlx0XHRcdFx1MDAyNmNvbnRyb2wsIHNpemVvZihzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCkpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTUyLX1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9NTY9c3RhdGljIGludCBrb25lcGx1c19nZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTYwLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjYxOlx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19DT01NQU5EX0FDVFVBTF9QUk9GSUxFLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTYyLVx0XHRcdFx1MDAyNmJ1ZiwgS09ORVBMVVNfU0laRV9BQ1RVQUxfUFJPRklMRSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jPTY3PXN0YXRpYyBpbnQga29uZXBsdXNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy03NS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYzo3NjpcdHJldHVybiByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNzctXHRcdFx0S09ORVBMVVNfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9ODE9c3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy05Ni1cdG11dGV4X2xvY2soXHUwMDI2a29uZXBsdXMtXHUwMDNla29uZXBsdXNfbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6OTc6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy05OC1cdG11dGV4X3VubG9jayhcdTAwMjZrb25lcGx1cy1cdTAwM2Vrb25lcGx1c19sb2NrKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTExOC1cdG11dGV4X2xvY2soXHUwMDI2a29uZXBsdXMtXHUwMDNla29uZXBsdXNfbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6MTE5Olx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LCBjb21tYW5kLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTEyMC1cdFx0XHRidWYsIHJlYWxfc2l6ZSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jPTI0OD1zdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19zZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSb2NjYXQgSElEIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGRyaXZlcnMvaGlkL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBjb25jZXJuaW5nIGBDT05GSUdfSElEX1JPQ0NBVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gUm9jY2F0IEhJRCBkZXZpY2VzLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBjaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgb3IgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBhcm91bmQgdGhpcyBjb25maWcgdG8gdW5kZXJzdGFuZCB3aGF0IFJvY2NhdCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQsIGFueSBzcGVjaWFsIGZlYXR1cmVzIGVuYWJsZWQsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMgb3IgbGltaXRhdGlvbnMuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIHdoZW4gSSYjMzk7bSBhc3Nlc3Npbmcgb3IgbW9kaWZ5aW5nIGRyaXZlciBjb25maWd1cmF0aW9ucy4gVGhpcyBjb25maWd1cmF0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc3VwcG9ydGluZyB0aGUgUm9jY2F0IHNlcmllcyBvZiBwZXJpcGhlcmFscyBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlbGwgdGhlIHN1cHBvcnQgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SElEX1JPQ0NBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9LY29uZmlnPTEwOTQ9Y29uZmlnIEhJRF9SRVRST0RFXG4tLVxuZHJpdmVycy9oaWQvS2NvbmZpZy0xMTAwLVxuZHJpdmVycy9oaWQvS2NvbmZpZzoxMTAxOmNvbmZpZyBISURfUk9DQ0FUXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDItXHR0cmlzdGF0ZSBcJiMzNDtSb2NjYXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDgtXG5kcml2ZXJzL2hpZC9LY29uZmlnOjExMDk6Y29uZmlnIEhJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMTAtXHRib29sIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgUm9jY2F0IEtvbmUgZHJpdmVyXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmRyaXZlcnMvaGlkL0tjb25maWc6MTExMTpcdGRlcGVuZHMgb24gSElEX1JPQ0NBVD15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMTItXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvaGlkL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfSElEX1JFVFJPREUpXHQmIzQzOz0gaGlkLXJldHJvZGUub1xuZHJpdmVycy9oaWQvTWFrZWZpbGU6MTI2Om9iai0kKENPTkZJR19ISURfUk9DQ0FUKVx0JiM0Mzs9IGhpZC1yb2NjYXQubyBoaWQtcm9jY2F0LWNvbW1vbi5vIFxcXG5kcml2ZXJzL2hpZC9NYWtlZmlsZS0xMjctXHRoaWQtcm9jY2F0LWFydm8ubyBoaWQtcm9jY2F0LWlza3UubyBoaWQtcm9jY2F0LWtvbmUubyBcXFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1xdWlya3MuYz0yNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF9oYXZlX3NwZWNpYWxfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXF1aXJrcy5jLTY1Ni0jZW5kaWZcbmRyaXZlcnMvaGlkL2hpZC1xdWlya3MuYzo2NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0hJRF9ST0NDQVQpXG5kcml2ZXJzL2hpZC9oaWQtcXVpcmtzLmMtNjU4LVx0eyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwgVVNCX0RFVklDRV9JRF9ST0NDQVRfQVJWTykgfSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0FSVk9fSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9BUlZPX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTQtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfQ09NTU9OX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9DT01NT05fSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC00LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfSVNLVV9IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX0lTS1VfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmgtNC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz05MjE9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTkyMi1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjkyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSElEX1JPQ0NBVF9LT05FX0tVTklUX1RFU1QpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy05MjQtI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9OTc3PWt1bml0X3Rlc3Rfc3VpdGUoa29uZV90ZXN0X3N1aXRlKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjk3ODojZW5kaWYgLyogQ09ORklHX0hJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUICovXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9LT05FX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfS09ORV9IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaC00LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9LT05FUExVU19IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9LT05FUExVU19IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmgtNC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfS09WQVBMVVNfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfS09WQVBMVVNfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oLTQtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1sdWEuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfTFVBX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtbHVhLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9MVUFfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1sdWEuaC00LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfUFlSQV9IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX1BZUkFfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmgtNC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX1NBVlVfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1zYXZ1Lmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9TQVZVX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtc2F2dS5oLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBISUQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzcGVjaWZpYyBISUQgZHJpdmVyLiBHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvaGlkL2AgZGlyZWN0b3J5LiBBbmQgc2luY2UgSSBrbm93IG15IHdheSBhcm91bmQgdGhlIHNvdXJjZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIHJvdWdobHkgbGluZSAxMTAxLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bnJhdmVsIHdoaWNoIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7UmV0cm9kZSAyIFVTQiBhZGFwdGVyIGZvciB2aW50YWdlIHZpZGVvIGdhbWVzXCYjMzQ7XG4xMDk2Olx0XHRkZXBlbmRzIG9uIFVTQl9ISURcbjEwOTc6XHRcdGhlbHBcbjEwOTg6XHRcdFN1cHBvcnQgZm9yXG4xMDk5Olx0XHQgICogUmV0cm9kZSAyIGNhcnRyaWRnZSBhbmQgY29udHJvbGxlciBhZGFwdGVyXG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIEhJRF9ST0NDQVRcbjExMDI6XHRcdHRyaXN0YXRlIFwmIzM0O1JvY2NhdCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuMTEwMzpcdFx0ZGVwZW5kcyBvbiBVU0JfSElEXG4xMTA0Olx0XHRoZWxwXG4xMTA1Olx0XHRTdXBwb3J0IGZvciBSb2NjYXQgZGV2aWNlcy5cbjExMDY6XHRcdFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSb2NjYXQgbW91c2Ugb3Iga2V5Ym9hcmQgYW5kIHdhbnRcbjExMDc6XHRcdHN1cHBvcnQgZm9yIGl0cyBzcGVjaWFsIGZ1bmN0aW9uYWxpdGllcy5cbjExMDg6XHRcbjExMDk6XHRjb25maWcgSElEX1JPQ0NBVF9LT05FX0tVTklUX1RFU1RcbjExMTA6XHRcdGJvb2wgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIHRoZSBSb2NjYXQgS29uZSBkcml2ZXJcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuMTExMTpcdFx0ZGVwZW5kcyBvbiBISURfUk9DQ0FUPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbjExMTI6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4xMTEzOlx0XHRoZWxwXG4xMTE0Olx0XHQgIEVuYWJsZSB0aGUgS1VuaXQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIFJvY2NhdCBLb25lIGRyaXZlcixcbjExMTU6XHRcdCAgY292ZXJpbmcgYm91bmRzIGNoZWNraW5nIG9mIGRldmljZS1zdXBwbGllZCBwcm9maWxlIGluZGljZXMuXG4xMTE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xMTE3Olx0XG4xMTE4Olx0Y29uZmlnIEhJRF9TQUlURUtcbjExMTk6XHRcdHRyaXN0YXRlIFwmIzM0O1NhaXRlayAoTWFkIENhdHopIG5vbi1mdWxseSBISUQtY29tcGxpYW50IGRldmljZXNcJiMzNDtcbjExMjA6XHRcdGhlbHBcbjExMjE6XHRcdFN1cHBvcnQgZm9yIFNhaXRlayBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCB0aGVcbjExMjI6XHRcdEhJRCBzdGFuZGFyZC5cbjExMjM6XHRcbjExMjQ6XHRcdFN1cHBvcnRlZCBkZXZpY2VzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBSb2NjYXQgSElEIERyaXZlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBSb2NjYXQgSElEIGRyaXZlciwgYW5kIGZyYW5rbHksIHRoZXJlJiMzOTtzIG5vIGJldHRlciB3YXkgdGhhbiB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjYW5vbmljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIGl04oCZbGwgY29udGFpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGFsbCB0aGUgZGVmaW5lZCBmdW5jdGlvbnMgYW5kLCBob3BlZnVsbHksIHdlbGwtc3RydWN0dXJlZCBsb2dpYy4gSG9wZWZ1bGx5IGl0JiMzOTtzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIG5hdmlnYXRlLCBiZWNhdXNlIEkgZG9uJiMzOTt0IGhhdmUgYWxsIGRheS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGZlYXR1cmUgcmVwb3J0cywgYW5kIGFueSBjdXN0b20gZXZlbnQgcHJvY2Vzc2luZyBmb3IgdGhlIFJvY2NhdCBoYXJkd2FyZS4gSSB3YW50IHRvIHNlZSAqZXZlcnl0aGluZyogYXQgYSBnbGFuY2UsIHNvIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBkcml2ZXImIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBpZGVudGlmeSB0aGUgY3JpdGljYWwgYXJlYXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBSb2NjYXQgZHJpdmVyIGZvciBMaW51eFxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwIFN0ZWZhbiBBY2hhdHogXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdC8qXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0LypcbiAgMTI6XHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XG4gIDEzOlx0ICogaGFyZHdhcmUgdG8gdXNlcmxhbmQuIFRoZXNlIGV2ZW50cyBpbmNsdWRlIHJlcXVlc3RzIGZvciBvbi1zY3JlZW4tZGlzcGxheSBvZlxuICAxNDpcdCAqIHByb2ZpbGUgb3IgZHBpIHNldHRpbmdzIG9yIHJlcXVlc3RzIGZvciBleGVjdXRpb24gb2YgbWFjcm8gc2VxdWVuY2VzIHRoYXQgYXJlXG4gIDE1Olx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXG4gIDE2Olx0ICogaW1wbGVtZW50YXRpb24gYW5kIGNvbnRhaW5zIGRhdGEgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIGEgc2luZ2xlIGhpZCBldmVudFxuICAxNzpcdCAqIG9yIGVsc2UgaGlkcmF3IGNvdWxkIGhhdmUgYmVlbiB1c2VkLlxuICAxODpcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cbiAgMTk6XHQgKi9cbiAgMjA6XHRcbiAgMjE6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXG4gIDMyOlx0I2RlZmluZSBST0NDQVRfTUFYX0RFVklDRVMgOFxuICAzMzpcdFxuICAzNDpcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xuICAzNTpcdCNkZWZpbmUgUk9DQ0FUX0NCVUZfU0laRSAxNlxuICAzNjpcdFxuICAzNzpcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcbiAgMzg6XHRcdHVpbnQ4X3QgKnZhbHVlO1xuICAzOTpcdH07XG4gIDQwOlx0XG4gIDQxOlx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xuICA0MjpcdFx0c3RydWN0IGtyZWYga3JlZjtcbiAgNDM6XHRcdHVuc2lnbmVkIGludCBtaW5vcjtcbiAgNDQ6XHRcdGludCByZXBvcnRfc2l6ZTtcbiAgNDU6XHRcdGludCBvcGVuO1xuICA0NjpcdFx0aW50IGV4aXN0O1xuICA0NzpcdFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbiAgNDg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiAgNDk6XHRcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XG4gIDUwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XG4gIDUxOlx0XHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xuICA1MjpcdFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcbiAgNTM6XHRcbiAgNTQ6XHRcdC8qXG4gIDU1Olx0XHQgKiBjaXJjdWxhcl9idWZmZXIgaGFzIG9uZSB3cml0ZXIgYW5kIG11bHRpcGxlIHJlYWRlcnMgd2l0aCB0aGVpciBvd25cbiAgNTY6XHRcdCAqIHJlYWQgcG9pbnRlcnNcbiAgNTc6XHRcdCAqL1xuICA1ODpcdFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgY2J1ZltST0NDQVRfQ0JVRl9TSVpFXTtcbiAgNTk6XHRcdGludCBjYnVmX2VuZDtcbiAgNjA6XHRcdHN0cnVjdCBtdXRleCBjYnVmX2xvY2s7XG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciB7XG4gIDY0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gIDY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuICA2NjpcdFx0aW50IGNidWZfc3RhcnQ7XG4gIDY3Olx0fTtcbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW50IHJvY2NhdF9tYWpvcjtcbiAgNzA6XHRzdGF0aWMgc3RydWN0IGNkZXYgcm9jY2F0X2NkZXY7XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XG4gIDczOlx0LyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovXG4gIDc0Olx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xuICA3NTpcdFxuICA3NjpcdHN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cbiAgNzk6XHRcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTtcbiAgODA6XHRcdGludCBpO1xuICA4MTpcdFxuICA4MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUk9DQ0FUX0NCVUZfU0laRTsgaSYjNDM7JiM0MzspXG4gIDgzOlx0XHRcdGtmcmVlKGRldmljZS1cdTAwM2VjYnVmW2ldLnZhbHVlKTtcbiAgODQ6XHRcdGtmcmVlKGRldmljZSk7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBzc2l6ZV90IHJvY2NhdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuICA4ODpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAgODk6XHR7XG4gIDkwOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDkxOlx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiAgOTI6XHRcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XG4gIDkzOlx0XHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcbiAgOTQ6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuICA5NTpcdFxuICA5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAgOTc6XHRcbiAgOTg6XHRcdC8qIG5vIGRhdGE/ICovXG4gIDk5Olx0XHRpZiAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTAwOlx0XHRcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0LCBcdTAwMjZ3YWl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIG9wZXJhdGVzLiBLbm93aW5nIHRoZSBiYXNpY3Mgb2YgSElELCBhbmQgaGF2aW5nIHBva2VkIGFyb3VuZCBpbiB0aGUgb3RoZXIgZHJpdmVycywgSSBjYW4gcHJvYmFibHkgcGllY2UgdG9nZXRoZXIgdGhlIGNvcmUgbG9naWMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIGFuZCBtYXBwaW5ncyBmb3IgUm9jY2F0IGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgcmVwb3J0IGRlc2NyaXB0b3IgcGFyc2luZywgYW5kIGhvdyBpdCB0cmFuc2xhdGVzIHRob3NlIEhJRCByZXBvcnRzIGludG8gbWVhbmluZ2Z1bCBldmVudHMgZm9yIHRoZSBzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbWJpbmF0aW9uIG9mIHN0YW5kYXJkIEhJRCB1c2FnZSBwYWdlcyBhbmQgc29tZSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBhbmQgZmVhdHVyZSByZXBvcnRzIHdpbGwgYmUgY3J1Y2lhbCB0b28sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gdXN1YWxseSBsaXZlcy4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBpbnRlcnJ1cHQgaGFuZGxpbmcgb3IgcG9sbGluZyBzdHJhdGVnaWVzLCBhcyBSb2NjYXQgZGV2aWNlcyBvZnRlbiBoYXZlIGNvbXBsZXggZmVhdHVyZXMgdGhhdCBkZW1hbmQgc29tZSBjdXN0b20gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHNvbWUgaW50ZXJwbGF5IGJldHdlZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLiBGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgZGVidWdnaW5nIG1lY2hhbmlzbXMgdXNlZC4gS25vd2luZyBob3cgdGhlIGRyaXZlciByZXNwb25kcyB0byB1bmV4cGVjdGVkIGRldmljZSBiZWhhdmlvciBvciBjb21tdW5pY2F0aW9uIGVycm9ycyBpcyBlc3NlbnRpYWwgZm9yIGRlYnVnZ2luZyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0Lyogd2FpdCBmb3IgZGF0YSAqL1xuIDEwNDpcdFx0XHR3aGlsZSAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTA1Olx0XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSykge1xuIDEwNjpcdFx0XHRcdFx0cmV0dmFsID0gLUVBR0FJTjtcbiAxMDc6XHRcdFx0XHRcdGJyZWFrO1xuIDEwODpcdFx0XHRcdH1cbiAxMDk6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAxMTA6XHRcdFx0XHRcdHJldHZhbCA9IC1FUkVTVEFSVFNZUztcbiAxMTE6XHRcdFx0XHRcdGJyZWFrO1xuIDExMjpcdFx0XHRcdH1cbiAxMTM6XHRcdFx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDExNDpcdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbiAxMTU6XHRcdFx0XHRcdGJyZWFrO1xuIDExNjpcdFx0XHRcdH1cbiAxMTc6XHRcbiAxMTg6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMTE5Olx0XHRcdFx0c2NoZWR1bGUoKTtcbiAxMjA6XHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuIDEyMTpcdFx0XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gMTIyOlx0XHRcdH1cbiAxMjM6XHRcbiAxMjQ6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAxMjU6XHRcdFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0LyogaGVyZSB3ZSBlaXRoZXIgaGF2ZSBkYXRhIG9yIGEgcmVhc29uIHRvIHJldHVybiBpZiByZXR2YWwgaXMgc2V0ICovXG4gMTI5Olx0XHRpZiAocmV0dmFsKVxuIDEzMDpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDEzMTpcdFxuIDEzMjpcdFx0cmVwb3J0ID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZbcmVhZGVyLVx1MDAzZWNidWZfc3RhcnRdO1xuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIElmIHJlcG9ydCBpcyBsYXJnZXIgdGhhbiByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEsIHJlc3Qgb2YgcmVwb3J0XG4gMTM1Olx0XHQgKiBpcyBsb3N0IVxuIDEzNjpcdFx0ICovXG4gMTM3Olx0XHRsZW4gPSBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgXHUwMDNlIGNvdW50ID8gY291bnQgOiBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemU7XG4gMTM4Olx0XG4gMTM5Olx0XHRpZiAoY29weV90b191c2VyKGJ1ZmZlciwgcmVwb3J0LVx1MDAzZXZhbHVlLCBsZW4pKSB7XG4gMTQwOlx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gMTQxOlx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMTQyOlx0XHR9XG4gMTQzOlx0XHRyZXR2YWwgJiM0Mzs9IGxlbjtcbiAxNDQ6XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAxNDU6XHRcbiAxNDY6XHRleGl0X3VubG9jazpcbiAxNDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAxNDg6XHRcdHJldHVybiByZXR2YWw7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyBfX3BvbGxfdCByb2NjYXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiAxNTI6XHR7XG4gMTUzOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMTU0Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2cmVhZGVyLVx1MDAzZWRldmljZS1cdTAwM2V3YWl0LCB3YWl0KTtcbiAxNTU6XHRcdGlmIChyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCAhPSByZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWNidWZfZW5kKVxuIDE1NjpcdFx0XHRyZXR1cm4gRVBPTExJTiB8IEVQT0xMUkROT1JNO1xuIDE1NzpcdFx0aWYgKCFyZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWV4aXN0KVxuIDE1ODpcdFx0XHRyZXR1cm4gRVBPTExFUlIgfCBFUE9MTEhVUDtcbiAxNTk6XHRcdHJldHVybiAwO1xuIDE2MDpcdH1cbiAxNjE6XHRcbiAxNjI6XHRzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDE2MzpcdHtcbiAxNjQ6XHRcdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XG4gMTY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xuIDE2NjpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAxNjc6XHRcdGludCBlcnJvciA9IDA7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZWFkZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm9jY2F0X3JlYWRlcik7XG4gMTcwOlx0XHRpZiAoIXJlYWRlcilcbiAxNzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTcyOlx0XG4gMTczOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMTc0Olx0XG4gMTc1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICghZGV2aWNlKSB7XG4gMTc4Olx0XHRcdHByX2VtZXJnKFwmIzM0O3JvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2VzbiYjMzk7dCBleGlzdFxcblwmIzM0OywgbWlub3IpO1xuIDE3OTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTgwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDE4MTpcdFx0XHRrZnJlZShyZWFkZXIpO1xuIDE4MjpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4gMTg2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAxODc6XHRcbiAxODg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMTg5Olx0XG4gMTkwOlx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDE5MTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTkyOlx0XHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbiAxOTM6XHRcdH1cbiAxOTQ6XHRcbiAxOTU6XHRcdGlmICghZGV2aWNlLVx1MDAzZW9wZW4mIzQzOyYjNDM7KSB7XG4gMTk2Olx0XHRcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXG4gMTk3Olx0XHRcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcbiAxOTg6XHRcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gMTk5Olx0XHRcdFx0LS1kZXZpY2UtXHUwMDNlb3BlbjtcbiAyMDA6XHRcdFx0XHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDc3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duLgoKKipBbmFseXppbmcgdGhlIFdvcmtmbG93KioKCkFscmlnaHQsIEkmIzM5O20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byBjb250aW51ZSBteSBhbmFseXNpcy4gVGhlIGN1cnJlbnQgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnQgSSYjMzk7bSBmb2N1c2luZyBvbiBlbmRzIGF0IGxpbmUgMjAwLCBzbyBJIG5lZWQgdG8gcGljayB1cCB0aGUgdGhyZWFkIGF0IGxpbmUgMjAxIGFuZCBwcm9jZWVkIHRvIGxpbmUgNDMwLiBUaGlzIHNlZW1zIHRvIGltcGx5IGEgc3RydWN0dXJlZCBhcHByb2FjaCB0byB0aGUgZGF0YSwgcGVyaGFwcyBhIHNlZ21lbnRlZCByZXNlYXJjaCBwYXBlciwgY29kZSBjaHVuaywgb3IgZXZlbiBhIGxvZyBmaWxlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCAyMDEtNDMwIGNvbnRhaW5zIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgcHJvamVjdC4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGVsZW1lbnRzIGluIHRoaXMgcGFydCBvZiB0aGUgZG9jdW1lbnQsIGFzIGl0IGNvdWxkIGhhdmUga2V5IGluc2lnaHRzLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAxOlx0XHRcdH1cbiAyMDI6XHRcbiAyMDM6XHRcdFx0ZXJyb3IgPSBoaWRfaHdfb3BlbihkZXZpY2UtXHUwMDNlaGlkKTtcbiAyMDQ6XHRcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gMjA1Olx0XHRcdFx0aGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcbiAyMDY6XHRcdFx0XHQtLWRldmljZS1cdTAwM2VvcGVuO1xuIDIwNzpcdFx0XHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbiAyMDg6XHRcdFx0fVxuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0cmVhZGVyLVx1MDAzZWRldmljZSA9IGRldmljZTtcbiAyMTI6XHRcdC8qIG5ldyByZWFkZXIgZG9lc24mIzM5O3QgZ2V0IG9sZCBldmVudHMgKi9cbiAyMTM6XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gZGV2aWNlLVx1MDAzZWNidWZfZW5kO1xuIDIxNDpcdFxuIDIxNTpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZyZWFkZXItXHUwMDNlbm9kZSwgXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIDIxNjpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSByZWFkZXI7XG4gMjE3Olx0XG4gMjE4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMjE5Olx0XHRyZXR1cm4gMDtcbiAyMjA6XHRcbiAyMjE6XHRleGl0X2Vycl9yZWFkZXJzOlxuIDIyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIDIyMzpcdFx0a3JlZl9wdXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XG4gMjI0Olx0XHRrZnJlZShyZWFkZXIpO1xuIDIyNTpcdFx0cmV0dXJuIGVycm9yO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiAyMjg6XHRzdGF0aWMgaW50IHJvY2NhdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDIyOTpcdHtcbiAyMzA6XHRcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyMzE6XHRcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXHUwMDNlZGV2aWNlO1xuIDIzMjpcdFxuIDIzMzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyMzQ6XHRcdGxpc3RfZGVsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlKTtcbiAyMzU6XHRcbiAyMzY6XHRcdGlmICghLS1kZXZpY2UtXHUwMDNlb3Blbikge1xuIDIzNzpcdFx0XHQvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqL1xuIDIzODpcdFx0XHRpZiAoZGV2aWNlLVx1MDAzZWV4aXN0KSB7XG4gMjM5Olx0XHRcdFx0aGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcbiAyNDA6XHRcdFx0XHRoaWRfaHdfY2xvc2UoZGV2aWNlLVx1MDAzZWhpZCk7XG4gMjQxOlx0XHRcdH1cbiAyNDI6XHRcdH1cbiAyNDM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyNDQ6XHRcbiAyNDU6XHRcdGtmcmVlKHJlYWRlcik7XG4gMjQ2Olx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiAyNDc6XHRcbiAyNDg6XHRcdHJldHVybiAwO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHQvKlxuIDI1MjpcdCAqIHJvY2NhdF9yZXBvcnRfZXZlbnQoKSAtIG91dHB1dCBkYXRhIHRvIHJlYWRlcnNcbiAyNTM6XHQgKiBAbWlub3I6IG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxuIDI1NDpcdCAqIEBkYXRhOiBwb2ludGVyIHRvIGRhdGFcbiAyNTU6XHQgKlxuIDI1NjpcdCAqIFJldHVybiB2YWx1ZSBpcyB6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuIDI1NzpcdCAqXG4gMjU4Olx0ICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlci5cbiAyNTk6XHQgKi9cbiAyNjA6XHRpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxuIDI2MTpcdHtcbiAyNjI6XHRcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4gMjYzOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xuIDI2NDpcdFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgKnJlcG9ydDtcbiAyNjU6XHRcdHVpbnQ4X3QgKm5ld192YWx1ZTtcbiAyNjY6XHRcbiAyNjc6XHRcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbiAyNjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjY5Olx0XG4gMjcwOlx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAyNzE6XHRcdGlmICghZGV2aWNlKVxuIDI3MjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyNzM6XHRcbiAyNzQ6XHRcdG5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcbiAyNzU6XHRcdGlmICghbmV3X3ZhbHVlKVxuIDI3NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNzc6XHRcbiAyNzg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMjc5Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuIDI4MDpcdFxuIDI4MTpcdFx0cmVwb3J0ID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZbZGV2aWNlLVx1MDAzZWNidWZfZW5kXTtcbiAyODI6XHRcbiAyODM6XHRcdC8qIHBhc3NpbmcgTlVMTCBpcyBzYWZlICovXG4gMjg0Olx0XHRrZnJlZShyZXBvcnQtXHUwMDNldmFsdWUpO1xuIDI4NTpcdFxuIDI4NjpcdFx0cmVwb3J0LVx1MDAzZXZhbHVlID0gbmV3X3ZhbHVlO1xuIDI4NzpcdFx0ZGV2aWNlLVx1MDAzZWNidWZfZW5kID0gKGRldmljZS1cdTAwM2VjYnVmX2VuZCAmIzQzOyAxKSAlIFJPQ0NBVF9DQlVGX1NJWkU7XG4gMjg4Olx0XG4gMjg5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlYWRlciwgXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMsIG5vZGUpIHtcbiAyOTA6XHRcdFx0LypcbiAyOTE6XHRcdFx0ICogQXMgd2UgYWxyZWFkeSBpbnNlcnRlZCBvbmUgZWxlbWVudCwgdGhlIGJ1ZmZlciBjYW4mIzM5O3QgYmVcbiAyOTI6XHRcdFx0ICogZW1wdHkuIElmIHN0YXJ0IGFuZCBlbmQgYXJlIGVxdWFsLCBidWZmZXIgaXMgZnVsbCBhbmQgd2VcbiAyOTM6XHRcdFx0ICogaW5jcmVhc2Ugc3RhcnQsIHNvIHRoYXQgc2xvdyByZWFkZXIgbWlzc2VzIG9uZSBldmVudCwgYnV0XG4gMjk0Olx0XHRcdCAqIGdldHMgdGhlIG5ld2VyIG9uZXMgaW4gdGhlIHJpZ2h0IG9yZGVyLlxuIDI5NTpcdFx0XHQgKi9cbiAyOTY6XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cdTAwM2VjYnVmX2VuZClcbiAyOTc6XHRcdFx0XHRyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCA9IChyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCAmIzQzOyAxKSAlIFJPQ0NBVF9DQlVGX1NJWkU7XG4gMjk4Olx0XHR9XG4gMjk5Olx0XG4gMzAwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzQ3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgRGVlcGVyOiBOZXh0IENodW5rIEFuYWx5c2lzKioKClJpZ2h0LCBsZXQmIzM5O3Mga2VlcCBtb3ZpbmcuIEkmIzM5O3ZlIGZpbmlzaGVkIHRoZSBpbml0aWFsIHNlY3Rpb25zLCBhbmQgbm93IEkgbmVlZCB0byBzaGlmdCBmb2N1cyB0byB0aGUgbmV4dCBibG9jayBvZiB0ZXh0IOKAkyBzcGVjaWZpY2FsbHksIGxpbmVzIDMwMSB0aHJvdWdoIDQ0MC4gVGhpcyBpc24mIzM5O3QganVzdCBhIG1hdHRlciBvZiBzZXF1ZW50aWFsIHJlYWRpbmc7IGl0JiMzOTtzIGFib3V0IHN0cmF0ZWdpY2FsbHkgbmF2aWdhdGluZyB0aGUgaW5mb3JtYXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV4dCBzZWN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIGFyZ3VtZW50IG9yIG5hcnJhdGl2ZSBhcmMuIEFyZSB3ZSBtb3ZpbmcgaW50byBhIG1vcmUgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgYSBrZXkgY29uY2VwdCBpbnRyb2R1Y2VkIGVhcmxpZXI/IERvZXMgdGhpcyBzZWdtZW50IHByZXNlbnQgc3VwcG9ydGluZyBldmlkZW5jZSwgY291bnRlcmFyZ3VtZW50cywgb3IgcGVyaGFwcyBhIGNvbXBsZXRlbHkgbmV3IHBlcnNwZWN0aXZlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBzY3J1dGlueT8gSeKAmW0gZXhwZWN0aW5nIGEgY2VydGFpbiB0eXBlIG9mIGNvbnRlbnQsIGJ1dCBJIGhhdmUgdG8gcmVtYWluIG9iamVjdGl2ZSBhYm91dCB3aGF0IEkgZmluZC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IFdoYXQgaW5zaWdodHMgb3IgZGV0YWlscyBkb2VzIHRoaXMgYmxvY2sgcHJvdmlkZSB0aGF0IGFyZSBjcml0aWNhbCB0byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgd29yaz8gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4gMzA0Olx0XHRyZXR1cm4gMDtcbiAzMDU6XHR9XG4gMzA2Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XG4gMzA3Olx0XG4gMzA4Olx0LypcbiAzMDk6XHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XG4gMzEwOlx0ICogQGNsYXNzOiB0aGUgY2xhc3MgdGhhdHMgdXNlZCB0byBjcmVhdGUgdGhlIGRldmljZS4gTWVhbnQgdG8gaG9sZCBkZXZpY2VcbiAzMTE6XHQgKiBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzLlxuIDMxMjpcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuIDMxMzpcdCAqIEByZXBvcnRfc2l6ZTogc2l6ZSBvZiByZXBvcnRzXG4gMzE0Olx0ICpcbiAzMTU6XHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxuIDMxNjpcdCAqIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuIDMxNzpcdCAqL1xuIDMxODpcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXG4gMzE5Olx0e1xuIDMyMDpcdFx0dW5zaWduZWQgaW50IG1pbm9yO1xuIDMyMTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAzMjI6XHRcdGludCB0ZW1wO1xuIDMyMzpcdFxuIDMyNDpcdFx0ZGV2aWNlID0ga3phbGxvY19vYmooc3RydWN0IHJvY2NhdF9kZXZpY2UpO1xuIDMyNTpcdFx0aWYgKCFkZXZpY2UpXG4gMzI2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMyNzpcdFxuIDMyODpcdFx0a3JlZl9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbiAzMjk6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuIDMzMDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIDMzMTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMzI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMzMzOlx0XHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuIDMzNDpcdFx0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbiAzMzU6XHRcdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4gMzM2Olx0XHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbiAzMzc6XHRcbiAzMzg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAzMzk6XHRcbiAzNDA6XHRcdGZvciAobWlub3IgPSAwOyBtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyAmIzQzOyYjNDM7bWlub3IpIHtcbiAzNDE6XHRcdFx0aWYgKGRldmljZXNbbWlub3JdKVxuIDM0MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDM0MzpcdFx0XHRicmVhaztcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdGlmIChtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTKSB7XG4gMzQ3Olx0XHRcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xuIDM0ODpcdFx0fSBlbHNlIHtcbiAzNDk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzUwOlx0XHRcdGtmcmVlKGRldmljZSk7XG4gMzUxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1MjpcdFx0fVxuIDM1MzpcdFxuIDM1NDpcdFx0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4gMzU1Olx0XG4gMzU2Olx0XHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiAzNTc6XHRcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiAzNTg6XHRcdFx0XHRcJiMzNDslcyVzJWRcJiMzNDssIFwmIzM0O3JvY2NhdFwmIzM0OywgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoSVNfRVJSKGRldmljZS1cdTAwM2VkZXYpKSB7XG4gMzYxOlx0XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzNjI6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzYzOlx0XHRcdHRlbXAgPSBQVFJfRVJSKGRldmljZS1cdTAwM2VkZXYpO1xuIDM2NDpcdFx0XHRrZnJlZShkZXZpY2UpO1xuIDM2NTpcdFx0XHRyZXR1cm4gdGVtcDtcbiAzNjY6XHRcdH1cbiAzNjc6XHRcbiAzNjg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM2OTpcdFxuIDM3MDpcdFx0cmV0dXJuIG1pbm9yO1xuIDM3MTpcdH1cbiAzNzI6XHRFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XG4gMzczOlx0XG4gMzc0Olx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcbiAzNzU6XHQgKiBAbWlub3I6IHRoZSBtaW5vciBkZXZpY2UgbnVtYmVyIHJldHVybmVkIGJ5IHJvY2NhdF9jb25uZWN0KClcbiAzNzY6XHQgKi9cbiAzNzc6XHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcbiAzNzg6XHR7XG4gMzc5Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuIDM4MDpcdFxuIDM4MTpcdFx0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuIDM4MjpcdFx0XHRyZXR1cm47XG4gMzgzOlx0XG4gMzg0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzg1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAzODY6XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzODc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKCFkZXZpY2UpXG4gMzkwOlx0XHRcdHJldHVybjtcbiAzOTE6XHRcbiAzOTI6XHRcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiAzOTM6XHRcbiAzOTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMzk1Olx0XHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwO1xuIDM5NjpcdFx0aWYgKGRldmljZS1cdTAwM2VvcGVuKSB7XG4gMzk3Olx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiAzOTg6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbiAzOTk6XHRcdH1cbiA0MDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkZpbGUgSW5zcGVjdGlvbiAtIEZpbmFsIFRob3VnaHRzIEZpcnN0KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24sIGxldCYjMzk7cyBhZG9wdCBhIGNyaXRpY2FsLCBleHBlcmllbmNlZCBzdGFuY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGhlYWQgdG8gdGhlIHRhaWwgZW5kIG9mIHRoZSBmaWxlLiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHRoZSBjb25jbHVzaXZlIHBpZWNlcyBvciBwb3RlbnRpYWwgZXJyb3IgbWVzc2FnZXMgd291bGQgcmVzaWRlIGhlcmUsIG9mZmVyaW5nIGEgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0ZXZlciB0aGUgcHJvY2VzcyBoYXMgYWNoaWV2ZWQuIEJ5IGV4YW1pbmluZyB3aGF0JiMzOTtzIGNvbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBpdCYjMzk7cyBvZnRlbiBmYXN0ZXIgdG8gZGVkdWNlIHRoZSBnZW5lcmFsIHN0YXRlIG9mIHRoZSBkYXRhLCBhbmQgd2hldGhlciB0aGUgcHJpbWFyeSB0YXNrIGhhcyBiZWVuIGFjaGlldmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAxOlx0XG4gNDAyOlx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiA0MDM6XHR9XG4gNDA0Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xuIDQwNTpcdFxuIDQwNjpcdHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gNDA3Olx0e1xuIDQwODpcdFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDQwOTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gNDEwOlx0XHRsb25nIHJldHZhbCA9IDA7XG4gNDExOlx0XG4gNDEyOlx0XHRzd2l0Y2ggKGNtZCkge1xuIDQxMzpcdFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiA0MTQ6XHRcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuIDQxNTpcdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gNDE2Olx0XHRcdGJyZWFrO1xuIDQxNzpcdFx0ZGVmYXVsdDpcbiA0MTg6XHRcdFx0cmV0dmFsID0gLUVOT1RUWTtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldHVybiByZXR2YWw7XG4gNDIyOlx0fVxuIDQyMzpcdFxuIDQyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJvY2NhdF9vcHMgPSB7XG4gNDI1Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA0MjY6XHRcdC5yZWFkID0gcm9jY2F0X3JlYWQsXG4gNDI3Olx0XHQucG9sbCA9IHJvY2NhdF9wb2xsLFxuIDQyODpcdFx0Lm9wZW4gPSByb2NjYXRfb3BlbixcbiA0Mjk6XHRcdC5yZWxlYXNlID0gcm9jY2F0X3JlbGVhc2UsXG4gNDMwOlx0XHQubGxzZWVrID0gbm9vcF9sbHNlZWssXG4gNDMxOlx0XHQudW5sb2NrZWRfaW9jdGwgPSByb2NjYXRfaW9jdGwsXG4gNDMyOlx0fTtcbiA0MzM6XHRcbiA0MzQ6XHRzdGF0aWMgaW50IF9faW5pdCByb2NjYXRfaW5pdCh2b2lkKVxuIDQzNTpcdHtcbiA0MzY6XHRcdGludCByZXR2YWw7XG4gNDM3Olx0XHRkZXZfdCBkZXZfaWQ7XG4gNDM4Olx0XG4gNDM5Olx0XHRyZXR2YWwgPSBhbGxvY19jaHJkZXZfcmVnaW9uKFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxuIDQ0MDpcdFx0XHRcdFJPQ0NBVF9NQVhfREVWSUNFUywgXCYjMzQ7cm9jY2F0XCYjMzQ7KTtcbiA0NDE6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiA0NDI6XHRcdFx0cHJfd2FybihcJiMzNDtjYW4mIzM5O3QgZ2V0IG1ham9yIG51bWJlclxcblwmIzM0Oyk7XG4gNDQzOlx0XHRcdGdvdG8gZXJyb3I7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XG4gNDQ2Olx0XHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0Y2Rldl9pbml0KFx1MDAyNnJvY2NhdF9jZGV2LCBcdTAwMjZyb2NjYXRfb3BzKTtcbiA0NDk6XHRcdHJldHZhbCA9IGNkZXZfYWRkKFx1MDAyNnJvY2NhdF9jZGV2LCBkZXZfaWQsIFJPQ0NBVF9NQVhfREVWSUNFUyk7XG4gNDUwOlx0XG4gNDUxOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKSB7XG4gNDUyOlx0XHRcdHByX3dhcm4oXCYjMzQ7Y2Fubm90IGFkZCBjZGV2XFxuXCYjMzQ7KTtcbiA0NTM6XHRcdFx0Z290byBjbGVhbnVwX2FsbG9jX2NocmRldl9yZWdpb247XG4gNDU0Olx0XHR9XG4gNDU1Olx0XHRyZXR1cm4gMDtcbiA0NTY6XHRcbiA0NTc6XHRcbiA0NTg6XHQgY2xlYW51cF9hbGxvY19jaHJkZXZfcmVnaW9uOlxuIDQ1OTpcdFx0dW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl9pZCwgUk9DQ0FUX01BWF9ERVZJQ0VTKTtcbiA0NjA6XHQgZXJyb3I6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDYyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGFjY2Vzc2liaWxpdHkgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgbGlrZSBRRU1VLiBHb29kLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSBjYW4gc2ltdWxhdGUgVVNCIEhJRCBkZXZpY2VzIGluIFFFTVUgdXNpbmcgc2V2ZXJhbCBtZXRob2RzOiBVU0IgUmF3IEdhZGdldCwgRHVtbXkgSENELCBVSElELCBvciBldmVuIHRoZSBzdGFuZGFyZCBRRU1VIFVTQiBlbXVsYXRpb24uIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHdpdGhvdXQgbmVlZGluZyB0aGUgYWN0dWFsIGhhcmR3YXJlLgoKTm93LCBmcm9tIHdoYXQgSSBnYXRoZXIsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGlzc3VlcyB3aXRoaW4gdGhlIFJvY2NhdCBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW50IGNhbGxzIHRvIGZpbGUgb3BlcmF0aW9ucy4gQmFzaWNhbGx5LCBpdOKAmXMgYWJvdXQgZml4aW5nIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSB0byBtYWtlIGl0IHNhZmVyIHdoZW4gZGV2aWNlcyBhcmUgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCB3aGlsZSBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X2lvY3RsYCwgYW5kIG90aGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBzaW11bHRhbmVvdXNseS4KCkkmIzM5O20gY2hlY2tpbmcgdGhlIGtleSBmdW5jdGlvbnMgdGFyZ2V0ZWQgYnkgdGhlIHBhdGNoOiBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X3JlcG9ydF9ldmVudGAsIGByb2NjYXRfY29ubmVjdGAsIGByb2NjYXRfZGlzY29ubmVjdGAsIGFuZCBgcm9jY2F0X2lvY3RsYC4gSSB3YW50IHRvIHZlcmlmeSBpZiB0aGV5IGFyZSBleHBvcnRlZCBvciBub3QsIGFuZCBJIHNlZSBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBhbmQgYHJvY2NhdF9yZXBvcnRfZXZlbnRgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMgZm9wcy4KCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzLCBub3QgaG90LXBhdGggY29kZS4gVGhleSBhcmUgaW5kZWVkIHRoZSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBmb3IgdGhlIFJvY2NhdCBkZXZpY2UgaW50ZXJmYWNlLiBUaGlzIGNvbmZpcm1zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBjcnVjaWFsLCBhcyB0aGVzZSBlbnRyeXBvaW50cyB3b3VsZCBiZSB1c2VkIGJ5IGV4dGVybmFsIHByb2Nlc3NlcyB0byB1c2UgdGhlIGRldmljZS4KCkZpbmFsbHksIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGBDT05GSUdgIG9wdGlvbnM6IGBISURfUk9DQ0FUYCBkZXBlbmRzIG9uIGBVU0JfSElEYCBhbmQgYEhJRGAuIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGBVU0JfSElEYCYjMzk7cyBkZXBlbmRlbmNpZXMgaW4gYEtjb25maWdgIGZvciBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGNvbXBsZXRlcyB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlIG9mIHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1zIGl0IGlzIGFuIGVzc2VudGlhbCBmaXggZm9yIHRoZSBkcml2ZXIsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfSElEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnPTI9bWVudSBcJiMzNDtVU0IgSElEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZy00LVxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc6NTpjb25maWcgVVNCX0hJRFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1VTQiBISUQgdHJhbnNwb3J0IGxheWVyXCYjMzQ7XG4tLVxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc9Mjc9Y29uZmlnIEhJRF9QSURcbi0tXG5kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZy0zMy1cbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnOjM0OmNvbmZpZyBVU0JfSElEREVWXG5kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7L2Rldi9oaWRkZXYgcmF3IEhJRCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgSElEIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgVVNCIEh1bWFuIEludGVyZmFjZSBEZXZpY2UgKEhJRCkgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHNvIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA1IHRvIGJlZ2luIG15IHNlYXJjaC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBxdWlja2x5IGxlYWQgbWUgdG8gdGhlIGluZm9ybWF0aW9uIEkmIzM5O20gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O1VTQiBISUQgc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgVVNCX0hJRFxuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEhJRCB0cmFuc3BvcnQgbGF5ZXJcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0ZGVwZW5kcyBvbiBISURcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IFVTQiBrZXlib2FyZHMsXG4gIDExOlx0XHQgIG1pY2UsIGpveXN0aWNrcywgZ3JhcGhpYyB0YWJsZXRzLCBvciBhbnkgb3RoZXIgSElEIGJhc2VkIGRldmljZXNcbiAgMTI6XHRcdCAgdG8geW91ciBjb21wdXRlciB2aWEgVVNCLCBhcyB3ZWxsIGFzIFVuaW50ZXJydXB0aWJsZSBQb3dlciBTdXBwbHlcbiAgMTM6XHRcdCAgKFVQUykgYW5kIG1vbml0b3IgY29udHJvbCBkZXZpY2VzLlxuICAxNDpcdFxuICAxNTpcdFx0ICBZb3UgY2FuJiMzOTt0IHVzZSB0aGlzIGRyaXZlciBhbmQgdGhlIEhJREJQIChCb290IFByb3RvY29sKSBrZXlib2FyZFxuICAxNjpcdFx0ICBhbmQgbW91c2UgZHJpdmVycyBhdCB0aGUgc2FtZSB0aW1lLiBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZTpcbiAgMTc6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnJzdFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBISUQgU3VwcG9ydCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBISUQgc3Vic3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGNoZWNrIGlzIHRoZSBgZHJpdmVycy9oaWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYG1lbnUgJiMzNDtISUQgc3VwcG9ydCYjMzQ7YCBzZWN0aW9uLCBzaW5jZSB0aGF0JiMzOTtzIHRoZSB0b3AtbGV2ZWwgZW50cnkgZm9yIHRoZSBISUQgZnJhbWV3b3JrLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoYXQgbWVudS4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgdGhlIEhJRCBzdXBwb3J0IG1lbnUgZXZlbiBhcHBlYXJzPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBISUQgdG8gYmUgYXZhaWxhYmxlIGFuZCB3aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgSElEIGRldmljZSBvciBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQuIEl0JiMzOTtzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGZvdW5kYXRpb24gaW4gcGxhY2UgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEhJRCBkcml2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIEhJRF9TVVBQT1JUXG4gICA2Olx0XHRib29sIFwmIzM0O0hJRCBidXMgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRkZXBlbmRzIG9uIElOUFVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgY29yZSBzdXBwb3J0IGZvciBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpLlxuICAxMTpcdFx0ICBZb3Ugd2lsbCBhbHNvIG5lZWQgZHJpdmVycyBmcm9tIHRoZSBmb2xsb3dpbmcgbWVudSB0byBtYWtlIHVzZSBvZiBpdC5cbiAgMTI6XHRcbiAgMTM6XHRpZiBISURfU1VQUE9SVFxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBISURcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O0hJRCBidXMgY29yZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRkZWZhdWx0IHlcbiAgMTg6XHRcdGRlcGVuZHMgb24gSU5QVVRcbiAgMTk6XHRcdGhlbHBcbiAgMjA6XHRcdCAgQSBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpIGlzIGEgdHlwZSBvZiBjb21wdXRlciBkZXZpY2UgdGhhdFxuICAyMTpcdFx0ICBpbnRlcmFjdHMgZGlyZWN0bHkgd2l0aCBhbmQgdGFrZXMgaW5wdXQgZnJvbSBodW1hbnMuIFRoZSB0ZXJtIFwmIzM0O0hJRFwmIzM0O1xuICAyMjpcdFx0ICBtb3N0IGNvbW1vbmx5IHVzZWQgdG8gcmVmZXIgdG8gdGhlIFVTQi1ISUQgc3BlY2lmaWNhdGlvbiwgYnV0IG90aGVyXG4gIDIzOlx0XHQgIGRldmljZXMgKHN1Y2ggYXMsIGJ1dCBub3Qgc3RyaWN0bHkgbGltaXRlZCB0bywgQmx1ZXRvb3RoKSBhcmVcbiAgMjQ6XHRcdCAgZGVzaWduZWQgdXNpbmcgSElEIHNwZWNpZmljYXRpb24gKHRoaXMgaW52b2x2ZXMgY2VydGFpbiBrZXlib2FyZHMsXG4gIDI1Olx0XHQgIG1pY2UsIHRhYmxldHMsIGV0YykuIFRoaXMgb3B0aW9uIGFkZHMgdGhlIEhJRCBidXMgdG8gdGhlIGtlcm5lbCxcbiAgMjY6XHRcdCAgdG9nZXRoZXIgd2l0aCBnZW5lcmljIEhJRCBsYXllciBjb2RlLiBUaGUgSElEIGRldmljZXMgYXJlIGFkZGVkIGFuZFxuICAyNzpcdFx0ICByZW1vdmVkIGZyb20gdGhlIEhJRCBidXMgYnkgdGhlIHRyYW5zcG9ydC1sYXllciBkcml2ZXJzLCBzdWNoIGFzXG4gIDI4Olx0XHQgIHVzYmhpZCAoVVNCX0hJRCkgYW5kIGhpZHAgKEJUX0hJRFApLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgZG9jcyBhbmQgc3BlY3MsIHNlZSBodHRwczovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvaGlkcGFnZS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NjQKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogNTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFJvY2NhdCBISUQgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSB1cGRhdGVkIFJvY2NhdCBISUQgZmVhdHVyZS4gVGhlIGJhc2UgY29uZmlndXJhdGlvbnMgSSYjMzk7bSB3b3JraW5nIHdpdGggYXJlIGBISURfUk9DQ0FUYCwgYFVTQl9ISURgLCBhbmQgYEhJRGAuIEkgbmVlZCB0byBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzIHRob3JvdWdobHksIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgYW5kICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzLiBJIG11c3QgcmVtZW1iZXIgdG8gb3V0cHV0IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCByZWxldmFudCwgbm9uLXN0YXRpYywgb3Igb3RoZXJ3aXNlIGRpc3RpbmN0IHN5bWJvbHMgYXMgZ29vZCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYHJvY2NhdF9jb25uZWN0YCwgYHJvY2NhdF9kaXNjb25uZWN0YCwgYHJvY2NhdF9yZXBvcnRfZXZlbnRgLCBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBhbmQgYHJvY2NhdF9pb2N0bGAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMuIEkgZGlkIGEgcXVpY2sgY2hlY2sgb2YgYGhpZC1yb2NjYXQuY2AgdG8gc2VlIGlmIHRoZXJlIHdlcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucywgYW5kIGNvbmZpcm1lZCB0aG9zZSBhcmUgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCYjMzk7cyBhZGRyZXNzaW5nIGNyaXRpY2FsIGlzc3VlcyBsaWtlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBmb3IgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlcywgYWltaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBhbmQgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb25zIGFuZCBkZXZpY2UgbGlmZWN5Y2xlLiBUaGlzIGlzICp2ZXJ5KiByZWFjaGFibGUgdmlhIGVtdWxhdGVkIFVTQiBlbnZpcm9ubWVudHMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIGAvZGV2L3JvY2NhdCpgIGNoYXIgZGV2aWNlcy4KCkZpbmFsbHksIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQ6IEkmIzM5O20gdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYW5kIEkmIzM5O2xsIGNhbGwgaXQgb25seSBvbmNlLiBJJiMzOTttIG9taXR0aW5nIHRoZSBgQ09ORklHX2AgcHJlZml4LCBhbmQgSSYjMzk7bSB0YXJnZXRpbmcgbm9uLWhvdC1wYXRoIGtlcm5lbCBmdW5jdGlvbnMgdG8gbWFrZSBmdXp6aW5nIG1vcmUgZWZmZWN0aXZlLiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtISURfUk9DQ0FUJiMzNDssCiAgICAmIzM0O1VTQl9ISUQmIzM0OywKICAgICYjMzQ7SElEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm9jY2F0X2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cm9jY2F0X2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cm9jY2F0X3JlcG9ydF9ldmVudCYjMzQ7LAogICAgJiMzNDtyb2NjYXRfb3BlbiYjMzQ7LAogICAgJiMzNDtyb2NjYXRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtyb2NjYXRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SElEX1JPQ0NBVCYjMzQ7LAogICAgJiMzNDtVU0JfSElEJiMzNDssCiAgICAmIzM0O0hJRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvY2NhdF9jb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9yZXBvcnRfZXZlbnQmIzM0OywKICAgICYjMzQ7cm9jY2F0X29wZW4mIzM0OywKICAgICYjMzQ7cm9jY2F0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cm9jY2F0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMga3JlZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlZmFjdG9ycyBsb2NraW5nIGFjcm9zcyB0aGUgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlIHN1YnN5c3RlbSAoaGlkLXJvY2NhdCkgdG8gZml4IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgcmFjZXMgYmV0d2VlbiByb2NjYXQgY2hhcmFjdGVyIGRldmljZSBvcGVyYXRpb25zIChvcGVuLCByZWxlYXNlLCBpb2N0bCkgYW5kIGRldmljZSBjb25uZWN0L2Rpc2Nvbm5lY3QvZXZlbnQgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uIChyYXctZ2FkZ2V0L3VoaWQpIGFuZCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMgYnkgaW50cm9kdWNpbmcga3JlZi1iYXNlZCByZWZlcmVuY2UgY291bnRpbmcgZm9yIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBwcm9wZXJseSBib3VuZHMtY2hlY2tpbmcgbWlub3IgZGV2aWNlIGluZGV4ZXMsIGFuZCBlbnN1cmluZyBzdHJ1Y3QgZmllbGRzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgZXhwb3NpbmcgdGhlIGRldmljZSBpbiB0aGUgZ2xvYmFsIGRldmljZXMgYXJyYXkuXG5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHByaW1hcnkgYnVncyBhZGRyZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludHJvZHVjZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIHByZW1hdHVyZSBkZWFsbG9jYXRpb24sIGFuZCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHRoZSBkZXZpY2VzIGFycmF5LiBUaGVzZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgS0FTQU4uXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKHN0cnVjdCByb2NjYXRfZGV2aWNlLCBzdHJ1Y3Qgcm9jY2F0X3JlYWRlcikgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqKCksIHJlcG9ydCBkYXRhIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIHdpdGgga21lbWR1cCgpLCBhbmQgYWxsIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIgaW4gcm9jY2F0X3JlYWQgb3IgcHV0X3VzZXIgaW4gcm9jY2F0X2lvY3RsKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxuXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1YjY2YzFkM2QwY2RhNDc2NDFlNTA4ZmJkYjkxZjA0M2VjNTBlNGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCmluZGV4IDRmMTVlYjk1MTAzOTYuLmVhYTQ3YmJiNzBkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMKQEAgLTIxLDggJiM0MzsyMSwxMCBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAmIzM0OzogJiMzNDsgZm10CiAKICNpbmNsdWRlICZsdDtsaW51eC9jZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oaWQtcm9jY2F0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAKQEAgLTM3LDYgJiM0MzszOSw3IEBAIHN0cnVjdCByb2NjYXRfcmVwb3J0IHsKIH07CiAKIHN0cnVjdCByb2NjYXRfZGV2aWNlIHsKJiM0MzsJc3RydWN0IGtyZWYga3JlZjsKIAl1bnNpZ25lZCBpbnQgbWlub3I7CiAJaW50IHJlcG9ydF9zaXplOwogCWludCBvcGVuOwpAQCAtNzAsOCAmIzQzOzczLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlc1tST0NDQVRfTUFYX0RFVklDRVNdOwogLyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7CiAKLXN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlKQomIzQzO3N0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKJiM0MzsJc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9CiYjNDM7CQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IFJPQ0NBVF9DQlVGX1NJWkU7IGkmIzQzOyYjNDM7KQpAQCAtMTcyLDExICYjNDM7MTc3LDIxIEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJaWYgKCFkZXZpY2UpIHsKIAkJcHJfZW1lcmcoJiMzNDtyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24mIzM5O3QgZXhpc3RcbiYjMzQ7LCBtaW5vcik7CiAJCWVycm9yID0gLUVOT0RFVjsKLQkJZ290byBleGl0X2Vycl9kZXZpY2VzOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsJCWtmcmVlKHJlYWRlcik7CiYjNDM7CQlyZXR1cm4gZXJyb3I7CiAJfQogCiYjNDM7CWtyZWZfZ2V0KCZhbXA7ZGV2aWNlLSZndDtrcmVmKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwogCiYjNDM7CWlmICghZGV2aWNlLSZndDtleGlzdCkgewomIzQzOwkJZXJyb3IgPSAtRU5PREVWOwomIzQzOwkJZ290byBleGl0X2Vycl9yZWFkZXJzOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFkZXZpY2UtJmd0O29wZW4mIzQzOyYjNDM7KSB7CiAJCS8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovCiAJCWVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS0mZ3Q7aGlkLCBQTV9ISU5UX0ZVTExPTik7CkBAIC0yMDAsNDYgJiM0MzsyMTUsMzUgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlsaXN0X2FkZF90YWlsKCZhbXA7cmVhZGVyLSZndDtub2RlLCAmYW1wO2RldmljZS0mZ3Q7cmVhZGVycyk7CiAJZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhID0gcmVhZGVyOwogCiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiBleGl0X2Vycl9yZWFkZXJzOgogCW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKLWV4aXRfZXJyX2RldmljZXM6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQlpZiAoZXJyb3IpCi0JCWtmcmVlKHJlYWRlcik7CiYjNDM7CWtyZWZfcHV0KCZhbXA7ZGV2aWNlLSZndDtrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpOwomIzQzOwlrZnJlZShyZWFkZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCByb2NjYXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTsKLQotCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwotCi0JZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07Ci0JaWYgKCFkZXZpY2UpIHsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQkJcHJfZW1lcmcoJiMzNDtyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24mIzM5O3QgZXhpc3RcbiYjMzQ7LCBtaW5vcik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KJiM0MzsJc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci0mZ3Q7ZGV2aWNlOwogCiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3JlYWRlci0mZ3Q7bm9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwotCWtmcmVlKHJlYWRlcik7CiAKIAlpZiAoIS0tZGV2aWNlLSZndDtvcGVuKSB7CiAJCS8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovCiAJCWlmIChkZXZpY2UtJmd0O2V4aXN0KSB7CiAJCQloaWRfaHdfcG93ZXIoZGV2aWNlLSZndDtoaWQsIFBNX0hJTlRfTk9STUFMKTsKIAkJCWhpZF9od19jbG9zZShkZXZpY2UtJmd0O2hpZCk7Ci0JCX0gZWxzZSB7Ci0JCQlyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKIAkJfQogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsJa2ZyZWUocmVhZGVyKTsKJiM0MzsJa3JlZl9wdXQoJmFtcDtkZXZpY2UtJmd0O2tyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2MCw3ICYjNDM7MjY0LDEyIEBAIGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpCiAJc3RydWN0IHJvY2NhdF9yZXBvcnQgKnJlcG9ydDsKIAl1aW50OF90ICpuZXdfdmFsdWU7CiAKJiM0MzsJaWYgKG1pbm9yICZsdDsgMCB8fCBtaW5vciAmZ3Q7PSBST0NDQVRfTUFYX0RFVklDRVMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTsKJiM0MzsJaWYgKCFkZXZpY2UpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKIAogCW5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLSZndDtyZXBvcnRfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfdmFsdWUpCkBAIC0zMTYsNiAmIzQzOzMyNSwxNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlrcmVmX2luaXQoJmFtcDtkZXZpY2UtJmd0O2tyZWYpOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7ZGV2aWNlLSZndDt3YWl0KTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnMpOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGV2aWNlLSZndDtjYnVmX2xvY2spOwomIzQzOwlkZXZpY2UtJmd0O2hpZCA9IGhpZDsKJiM0MzsJZGV2aWNlLSZndDtleGlzdCA9IDE7CiYjNDM7CWRldmljZS0mZ3Q7Y2J1Zl9lbmQgPSAwOwomIzQzOwlkZXZpY2UtJmd0O3JlcG9ydF9zaXplID0gcmVwb3J0X3NpemU7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7CiAKIAlmb3IgKG1pbm9yID0gMDsgbWlub3IgJmx0OyBST0NDQVRfTUFYX0RFVklDRVM7ICYjNDM7JiM0MzttaW5vcikgewpAQCAtMzMyLDYgJiM0MzszNTEsOCBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJZGV2aWNlLSZndDttaW5vciA9IG1pbm9yOwomIzQzOwogCWRldmljZS0mZ3Q7ZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgJmFtcDtoaWQtJmd0O2RldiwKIAkJCU1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpLCBOVUxMLAogCQkJJiMzNDslcyVzJWQmIzM0OywgJiMzNDtyb2NjYXQmIzM0OywgaGlkLSZndDtkcml2ZXItJmd0O25hbWUsIG1pbm9yKTsKQEAgLTM0NiwxNiAmIzQzOzM2Nyw2IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0CiAKIAltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2RldmljZS0mZ3Q7d2FpdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnMpOwotCW11dGV4X2luaXQoJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmYW1wO2RldmljZS0mZ3Q7Y2J1Zl9sb2NrKTsKLQlkZXZpY2UtJmd0O21pbm9yID0gbWlub3I7Ci0JZGV2aWNlLSZndDtoaWQgPSBoaWQ7Ci0JZGV2aWNlLSZndDtleGlzdCA9IDE7Ci0JZGV2aWNlLSZndDtjYnVmX2VuZCA9IDA7Ci0JZGV2aWNlLSZndDtyZXBvcnRfc2l6ZSA9IHJlcG9ydF9zaXplOwotCiAJcmV0dXJuIG1pbm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Nvbm5lY3QpOwpAQCAtMzY3LDQyICYjNDM7Mzc4LDM3IEBAIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKQogewogCXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7CiAKJiM0MzsJaWYgKG1pbm9yICZsdDsgMCB8fCBtaW5vciAmZ3Q7PSBST0NDQVRfTUFYX0RFVklDRVMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7CiAJZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07CiYjNDM7CWRldmljZXNbbWlub3JdID0gTlVMTDsKIAltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCi0JZGV2aWNlLSZndDtleGlzdCA9IDA7IC8qIFRPRE8gZXhpc3QgbWF5YmUgbm90IG5lZWRlZCAqLwomIzQzOwlpZiAoIWRldmljZSkKJiM0MzsJCXJldHVybjsKIAogCWRldmljZV9kZXN0cm95KGRldmljZS0mZ3Q7ZGV2LSZndDtjbGFzcywgTUtERVYocm9jY2F0X21ham9yLCBtaW5vcikpOwogCi0JbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0JZGV2aWNlc1ttaW5vcl0gPSBOVUxMOwotCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsJZGV2aWNlLSZndDtleGlzdCA9IDA7CiAJaWYgKGRldmljZS0mZ3Q7b3BlbikgewogCQloaWRfaHdfY2xvc2UoZGV2aWNlLSZndDtoaWQpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDtkZXZpY2UtJmd0O3dhaXQpOwotCX0gZWxzZSB7Ci0JCXJvY2NhdF9mcmVlX2RldmljZShkZXZpY2UpOwogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwomIzQzOwomIzQzOwlrcmVmX3B1dCgmYW1wO2RldmljZS0mZ3Q7a3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTsKIAogc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKLQlzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlOwotCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CiYjNDM7CXN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItJmd0O2RldmljZTsKIAlsb25nIHJldHZhbCA9IDA7CiAKLQltdXRleF9sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQotCWRldmljZSA9IGRldmljZXNbbWlub3JdOwotCWlmICghZGV2aWNlKSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBST0NDQVRJT0NHUkVQU0laRToKIAkJaWYgKHB1dF91c2VyKGRldmljZS0mZ3Q7cmVwb3J0X3NpemUsIChpbnQgX191c2VyICopYXJnKSkKQEAgLTQxMSw4ICYjNDM7NDE3LDcgQEAgc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAlkZWZhdWx0OgogCQlyZXR2YWwgPSAtRU5PVFRZOwogCX0KLW91dDoKLQltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwomIzQzOwogCXJldHVybiByZXR2YWw7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb2NjYXQgSElEIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBSb2NjYXQgSElEIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGJyZWFrIGRvd24gdGhlIGNoYW5nZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlJiMzOTtzIGxpZmV0aW1lIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBzdW1tYXJ5IGluZGljYXRlcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCB0byB1c2luZyBga3JlZmAgZm9yIHJlZmVyZW5jZSBjb3VudGluZywgcmVwbGFjaW5nIHRoZSBvbGQsIHBvdGVudGlhbGx5IGxlc3Mgcm9idXN0IG1ldGhvZHMuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBga3JlZmAgbWVtYmVyIHRvIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgc29saWQgZmlyc3Qgc3RlcC4gVGhlIHJlcGxhY2VtZW50IG9mIGRpcmVjdCBgcm9jY2F0X2ZyZWVfZGV2aWNlYCBjYWxscyB3aXRoIGBrcmVmX3B1dGAgYW5kIHRoZSBpbmNsdXNpb24gb2YgYGtyZWZfaW5pdGAgYW5kIGBrcmVmX2dldGAgcG9pbnQgdG8gYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZS4gYHJvY2NhdF9vcGVuYCBub3cgc2VlbXMgdG8gYmUgY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IHVzaW5nIGBrcmVmX2dldGAsIHN0b3JpbmcgdGhlIHBvaW50ZXIsIGFuZCBgcm9jY2F0X3JlbGVhc2VgIGRlY3JlbWVudGluZyBpdCB3aXRoIGBrcmVmX3B1dGAuIFNtYXJ0IG1vdmUuIFRoaXMgc2hvdWxkIGhlbHAgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgc2NlbmFyaW9zLgoKVGhlIG1vZGlmaWNhdGlvbiB0byBgcm9jY2F0X2lvY3RsYCB0byBnZXQgdGhlIGRldmljZSBmcm9tIGByZWFkZXItJmd0O2RldmljZWAgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCBgZGV2aWNlc1ttaW5vcl1gIGlzIGFub3RoZXIgcG9zaXRpdmUgY2hhbmdlLiBUaGF0IGVsaW1pbmF0ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIG1ha2VzIHRoZSBkcml2ZXIgbW9yZSB0aHJlYWQtc2FmZS4KClRoZSBhZGp1c3RtZW50cyBpbiBgcm9jY2F0X2Rpc2Nvbm5lY3RgIGFyZSBpbnRlcmVzdGluZy4gUmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIHRoZSBhcnJheSwgc2V0dGluZyBgZGV2aWNlLSZndDtleGlzdCA9IDBgLCBhbmQgdGhlbiBjYWxsaW5nIGBrcmVmX3B1dGAgaXMgdGhlIGNvcnJlY3Qgc2VxdWVuY2UuIFRoZSBtb3ZlIG9mIGluaXRpYWxpemF0aW9uIGluIGByb2NjYXRfY29ubmVjdGAgYmVmb3JlIGBkZXZpY2VfY3JlYXRlYC9gZGV2aWNlc1ttaW5vcl0gPSBkZXZpY2U7YCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBkZXZpY2UgY3JlYXRpb24uIEkgbGlrZSB0aGUgYWRkZWQgYm91bmRzIGNoZWNrcyBvbiB0aGUgbWlub3IgbnVtYmVycyBhcyB3ZWxsLiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgYWRkaXRpb24sIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgZm9yIHJvYnVzdG5lc3MuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcmVncmVzc2lvbnMgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCYjMzk7cyBteSBtYWluIGFyZWEgb2YgY29uY2VybiBub3cuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgZGF0YSB0aGF0IGlzIHVzZWQgYmVmb3JlIGJlaW5nIHNldCwgZXNwZWNpYWxseSBpbiB0aGUgYXJlYXMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyBhbmQgZGV2aWNlIHN0cnVjdHVyZSBhY2Nlc3MuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgdG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBSb2NjYXQgZHJpdmVyIGZvciBMaW51eFxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwIFN0ZWZhbiBBY2hhdHogXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdC8qXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0LypcbiAgMTI6XHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XG4gIDEzOlx0ICogaGFyZHdhcmUgdG8gdXNlcmxhbmQuIFRoZXNlIGV2ZW50cyBpbmNsdWRlIHJlcXVlc3RzIGZvciBvbi1zY3JlZW4tZGlzcGxheSBvZlxuICAxNDpcdCAqIHByb2ZpbGUgb3IgZHBpIHNldHRpbmdzIG9yIHJlcXVlc3RzIGZvciBleGVjdXRpb24gb2YgbWFjcm8gc2VxdWVuY2VzIHRoYXQgYXJlXG4gIDE1Olx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXG4gIDE2Olx0ICogaW1wbGVtZW50YXRpb24gYW5kIGNvbnRhaW5zIGRhdGEgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIGEgc2luZ2xlIGhpZCBldmVudFxuICAxNzpcdCAqIG9yIGVsc2UgaGlkcmF3IGNvdWxkIGhhdmUgYmVlbiB1c2VkLlxuICAxODpcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cbiAgMTk6XHQgKi9cbiAgMjA6XHRcbiAgMjE6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXG4gIDMyOlx0I2RlZmluZSBST0NDQVRfTUFYX0RFVklDRVMgOFxuICAzMzpcdFxuICAzNDpcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xuICAzNTpcdCNkZWZpbmUgUk9DQ0FUX0NCVUZfU0laRSAxNlxuICAzNjpcdFxuICAzNzpcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcbiAgMzg6XHRcdHVpbnQ4X3QgKnZhbHVlO1xuICAzOTpcdH07XG4gIDQwOlx0XG4gIDQxOlx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xuICA0MjpcdFx0c3RydWN0IGtyZWYga3JlZjtcbiAgNDM6XHRcdHVuc2lnbmVkIGludCBtaW5vcjtcbiAgNDQ6XHRcdGludCByZXBvcnRfc2l6ZTtcbiAgNDU6XHRcdGludCBvcGVuO1xuICA0NjpcdFx0aW50IGV4aXN0O1xuICA0NzpcdFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbiAgNDg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiAgNDk6XHRcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XG4gIDUwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XG4gIDUxOlx0XHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xuICA1MjpcdFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcbiAgNTM6XHRcbiAgNTQ6XHRcdC8qXG4gIDU1Olx0XHQgKiBjaXJjdWxhcl9idWZmZXIgaGFzIG9uZSB3cml0ZXIgYW5kIG11bHRpcGxlIHJlYWRlcnMgd2l0aCB0aGVpciBvd25cbiAgNTY6XHRcdCAqIHJlYWQgcG9pbnRlcnNcbiAgNTc6XHRcdCAqL1xuICA1ODpcdFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgY2J1ZltST0NDQVRfQ0JVRl9TSVpFXTtcbiAgNTk6XHRcdGludCBjYnVmX2VuZDtcbiAgNjA6XHRcdHN0cnVjdCBtdXRleCBjYnVmX2xvY2s7XG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciB7XG4gIDY0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gIDY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuICA2NjpcdFx0aW50IGNidWZfc3RhcnQ7XG4gIDY3Olx0fTtcbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW50IHJvY2NhdF9tYWpvcjtcbiAgNzA6XHRzdGF0aWMgc3RydWN0IGNkZXYgcm9jY2F0X2NkZXY7XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XG4gIDczOlx0LyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovXG4gIDc0Olx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xuICA3NTpcdFxuICA3NjpcdHN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cbiAgNzk6XHRcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTtcbiAgODA6XHRcdGludCBpO1xuICA4MTpcdFxuICA4MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUk9DQ0FUX0NCVUZfU0laRTsgaSYjNDM7JiM0MzspXG4gIDgzOlx0XHRcdGtmcmVlKGRldmljZS1cdTAwM2VjYnVmW2ldLnZhbHVlKTtcbiAgODQ6XHRcdGtmcmVlKGRldmljZSk7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBzc2l6ZV90IHJvY2NhdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuICA4ODpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAgODk6XHR7XG4gIDkwOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDkxOlx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiAgOTI6XHRcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XG4gIDkzOlx0XHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcbiAgOTQ6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuICA5NTpcdFxuICA5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAgOTc6XHRcbiAgOTg6XHRcdC8qIG5vIGRhdGE/ICovXG4gIDk5Olx0XHRpZiAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTAwOlx0XHRcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0LCBcdTAwMjZ3YWl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgaGlkLXJvY2NhdC5jYCwgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBCYWNrIGludG8gYGhpZC1yb2NjYXQuY2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayBpbnRvIGBoaWQtcm9jY2F0LmNgLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGlzIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBkZXZpY2UsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgcmVtYWluaW5nIHNlY3Rpb25zLiBJJiMzOTt2ZSBjb3ZlcmVkIGEgbG90IGFscmVhZHksIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBmb3IgdGhpcyBhbmFseXNpcy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyBJIG1pZ2h0IGhhdmUgbWlzc2VkIGluIHRoZSBpbml0aWFsIHBhc3MsIG9yIGFueSBhcmVhcyB0aGF0IHJlcXVpcmUgbW9yZSBpbi1kZXB0aCBzY3J1dGlueSwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiB0aGVzZSBSb2NjYXQgZGV2aWNlcy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzdWJ0bGV0aWVzIGluIGhvdyBpdCBoYW5kbGVzIHNwZWNpZmljIGNvbW1hbmRzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gZXJyb3IgaGFuZGxpbmcgSSBkaWRuJiMzOTt0IGNhdGNoIGJlZm9yZS4gVGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBlc3BlY2lhbGx5IGluIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYWZmZWN0IHN0YWJpbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhpcyBkcml2ZXIgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0Lyogd2FpdCBmb3IgZGF0YSAqL1xuIDEwNDpcdFx0XHR3aGlsZSAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTA1Olx0XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSykge1xuIDEwNjpcdFx0XHRcdFx0cmV0dmFsID0gLUVBR0FJTjtcbiAxMDc6XHRcdFx0XHRcdGJyZWFrO1xuIDEwODpcdFx0XHRcdH1cbiAxMDk6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAxMTA6XHRcdFx0XHRcdHJldHZhbCA9IC1FUkVTVEFSVFNZUztcbiAxMTE6XHRcdFx0XHRcdGJyZWFrO1xuIDExMjpcdFx0XHRcdH1cbiAxMTM6XHRcdFx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDExNDpcdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbiAxMTU6XHRcdFx0XHRcdGJyZWFrO1xuIDExNjpcdFx0XHRcdH1cbiAxMTc6XHRcbiAxMTg6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMTE5Olx0XHRcdFx0c2NoZWR1bGUoKTtcbiAxMjA6XHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuIDEyMTpcdFx0XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gMTIyOlx0XHRcdH1cbiAxMjM6XHRcbiAxMjQ6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAxMjU6XHRcdFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0LyogaGVyZSB3ZSBlaXRoZXIgaGF2ZSBkYXRhIG9yIGEgcmVhc29uIHRvIHJldHVybiBpZiByZXR2YWwgaXMgc2V0ICovXG4gMTI5Olx0XHRpZiAocmV0dmFsKVxuIDEzMDpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDEzMTpcdFxuIDEzMjpcdFx0cmVwb3J0ID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZbcmVhZGVyLVx1MDAzZWNidWZfc3RhcnRdO1xuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIElmIHJlcG9ydCBpcyBsYXJnZXIgdGhhbiByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEsIHJlc3Qgb2YgcmVwb3J0XG4gMTM1Olx0XHQgKiBpcyBsb3N0IVxuIDEzNjpcdFx0ICovXG4gMTM3Olx0XHRsZW4gPSBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgXHUwMDNlIGNvdW50ID8gY291bnQgOiBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemU7XG4gMTM4Olx0XG4gMTM5Olx0XHRpZiAoY29weV90b191c2VyKGJ1ZmZlciwgcmVwb3J0LVx1MDAzZXZhbHVlLCBsZW4pKSB7XG4gMTQwOlx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gMTQxOlx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMTQyOlx0XHR9XG4gMTQzOlx0XHRyZXR2YWwgJiM0Mzs9IGxlbjtcbiAxNDQ6XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAxNDU6XHRcbiAxNDY6XHRleGl0X3VubG9jazpcbiAxNDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAxNDg6XHRcdHJldHVybiByZXR2YWw7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyBfX3BvbGxfdCByb2NjYXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiAxNTI6XHR7XG4gMTUzOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMTU0Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2cmVhZGVyLVx1MDAzZWRldmljZS1cdTAwM2V3YWl0LCB3YWl0KTtcbiAxNTU6XHRcdGlmIChyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCAhPSByZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWNidWZfZW5kKVxuIDE1NjpcdFx0XHRyZXR1cm4gRVBPTExJTiB8IEVQT0xMUkROT1JNO1xuIDE1NzpcdFx0aWYgKCFyZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWV4aXN0KVxuIDE1ODpcdFx0XHRyZXR1cm4gRVBPTExFUlIgfCBFUE9MTEhVUDtcbiAxNTk6XHRcdHJldHVybiAwO1xuIDE2MDpcdH1cbiAxNjE6XHRcbiAxNjI6XHRzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDE2MzpcdHtcbiAxNjQ6XHRcdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XG4gMTY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xuIDE2NjpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAxNjc6XHRcdGludCBlcnJvciA9IDA7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZWFkZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm9jY2F0X3JlYWRlcik7XG4gMTcwOlx0XHRpZiAoIXJlYWRlcilcbiAxNzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTcyOlx0XG4gMTczOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMTc0Olx0XG4gMTc1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICghZGV2aWNlKSB7XG4gMTc4Olx0XHRcdHByX2VtZXJnKFwmIzM0O3JvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2VzbiYjMzk7dCBleGlzdFxcblwmIzM0OywgbWlub3IpO1xuIDE3OTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTgwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDE4MTpcdFx0XHRrZnJlZShyZWFkZXIpO1xuIDE4MjpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4gMTg2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAxODc6XHRcbiAxODg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMTg5Olx0XG4gMTkwOlx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDE5MTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTkyOlx0XHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbiAxOTM6XHRcdH1cbiAxOTQ6XHRcbiAxOTU6XHRcdGlmICghZGV2aWNlLVx1MDAzZW9wZW4mIzQzOyYjNDM7KSB7XG4gMTk2Olx0XHRcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXG4gMTk3Olx0XHRcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcbiAxOTg6XHRcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gMTk5Olx0XHRcdFx0LS1kZXZpY2UtXHUwMDNlb3BlbjtcbiAyMDA6XHRcdFx0XHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFJlbWFpbmRlcioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBqdXN0IGZpbmlzaGVkIGFuYWx5emluZyB0aGUgaW5pdGlhbCBwb3J0aW9uIG9mIHRoaXMgZmlsZS4gTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGV4YW1pbmUgdGhlIHJlc3Qg4oCTIHNwZWNpZmljYWxseSwgZnJvbSBsaW5lIDIwMSBvbndhcmRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHJlbWFpbmluZyBzZWN0aW9uIHRvIGNvbnRhaW4gdGhlIGNydWNpYWwgZGF0YSBvciBpbnNpZ2h0cyBJJiMzOTttIGxvb2tpbmcgZm9yLCBwZXJoYXBzIHRoZSBjdWxtaW5hdGlvbiBvZiB0aGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gZm9yIHRoZSByZWxldmFudCBwYXR0ZXJucyBvciB2YXJpYWJsZXMgdGhhdCBoYXZlIGNhdWdodCBteSBleWUgc28gZmFyIGluIHRoZSBkb2N1bWVudC4gSSBtYXkgbmVlZCB0byBhcHBseSBzcGVjaWZpYyBmaWx0ZXJzIG9yIHRyYW5zZm9ybWF0aW9ucyBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IEkmIzM5O3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3J0aW9uLiBUaGlzIGNvdWxkIGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzogY3Jvc3MtcmVmZXJlbmNpbmcgdmFsdWVzLCBhcHBseWluZyBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtLCBjb21wYXJpbmcgdG8ga25vd24gZGF0YXNldHMsIG9yIGhpZ2hsaWdodGluZyBhbm9tYWxpZXMuIEkgd2lsbCBwcm9jZWVkIHdpdGggZm9jdXMgYW5kIHByZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDE6XHRcdFx0fVxuIDIwMjpcdFxuIDIwMzpcdFx0XHRlcnJvciA9IGhpZF9od19vcGVuKGRldmljZS1cdTAwM2VoaWQpO1xuIDIwNDpcdFx0XHRpZiAoZXJyb3IgXHUwMDNjIDApIHtcbiAyMDU6XHRcdFx0XHRoaWRfaHdfcG93ZXIoZGV2aWNlLVx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xuIDIwNjpcdFx0XHRcdC0tZGV2aWNlLVx1MDAzZW9wZW47XG4gMjA3Olx0XHRcdFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xuIDIwODpcdFx0XHR9XG4gMjA5Olx0XHR9XG4gMjEwOlx0XG4gMjExOlx0XHRyZWFkZXItXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xuIDIxMjpcdFx0LyogbmV3IHJlYWRlciBkb2VzbiYjMzk7dCBnZXQgb2xkIGV2ZW50cyAqL1xuIDIxMzpcdFx0cmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPSBkZXZpY2UtXHUwMDNlY2J1Zl9lbmQ7XG4gMjE0Olx0XG4gMjE1Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlLCBcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycyk7XG4gMjE2Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IHJlYWRlcjtcbiAyMTc6XHRcbiAyMTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyMTk6XHRcdHJldHVybiAwO1xuIDIyMDpcdFxuIDIyMTpcdGV4aXRfZXJyX3JlYWRlcnM6XG4gMjIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMjIzOlx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiAyMjQ6XHRcdGtmcmVlKHJlYWRlcik7XG4gMjI1Olx0XHRyZXR1cm4gZXJyb3I7XG4gMjI2Olx0fVxuIDIyNzpcdFxuIDIyODpcdHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gMjI5Olx0e1xuIDIzMDpcdFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDIzMTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gMjMyOlx0XG4gMjMzOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIDIzNDpcdFx0bGlzdF9kZWwoXHUwMDI2cmVhZGVyLVx1MDAzZW5vZGUpO1xuIDIzNTpcdFxuIDIzNjpcdFx0aWYgKCEtLWRldmljZS1cdTAwM2VvcGVuKSB7XG4gMjM3Olx0XHRcdC8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovXG4gMjM4Olx0XHRcdGlmIChkZXZpY2UtXHUwMDNlZXhpc3QpIHtcbiAyMzk6XHRcdFx0XHRoaWRfaHdfcG93ZXIoZGV2aWNlLVx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xuIDI0MDpcdFx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiAyNDE6XHRcdFx0fVxuIDI0MjpcdFx0fVxuIDI0MzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIDI0NDpcdFxuIDI0NTpcdFx0a2ZyZWUocmVhZGVyKTtcbiAyNDY6XHRcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuIDI0NzpcdFxuIDI0ODpcdFx0cmV0dXJuIDA7XG4gMjQ5Olx0fVxuIDI1MDpcdFxuIDI1MTpcdC8qXG4gMjUyOlx0ICogcm9jY2F0X3JlcG9ydF9ldmVudCgpIC0gb3V0cHV0IGRhdGEgdG8gcmVhZGVyc1xuIDI1MzpcdCAqIEBtaW5vcjogbWlub3IgZGV2aWNlIG51bWJlciByZXR1cm5lZCBieSByb2NjYXRfY29ubmVjdCgpXG4gMjU0Olx0ICogQGRhdGE6IHBvaW50ZXIgdG8gZGF0YVxuIDI1NTpcdCAqXG4gMjU2Olx0ICogUmV0dXJuIHZhbHVlIGlzIHplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gMjU3Olx0ICpcbiAyNTg6XHQgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGludGVycnVwdCBoYW5kbGVyLlxuIDI1OTpcdCAqL1xuIDI2MDpcdGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXG4gMjYxOlx0e1xuIDI2MjpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAyNjM6XHRcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXI7XG4gMjY0Olx0XHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xuIDI2NTpcdFx0dWludDhfdCAqbmV3X3ZhbHVlO1xuIDI2NjpcdFxuIDI2NzpcdFx0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuIDI2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNjk6XHRcbiAyNzA6XHRcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuIDI3MTpcdFx0aWYgKCFkZXZpY2UpXG4gMjcyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI3MzpcdFxuIDI3NDpcdFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUsIEdGUF9BVE9NSUMpO1xuIDI3NTpcdFx0aWYgKCFuZXdfdmFsdWUpXG4gMjc2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI3NzpcdFxuIDI3ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyNzk6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMjgwOlx0XG4gMjgxOlx0XHRyZXBvcnQgPSBcdTAwMjZkZXZpY2UtXHUwMDNlY2J1ZltkZXZpY2UtXHUwMDNlY2J1Zl9lbmRdO1xuIDI4MjpcdFxuIDI4MzpcdFx0LyogcGFzc2luZyBOVUxMIGlzIHNhZmUgKi9cbiAyODQ6XHRcdGtmcmVlKHJlcG9ydC1cdTAwM2V2YWx1ZSk7XG4gMjg1Olx0XG4gMjg2Olx0XHRyZXBvcnQtXHUwMDNldmFsdWUgPSBuZXdfdmFsdWU7XG4gMjg3Olx0XHRkZXZpY2UtXHUwMDNlY2J1Zl9lbmQgPSAoZGV2aWNlLVx1MDAzZWNidWZfZW5kICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAyODg6XHRcbiAyODk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocmVhZGVyLCBcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycywgbm9kZSkge1xuIDI5MDpcdFx0XHQvKlxuIDI5MTpcdFx0XHQgKiBBcyB3ZSBhbHJlYWR5IGluc2VydGVkIG9uZSBlbGVtZW50LCB0aGUgYnVmZmVyIGNhbiYjMzk7dCBiZVxuIDI5MjpcdFx0XHQgKiBlbXB0eS4gSWYgc3RhcnQgYW5kIGVuZCBhcmUgZXF1YWwsIGJ1ZmZlciBpcyBmdWxsIGFuZCB3ZVxuIDI5MzpcdFx0XHQgKiBpbmNyZWFzZSBzdGFydCwgc28gdGhhdCBzbG93IHJlYWRlciBtaXNzZXMgb25lIGV2ZW50LCBidXRcbiAyOTQ6XHRcdFx0ICogZ2V0cyB0aGUgbmV3ZXIgb25lcyBpbiB0aGUgcmlnaHQgb3JkZXIuXG4gMjk1Olx0XHRcdCAqL1xuIDI5NjpcdFx0XHRpZiAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKVxuIDI5NzpcdFx0XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcbiAzMDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJIGFtIHRoZSBvbmUgdGhpbmtpbmcgaXQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUmVtYWluZGVyIG9mIHRoZSBGaWxlIChTZWN0aW9ucyAzMDEgT253YXJkKSoqCgpBbHJpZ2h0LCB0aW1lIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIHRoZSBiYWNrIGVuZCBvZiB0aGlzIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIHNlY3Rpb24gMzAxIHRvIHRoZSBlbmQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoZSBtYXRlcmlhbCBoZXJlIGlzIGdvaW5nIHRvIGJ1aWxkIG9uIHRoZSBmb3VuZGF0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZC4gUGVyaGFwcyBpdCBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBlZGdlLWNhc2UgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IGZpbmFsIHJlZmluZW1lbnRzIHRvIHRoZSBtZXRob2RvbG9neSB0aGF0IGhhcyBiZWVuIHB1dCBmb3J0aC4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIHByb3Bvc2VkIGFsZ29yaXRobSBzY2FsZXMsIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGRldGFpbHMgb24gdGhlIHRlc3QgZW52aXJvbm1lbnQsIGFuZCBpZiB0aGV5JiMzOTt2ZSBhY2NvdW50ZWQgZm9yIHZhcmlhdGlvbnMgaW4gdGhlIGluY29taW5nIGRhdGEgc3RyZWFtLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhlaXIgc29sdXRpb24gaXMuIEkmIzM5O20gYWxzbyBob3BpbmcgZm9yIHRoZSBjb25jbHVzaW9uIHRvIHRoZSBkb2N1bWVudCwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlaXIgb3ZlcmFsbCBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4gMzA0Olx0XHRyZXR1cm4gMDtcbiAzMDU6XHR9XG4gMzA2Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XG4gMzA3Olx0XG4gMzA4Olx0LypcbiAzMDk6XHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XG4gMzEwOlx0ICogQGNsYXNzOiB0aGUgY2xhc3MgdGhhdHMgdXNlZCB0byBjcmVhdGUgdGhlIGRldmljZS4gTWVhbnQgdG8gaG9sZCBkZXZpY2VcbiAzMTE6XHQgKiBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzLlxuIDMxMjpcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuIDMxMzpcdCAqIEByZXBvcnRfc2l6ZTogc2l6ZSBvZiByZXBvcnRzXG4gMzE0Olx0ICpcbiAzMTU6XHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxuIDMxNjpcdCAqIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuIDMxNzpcdCAqL1xuIDMxODpcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXG4gMzE5Olx0e1xuIDMyMDpcdFx0dW5zaWduZWQgaW50IG1pbm9yO1xuIDMyMTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAzMjI6XHRcdGludCB0ZW1wO1xuIDMyMzpcdFxuIDMyNDpcdFx0ZGV2aWNlID0ga3phbGxvY19vYmooc3RydWN0IHJvY2NhdF9kZXZpY2UpO1xuIDMyNTpcdFx0aWYgKCFkZXZpY2UpXG4gMzI2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMyNzpcdFxuIDMyODpcdFx0a3JlZl9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbiAzMjk6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuIDMzMDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIDMzMTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMzI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMzMzOlx0XHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuIDMzNDpcdFx0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbiAzMzU6XHRcdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4gMzM2Olx0XHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbiAzMzc6XHRcbiAzMzg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAzMzk6XHRcbiAzNDA6XHRcdGZvciAobWlub3IgPSAwOyBtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyAmIzQzOyYjNDM7bWlub3IpIHtcbiAzNDE6XHRcdFx0aWYgKGRldmljZXNbbWlub3JdKVxuIDM0MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDM0MzpcdFx0XHRicmVhaztcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdGlmIChtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTKSB7XG4gMzQ3Olx0XHRcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xuIDM0ODpcdFx0fSBlbHNlIHtcbiAzNDk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzUwOlx0XHRcdGtmcmVlKGRldmljZSk7XG4gMzUxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1MjpcdFx0fVxuIDM1MzpcdFxuIDM1NDpcdFx0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4gMzU1Olx0XG4gMzU2Olx0XHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiAzNTc6XHRcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiAzNTg6XHRcdFx0XHRcJiMzNDslcyVzJWRcJiMzNDssIFwmIzM0O3JvY2NhdFwmIzM0OywgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoSVNfRVJSKGRldmljZS1cdTAwM2VkZXYpKSB7XG4gMzYxOlx0XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzNjI6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzYzOlx0XHRcdHRlbXAgPSBQVFJfRVJSKGRldmljZS1cdTAwM2VkZXYpO1xuIDM2NDpcdFx0XHRrZnJlZShkZXZpY2UpO1xuIDM2NTpcdFx0XHRyZXR1cm4gdGVtcDtcbiAzNjY6XHRcdH1cbiAzNjc6XHRcbiAzNjg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM2OTpcdFxuIDM3MDpcdFx0cmV0dXJuIG1pbm9yO1xuIDM3MTpcdH1cbiAzNzI6XHRFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XG4gMzczOlx0XG4gMzc0Olx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcbiAzNzU6XHQgKiBAbWlub3I6IHRoZSBtaW5vciBkZXZpY2UgbnVtYmVyIHJldHVybmVkIGJ5IHJvY2NhdF9jb25uZWN0KClcbiAzNzY6XHQgKi9cbiAzNzc6XHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcbiAzNzg6XHR7XG4gMzc5Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuIDM4MDpcdFxuIDM4MTpcdFx0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuIDM4MjpcdFx0XHRyZXR1cm47XG4gMzgzOlx0XG4gMzg0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzg1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAzODY6XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzODc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKCFkZXZpY2UpXG4gMzkwOlx0XHRcdHJldHVybjtcbiAzOTE6XHRcbiAzOTI6XHRcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiAzOTM6XHRcbiAzOTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMzk1Olx0XHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwO1xuIDM5NjpcdFx0aWYgKGRldmljZS1cdTAwM2VvcGVuKSB7XG4gMzk3Olx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiAzOTg6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbiAzOTk6XHRcdH1cbiA0MDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJlbWFpbmluZyBMaW5lIEluc3BlY3Rpb24gLSBBIEZvY3VzZWQgUmV2aWV3KioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGZpbmFsIGJsb2NrLCBsaW5lcyA0MDEgdGhyb3VnaCB0aGUgZW5kLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZWl0aGVyOiBhKSBjb250YWluIGNvbmNsdWRpbmcgcmVtYXJrcyBhbmQgc3VtbWFyaWVzIG9mIHByZXZpb3VzIGZpbmRpbmdzLCBvciBiKSBleHBsb3JlIHBvdGVudGlhbCBhdmVudWVzIG9yIG9wZW4gcXVlc3Rpb25zIHRoYXQgZW1lcmdlZCBmcm9tIHRoZSByZXNlYXJjaC4gSWYgcHJldmlvdXMgbGluZSBzZWdtZW50cyBhcmUgYW55dGhpbmcgdG8gZ28gYnksIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZnVuY3Rpb24gb3IgcHVycG9zZSBvZiB0aGlzIHNlZ21lbnQgYW5kIGFkanVzdCBteSBwZXJzcGVjdGl2ZSBhY2NvcmRpbmdseS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgaXQgd2lsbCBiZSBtdWNoIGVhc2llciB0byBhc3Nlc3MgdGhpcyBzZWdtZW50LCBub3cgdGhhdCBJIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIHByZXZpb3VzIGZpbmRpbmdzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAxOlx0XG4gNDAyOlx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiA0MDM6XHR9XG4gNDA0Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xuIDQwNTpcdFxuIDQwNjpcdHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gNDA3Olx0e1xuIDQwODpcdFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDQwOTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gNDEwOlx0XHRsb25nIHJldHZhbCA9IDA7XG4gNDExOlx0XG4gNDEyOlx0XHRzd2l0Y2ggKGNtZCkge1xuIDQxMzpcdFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiA0MTQ6XHRcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuIDQxNTpcdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gNDE2Olx0XHRcdGJyZWFrO1xuIDQxNzpcdFx0ZGVmYXVsdDpcbiA0MTg6XHRcdFx0cmV0dmFsID0gLUVOT1RUWTtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldHVybiByZXR2YWw7XG4gNDIyOlx0fVxuIDQyMzpcdFxuIDQyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJvY2NhdF9vcHMgPSB7XG4gNDI1Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA0MjY6XHRcdC5yZWFkID0gcm9jY2F0X3JlYWQsXG4gNDI3Olx0XHQucG9sbCA9IHJvY2NhdF9wb2xsLFxuIDQyODpcdFx0Lm9wZW4gPSByb2NjYXRfb3BlbixcbiA0Mjk6XHRcdC5yZWxlYXNlID0gcm9jY2F0X3JlbGVhc2UsXG4gNDMwOlx0XHQubGxzZWVrID0gbm9vcF9sbHNlZWssXG4gNDMxOlx0XHQudW5sb2NrZWRfaW9jdGwgPSByb2NjYXRfaW9jdGwsXG4gNDMyOlx0fTtcbiA0MzM6XHRcbiA0MzQ6XHRzdGF0aWMgaW50IF9faW5pdCByb2NjYXRfaW5pdCh2b2lkKVxuIDQzNTpcdHtcbiA0MzY6XHRcdGludCByZXR2YWw7XG4gNDM3Olx0XHRkZXZfdCBkZXZfaWQ7XG4gNDM4Olx0XG4gNDM5Olx0XHRyZXR2YWwgPSBhbGxvY19jaHJkZXZfcmVnaW9uKFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxuIDQ0MDpcdFx0XHRcdFJPQ0NBVF9NQVhfREVWSUNFUywgXCYjMzQ7cm9jY2F0XCYjMzQ7KTtcbiA0NDE6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiA0NDI6XHRcdFx0cHJfd2FybihcJiMzNDtjYW4mIzM5O3QgZ2V0IG1ham9yIG51bWJlclxcblwmIzM0Oyk7XG4gNDQzOlx0XHRcdGdvdG8gZXJyb3I7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XG4gNDQ2Olx0XHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0Y2Rldl9pbml0KFx1MDAyNnJvY2NhdF9jZGV2LCBcdTAwMjZyb2NjYXRfb3BzKTtcbiA0NDk6XHRcdHJldHZhbCA9IGNkZXZfYWRkKFx1MDAyNnJvY2NhdF9jZGV2LCBkZXZfaWQsIFJPQ0NBVF9NQVhfREVWSUNFUyk7XG4gNDUwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA2CgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDY3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIFRoZSBjb3JlIG9mIGl0IGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgaW4gYGhpZC1yb2NjYXQuY2AgdG8gYWRkcmVzcyBzb21lIHByZXR0eSBuYXN0eSBidWdzOiB1c2UtYWZ0ZXItZnJlZSBhbmQgY29uY3VycmVuY3kgaXNzdWVzLiBUaGUgc29sdXRpb24/IFJlZmVyZW5jZSBjb3VudGluZyBmb3IgdGhlIGBzdHJ1Y3Qgcm9jY2F0X2RldmljZWAgdXNpbmcgYHN0cnVjdCBrcmVmYC4gVGhpcyBlbnN1cmVzIHRoYXQgZXZlbiBpZiBhIGRldmljZSBkaXNjb25uZWN0cyB3aGlsZSBhIGZpbGUgaXMgc3RpbGwgb3BlbiwgdGhlIGByb2NjYXRfZGV2aWNlYCBzdHJ1Y3Qgc3RpY2tzIGFyb3VuZCB1bnRpbCBhbGwgZmlsZSByZWxlYXNlIGhhbmRsZXJzIChgcm9jY2F0X3JlbGVhc2VgKSBoYXZlIGRyb3BwZWQgdGhlaXIgcmVmZXJlbmNlcy4gQmV5b25kIHRoYXQsIHRoZXJlIGFyZSBzb21lIG1pbm9yIGZpeGVzIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBudWxsIGRlcmVmZXJlbmNlcywgYW5kIGEgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3JkZXJpbmcgaXNzdWU6IHRoZSBgZGV2aWNlYCB2YXJpYWJsZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgb3RoZXIgdGhyZWFkcyBjYW4gYWNjZXNzIGl0LgoKTm93LCBsZXQmIzM5O3MgZXZhbHVhdGUgS0FTQU4gdmVyc3VzIEtNU0FOIGZvciB0aGlzLiBGcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZSwgaGVyZSYjMzk7cyB3aGF0IHN0YW5kcyBvdXQ6CgoqICAgKipCdWdzIEZpeGVkOioqIFdlJiMzOTtyZSB0YWxraW5nIHVzZS1hZnRlci1mcmVlIHJlbGF0ZWQgdG8gdGhlIGxpZmVjeWNsZSBvZiB0aGUgYHN0cnVjdCByb2NjYXRfZGV2aWNlYCAoS0FTQU4gd2lsbCBuYWlsIHRoaXMpLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyByZWxhdGVkIHRvIGFycmF5IGluZGV4aW5nIHdpdGggYG1pbm9yYCAoS0FTQU4gaXMga2V5IGhlcmUpLCBhbmQgcmFjZSBjb25kaXRpb25zIGluIGhvdyBkaXNjb25uZWN0cyBpbnRlcmFjdCB3aXRoIG9wZW4vcmVsZWFzZS9pb2N0bCBjYWxscy4KKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogSSYjMzk7dmUgY2FyZWZ1bGx5IHJldmlld2VkIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIG9jY3Vycy4gVGhlIHBhdGNoIHVzZXMgYGt6YWxsb2Nfb2JqYCBmb3IgYm90aCBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIGFuZCBgc3RydWN0IHJvY2NhdF9yZWFkZXJgLCB3aGljaCBpcyBleGNlbGxlbnQgYmVjYXVzZSBpdCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIEFueSByZXBvcnQgdmFsdWVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBrbWVtZHVwYC4gRnVydGhlciwgaW4gYHJvY2NhdF9pb2N0bGAgd2UgYXJlIHB1dHRpbmcgYW4gaW50IGByZXBvcnRfc2l6ZWAgKHNldCBieSBgcm9jY2F0X2Nvbm5lY3RgKSB0byB1c2VyIHNwYWNlLiBJbiBgcm9jY2F0X3JlYWRgIHdlIGFyZSByZWFkaW5nIGZyb20gYGRldmljZS0mZ3Q7Y2J1ZltyZWFkZXItJmd0O2NidWZfc3RhcnRdLnZhbHVlYCB3aGljaCB3YXMgcG9wdWxhdGVkIGJ5IGBrbWVtZHVwYCBpbiBgcm9jY2F0X3JlcG9ydF9ldmVudGAuIFRoZXJlIGFyZSBubyBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgYWxzbyBubyBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgY29weSBsb2dpYyBvciBsZW5ndGggY2FsY3VsYXRpb24gdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKVGhlcmVmb3JlLCBhbmQgSSBmZWVsIGNvbmZpZGVudCBoZXJlLCBLQVNBTiBjb3ZlcnMgdGhlIGNydWNpYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbiB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBhbmQgZG91YmxlLWZyZWUgaXNzdWVzLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSB0aGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLiBBbGwgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCBhbmQgY29waWVkIHVzaW5nIGBrbWVtZHVwYC4gSSYjMzk7ZCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLgoKSW4gc3VtbWFyeSwgSSYjMzk7bGwgZXhwbGFpbiB0aGlzIGxpa2UgdGhpczogVGhlIHBhdGNoIGltcGxlbWVudHMgcmVmZXJlbmNlIGNvdW50aW5nIHZpYSBga3JlZmAgZm9yIGBzdHJ1Y3Qgcm9jY2F0X2RldmljZWAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSwgZml4ZXMgc29tZSBib3VuZHMgY2hlY2tzLCBhbmQgZ2V0cyBpbml0aWFsaXphdGlvbiBvcmRlcmluZyBjb3JyZWN0LiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBiZWNhdXNlIGl0IHRhcmdldHMgdGhlIG1haW4gZmFpbHVyZSBtb2RlcyBvZiB0aGlzIGRldmljZSBsaWZlY3ljbGUgcmVmYWN0b3JpbmcuIEtNU0FOLCBob3dldmVyLCBpcyBub3QgbmVlZGVkIGJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQsIHJlcG9ydCBidWZmZXJzIGFyZSBkdXBsaWNhdGVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgYnJhbmNoZXMgYXJlIGludHJvZHVjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cblxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cblxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDU6NDkuOTgxODQxMjg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1NDE4NTQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSElEX1JPQ0NBVFwiLFxuICAgIFwiVVNCX0hJRFwiLFxuICAgIFwiSElEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm9jY2F0X2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9kaXNjb25uZWN0XCIsXG4gICAgXCJyb2NjYXRfcmVwb3J0X2V2ZW50XCIsXG4gICAgXCJyb2NjYXRfb3BlblwiLFxuICAgIFwicm9jY2F0X3JlbGVhc2VcIixcbiAgICBcInJvY2NhdF9pb2N0bFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGJ5IGludHJvZHVjaW5nIGtyZWYtYmFzZWQgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBzdHJ1Y3Qgcm9jY2F0X2RldmljZSwgcHJvcGVybHkgYm91bmRzLWNoZWNraW5nIG1pbm9yIGRldmljZSBpbmRleGVzLCBhbmQgZW5zdXJpbmcgc3RydWN0IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGV4cG9zaW5nIHRoZSBkZXZpY2UgaW4gdGhlIGdsb2JhbCBkZXZpY2VzIGFycmF5Llxcblxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHByaW1hcnkgYnVncyBhZGRyZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludHJvZHVjZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIHByZW1hdHVyZSBkZWFsbG9jYXRpb24sIGFuZCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHRoZSBkZXZpY2VzIGFycmF5LiBUaGVzZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qgcm9jY2F0X2RldmljZSwgc3RydWN0IHJvY2NhdF9yZWFkZXIpIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaigpLCByZXBvcnQgZGF0YSBpcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB3aXRoIGttZW1kdXAoKSwgYW5kIGFsbCBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyIGluIHJvY2NhdF9yZWFkIG9yIHB1dF91c2VyIGluIHJvY2NhdF9pb2N0bCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDU6NDkuOTgxODQ2MTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5MzE4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjViNjZjMWQzZDBjZGE0NzY0MWU1MDhmYmRiOTFmMDQzZWM1MGU0Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xcbmluZGV4IDRmMTVlYjk1MTAzOTYuLmVhYTQ3YmJiNzBkYTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXFxuKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXFxuQEAgLTIxLDggKzIxLDEwIEBAXFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZGV2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rcmVmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiBcXG5AQCAtMzcsNiArMzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7XFxuK1xcdHN0cnVjdCBrcmVmIGtyZWY7XFxuIFxcdHVuc2lnbmVkIGludCBtaW5vcjtcXG4gXFx0aW50IHJlcG9ydF9zaXplO1xcbiBcXHRpbnQgb3BlbjtcXG5AQCAtNzAsOCArNzMsMTAgQEAgc3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XFxuIC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7XFxuIFxcbi1zdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSlcXG4rc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKVxcbiB7XFxuK1xcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPVxcbitcXHRcXHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBST0NDQVRfQ0JVRl9TSVpFOyBpKyspXFxuQEAgLTE3MiwxMSArMTc3LDIxIEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdGlmICghZGV2aWNlKSB7XFxuIFxcdFxcdHByX2VtZXJnKFxcXCJyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24ndCBleGlzdFxcXFxuXFxcIiwgbWlub3IpO1xcbiBcXHRcXHRlcnJvciA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gZXhpdF9lcnJfZGV2aWNlcztcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbitcXHRcXHRrZnJlZShyZWFkZXIpO1xcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdGtyZWZfZ2V0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIFxcbitcXHRpZiAoIWRldmljZS1cXHUwMDNlZXhpc3QpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghZGV2aWNlLVxcdTAwM2VvcGVuKyspIHtcXG4gXFx0XFx0LyogcG93ZXIgb24gZGV2aWNlIG9uIGFkZGluZyBmaXJzdCByZWFkZXIgKi9cXG4gXFx0XFx0ZXJyb3IgPSBoaWRfaHdfcG93ZXIoZGV2aWNlLVxcdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcXG5AQCAtMjAwLDQ2ICsyMTUsMzUgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gcmVhZGVyO1xcbiBcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4gZXhpdF9lcnJfcmVhZGVyczpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuLWV4aXRfZXJyX2RldmljZXM6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRrZnJlZShyZWFkZXIpO1xcbitcXHRrcmVmX3B1dChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xcbitcXHRrZnJlZShyZWFkZXIpO1xcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcXG4gXFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4tXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuLVxcbi1cXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4tXFx0aWYgKCFkZXZpY2UpIHtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbi1cXHRcXHRwcl9lbWVyZyhcXFwicm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJ3QgZXhpc3RcXFxcblxcXCIsIG1pbm9yKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLVxcdH1cXG4rXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cXHUwMDNlZGV2aWNlO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuLVxcdGtmcmVlKHJlYWRlcik7XFxuIFxcbiBcXHRpZiAoIS0tZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIFxcdFxcdC8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovXFxuIFxcdFxcdGlmIChkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIFxcdFxcdFxcdGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xcbiBcXHRcXHRcXHRoaWRfaHdfY2xvc2UoZGV2aWNlLVxcdTAwM2VoaWQpO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbitcXHRrZnJlZShyZWFkZXIpO1xcbitcXHRrcmVmX3B1dChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjYwLDcgKzI2NCwxMiBAQCBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxcbiBcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xcbiBcXHR1aW50OF90ICpuZXdfdmFsdWU7XFxuIFxcbitcXHRpZiAobWlub3IgXFx1MDAzYyAwIHx8IG1pbm9yIFxcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4rXFx0aWYgKCFkZXZpY2UpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXFx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcXG4gXFx0aWYgKCFuZXdfdmFsdWUpXFxuQEAgLTMxNiw2ICszMjUsMTYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnRcXG4gXFx0aWYgKCFkZXZpY2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYpO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuK1xcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbitcXHRkZXZpY2UtXFx1MDAzZWV4aXN0ID0gMTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCA9IDA7XFxuK1xcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIFxcbiBcXHRmb3IgKG1pbm9yID0gMDsgbWlub3IgXFx1MDAzYyBST0NDQVRfTUFYX0RFVklDRVM7ICsrbWlub3IpIHtcXG5AQCAtMzMyLDYgKzM1MSw4IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRkZXZpY2UtXFx1MDAzZW1pbm9yID0gbWlub3I7XFxuK1xcbiBcXHRkZXZpY2UtXFx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFxcdTAwMjZoaWQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0TUtERVYocm9jY2F0X21ham9yLCBtaW5vciksIE5VTEwsXFxuIFxcdFxcdFxcdFxcXCIlcyVzJWRcXFwiLCBcXFwicm9jY2F0XFxcIiwgaGlkLVxcdTAwM2Vkcml2ZXItXFx1MDAzZW5hbWUsIG1pbm9yKTtcXG5AQCAtMzQ2LDE2ICszNjcsNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiBcXG4tXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0KTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVycyk7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjYnVmX2xvY2spO1xcbi1cXHRkZXZpY2UtXFx1MDAzZW1pbm9yID0gbWlub3I7XFxuLVxcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbi1cXHRkZXZpY2UtXFx1MDAzZWV4aXN0ID0gMTtcXG4tXFx0ZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCA9IDA7XFxuLVxcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4tXFxuIFxcdHJldHVybiBtaW5vcjtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XFxuQEAgLTM2Nyw0MiArMzc4LDM3IEBAIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKVxcbiB7XFxuIFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIFxcbitcXHRpZiAobWlub3IgXFx1MDAzYyAwIHx8IG1pbm9yIFxcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gXFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuK1xcdGRldmljZXNbbWlub3JdID0gTlVMTDtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiBcXG4tXFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7IC8qIFRPRE8gZXhpc3QgbWF5YmUgbm90IG5lZWRlZCAqL1xcbitcXHRpZiAoIWRldmljZSlcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZGV2aWNlX2Rlc3Ryb3koZGV2aWNlLVxcdTAwM2VkZXYtXFx1MDAzZWNsYXNzLCBNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSk7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbi1cXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4tXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7XFxuIFxcdGlmIChkZXZpY2UtXFx1MDAzZW9wZW4pIHtcXG4gXFx0XFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cXHUwMDNlaGlkKTtcXG4gXFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4rXFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xcbiBcXG4gc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4tXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4tXFx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcXG4rXFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cXHUwMDNlZGV2aWNlO1xcbiBcXHRsb25nIHJldHZhbCA9IDA7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbi1cXG4tXFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuLVxcdGlmICghZGV2aWNlKSB7XFxuLVxcdFxcdHJldHZhbCA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxcbiBcXHRcXHRpZiAocHV0X3VzZXIoZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxcbkBAIC00MTEsOCArNDE3LDcgQEAgc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dmFsID0gLUVOT1RUWTtcXG4gXFx0fVxcbi1vdXQ6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4rXFxuIFxcdHJldHVybiByZXR2YWw7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA1OjUxLjU0MTc5MTI4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTIzNDk3NDk2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSElEX1JPQ0NBVFwiLFxuICAgIFwiVVNCX0hJRFwiLFxuICAgIFwiSElEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm9jY2F0X2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9kaXNjb25uZWN0XCIsXG4gICAgXCJyb2NjYXRfcmVwb3J0X2V2ZW50XCIsXG4gICAgXCJyb2NjYXRfb3BlblwiLFxuICAgIFwicm9jY2F0X3JlbGVhc2VcIixcbiAgICBcInJvY2NhdF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMga3JlZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlZmFjdG9ycyBsb2NraW5nIGFjcm9zcyB0aGUgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlIHN1YnN5c3RlbSAoaGlkLXJvY2NhdCkgdG8gZml4IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgcmFjZXMgYmV0d2VlbiByb2NjYXQgY2hhcmFjdGVyIGRldmljZSBvcGVyYXRpb25zIChvcGVuLCByZWxlYXNlLCBpb2N0bCkgYW5kIGRldmljZSBjb25uZWN0L2Rpc2Nvbm5lY3QvZXZlbnQgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uIChyYXctZ2FkZ2V0L3VoaWQpIGFuZCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1YjY2YzFkM2QwY2RhNDc2NDFlNTA4ZmJkYjkxZjA0M2VjNTBlNGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG5pbmRleCA0ZjE1ZWI5NTEwMzk2Li5lYWE0N2JiYjcwZGE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG4rKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcbkBAIC0yMSw4ICsyMSwxMCBAQFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCI6IFwiIGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiBcbkBAIC0zNyw2ICszOSw3IEBAIHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcbiB9O1xuIFxuIHN0cnVjdCByb2NjYXRfZGV2aWNlIHtcbitcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHR1bnNpZ25lZCBpbnQgbWlub3I7XG4gXHRpbnQgcmVwb3J0X3NpemU7XG4gXHRpbnQgb3BlbjtcbkBAIC03MCw4ICs3MywxMCBAQCBzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcbiAvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIGRldmljZXMgYXJyYXkgKi9cbiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UpXG4rc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKVxuIHtcbitcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPVxuK1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBST0NDQVRfQ0JVRl9TSVpFOyBpKyspXG5AQCAtMTcyLDExICsxNzcsMjEgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGlmICghZGV2aWNlKSB7XG4gXHRcdHByX2VtZXJnKFwicm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJ3QgZXhpc3RcXG5cIiwgbWlub3IpO1xuIFx0XHRlcnJvciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXhpdF9lcnJfZGV2aWNlcztcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4rXHRcdGtmcmVlKHJlYWRlcik7XG4rXHRcdHJldHVybiBlcnJvcjtcbiBcdH1cbiBcbitcdGtyZWZfZ2V0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiBcbitcdGlmICghZGV2aWNlLVx1MDAzZWV4aXN0KSB7XG4rXHRcdGVycm9yID0gLUVOT0RFVjtcbitcdFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xuK1x0fVxuK1xuIFx0aWYgKCFkZXZpY2UtXHUwMDNlb3BlbisrKSB7XG4gXHRcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXG4gXHRcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcbkBAIC0yMDAsNDYgKzIxNSwzNSBAQCBzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZyZWFkZXItXHUwMDNlbm9kZSwgXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSByZWFkZXI7XG4gXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXHRyZXR1cm4gMDtcbitcbiBleGl0X2Vycl9yZWFkZXJzOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuLWV4aXRfZXJyX2RldmljZXM6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0a2ZyZWUocmVhZGVyKTtcbitcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuK1x0a2ZyZWUocmVhZGVyKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4gc3RhdGljIGludCByb2NjYXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpO1xuIFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbi1cdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXHRcdHByX2VtZXJnKFwicm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJ3QgZXhpc3RcXG5cIiwgbWlub3IpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbitcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXHUwMDNlZGV2aWNlO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbi1cdGtmcmVlKHJlYWRlcik7XG4gXG4gXHRpZiAoIS0tZGV2aWNlLVx1MDAzZW9wZW4pIHtcbiBcdFx0LyogcmVtb3ZpbmcgbGFzdCByZWFkZXIgKi9cbiBcdFx0aWYgKGRldmljZS1cdTAwM2VleGlzdCkge1xuIFx0XHRcdGhpZF9od19wb3dlcihkZXZpY2UtXHUwMDNlaGlkLCBQTV9ISU5UX05PUk1BTCk7XG4gXHRcdFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cdTAwM2VoaWQpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJvY2NhdF9mcmVlX2RldmljZShkZXZpY2UpO1xuIFx0XHR9XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbitcdGtmcmVlKHJlYWRlcik7XG4rXHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNjAsNyArMjY0LDEyIEBAIGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXG4gXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xuIFx0dWludDhfdCAqbmV3X3ZhbHVlO1xuIFxuK1x0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuK1x0aWYgKCFkZXZpY2UpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCFuZXdfdmFsdWUpXG5AQCAtMzE2LDYgKzMyNSwxNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0aWYgKCFkZXZpY2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0a3JlZl9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbitcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4rXHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuK1x0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbitcdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4rXHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcbiBcdGZvciAobWlub3IgPSAwOyBtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyArK21pbm9yKSB7XG5AQCAtMzMyLDYgKzM1MSw4IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4rXG4gXHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiBcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiBcdFx0XHRcIiVzJXMlZFwiLCBcInJvY2NhdFwiLCBoaWQtXHUwMDNlZHJpdmVyLVx1MDAzZW5hbWUsIG1pbm9yKTtcbkBAIC0zNDYsMTYgKzM2Nyw2IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4tXHRkZXZpY2UtXHUwMDNlbWlub3IgPSBtaW5vcjtcbi1cdGRldmljZS1cdTAwM2VoaWQgPSBoaWQ7XG4tXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAxO1xuLVx0ZGV2aWNlLVx1MDAzZWNidWZfZW5kID0gMDtcbi1cdGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSA9IHJlcG9ydF9zaXplO1xuLVxuIFx0cmV0dXJuIG1pbm9yO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XG5AQCAtMzY3LDQyICszNzgsMzcgQEAgdm9pZCByb2NjYXRfZGlzY29ubmVjdChpbnQgbWlub3IpXG4ge1xuIFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiBcbitcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XG4rXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcbi1cdGRldmljZS1cdTAwM2VleGlzdCA9IDA7IC8qIFRPRE8gZXhpc3QgbWF5YmUgbm90IG5lZWRlZCAqL1xuK1x0aWYgKCFkZXZpY2UpXG4rXHRcdHJldHVybjtcbiBcbiBcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cdGRldmljZXNbbWlub3JdID0gTlVMTDtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVxuK1x0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbitcdGRldmljZS1cdTAwM2VleGlzdCA9IDA7XG4gXHRpZiAoZGV2aWNlLVx1MDAzZW9wZW4pIHtcbiBcdFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cdTAwM2VoaWQpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cm9jY2F0X2ZyZWVfZGV2aWNlKGRldmljZSk7XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXG4rXHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xuIFxuIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4tXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuLVx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcbitcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXHUwMDNlZGV2aWNlO1xuIFx0bG9uZyByZXR2YWwgPSAwO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVxuLVx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XG4tXHRpZiAoIWRldmljZSkge1xuLVx0XHRyZXR2YWwgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxuIFx0XHRpZiAocHV0X3VzZXIoZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplLCAoaW50IF9fdXNlciAqKWFyZykpXG5AQCAtNDExLDggKzQxNyw3IEBAIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR2YWwgPSAtRU5PVFRZO1xuIFx0fVxuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuK1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNTo1MS41NDE3OTI4MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjY3NDg0NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYGhpZC1yb2NjYXQuY2AgZHJpdmVyIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYGtyZWZgIHRvIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0dXJlLiBUaGF0J3MgYSBjbGFzc2ljIHNpZ24gb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW1wcm92ZW1lbnRzLCBzcGVjaWZpY2FsbHkgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBpbmRpY2F0ZXMgYW4gYXR0ZW1wdCB0byBmaXggdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0aWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyB0aGUgcGFydCB0aGF0IHBlcmtzIHVwIG15IGVhcnMuXG5cblRoZSBjb3JlIGZ1bmN0aW9ucyDigJMgYHJvY2NhdF9vcGVuYCwgYHJvY2NhdF9yZWxlYXNlYCwgYHJvY2NhdF9yZXBvcnRfZXZlbnRgLCBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBhbmQgYHJvY2NhdF9pb2N0bGAg4oCTIGFyZSBhbGwgYmVpbmcgdXBkYXRlZCB0byB1dGlsaXplIHRoaXMgbmV3IHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBzdWdnZXN0cyB0aGV5IHdlcmUgaW5kZWVkIGZpbmRpbmcgVUFGIG9yIHJhY2UgaXNzdWVzIHJlbGF0ZWQgdG8gZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgUm9jY2F0IGRyaXZlciBhbmQgYXJlIHRha2luZyBzdGVwcyB0byBtaXRpZ2F0ZSB0aGVtLiBXZSBuZWVkIHRvIHBheSAqdmVyeSogY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGZ1bmN0aW9ucy5cblxuVGhpbmtpbmcgYWJvdXQgYXR0YWNrIHN1cmZhY2UsIHRoaXMgZHJpdmVyIGV4cG9zZXMgY2hhcmRldiBpbnRlcmZhY2VzIChsaWtlIGByb2NjYXQwYCkgd2hpY2ggbWVhbnMgd2UgY2FuIGxpa2VseSBpbnRlcmFjdCB3aXRoIGl0IHZpYSBgb3BlbmAsIGByZWFkYCwgYHBvbGxgLCBhbmQgYGlvY3RsYCBjYWxscy4gUm9jY2F0IGRldmljZXMgY2FuIGFsc28gYmUgZW11bGF0ZWQgdGhyb3VnaCBVU0Igb3IgVUhJRCwgd2hpY2ggZ2l2ZXMgdXMgbXVsdGlwbGUgd2F5cyB0byB0cmlnZ2VyIGFuZCBzdHJlc3MgdGhlIGRyaXZlci4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEknbGwgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGBLY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb2YgYGhpZC1yb2NjYXQuY2AuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IG90aGVyIG1vZHVsZXMgbWF5IGFsc28gYmUgaW1wYWN0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHNldCB1cCBhbiBhcHByb3ByaWF0ZSBmdXp6aW5nIGVudmlyb25tZW50LiBUaGVuIEknbGwgc3RhcnQgYnJhaW5zdG9ybWluZyBsaWtlbHkgZm9jdXMgc3ltYm9scyBsaWtlIHRoZSBpb2N0bHMsIG9yIHRoZSBgcm9jY2F0X3JlcG9ydF9ldmVudGAgZnVuY3Rpb24gd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBkcml2ZXIgaGFuZGxlcyByYXcgaW5wdXQuIFRoaXMgd2hvbGUgdGhpbmcgc21lbGxzIGxpa2UgYSBnb29kIHRhcmdldCBmb3Igc29tZSBmb2N1c2VkIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNTo1Ny4yMDkyNzkxNTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjI5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm9jY2F0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaGlkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjAgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvaGlkL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfSElEX1JFVFJPREUpXFx0Kz0gaGlkLXJldHJvZGUub1xcbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyNjpvYmotJChDT05GSUdfSElEX1JPQ0NBVClcXHQrPSBoaWQtcm9jY2F0Lm8gaGlkLXJvY2NhdC1jb21tb24ubyBcXFxcXFxuZHJpdmVycy9oaWQvTWFrZWZpbGU6MTI3OlxcdGhpZC1yb2NjYXQtYXJ2by5vIGhpZC1yb2NjYXQtaXNrdS5vIGhpZC1yb2NjYXQta29uZS5vIFxcXFxcXG5kcml2ZXJzL2hpZC9NYWtlZmlsZToxMjg6XFx0aGlkLXJvY2NhdC1rb25lcGx1cy5vIGhpZC1yb2NjYXQta29uZXB1cmUubyBoaWQtcm9jY2F0LWtvdmFwbHVzLm8gXFxcXFxcbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyOTpcXHRoaWQtcm9jY2F0LWx1YS5vIGhpZC1yb2NjYXQtcHlyYS5vIGhpZC1yb2NjYXQtcnlvcy5vIGhpZC1yb2NjYXQtc2F2dS5vXFxuZHJpdmVycy9oaWQvTWFrZWZpbGUtMTMwLW9iai0kKENPTkZJR19ISURfUk1JKVxcdFxcdCs9IGhpZC1ybWkub1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMTojaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTIyLSNpbmNsdWRlIFxcXCJoaWQtaWRzLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MjM6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQtY29tbW9uLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MjQ6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQtYXJ2by5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTI1LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTI2PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2hvd19tb2RlX2tleShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zNi1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM3OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX01PREVfS0VZLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM4LVxcdFxcdFxcdFxcdTAwMjZ0ZW1wX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhcnZvX21vZGVfa2V5KSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz00Nj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3NldF9tb2RlX2tleShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy02NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjY1OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX01PREVfS0VZLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTY2LVxcdFxcdFxcdFxcdTAwMjZ0ZW1wX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhcnZvX21vZGVfa2V5KSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz03Nj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3Nob3dfa2V5X21hc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtODYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2YXJ2by1cXHUwMDNlYXJ2b19sb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo4NzpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9LRVlfTUFTSyxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy04OC1cXHRcXHRcXHRcXHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19rZXlfbWFzaykpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9OTY9c3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc19zZXRfa2V5X21hc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTE0LVxcdG11dGV4X2xvY2soXFx1MDAyNmFydm8tXFx1MDAzZWFydm9fbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MTE1OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX0tFWV9NQVNLLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTExNi1cXHRcXHRcXHRcXHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19rZXlfbWFzaykpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MTI3PXN0YXRpYyBpbnQgYXJ2b19nZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xMzEtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MTMyOlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX0FDVFVBTF9QUk9GSUxFLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTEzMy1cXHRcXHRcXHRcXHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19hY3R1YWxfcHJvZmlsZSkpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MTUwPXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTE3MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjE3MjpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xNzMtXFx0XFx0XFx0XFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fYWN0dWFsX3Byb2ZpbGUpKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTE4NT1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmcCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTE5Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjE5ODpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xOTktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MjA0PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0yMTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2YXJ2by1cXHUwMDNlYXJ2b19sb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMjA6XFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjIxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2YXJ2by1cXHUwMDNlYXJ2b19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTI4OT1zdGF0aWMgaW50IGFydm9faW5pdF9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMxNC1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozMTU6XFx0cmV0dmFsID0gcm9jY2F0X2Nvbm5lY3QoXFx1MDAyNmFydm9fY2xhc3MsIGhkZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzE2OlxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgYXJ2b19yb2NjYXRfcmVwb3J0KSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzE3LVxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zMjAtXFx0XFx0YXJ2by1cXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjMyMTpcXHRcXHRhcnZvLVxcdTAwM2Vyb2NjYXRfY2xhaW1lZCA9IDE7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzIyLVxcdH1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTMzMD1zdGF0aWMgdm9pZCBhcnZvX3JlbW92ZV9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMzOS1cXHRhcnZvID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM0MDpcXHRpZiAoYXJ2by1cXHUwMDNlcm9jY2F0X2NsYWltZWQpXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzQxOlxcdFxcdHJvY2NhdF9kaXNjb25uZWN0KGFydm8tXFx1MDAzZWNocmRldl9taW5vcik7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzQyLVxcdGtmcmVlKGFydm8pO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9Mzg1PXN0YXRpYyB2b2lkIGFydm9fcmVwb3J0X3RvX2NocmRldihzdHJ1Y3QgYXJ2b19kZXZpY2UgY29uc3QgKmFydm8sXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zODgtXFx0c3RydWN0IGFydm9fc3BlY2lhbF9yZXBvcnQgY29uc3QgKnNwZWNpYWxfcmVwb3J0O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM4OTpcXHRzdHJ1Y3QgYXJ2b19yb2NjYXRfcmVwb3J0IHJvY2NhdF9yZXBvcnQ7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzkwLVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzkyLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM5MzpcXHRyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBhcnZvLVxcdTAwM2VhY3R1YWxfcHJvZmlsZTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozOTQ6XFx0cm9jY2F0X3JlcG9ydC5idXR0b24gPSBzcGVjaWFsX3JlcG9ydC1cXHUwMDNlZXZlbnQgXFx1MDAyNlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM5NS1cXHRcXHRcXHRBUlZPX1NQRUNJQUxfUkVQT1JUX0VWRU5UX01BU0tfQlVUVE9OO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzk3LVxcdFxcdFxcdEFSVk9fU1BFQ0lBTF9SRVBPUlRfRVZFTlRfQUNUSU9OX1BSRVNTKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM5ODpcXHRcXHRyb2NjYXRfcmVwb3J0LmFjdGlvbiA9IEFSVk9fUk9DQ0FUX1JFUE9SVF9BQ1RJT05fUFJFU1M7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzk5LVxcdGVsc2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo0MDA6XFx0XFx0cm9jY2F0X3JlcG9ydC5hY3Rpb24gPSBBUlZPX1JPQ0NBVF9SRVBPUlRfQUNUSU9OX1JFTEVBU0U7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDAxLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQwMjpcXHRyb2NjYXRfcmVwb3J0X2V2ZW50KGFydm8tXFx1MDAzZWNocmRldl9taW5vcixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo0MDM6XFx0XFx0XFx0KHVpbnQ4X3QgY29uc3QgKilcXHUwMDI2cm9jY2F0X3JlcG9ydCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDA0LX1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTQwNj1zdGF0aWMgaW50IGFydm9fcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDEzLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQxNDpcXHRpZiAoYXJ2byBcXHUwMDI2XFx1MDAyNiBhcnZvLVxcdTAwM2Vyb2NjYXRfY2xhaW1lZClcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy00MTUtXFx0XFx0YXJ2b19yZXBvcnRfdG9fY2hyZGV2KGFydm8sIGRhdGEpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg9NTc9ZW51bSBhcnZvX3NwZWNpYWxfcmVwb3J0X2V2ZW50X21hc2tzIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTYxLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjYyOnN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQge1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTYzLVxcdHVpbnQ4X3QgcHJvZmlsZTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTY3LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjY4OmVudW0gYXJ2b19yb2NjYXRfcmVwb3J0X2FjdGlvbiB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjktXFx0QVJWT19ST0NDQVRfUkVQT1JUX0FDVElPTl9SRUxFQVNFID0gMCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oPTczPXN0cnVjdCBhcnZvX2RldmljZSB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg6NzQ6XFx0aW50IHJvY2NhdF9jbGFpbWVkO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTc1LVxcdGludCBjaHJkZXZfbWlub3I7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0OiNpbmNsdWRlIFxcXCJoaWQtcm9jY2F0LWNvbW1vbi5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTUtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjpzdGF0aWMgaW5saW5lIHVpbnQxNl90IHJvY2NhdF9jb21tb24yX2ZlYXR1cmVfcmVwb3J0KHVpbnQ4X3QgcmVwb3J0X2lkKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTcte1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0yMC1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjIxOmludCByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTIyLVxcdFxcdHZvaWQgKmRhdGEsIHVpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMzMtXFx0XFx0XFx0VVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjM0OlxcdFxcdFxcdHJvY2NhdF9jb21tb24yX2ZlYXR1cmVfcmVwb3J0KHJlcG9ydF9pZCksXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0zNS1cXHRcXHRcXHQwLCBidWYsIHNpemUsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNDAtfVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NDE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy00Mi1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjQzOmludCByb2NjYXRfY29tbW9uMl9zZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQ0LVxcdFxcdHZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNTUtXFx0XFx0XFx0VVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo1NjpcXHRcXHRcXHRyb2NjYXRfY29tbW9uMl9mZWF0dXJlX3JlcG9ydChyZXBvcnRfaWQpLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNTctXFx0XFx0XFx0MCwgYnVmLCBzaXplLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTYxLX1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjYyOkVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb21tb24yX3NlbmQpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNjMtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo2NDplbnVtIHJvY2NhdF9jb21tb24yX2NvbnRyb2xfc3RhdGVzIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTY1LVxcdFJPQ0NBVF9DT01NT05fQ09OVFJPTF9TVEFUVVNfQ1JJVElDQUwgPSAwLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03MS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjcyOnN0YXRpYyBpbnQgcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldilcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTczLXtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc0LVxcdGludCByZXR2YWw7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo3NTpcXHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCBjb250cm9sO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNzYtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc4LVxcdFxcdG1zbGVlcCg1MCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo3OTpcXHRcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy04MC1cXHRcXHRcXHRcXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjgxOlxcdFxcdFxcdFxcdFxcdTAwMjZjb250cm9sLCBzaXplb2Yoc3RydWN0IHJvY2NhdF9jb21tb24yX2NvbnRyb2wpKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTgyLVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy05Ny1cXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1c2JfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo5ODpcXHRcXHRcXHRcXHRcXHRcXFwicm9jY2F0X2NvbW1vbjJfcmVjZWl2ZV9jb250cm9sX3N0YXR1czogXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtOTktXFx0XFx0XFx0XFx0XFx0XFxcInVua25vd24gcmVzcG9uc2UgdmFsdWUgMHgleFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTA2LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTA3OmludCByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTA4LVxcdFxcdHVpbnQgY29tbWFuZCwgdm9pZCBjb25zdCAqYnVmLCB1aW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTExMS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjExMjpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMTMtXFx0aWYgKHJldHZhbClcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTE3LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTE4OlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzKHVzYl9kZXYpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTE5LX1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEyMDpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyMS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEyMjppbnQgcm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTIzOlxcdFxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKmRldilcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyNC17XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyNy19XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMjg6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyOS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEzMDpzc2l6ZV90IHJvY2NhdF9jb21tb24yX3N5c2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzMS1cXHRcXHRjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTM0LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopLVxcdTAwM2VwYXJlbnQtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEzNTpcXHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlICpyb2NjYXRfZGV2ID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzNi1cXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTQ0LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ1OlxcdG11dGV4X2xvY2soXFx1MDAyNnJvY2NhdF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ2OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgY29tbWFuZCwgYnVmLCByZWFsX3NpemUpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ3OlxcdG11dGV4X3VubG9jayhcXHUwMDI2cm9jY2F0X2Rldi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNDgtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE1MC19XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNTE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTItXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNTM6c3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTU0LVxcdFxcdHZvaWQgY29uc3QgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTctXFx0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaiktXFx1MDAzZXBhcmVudC1cXHUwMDNlcGFyZW50O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTU4OlxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKnJvY2NhdF9kZXYgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTU5LVxcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNjQtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjU6XFx0bXV0ZXhfbG9jayhcXHUwMDI2cm9jY2F0X2Rldi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjY6XFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjc6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyb2NjYXRfZGV2LVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE2OC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTcwLX1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNzItXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTE0LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MTU6ZW51bSByb2NjYXRfY29tbW9uMl9jb21tYW5kcyB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0xNi1cXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCA9IDB4NCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMTgtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoxOTpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0yMC1cXHR1aW50OF90IGNvbW1hbmQ7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTI0LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MjU6aW50IHJvY2NhdF9jb21tb24yX3JlY2VpdmUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgcmVwb3J0X2lkLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjYtXFx0XFx0dm9pZCAqZGF0YSwgdWludCBzaXplKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI3OmludCByb2NjYXRfY29tbW9uMl9zZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTI4LVxcdFxcdHZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoyOTppbnQgcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTMwLVxcdFxcdHVpbnQgY29tbWFuZCwgdm9pZCBjb25zdCAqYnVmLCB1aW50IHNpemUpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMzEtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozMjpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjMzOlxcdGludCByb2NjYXRfY2xhaW1lZDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM0LVxcdGludCBjaHJkZXZfbWlub3I7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM3LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6Mzg6aW50IHJvY2NhdF9jb21tb24yX2RldmljZV9pbml0X3N0cnVjdChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjM5OlxcdFxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo0MDpzc2l6ZV90IHJvY2NhdF9jb21tb24yX3N5c2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQxLVxcdFxcdGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDItXFx0XFx0c2l6ZV90IHJlYWxfc2l6ZSwgdWludCBjb21tYW5kKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjQzOnNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQ0LVxcdFxcdHZvaWQgY29uc3QgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC00Ny0jZGVmaW5lIFJPQ0NBVF9DT01NT04yX1NZU0ZTX1codGhpbmd5LCBDT01NQU5ELCBTSVpFKSBcXFxcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo0ODpzdGF0aWMgc3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZV8gIyMgdGhpbmd5KHN0cnVjdCBmaWxlICpmcCwgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDktXFx0XFx0c3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTUxLXsgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NTI6XFx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTUzLVxcdFxcdFxcdFNJWkUsIENPTU1BTkQpOyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTU2LSNkZWZpbmUgUk9DQ0FUX0NPTU1PTjJfU1lTRlNfUih0aGluZ3ksIENPTU1BTkQsIFNJWkUpIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjU3OnN0YXRpYyBzc2l6ZV90IHJvY2NhdF9jb21tb24yX3N5c2ZzX3JlYWRfICMjIHRoaW5neShzdHJ1Y3QgZmlsZSAqZnAsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTU4LVxcdFxcdHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgXFxcXFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC02MC17IFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjYxOlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTYyLVxcdFxcdFxcdFNJWkUsIENPTU1BTkQpOyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl8gIyMgdGhpbmd5ID0geyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTczLVxcdC5zaXplID0gU0laRSwgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NzQ6XFx0LnJlYWQgPSByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkXyAjIyB0aGluZ3ksIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjc1OlxcdC53cml0ZSA9IHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlXyAjIyB0aGluZ3kgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNzYtfVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaD04MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfICMjIHRoaW5neSA9IHsgXFxcXFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC04Mi1cXHQuc2l6ZSA9IFNJWkUsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjgzOlxcdC5yZWFkID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZF8gIyMgdGhpbmd5LCBcXFxcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC04NC19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl8gIyMgdGhpbmd5ID0geyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTkwLVxcdC5zaXplID0gU0laRSwgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6OTE6XFx0LndyaXRlID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGVfICMjIHRoaW5neSBcXFxcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC05Mi19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjIxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9oaWQtcm9jY2F0LmhcXHUwMDNlXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMjItI2luY2x1ZGUgXFxcImhpZC1pZHMuaFxcXCJcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzoyMzojaW5jbHVkZSBcXFwiaGlkLXJvY2NhdC1jb21tb24uaFxcXCJcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzoyNDojaW5jbHVkZSBcXFwiaGlkLXJvY2NhdC1pc2t1LmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMjUtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMT1zdGF0aWMgaW50IGlza3VfcmVjZWl2ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCBjb21tYW5kLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzMte1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM0OlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzUtfVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9NDc9c3RhdGljIGludCBpc2t1X3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgaW50IG5ld19wcm9maWxlKVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtNTMtXFx0YnVmLmFjdHVhbF9wcm9maWxlID0gbmV3X3Byb2ZpbGU7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6NTQ6XFx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3NlbmRfd2l0aF9zdGF0dXModXNiX2RldixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy01NS1cXHRcXHRcXHRJU0tVX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUsIFxcdTAwMjZidWYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz02Nz1zdGF0aWMgc3NpemVfdCBpc2t1X3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy03My1cXHRpbnQgcmV0dmFsO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjc0OlxcdHN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy03NS1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTk2LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjk3OlxcdHJvY2NhdF9yZXBvcnQuZXZlbnQgPSBJU0tVX1JFUE9SVF9CVVRUT05fRVZFTlRfUFJPRklMRTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo5ODpcXHRyb2NjYXRfcmVwb3J0LmRhdGExID0gcHJvZmlsZSArIDE7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6OTk6XFx0cm9jY2F0X3JlcG9ydC5kYXRhMiA9IDA7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTAwOlxcdHJvY2NhdF9yZXBvcnQucHJvZmlsZSA9IHByb2ZpbGUgKyAxO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjEwMTpcXHRyb2NjYXRfcmVwb3J0X2V2ZW50KGlza3UtXFx1MDAzZWNocmRldl9taW5vciwgKHVpbnQ4X3QgY29uc3QgKilcXHUwMDI2cm9jY2F0X3JlcG9ydCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMTAyLVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9MTM3PXN0YXRpYyBzc2l6ZV90IGlza3Vfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTE0OS1cXHRtdXRleF9sb2NrKFxcdTAwMjZpc2t1LVxcdTAwM2Vpc2t1X2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjE1MDpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsIGNvbW1hbmQsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMTUxLVxcdFxcdFxcdCh2b2lkICopYnVmLCBjb3VudCk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0yNjk9c3RhdGljIGludCBpc2t1X2luaXRfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yOTQtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mjk1OlxcdHJldHZhbCA9IHJvY2NhdF9jb25uZWN0KFxcdTAwMjZpc2t1X2NsYXNzLCBoZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjI5NjpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGlza3Vfcm9jY2F0X3JlcG9ydCkpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTI5Ny1cXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzAwLVxcdFxcdGlza3UtXFx1MDAzZWNocmRldl9taW5vciA9IHJldHZhbDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozMDE6XFx0XFx0aXNrdS1cXHUwMDNlcm9jY2F0X2NsYWltZWQgPSAxO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMwMi1cXHR9XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMTA9c3RhdGljIHZvaWQgaXNrdV9yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zMTktXFx0aXNrdSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozMjA6XFx0aWYgKGlza3UtXFx1MDAzZXJvY2NhdF9jbGFpbWVkKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjMyMTpcXHRcXHRyb2NjYXRfZGlzY29ubmVjdChpc2t1LVxcdTAwM2VjaHJkZXZfbWlub3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMyMi1cXHRrZnJlZShpc2t1KTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jPTM4Mj1zdGF0aWMgdm9pZCBpc2t1X3JlcG9ydF90b19jaHJkZXYoc3RydWN0IGlza3VfZGV2aWNlIGNvbnN0ICppc2t1LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzg0LXtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozODU6XFx0c3RydWN0IGlza3Vfcm9jY2F0X3JlcG9ydCByb2NjYXRfcmVwb3J0O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTM4Ni1cXHRzdHJ1Y3QgaXNrdV9yZXBvcnRfYnV0dG9uIGNvbnN0ICpidXR0b25fcmVwb3J0O1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzkyLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5MzpcXHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gYnV0dG9uX3JlcG9ydC1cXHUwMDNlZXZlbnQ7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk0OlxcdHJvY2NhdF9yZXBvcnQuZGF0YTEgPSBidXR0b25fcmVwb3J0LVxcdTAwM2VkYXRhMTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTU6XFx0cm9jY2F0X3JlcG9ydC5kYXRhMiA9IGJ1dHRvbl9yZXBvcnQtXFx1MDAzZWRhdGEyO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5NjpcXHRyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBpc2t1LVxcdTAwM2VhY3R1YWxfcHJvZmlsZSArIDE7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk3OlxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoaXNrdS1cXHUwMDNlY2hyZGV2X21pbm9yLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5ODpcXHRcXHRcXHQodWludDhfdCBjb25zdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zOTktfVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9NDAxPXN0YXRpYyBpbnQgaXNrdV9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy00MTUtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6NDE2OlxcdGlmIChpc2t1LVxcdTAwM2Vyb2NjYXRfY2xhaW1lZClcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy00MTctXFx0XFx0aXNrdV9yZXBvcnRfdG9fY2hyZGV2KGlza3UsIGRhdGEpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1Lmg9Nzc9ZW51bSBpc2t1X3JlcG9ydF9idXR0b25fZXZlbnRzIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTgwLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjgxOnN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQge1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTgyLVxcdHVpbnQ4X3QgZXZlbnQ7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaD04OD1zdHJ1Y3QgaXNrdV9kZXZpY2Uge1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjg5OlxcdGludCByb2NjYXRfY2xhaW1lZDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaC05MC1cXHRpbnQgY2hyZGV2X21pbm9yO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzozMDojaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTMxLSNpbmNsdWRlIFxcXCJoaWQtaWRzLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6MzI6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQtY29tbW9uLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6MzM6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQta29uZS5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTM0LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9NDU9c3RhdGljIHZvaWQga29uZV9wcm9maWxlX3JlcG9ydChzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUsIHVpbnQgbmV3X3Byb2ZpbGUpXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNDYte1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjQ3OlxcdHN0cnVjdCBrb25lX3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy00OC1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo0OTpcXHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0ga29uZV9tb3VzZV9ldmVudF9zd2l0Y2hfcHJvZmlsZTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo1MDpcXHRyb2NjYXRfcmVwb3J0LnZhbHVlID0gbmV3X3Byb2ZpbGU7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NTE6XFx0cm9jY2F0X3JlcG9ydC5rZXkgPSAwO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjUyOlxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cXHUwMDNlY2hyZGV2X21pbm9yLCAodWludDhfdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy01My19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz02NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmtvbmVfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy02NTgtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NjU5Oi8qIGtvbmVfY2xhc3MgaXMgdXNlZCBmb3IgY3JlYXRpbmcgc3lzZnMgYXR0cmlidXRlcyB2aWEgcm9jY2F0IGNoYXIgZGV2aWNlICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNjYwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3Mga29uZV9jbGFzcyA9IHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTY5OT1zdGF0aWMgaW50IGtvbmVfaW5pdF9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTcxOS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3MjA6XFx0XFx0cmV0dmFsID0gcm9jY2F0X2Nvbm5lY3QoXFx1MDAyNmtvbmVfY2xhc3MsIGhkZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzIxOlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0KSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzIyLVxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy03MjUtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3MjY6XFx0XFx0XFx0a29uZS1cXHUwMDNlcm9jY2F0X2NsYWltZWQgPSAxO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTcyNy1cXHRcXHRcXHRrb25lLVxcdTAwM2VjaHJkZXZfbWlub3IgPSByZXR2YWw7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz03Mzk9c3RhdGljIHZvaWQga29uZV9yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy03NDYtXFx0XFx0a29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3NDc6XFx0XFx0aWYgKGtvbmUtXFx1MDAzZXJvY2NhdF9jbGFpbWVkKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjc0ODpcXHRcXHRcXHRyb2NjYXRfZGlzY29ubmVjdChrb25lLVxcdTAwM2VjaHJkZXZfbWlub3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTc0OS1cXHRcXHRrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9ODEzPXN0YXRpYyB2b2lkIGtvbmVfcmVwb3J0X3RvX2NocmRldihzdHJ1Y3Qga29uZV9kZXZpY2UgY29uc3QgKmtvbmUsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MTUte1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgxNjpcXHRzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0IHJvY2NhdF9yZXBvcnQ7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODE3LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODIyLVxcdGNhc2Uga29uZV9tb3VzZV9ldmVudF9vc2RfZHBpOlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyMzpcXHRcXHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gZXZlbnQtXFx1MDAzZWV2ZW50O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNDpcXHRcXHRyb2NjYXRfcmVwb3J0LnZhbHVlID0gZXZlbnQtXFx1MDAzZXZhbHVlO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNTpcXHRcXHRyb2NjYXRfcmVwb3J0LmtleSA9IDA7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODI2OlxcdFxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cXHUwMDNlY2hyZGV2X21pbm9yLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNzpcXHRcXHRcXHRcXHQodWludDhfdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MjgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MzEtXFx0XFx0aWYgKGV2ZW50LVxcdTAwM2V2YWx1ZSA9PSBrb25lX2tleXN0cm9rZV9hY3Rpb25fcHJlc3MpIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzI6XFx0XFx0XFx0cm9jY2F0X3JlcG9ydC5ldmVudCA9IGV2ZW50LVxcdTAwM2VldmVudDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzM6XFx0XFx0XFx0cm9jY2F0X3JlcG9ydC52YWx1ZSA9IGtvbmUtXFx1MDAzZWFjdHVhbF9wcm9maWxlO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgzNDpcXHRcXHRcXHRyb2NjYXRfcmVwb3J0LmtleSA9IGV2ZW50LVxcdTAwM2VtYWNyb19rZXk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODM1OlxcdFxcdFxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cXHUwMDNlY2hyZGV2X21pbm9yLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgzNjpcXHRcXHRcXHRcXHRcXHQodWludDhfdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MzctXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9ODQ4PXN0YXRpYyBpbnQga29uZV9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04NzMtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODc0OlxcdGlmIChrb25lLVxcdTAwM2Vyb2NjYXRfY2xhaW1lZClcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04NzUtXFx0XFx0a29uZV9yZXBvcnRfdG9fY2hyZGV2KGtvbmUsIGV2ZW50KTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTk3Mz1zdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGtvbmVfdGVzdF9zdWl0ZSA9IHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo5NzQ6XFx0Lm5hbWUgPSBcXFwiaGlkLXJvY2NhdC1rb25lXFxcIixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy05NzUtXFx0LnRlc3RfY2FzZXMgPSBrb25lX3Rlc3RfY2FzZXMsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaD0xNzc9ZW51bSBrb25lX2NvbW1hbmRzIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTE4Ni1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaDoxODc6c3RydWN0IGtvbmVfcm9jY2F0X3JlcG9ydCB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMTg4LVxcdHVpbnQ4X3QgZXZlbnQ7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaD0xOTM9c3RydWN0IGtvbmVfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTIyMS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaDoyMjI6XFx0aW50IHJvY2NhdF9jbGFpbWVkO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTIyMy1cXHRpbnQgY2hyZGV2X21pbm9yO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjIyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9oaWQtcm9jY2F0LmhcXHUwMDNlXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTIzLSNpbmNsdWRlIFxcXCJoaWQtaWRzLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjI0OiNpbmNsdWRlIFxcXCJoaWQtcm9jY2F0LWNvbW1vbi5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYzoyNTojaW5jbHVkZSBcXFwiaGlkLXJvY2NhdC1rb25lcGx1cy5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy0yNi1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYz0zNT1zdGF0aWMgaW50IGtvbmVwbHVzX3NlbmRfY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCB2YWx1ZSxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy0zNy17XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjM4OlxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9jb250cm9sIGNvbnRyb2w7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTM5LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTQ4LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYzo0OTpcXHRyZXR1cm4gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy01MC1cXHRcXHRcXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6NTE6XFx0XFx0XFx0XFx1MDAyNmNvbnRyb2wsIHNpemVvZihzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCkpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy01Mi19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9NTY9c3RhdGljIGludCBrb25lcGx1c19nZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNjAtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjYxOlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNjItXFx0XFx0XFx0XFx1MDAyNmJ1ZiwgS09ORVBMVVNfU0laRV9BQ1RVQUxfUFJPRklMRSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9Njc9c3RhdGljIGludCBrb25lcGx1c19zZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNzUtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjc2OlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTc3LVxcdFxcdFxcdEtPTkVQTFVTX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9ODE9c3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTk2LVxcdG11dGV4X2xvY2soXFx1MDAyNmtvbmVwbHVzLVxcdTAwM2Vrb25lcGx1c19sb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6OTc6XFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTk4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2a29uZXBsdXMtXFx1MDAzZWtvbmVwbHVzX2xvY2spO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jPTEwNj1zdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTExOC1cXHRtdXRleF9sb2NrKFxcdTAwMjZrb25lcGx1cy1cXHUwMDNla29uZXBsdXNfbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjExOTpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsIGNvbW1hbmQsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTEyMC1cXHRcXHRcXHRidWYsIHJlYWxfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9MjQ4PXN0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA1OjU3LjI2MjIwODcwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MTE2NzIxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUm9jY2F0IEhJRCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGRyaXZlcnMvaGlkL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBjb25jZXJuaW5nIGBDT05GSUdfSElEX1JPQ0NBVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gUm9jY2F0IEhJRCBkZXZpY2VzLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBjaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgb3IgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFyb3VuZCB0aGlzIGNvbmZpZyB0byB1bmRlcnN0YW5kIHdoYXQgUm9jY2F0IGRldmljZXMgYXJlIHN1cHBvcnRlZCwgYW55IHNwZWNpYWwgZmVhdHVyZXMgZW5hYmxlZCwgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cyBvciBsaW1pdGF0aW9ucy4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiBJJ20gYXNzZXNzaW5nIG9yIG1vZGlmeWluZyBkcml2ZXIgY29uZmlndXJhdGlvbnMuIFRoaXMgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHN1cHBvcnRpbmcgdGhlIFJvY2NhdCBzZXJpZXMgb2YgcGVyaXBoZXJhbHMgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZWxsIHRoZSBzdXBwb3J0IGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI1MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjAxLjg3Mzg4MjU3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI2NjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJISURfUk9DQ0FUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaGlkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2hpZC9LY29uZmlnPTEwOTQ9Y29uZmlnIEhJRF9SRVRST0RFXFxuLS1cXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDAtXFxuZHJpdmVycy9oaWQvS2NvbmZpZzoxMTAxOmNvbmZpZyBISURfUk9DQ0FUXFxuZHJpdmVycy9oaWQvS2NvbmZpZy0xMTAyLVxcdHRyaXN0YXRlIFxcXCJSb2NjYXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDgtXFxuZHJpdmVycy9oaWQvS2NvbmZpZzoxMTA5OmNvbmZpZyBISURfUk9DQ0FUX0tPTkVfS1VOSVRfVEVTVFxcbmRyaXZlcnMvaGlkL0tjb25maWctMTExMC1cXHRib29sIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIFJvY2NhdCBLb25lIGRyaXZlclxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmRyaXZlcnMvaGlkL0tjb25maWc6MTExMTpcXHRkZXBlbmRzIG9uIEhJRF9ST0NDQVQ9eSBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuZHJpdmVycy9oaWQvS2NvbmZpZy0xMTEyLVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL2hpZC9NYWtlZmlsZT0xMjU9b2JqLSQoQ09ORklHX0hJRF9SRVRST0RFKVxcdCs9IGhpZC1yZXRyb2RlLm9cXG5kcml2ZXJzL2hpZC9NYWtlZmlsZToxMjY6b2JqLSQoQ09ORklHX0hJRF9ST0NDQVQpXFx0Kz0gaGlkLXJvY2NhdC5vIGhpZC1yb2NjYXQtY29tbW9uLm8gXFxcXFxcbmRyaXZlcnMvaGlkL01ha2VmaWxlLTEyNy1cXHRoaWQtcm9jY2F0LWFydm8ubyBoaWQtcm9jY2F0LWlza3UubyBoaWQtcm9jY2F0LWtvbmUubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcXVpcmtzLmM9MjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfaGF2ZV9zcGVjaWFsX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXF1aXJrcy5jLTY1Ni0jZW5kaWZcXG5kcml2ZXJzL2hpZC9oaWQtcXVpcmtzLmM6NjU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ISURfUk9DQ0FUKVxcbmRyaXZlcnMvaGlkL2hpZC1xdWlya3MuYy02NTgtXFx0eyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwgVVNCX0RFVklDRV9JRF9ST0NDQVRfQVJWTykgfSxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0FSVk9fSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfQVJWT19IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9DT01NT05fSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9DT01NT05fSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0lTS1VfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfSVNLVV9IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmgtNC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTkyMT1NT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtOTIyLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjkyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSElEX1JPQ0NBVF9LT05FX0tVTklUX1RFU1QpXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtOTI0LSNpbmNsdWRlIFxcdTAwM2NrdW5pdC90ZXN0LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz05Nzc9a3VuaXRfdGVzdF9zdWl0ZShrb25lX3Rlc3Rfc3VpdGUpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjk3ODojZW5kaWYgLyogQ09ORklHX0hJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUICovXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9LT05FX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX0tPTkVfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0tPTkVQTFVTX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9LT05FUExVU19IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta292YXBsdXMuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0tPVkFQTFVTX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9LT1ZBUExVU19IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfTFVBX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfTFVBX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9QWVJBX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX1BZUkFfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1zYXZ1Lmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9TQVZVX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX1NBVlVfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtc2F2dS5oLTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjAxLjkyNDE1NzMzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDI1NjA1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEhJRCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzcGVjaWZpYyBISUQgZHJpdmVyLiBHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvaGlkL2AgZGlyZWN0b3J5LiBBbmQgc2luY2UgSSBrbm93IG15IHdheSBhcm91bmQgdGhlIHNvdXJjZSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gcm91Z2hseSBsaW5lIDExMDEuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVucmF2ZWwgd2hpY2ggb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MDUuNDI2NzIwNDY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSZXRyb2RlIDIgVVNCIGFkYXB0ZXIgZm9yIHZpbnRhZ2UgdmlkZW8gZ2FtZXNcXFwiXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIFVTQl9ISURcXG4xMDk3OlxcdFxcdGhlbHBcXG4xMDk4OlxcdFxcdFN1cHBvcnQgZm9yXFxuMTA5OTpcXHRcXHQgICogUmV0cm9kZSAyIGNhcnRyaWRnZSBhbmQgY29udHJvbGxlciBhZGFwdGVyXFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBISURfUk9DQ0FUXFxuMTEwMjpcXHRcXHR0cmlzdGF0ZSBcXFwiUm9jY2F0IGRldmljZSBzdXBwb3J0XFxcIlxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfSElEXFxuMTEwNDpcXHRcXHRoZWxwXFxuMTEwNTpcXHRcXHRTdXBwb3J0IGZvciBSb2NjYXQgZGV2aWNlcy5cXG4xMTA2OlxcdFxcdFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSb2NjYXQgbW91c2Ugb3Iga2V5Ym9hcmQgYW5kIHdhbnRcXG4xMTA3OlxcdFxcdHN1cHBvcnQgZm9yIGl0cyBzcGVjaWFsIGZ1bmN0aW9uYWxpdGllcy5cXG4xMTA4OlxcdFxcbjExMDk6XFx0Y29uZmlnIEhJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUXFxuMTExMDpcXHRcXHRib29sIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIFJvY2NhdCBLb25lIGRyaXZlclxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbjExMTE6XFx0XFx0ZGVwZW5kcyBvbiBISURfUk9DQ0FUPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbjExMTI6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4xMTEzOlxcdFxcdGhlbHBcXG4xMTE0OlxcdFxcdCAgRW5hYmxlIHRoZSBLVW5pdCByZWdyZXNzaW9uIHRlc3RzIGZvciB0aGUgUm9jY2F0IEtvbmUgZHJpdmVyLFxcbjExMTU6XFx0XFx0ICBjb3ZlcmluZyBib3VuZHMgY2hlY2tpbmcgb2YgZGV2aWNlLXN1cHBsaWVkIHByb2ZpbGUgaW5kaWNlcy5cXG4xMTE2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xMTE3OlxcdFxcbjExMTg6XFx0Y29uZmlnIEhJRF9TQUlURUtcXG4xMTE5OlxcdFxcdHRyaXN0YXRlIFxcXCJTYWl0ZWsgKE1hZCBDYXR6KSBub24tZnVsbHkgSElELWNvbXBsaWFudCBkZXZpY2VzXFxcIlxcbjExMjA6XFx0XFx0aGVscFxcbjExMjE6XFx0XFx0U3VwcG9ydCBmb3IgU2FpdGVrIGRldmljZXMgdGhhdCBhcmUgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoIHRoZVxcbjExMjI6XFx0XFx0SElEIHN0YW5kYXJkLlxcbjExMjM6XFx0XFxuMTEyNDpcXHRcXHRTdXBwb3J0ZWQgZGV2aWNlczpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MDUuNDI2ODE3NjU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwMzAxNzMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIFJvY2NhdCBISUQgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgUm9jY2F0IEhJRCBkcml2ZXIsIGFuZCBmcmFua2x5LCB0aGVyZSdzIG5vIGJldHRlciB3YXkgdGhhbiB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNgLiBUaGF0IGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBzdGFydGluZyBwb2ludCDigJMgaXTigJlsbCBjb250YWluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgYWxsIHRoZSBkZWZpbmVkIGZ1bmN0aW9ucyBhbmQsIGhvcGVmdWxseSwgd2VsbC1zdHJ1Y3R1cmVkIGxvZ2ljLiBIb3BlZnVsbHkgaXQncyB3ZWxsLWNvbW1lbnRlZCBhbmQgZWFzeSB0byBuYXZpZ2F0ZSwgYmVjYXVzZSBJIGRvbid0IGhhdmUgYWxsIGRheS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkncmUgaGFuZGxpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBmZWF0dXJlIHJlcG9ydHMsIGFuZCBhbnkgY3VzdG9tIGV2ZW50IHByb2Nlc3NpbmcgZm9yIHRoZSBSb2NjYXQgaGFyZHdhcmUuIEkgd2FudCB0byBzZWUgKmV2ZXJ5dGhpbmcqIGF0IGEgZ2xhbmNlLCBzbyBJIGNhbiBzdGFydCBmb3JtaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIGFuZCBpZGVudGlmeSB0aGUgY3JpdGljYWwgYXJlYXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzkwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoxMS43Mjk4Mzg0MTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogUm9jY2F0IGRyaXZlciBmb3IgTGludXhcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuIEFjaGF0eiBcXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFxcdTAwM2VcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQvKlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdC8qXFxuICAxMjpcXHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XFxuICAxMzpcXHQgKiBoYXJkd2FyZSB0byB1c2VybGFuZC4gVGhlc2UgZXZlbnRzIGluY2x1ZGUgcmVxdWVzdHMgZm9yIG9uLXNjcmVlbi1kaXNwbGF5IG9mXFxuICAxNDpcXHQgKiBwcm9maWxlIG9yIGRwaSBzZXR0aW5ncyBvciByZXF1ZXN0cyBmb3IgZXhlY3V0aW9uIG9mIG1hY3JvIHNlcXVlbmNlcyB0aGF0IGFyZVxcbiAgMTU6XFx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXFxuICAxNjpcXHQgKiBpbXBsZW1lbnRhdGlvbiBhbmQgY29udGFpbnMgZGF0YSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gYSBzaW5nbGUgaGlkIGV2ZW50XFxuICAxNzpcXHQgKiBvciBlbHNlIGhpZHJhdyBjb3VsZCBoYXZlIGJlZW4gdXNlZC5cXG4gIDE4OlxcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuICAyMjpcXHRcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZGV2LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMzA6XFx0XFxuICAzMTpcXHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXFxuICAzMjpcXHQjZGVmaW5lIFJPQ0NBVF9NQVhfREVWSUNFUyA4XFxuICAzMzpcXHRcXG4gIDM0OlxcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xcbiAgMzU6XFx0I2RlZmluZSBST0NDQVRfQ0JVRl9TSVpFIDE2XFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcXG4gIDM4OlxcdFxcdHVpbnQ4X3QgKnZhbHVlO1xcbiAgMzk6XFx0fTtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xcbiAgNDI6XFx0XFx0c3RydWN0IGtyZWYga3JlZjtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGludCBtaW5vcjtcXG4gIDQ0OlxcdFxcdGludCByZXBvcnRfc2l6ZTtcXG4gIDQ1OlxcdFxcdGludCBvcGVuO1xcbiAgNDY6XFx0XFx0aW50IGV4aXN0O1xcbiAgNDc6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcXG4gIDQ4OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gIDQ5OlxcdFxcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XFxuICA1MDpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XFxuICA1MTpcXHRcXHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xcbiAgNTI6XFx0XFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0LypcXG4gIDU1OlxcdFxcdCAqIGNpcmN1bGFyX2J1ZmZlciBoYXMgb25lIHdyaXRlciBhbmQgbXVsdGlwbGUgcmVhZGVycyB3aXRoIHRoZWlyIG93blxcbiAgNTY6XFx0XFx0ICogcmVhZCBwb2ludGVyc1xcbiAgNTc6XFx0XFx0ICovXFxuICA1ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCBjYnVmW1JPQ0NBVF9DQlVGX1NJWkVdO1xcbiAgNTk6XFx0XFx0aW50IGNidWZfZW5kO1xcbiAgNjA6XFx0XFx0c3RydWN0IG11dGV4IGNidWZfbG9jaztcXG4gIDYxOlxcdH07XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0cnVjdCByb2NjYXRfcmVhZGVyIHtcXG4gIDY0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcXG4gIDY1OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuICA2NjpcXHRcXHRpbnQgY2J1Zl9zdGFydDtcXG4gIDY3OlxcdH07XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbnQgcm9jY2F0X21ham9yO1xcbiAgNzA6XFx0c3RhdGljIHN0cnVjdCBjZGV2IHJvY2NhdF9jZGV2O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcXG4gIDczOlxcdC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqL1xcbiAgNzQ6XFx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRzdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cXG4gIDc5OlxcdFxcdFxcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgcm9jY2F0X2RldmljZSwga3JlZik7XFxuICA4MDpcXHRcXHRpbnQgaTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJPQ0NBVF9DQlVGX1NJWkU7IGkrKylcXG4gIDgzOlxcdFxcdFxcdGtmcmVlKGRldmljZS1cXHUwMDNlY2J1ZltpXS52YWx1ZSk7XFxuICA4NDpcXHRcXHRrZnJlZShkZXZpY2UpO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgc3NpemVfdCByb2NjYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDg4OlxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDkxOlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXFx1MDAzZWRldmljZTtcXG4gIDkyOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XFxuICA5MzpcXHRcXHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcXG4gIDk0OlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdC8qIG5vIGRhdGE/ICovXFxuICA5OTpcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpIHtcXG4gMTAwOlxcdFxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQsIFxcdTAwMjZ3YWl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTEuNzI5OTM3NTM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNjI4NjI1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgcmVzdCBvZiBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIG9wZXJhdGVzLiBLbm93aW5nIHRoZSBiYXNpY3Mgb2YgSElELCBhbmQgaGF2aW5nIHBva2VkIGFyb3VuZCBpbiB0aGUgb3RoZXIgZHJpdmVycywgSSBjYW4gcHJvYmFibHkgcGllY2UgdG9nZXRoZXIgdGhlIGNvcmUgbG9naWMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgYW5kIG1hcHBpbmdzIGZvciBSb2NjYXQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byBsb29rIGZvciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIHJlcG9ydCBkZXNjcmlwdG9yIHBhcnNpbmcsIGFuZCBob3cgaXQgdHJhbnNsYXRlcyB0aG9zZSBISUQgcmVwb3J0cyBpbnRvIG1lYW5pbmdmdWwgZXZlbnRzIGZvciB0aGUgc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbWJpbmF0aW9uIG9mIHN0YW5kYXJkIEhJRCB1c2FnZSBwYWdlcyBhbmQgc29tZSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBhbmQgZmVhdHVyZSByZXBvcnRzIHdpbGwgYmUgY3J1Y2lhbCB0b28sIHRoYXQncyB3aGVyZSB0aGUgYWR2YW5jZWQgY29uZmlndXJhdGlvbiB1c3VhbGx5IGxpdmVzLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgaW50ZXJydXB0IGhhbmRsaW5nIG9yIHBvbGxpbmcgc3RyYXRlZ2llcywgYXMgUm9jY2F0IGRldmljZXMgb2Z0ZW4gaGF2ZSBjb21wbGV4IGZlYXR1cmVzIHRoYXQgZGVtYW5kIHNvbWUgY3VzdG9tIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gc2VlIHNvbWUgaW50ZXJwbGF5IGJldHdlZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLiBGaW5hbGx5LCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcyB1c2VkLiBLbm93aW5nIGhvdyB0aGUgZHJpdmVyIHJlc3BvbmRzIHRvIHVuZXhwZWN0ZWQgZGV2aWNlIGJlaGF2aW9yIG9yIGNvbW11bmljYXRpb24gZXJyb3JzIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQwMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTQuOTkyODAyNzc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdC8qIHdhaXQgZm9yIGRhdGEgKi9cXG4gMTA0OlxcdFxcdFxcdHdoaWxlIChyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCkge1xcbiAxMDU6XFx0XFx0XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKSB7XFxuIDEwNjpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUFHQUlOO1xcbiAxMDc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEwODpcXHRcXHRcXHRcXHR9XFxuIDEwOTpcXHRcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4gMTEwOlxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IC1FUkVTVEFSVFNZUztcXG4gMTExOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTI6XFx0XFx0XFx0XFx0fVxcbiAxMTM6XFx0XFx0XFx0XFx0aWYgKCFkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIDExNDpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUlPO1xcbiAxMTU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNjpcXHRcXHRcXHRcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjYnVmX2xvY2spO1xcbiAxMTk6XFx0XFx0XFx0XFx0c2NoZWR1bGUoKTtcXG4gMTIwOlxcdFxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMTIxOlxcdFxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIDEyMjpcXHRcXHRcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuIDEyNTpcXHRcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0LCBcXHUwMDI2d2FpdCk7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIGhlcmUgd2UgZWl0aGVyIGhhdmUgZGF0YSBvciBhIHJlYXNvbiB0byByZXR1cm4gaWYgcmV0dmFsIGlzIHNldCAqL1xcbiAxMjk6XFx0XFx0aWYgKHJldHZhbClcXG4gMTMwOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdHJlcG9ydCA9IFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZbcmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0XTtcXG4gMTMzOlxcdFxcdC8qXFxuIDEzNDpcXHRcXHQgKiBJZiByZXBvcnQgaXMgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkIGFtb3VudCBvZiBkYXRhLCByZXN0IG9mIHJlcG9ydFxcbiAxMzU6XFx0XFx0ICogaXMgbG9zdCFcXG4gMTM2OlxcdFxcdCAqL1xcbiAxMzc6XFx0XFx0bGVuID0gZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZSBcXHUwMDNlIGNvdW50ID8gY291bnQgOiBkZXZpY2UtXFx1MDAzZXJlcG9ydF9zaXplO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHRpZiAoY29weV90b191c2VyKGJ1ZmZlciwgcmVwb3J0LVxcdTAwM2V2YWx1ZSwgbGVuKSkge1xcbiAxNDA6XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4gMTQxOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE0MjpcXHRcXHR9XFxuIDE0MzpcXHRcXHRyZXR2YWwgKz0gbGVuO1xcbiAxNDQ6XFx0XFx0cmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCArIDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0ZXhpdF91bmxvY2s6XFxuIDE0NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMTQ4OlxcdFxcdHJldHVybiByZXR2YWw7XFxuIDE0OTpcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdHN0YXRpYyBfX3BvbGxfdCByb2NjYXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG4gMTUyOlxcdHtcXG4gMTUzOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDE1NDpcXHRcXHRwb2xsX3dhaXQoZmlsZSwgXFx1MDAyNnJlYWRlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2V3YWl0LCB3YWl0KTtcXG4gMTU1OlxcdFxcdGlmIChyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgIT0gcmVhZGVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZWNidWZfZW5kKVxcbiAxNTY6XFx0XFx0XFx0cmV0dXJuIEVQT0xMSU4gfCBFUE9MTFJETk9STTtcXG4gMTU3OlxcdFxcdGlmICghcmVhZGVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZWV4aXN0KVxcbiAxNTg6XFx0XFx0XFx0cmV0dXJuIEVQT0xMRVJSIHwgRVBPTExIVVA7XFxuIDE1OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTYwOlxcdH1cXG4gMTYxOlxcdFxcbiAxNjI6XFx0c3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gMTYzOlxcdHtcXG4gMTY0OlxcdFxcdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XFxuIDE2NTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xcbiAxNjY6XFx0XFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4gMTY3OlxcdFxcdGludCBlcnJvciA9IDA7XFxuIDE2ODpcXHRcXG4gMTY5OlxcdFxcdHJlYWRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb2NjYXRfcmVhZGVyKTtcXG4gMTcwOlxcdFxcdGlmICghcmVhZGVyKVxcbiAxNzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRpZiAoIWRldmljZSkge1xcbiAxNzg6XFx0XFx0XFx0cHJfZW1lcmcoXFxcInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XFxcXG5cXFwiLCBtaW5vcik7XFxuIDE3OTpcXHRcXHRcXHRlcnJvciA9IC1FTk9ERVY7XFxuIDE4MDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDE4MTpcXHRcXHRcXHRrZnJlZShyZWFkZXIpO1xcbiAxODI6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAxODM6XFx0XFx0fVxcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRrcmVmX2dldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmKTtcXG4gMTg2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRpZiAoIWRldmljZS1cXHUwMDNlZXhpc3QpIHtcXG4gMTkxOlxcdFxcdFxcdGVycm9yID0gLUVOT0RFVjtcXG4gMTkyOlxcdFxcdFxcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcXG4gMTkzOlxcdFxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0aWYgKCFkZXZpY2UtXFx1MDAzZW9wZW4rKykge1xcbiAxOTY6XFx0XFx0XFx0LyogcG93ZXIgb24gZGV2aWNlIG9uIGFkZGluZyBmaXJzdCByZWFkZXIgKi9cXG4gMTk3OlxcdFxcdFxcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cXHUwMDNlaGlkLCBQTV9ISU5UX0ZVTExPTik7XFxuIDE5ODpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuIDE5OTpcXHRcXHRcXHRcXHQtLWRldmljZS1cXHUwMDNlb3BlbjtcXG4gMjAwOlxcdFxcdFxcdFxcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTQuOTkyODk4Nzk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0Mzg3NTQ4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCdzIG15IG93bi5cblxuKipBbmFseXppbmcgdGhlIFdvcmtmbG93KipcblxuQWxyaWdodCwgSSdtIGF0IHRoZSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gY29udGludWUgbXkgYW5hbHlzaXMuIFRoZSBjdXJyZW50IHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50IEknbSBmb2N1c2luZyBvbiBlbmRzIGF0IGxpbmUgMjAwLCBzbyBJIG5lZWQgdG8gcGljayB1cCB0aGUgdGhyZWFkIGF0IGxpbmUgMjAxIGFuZCBwcm9jZWVkIHRvIGxpbmUgNDMwLiBUaGlzIHNlZW1zIHRvIGltcGx5IGEgc3RydWN0dXJlZCBhcHByb2FjaCB0byB0aGUgZGF0YSwgcGVyaGFwcyBhIHNlZ21lbnRlZCByZXNlYXJjaCBwYXBlciwgY29kZSBjaHVuaywgb3IgZXZlbiBhIGxvZyBmaWxlLiBJdCdzIGxpa2VseSB0aGF0IDIwMS00MzAgY29udGFpbnMgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwcm9qZWN0LiBOb3csIEkgaGF2ZSB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBlbGVtZW50cyBpbiB0aGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50LCBhcyBpdCBjb3VsZCBoYXZlIGtleSBpbnNpZ2h0cy4gSXQncyB0aW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoxOS40MzE2NTU1MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDE6XFx0XFx0XFx0fVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRcXHRlcnJvciA9IGhpZF9od19vcGVuKGRldmljZS1cXHUwMDNlaGlkKTtcXG4gMjA0OlxcdFxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApIHtcXG4gMjA1OlxcdFxcdFxcdFxcdGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xcbiAyMDY6XFx0XFx0XFx0XFx0LS1kZXZpY2UtXFx1MDAzZW9wZW47XFxuIDIwNzpcXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuIDIwODpcXHRcXHRcXHR9XFxuIDIwOTpcXHRcXHR9XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdHJlYWRlci1cXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xcbiAyMTI6XFx0XFx0LyogbmV3IHJlYWRlciBkb2Vzbid0IGdldCBvbGQgZXZlbnRzICovXFxuIDIxMzpcXHRcXHRyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgPSBkZXZpY2UtXFx1MDAzZWNidWZfZW5kO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZyZWFkZXItXFx1MDAzZW5vZGUsIFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnMpO1xcbiAyMTY6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gcmVhZGVyO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjE5OlxcdFxcdHJldHVybiAwO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRleGl0X2Vycl9yZWFkZXJzOlxcbiAyMjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDIyMzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xcbiAyMjQ6XFx0XFx0a2ZyZWUocmVhZGVyKTtcXG4gMjI1OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gMjI2OlxcdH1cXG4gMjI3OlxcdFxcbiAyMjg6XFx0c3RhdGljIGludCByb2NjYXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gMjI5OlxcdHtcXG4gMjMwOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDIzMTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVxcdTAwM2VkZXZpY2U7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjM0OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZWFkZXItXFx1MDAzZW5vZGUpO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHRpZiAoIS0tZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIDIzNzpcXHRcXHRcXHQvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqL1xcbiAyMzg6XFx0XFx0XFx0aWYgKGRldmljZS1cXHUwMDNlZXhpc3QpIHtcXG4gMjM5OlxcdFxcdFxcdFxcdGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xcbiAyNDA6XFx0XFx0XFx0XFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cXHUwMDNlaGlkKTtcXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdH1cXG4gMjQzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHRrZnJlZShyZWFkZXIpO1xcbiAyNDY6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0cmV0dXJuIDA7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdC8qXFxuIDI1MjpcXHQgKiByb2NjYXRfcmVwb3J0X2V2ZW50KCkgLSBvdXRwdXQgZGF0YSB0byByZWFkZXJzXFxuIDI1MzpcXHQgKiBAbWlub3I6IG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxcbiAyNTQ6XFx0ICogQGRhdGE6IHBvaW50ZXIgdG8gZGF0YVxcbiAyNTU6XFx0ICpcXG4gMjU2OlxcdCAqIFJldHVybiB2YWx1ZSBpcyB6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAyNTc6XFx0ICpcXG4gMjU4OlxcdCAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGhhbmRsZXIuXFxuIDI1OTpcXHQgKi9cXG4gMjYwOlxcdGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXFxuIDI2MTpcXHR7XFxuIDI2MjpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xcbiAyNjM6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlcjtcXG4gMjY0OlxcdFxcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XFxuIDI2NTpcXHRcXHR1aW50OF90ICpuZXdfdmFsdWU7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGlmIChtaW5vciBcXHUwMDNjIDAgfHwgbWlub3IgXFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxcbiAyNjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI2OTpcXHRcXG4gMjcwOlxcdFxcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xcbiAyNzE6XFx0XFx0aWYgKCFkZXZpY2UpXFxuIDI3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0XFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXFx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcXG4gMjc1OlxcdFxcdGlmICghbmV3X3ZhbHVlKVxcbiAyNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjc5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0cmVwb3J0ID0gXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1ZltkZXZpY2UtXFx1MDAzZWNidWZfZW5kXTtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0LyogcGFzc2luZyBOVUxMIGlzIHNhZmUgKi9cXG4gMjg0OlxcdFxcdGtmcmVlKHJlcG9ydC1cXHUwMDNldmFsdWUpO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRyZXBvcnQtXFx1MDAzZXZhbHVlID0gbmV3X3ZhbHVlO1xcbiAyODc6XFx0XFx0ZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCA9IChkZXZpY2UtXFx1MDAzZWNidWZfZW5kICsgMSkgJSBST0NDQVRfQ0JVRl9TSVpFO1xcbiAyODg6XFx0XFxuIDI4OTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlYWRlciwgXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVycywgbm9kZSkge1xcbiAyOTA6XFx0XFx0XFx0LypcXG4gMjkxOlxcdFxcdFxcdCAqIEFzIHdlIGFscmVhZHkgaW5zZXJ0ZWQgb25lIGVsZW1lbnQsIHRoZSBidWZmZXIgY2FuJ3QgYmVcXG4gMjkyOlxcdFxcdFxcdCAqIGVtcHR5LiBJZiBzdGFydCBhbmQgZW5kIGFyZSBlcXVhbCwgYnVmZmVyIGlzIGZ1bGwgYW5kIHdlXFxuIDI5MzpcXHRcXHRcXHQgKiBpbmNyZWFzZSBzdGFydCwgc28gdGhhdCBzbG93IHJlYWRlciBtaXNzZXMgb25lIGV2ZW50LCBidXRcXG4gMjk0OlxcdFxcdFxcdCAqIGdldHMgdGhlIG5ld2VyIG9uZXMgaW4gdGhlIHJpZ2h0IG9yZGVyLlxcbiAyOTU6XFx0XFx0XFx0ICovXFxuIDI5NjpcXHRcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpXFxuIDI5NzpcXHRcXHRcXHRcXHRyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgPSAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ICsgMSkgJSBST0NDQVRfQ0JVRl9TSVpFO1xcbiAyOTg6XFx0XFx0fVxcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTkuNDMxNzQyMzYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NjI4MTMyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIERlZXBlcjogTmV4dCBDaHVuayBBbmFseXNpcyoqXG5cblJpZ2h0LCBsZXQncyBrZWVwIG1vdmluZy4gSSd2ZSBmaW5pc2hlZCB0aGUgaW5pdGlhbCBzZWN0aW9ucywgYW5kIG5vdyBJIG5lZWQgdG8gc2hpZnQgZm9jdXMgdG8gdGhlIG5leHQgYmxvY2sgb2YgdGV4dCDigJMgc3BlY2lmaWNhbGx5LCBsaW5lcyAzMDEgdGhyb3VnaCA0NDAuIFRoaXMgaXNuJ3QganVzdCBhIG1hdHRlciBvZiBzZXF1ZW50aWFsIHJlYWRpbmc7IGl0J3MgYWJvdXQgc3RyYXRlZ2ljYWxseSBuYXZpZ2F0aW5nIHRoZSBpbmZvcm1hdGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBuZXh0IHNlY3Rpb24gY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQgb3IgbmFycmF0aXZlIGFyYy4gQXJlIHdlIG1vdmluZyBpbnRvIGEgbW9yZSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiBhIGtleSBjb25jZXB0IGludHJvZHVjZWQgZWFybGllcj8gRG9lcyB0aGlzIHNlZ21lbnQgcHJlc2VudCBzdXBwb3J0aW5nIGV2aWRlbmNlLCBjb3VudGVyYXJndW1lbnRzLCBvciBwZXJoYXBzIGEgY29tcGxldGVseSBuZXcgcGVyc3BlY3RpdmUgdGhhdCByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55PyBJ4oCZbSBleHBlY3RpbmcgYSBjZXJ0YWluIHR5cGUgb2YgY29udGVudCwgYnV0IEkgaGF2ZSB0byByZW1haW4gb2JqZWN0aXZlIGFib3V0IHdoYXQgSSBmaW5kLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogV2hhdCBpbnNpZ2h0cyBvciBkZXRhaWxzIGRvZXMgdGhpcyBibG9jayBwcm92aWRlIHRoYXQgYXJlIGNyaXRpY2FsIHRvIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVudGlyZSB3b3JrPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzQ3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoyMi4zOTQ1NTc0NDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0KTtcXG4gMzA0OlxcdFxcdHJldHVybiAwO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdC8qXFxuIDMwOTpcXHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XFxuIDMxMDpcXHQgKiBAY2xhc3M6IHRoZSBjbGFzcyB0aGF0cyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGV2aWNlLiBNZWFudCB0byBob2xkIGRldmljZVxcbiAzMTE6XFx0ICogc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlcy5cXG4gMzEyOlxcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxcbiAzMTM6XFx0ICogQHJlcG9ydF9zaXplOiBzaXplIG9mIHJlcG9ydHNcXG4gMzE0OlxcdCAqXFxuIDMxNTpcXHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxcbiAzMTY6XFx0ICogc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuIDMxNzpcXHQgKi9cXG4gMzE4OlxcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHR1bnNpZ25lZCBpbnQgbWlub3I7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xcbiAzMjI6XFx0XFx0aW50IHRlbXA7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb2NjYXRfZGV2aWNlKTtcXG4gMzI1OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmKTtcXG4gMzI5OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmRldmljZS1cXHUwMDNld2FpdCk7XFxuIDMzMDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gMzMxOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMzMyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMzMzOlxcdFxcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbiAzMzQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDE7XFxuIDMzNTpcXHRcXHRkZXZpY2UtXFx1MDAzZWNidWZfZW5kID0gMDtcXG4gMzM2OlxcdFxcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0Zm9yIChtaW5vciA9IDA7IG1pbm9yIFxcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyArK21pbm9yKSB7XFxuIDM0MTpcXHRcXHRcXHRpZiAoZGV2aWNlc1ttaW5vcl0pXFxuIDM0MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzQzOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRpZiAobWlub3IgXFx1MDAzYyBST0NDQVRfTUFYX0RFVklDRVMpIHtcXG4gMzQ3OlxcdFxcdFxcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xcbiAzNDg6XFx0XFx0fSBlbHNlIHtcXG4gMzQ5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzUwOlxcdFxcdFxcdGtmcmVlKGRldmljZSk7XFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzUyOlxcdFxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VtaW5vciA9IG1pbm9yO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRkZXZpY2UtXFx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFxcdTAwMjZoaWQtXFx1MDAzZWRldixcXG4gMzU3OlxcdFxcdFxcdFxcdE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpLCBOVUxMLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFxcIiVzJXMlZFxcXCIsIFxcXCJyb2NjYXRcXFwiLCBoaWQtXFx1MDAzZWRyaXZlci1cXHUwMDNlbmFtZSwgbWlub3IpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoSVNfRVJSKGRldmljZS1cXHUwMDNlZGV2KSkge1xcbiAzNjE6XFx0XFx0XFx0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xcbiAzNjI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzNjM6XFx0XFx0XFx0dGVtcCA9IFBUUl9FUlIoZGV2aWNlLVxcdTAwM2VkZXYpO1xcbiAzNjQ6XFx0XFx0XFx0a2ZyZWUoZGV2aWNlKTtcXG4gMzY1OlxcdFxcdFxcdHJldHVybiB0ZW1wO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJldHVybiBtaW5vcjtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcXG4gMzc1OlxcdCAqIEBtaW5vcjogdGhlIG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxcbiAzNzY6XFx0ICovXFxuIDM3NzpcXHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcXG4gMzc4OlxcdHtcXG4gMzc5OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdGlmIChtaW5vciBcXHUwMDNjIDAgfHwgbWlub3IgXFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxcbiAzODI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzODU6XFx0XFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuIDM4NjpcXHRcXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XFxuIDM4NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRkZXZpY2VfZGVzdHJveShkZXZpY2UtXFx1MDAzZWRldi1cXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAzOTU6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7XFxuIDM5NjpcXHRcXHRpZiAoZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIDM5NzpcXHRcXHRcXHRoaWRfaHdfY2xvc2UoZGV2aWNlLVxcdTAwM2VoaWQpO1xcbiAzOTg6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbiAzOTk6XFx0XFx0fVxcbiA0MDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjIyLjM5NDY0OTk5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI2NDc1NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZpbGUgSW5zcGVjdGlvbiAtIEZpbmFsIFRob3VnaHRzIEZpcnN0KipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiwgbGV0J3MgYWRvcHQgYSBjcml0aWNhbCwgZXhwZXJpZW5jZWQgc3RhbmNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0bywgb2YgY291cnNlLCBoZWFkIHRvIHRoZSB0YWlsIGVuZCBvZiB0aGUgZmlsZS4gSXQncyBvZnRlbiB0aGUgY2FzZSB0aGF0IHRoZSBjb25jbHVzaXZlIHBpZWNlcyBvciBwb3RlbnRpYWwgZXJyb3IgbWVzc2FnZXMgd291bGQgcmVzaWRlIGhlcmUsIG9mZmVyaW5nIGEgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0ZXZlciB0aGUgcHJvY2VzcyBoYXMgYWNoaWV2ZWQuIEJ5IGV4YW1pbmluZyB3aGF0J3MgY29uY2x1ZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGl0J3Mgb2Z0ZW4gZmFzdGVyIHRvIGRlZHVjZSB0aGUgZ2VuZXJhbCBzdGF0ZSBvZiB0aGUgZGF0YSwgYW5kIHdoZXRoZXIgdGhlIHByaW1hcnkgdGFzayBoYXMgYmVlbiBhY2hpZXZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjI0LjUyMTEyODc4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAxOlxcdFxcbiA0MDI6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gNDAzOlxcdH1cXG4gNDA0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTtcXG4gNDA1OlxcdFxcbiA0MDY6XFx0c3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDQwOTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVxcdTAwM2VkZXZpY2U7XFxuIDQxMDpcXHRcXHRsb25nIHJldHZhbCA9IDA7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQxMzpcXHRcXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxcbiA0MTQ6XFx0XFx0XFx0aWYgKHB1dF91c2VyKGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUsIChpbnQgX191c2VyICopYXJnKSlcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuIDQxNjpcXHRcXHRcXHRicmVhaztcXG4gNDE3OlxcdFxcdGRlZmF1bHQ6XFxuIDQxODpcXHRcXHRcXHRyZXR2YWwgPSAtRU5PVFRZO1xcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0MjI6XFx0fVxcbiA0MjM6XFx0XFxuIDQyNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb2NjYXRfb3BzID0ge1xcbiA0MjU6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDQyNjpcXHRcXHQucmVhZCA9IHJvY2NhdF9yZWFkLFxcbiA0Mjc6XFx0XFx0LnBvbGwgPSByb2NjYXRfcG9sbCxcXG4gNDI4OlxcdFxcdC5vcGVuID0gcm9jY2F0X29wZW4sXFxuIDQyOTpcXHRcXHQucmVsZWFzZSA9IHJvY2NhdF9yZWxlYXNlLFxcbiA0MzA6XFx0XFx0Lmxsc2VlayA9IG5vb3BfbGxzZWVrLFxcbiA0MzE6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gcm9jY2F0X2lvY3RsLFxcbiA0MzI6XFx0fTtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0c3RhdGljIGludCBfX2luaXQgcm9jY2F0X2luaXQodm9pZClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdGludCByZXR2YWw7XFxuIDQzNzpcXHRcXHRkZXZfdCBkZXZfaWQ7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdHJldHZhbCA9IGFsbG9jX2NocmRldl9yZWdpb24oXFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxcbiA0NDA6XFx0XFx0XFx0XFx0Uk9DQ0FUX01BWF9ERVZJQ0VTLCBcXFwicm9jY2F0XFxcIik7XFxuIDQ0MTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbiA0NDI6XFx0XFx0XFx0cHJfd2FybihcXFwiY2FuJ3QgZ2V0IG1ham9yIG51bWJlclxcXFxuXFxcIik7XFxuIDQ0MzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRjZGV2X2luaXQoXFx1MDAyNnJvY2NhdF9jZGV2LCBcXHUwMDI2cm9jY2F0X29wcyk7XFxuIDQ0OTpcXHRcXHRyZXR2YWwgPSBjZGV2X2FkZChcXHUwMDI2cm9jY2F0X2NkZXYsIGRldl9pZCwgUk9DQ0FUX01BWF9ERVZJQ0VTKTtcXG4gNDUwOlxcdFxcbiA0NTE6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApIHtcXG4gNDUyOlxcdFxcdFxcdHByX3dhcm4oXFxcImNhbm5vdCBhZGQgY2RldlxcXFxuXFxcIik7XFxuIDQ1MzpcXHRcXHRcXHRnb3RvIGNsZWFudXBfYWxsb2NfY2hyZGV2X3JlZ2lvbjtcXG4gNDU0OlxcdFxcdH1cXG4gNDU1OlxcdFxcdHJldHVybiAwO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdCBjbGVhbnVwX2FsbG9jX2NocmRldl9yZWdpb246XFxuIDQ1OTpcXHRcXHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X2lkLCBST0NDQVRfTUFYX0RFVklDRVMpO1xcbiA0NjA6XFx0IGVycm9yOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoyNC41MjEyMTcwMDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwMjQwMTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJvY2NhdCBISUQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgYWNjZXNzaWJpbGl0eSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCBsaWtlIFFFTVUuIEdvb2QsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIEkgY2FuIHNpbXVsYXRlIFVTQiBISUQgZGV2aWNlcyBpbiBRRU1VIHVzaW5nIHNldmVyYWwgbWV0aG9kczogVVNCIFJhdyBHYWRnZXQsIER1bW15IEhDRCwgVUhJRCwgb3IgZXZlbiB0aGUgc3RhbmRhcmQgUUVNVSBVU0IgZW11bGF0aW9uLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS5cblxuTm93LCBmcm9tIHdoYXQgSSBnYXRoZXIsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGlzc3VlcyB3aXRoaW4gdGhlIFJvY2NhdCBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW50IGNhbGxzIHRvIGZpbGUgb3BlcmF0aW9ucy4gQmFzaWNhbGx5LCBpdOKAmXMgYWJvdXQgZml4aW5nIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSB0byBtYWtlIGl0IHNhZmVyIHdoZW4gZGV2aWNlcyBhcmUgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCB3aGlsZSBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X2lvY3RsYCwgYW5kIG90aGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBzaW11bHRhbmVvdXNseS5cblxuSSdtIGNoZWNraW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRhcmdldGVkIGJ5IHRoZSBwYXRjaDogYHJvY2NhdF9vcGVuYCwgYHJvY2NhdF9yZWxlYXNlYCwgYHJvY2NhdF9yZXBvcnRfZXZlbnRgLCBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBhbmQgYHJvY2NhdF9pb2N0bGAuIEkgd2FudCB0byB2ZXJpZnkgaWYgdGhleSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBhbmQgSSBzZWUgYHJvY2NhdF9jb25uZWN0YCwgYHJvY2NhdF9kaXNjb25uZWN0YCwgYW5kIGByb2NjYXRfcmVwb3J0X2V2ZW50YCBhcmUgZXhwb3J0ZWQgc3ltYm9scy4gVGhlIG90aGVycyBhcmUgc3RhdGljIGZvcHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzLCBub3QgaG90LXBhdGggY29kZS4gVGhleSBhcmUgaW5kZWVkIHRoZSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBmb3IgdGhlIFJvY2NhdCBkZXZpY2UgaW50ZXJmYWNlLiBUaGlzIGNvbmZpcm1zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBjcnVjaWFsLCBhcyB0aGVzZSBlbnRyeXBvaW50cyB3b3VsZCBiZSB1c2VkIGJ5IGV4dGVybmFsIHByb2Nlc3NlcyB0byB1c2UgdGhlIGRldmljZS5cblxuRmluYWxseSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBgQ09ORklHYCBvcHRpb25zOiBgSElEX1JPQ0NBVGAgZGVwZW5kcyBvbiBgVVNCX0hJRGAgYW5kIGBISURgLiBJIHNob3VsZCBxdWlja2x5IHJldmlldyBgVVNCX0hJRGAncyBkZXBlbmRlbmNpZXMgaW4gYEtjb25maWdgIGZvciBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGNvbXBsZXRlcyB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlIG9mIHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1zIGl0IGlzIGFuIGVzc2VudGlhbCBmaXggZm9yIHRoZSBkcml2ZXIsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MzAuMDIzNjIwNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODY1NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfSElEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaGlkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZz0yPW1lbnUgXFxcIlVTQiBISUQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnLTQtXFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc6NTpjb25maWcgVVNCX0hJRFxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlVTQiBISUQgdHJhbnNwb3J0IGxheWVyXFxcIlxcbi0tXFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc9Mjc9Y29uZmlnIEhJRF9QSURcXG4tLVxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnOjM0OmNvbmZpZyBVU0JfSElEREVWXFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiL2Rldi9oaWRkZXYgcmF3IEhJRCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MzAuMDc3NDkyMDQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MzQ2NDc0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgSElEIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBVU0IgSHVtYW4gSW50ZXJmYWNlIERldmljZSAoSElEKSBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZ2AgZmlsZS4gSSdtIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNvIHRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgbGlrZWx5IG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgc28gSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgNSB0byBiZWdpbiBteSBzZWFyY2guIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHF1aWNrbHkgbGVhZCBtZSB0byB0aGUgaW5mb3JtYXRpb24gSSdtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjM1LjgxMjE0MzEyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudSBcXFwiVVNCIEhJRCBzdXBwb3J0XFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFVTQl9ISURcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgSElEIHRyYW5zcG9ydCBsYXllclxcXCJcXG4gICA3OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBISURcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IFVTQiBrZXlib2FyZHMsXFxuICAxMTpcXHRcXHQgIG1pY2UsIGpveXN0aWNrcywgZ3JhcGhpYyB0YWJsZXRzLCBvciBhbnkgb3RoZXIgSElEIGJhc2VkIGRldmljZXNcXG4gIDEyOlxcdFxcdCAgdG8geW91ciBjb21wdXRlciB2aWEgVVNCLCBhcyB3ZWxsIGFzIFVuaW50ZXJydXB0aWJsZSBQb3dlciBTdXBwbHlcXG4gIDEzOlxcdFxcdCAgKFVQUykgYW5kIG1vbml0b3IgY29udHJvbCBkZXZpY2VzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFlvdSBjYW4ndCB1c2UgdGhpcyBkcml2ZXIgYW5kIHRoZSBISURCUCAoQm9vdCBQcm90b2NvbCkga2V5Ym9hcmRcXG4gIDE2OlxcdFxcdCAgYW5kIG1vdXNlIGRyaXZlcnMgYXQgdGhlIHNhbWUgdGltZS4gTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGU6XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQucnN0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjM1LjgxMjIwNjM4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ4ODk5Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBISUQgU3VwcG9ydCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgSElEIHN1YnN5c3RlbSdzIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCBwbGFjZSBJJ2QgY2hlY2sgaXMgdGhlIGBkcml2ZXJzL2hpZC9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBtZW51IFwiSElEIHN1cHBvcnRcImAgc2VjdGlvbiwgc2luY2UgdGhhdCdzIHRoZSB0b3AtbGV2ZWwgZW50cnkgZm9yIHRoZSBISUQgZnJhbWV3b3JrLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoYXQgbWVudS4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgdGhlIEhJRCBzdXBwb3J0IG1lbnUgZXZlbiBhcHBlYXJzPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBISUQgdG8gYmUgYXZhaWxhYmxlIGFuZCB3aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgSElEIGRldmljZSBvciBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQuIEl0J3MgYWxsIGFib3V0IG1ha2luZyBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgZm91bmRhdGlvbiBpbiBwbGFjZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjM4LjQ2MTEwODA5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEhJRCBkcml2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBISURfU1VQUE9SVFxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiSElEIGJ1cyBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElOUFVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgY29yZSBzdXBwb3J0IGZvciBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpLlxcbiAgMTE6XFx0XFx0ICBZb3Ugd2lsbCBhbHNvIG5lZWQgZHJpdmVycyBmcm9tIHRoZSBmb2xsb3dpbmcgbWVudSB0byBtYWtlIHVzZSBvZiBpdC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgSElEX1NVUFBPUlRcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIEhJRFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIkhJRCBidXMgY29yZSBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCB5XFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIElOUFVUXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIEEgaHVtYW4gaW50ZXJmYWNlIGRldmljZSAoSElEKSBpcyBhIHR5cGUgb2YgY29tcHV0ZXIgZGV2aWNlIHRoYXRcXG4gIDIxOlxcdFxcdCAgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggYW5kIHRha2VzIGlucHV0IGZyb20gaHVtYW5zLiBUaGUgdGVybSBcXFwiSElEXFxcIlxcbiAgMjI6XFx0XFx0ICBtb3N0IGNvbW1vbmx5IHVzZWQgdG8gcmVmZXIgdG8gdGhlIFVTQi1ISUQgc3BlY2lmaWNhdGlvbiwgYnV0IG90aGVyXFxuICAyMzpcXHRcXHQgIGRldmljZXMgKHN1Y2ggYXMsIGJ1dCBub3Qgc3RyaWN0bHkgbGltaXRlZCB0bywgQmx1ZXRvb3RoKSBhcmVcXG4gIDI0OlxcdFxcdCAgZGVzaWduZWQgdXNpbmcgSElEIHNwZWNpZmljYXRpb24gKHRoaXMgaW52b2x2ZXMgY2VydGFpbiBrZXlib2FyZHMsXFxuICAyNTpcXHRcXHQgIG1pY2UsIHRhYmxldHMsIGV0YykuIFRoaXMgb3B0aW9uIGFkZHMgdGhlIEhJRCBidXMgdG8gdGhlIGtlcm5lbCxcXG4gIDI2OlxcdFxcdCAgdG9nZXRoZXIgd2l0aCBnZW5lcmljIEhJRCBsYXllciBjb2RlLiBUaGUgSElEIGRldmljZXMgYXJlIGFkZGVkIGFuZFxcbiAgMjc6XFx0XFx0ICByZW1vdmVkIGZyb20gdGhlIEhJRCBidXMgYnkgdGhlIHRyYW5zcG9ydC1sYXllciBkcml2ZXJzLCBzdWNoIGFzXFxuICAyODpcXHRcXHQgIHVzYmhpZCAoVVNCX0hJRCkgYW5kIGhpZHAgKEJUX0hJRFApLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIEZvciBkb2NzIGFuZCBzcGVjcywgc2VlIGh0dHBzOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9oaWRwYWdlL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjozOC40NjEyMDYwNjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1MTY3MTU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBSb2NjYXQgSElEIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSB1cGRhdGVkIFJvY2NhdCBISUQgZmVhdHVyZS4gVGhlIGJhc2UgY29uZmlndXJhdGlvbnMgSSdtIHdvcmtpbmcgd2l0aCBhcmUgYEhJRF9ST0NDQVRgLCBgVVNCX0hJRGAsIGFuZCBgSElEYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGRvbid0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcyB0aG9yb3VnaGx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFuZCBcImRlcGVuZHMgb25cIiBsaW5lcy4gSSBtdXN0IHJlbWVtYmVyIHRvIG91dHB1dCB0aGUgbmVlZGVkIGNvbmZpZ3VyYXRpb25zIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCByZWxldmFudCwgbm9uLXN0YXRpYywgb3Igb3RoZXJ3aXNlIGRpc3RpbmN0IHN5bWJvbHMgYXMgZ29vZCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIEkndmUgaWRlbnRpZmllZCBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBgcm9jY2F0X3JlcG9ydF9ldmVudGAsIGByb2NjYXRfb3BlbmAsIGByb2NjYXRfcmVsZWFzZWAsIGFuZCBgcm9jY2F0X2lvY3RsYCBhcyBsaWtlbHkgY2FuZGlkYXRlcy4gSSBkaWQgYSBxdWljayBjaGVjayBvZiBgaGlkLXJvY2NhdC5jYCB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBhbmQgY29uZmlybWVkIHRob3NlIGFyZSB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQncyBhZGRyZXNzaW5nIGNyaXRpY2FsIGlzc3VlcyBsaWtlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBmb3IgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlcywgYWltaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBhbmQgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb25zIGFuZCBkZXZpY2UgbGlmZWN5Y2xlLiBUaGlzIGlzICp2ZXJ5KiByZWFjaGFibGUgdmlhIGVtdWxhdGVkIFVTQiBlbnZpcm9ubWVudHMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIGAvZGV2L3JvY2NhdCpgIGNoYXIgZGV2aWNlcy5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkOiBJJ20gdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYW5kIEknbGwgY2FsbCBpdCBvbmx5IG9uY2UuIEknbSBvbWl0dGluZyB0aGUgYENPTkZJR19gIHByZWZpeCwgYW5kIEknbSB0YXJnZXRpbmcgbm9uLWhvdC1wYXRoIGtlcm5lbCBmdW5jdGlvbnMgdG8gbWFrZSBmdXp6aW5nIG1vcmUgZWZmZWN0aXZlLiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjY0LCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjQzLjgxMjg4MDA1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjU4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJISURfUk9DQ0FUXCIsXG4gICAgXCJVU0JfSElEXCIsXG4gICAgXCJISURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb2NjYXRfY29ubmVjdFwiLFxuICAgIFwicm9jY2F0X2Rpc2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9yZXBvcnRfZXZlbnRcIixcbiAgICBcInJvY2NhdF9vcGVuXCIsXG4gICAgXCJyb2NjYXRfcmVsZWFzZVwiLFxuICAgIFwicm9jY2F0X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJISURfUk9DQ0FUXCIsXG4gICAgXCJVU0JfSElEXCIsXG4gICAgXCJISURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb2NjYXRfY29ubmVjdFwiLFxuICAgIFwicm9jY2F0X2Rpc2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9yZXBvcnRfZXZlbnRcIixcbiAgICBcInJvY2NhdF9vcGVuXCIsXG4gICAgXCJyb2NjYXRfcmVsZWFzZVwiLFxuICAgIFwicm9jY2F0X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6NDMuODkxNTQ0MTM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTYzMjE0MDM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjQzLjg5MTk4MzQ5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNjMxNjkzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMgYnkgaW50cm9kdWNpbmcga3JlZi1iYXNlZCByZWZlcmVuY2UgY291bnRpbmcgZm9yIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBwcm9wZXJseSBib3VuZHMtY2hlY2tpbmcgbWlub3IgZGV2aWNlIGluZGV4ZXMsIGFuZCBlbnN1cmluZyBzdHJ1Y3QgZmllbGRzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgZXhwb3NpbmcgdGhlIGRldmljZSBpbiB0aGUgZ2xvYmFsIGRldmljZXMgYXJyYXkuXFxuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKHN0cnVjdCByb2NjYXRfZGV2aWNlLCBzdHJ1Y3Qgcm9jY2F0X3JlYWRlcikgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqKCksIHJlcG9ydCBkYXRhIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIHdpdGgga21lbWR1cCgpLCBhbmQgYWxsIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIgaW4gcm9jY2F0X3JlYWQgb3IgcHV0X3VzZXIgaW4gcm9jY2F0X2lvY3RsKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxcblxcblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNWI2NmMxZDNkMGNkYTQ3NjQxZTUwOGZiZGI5MWYwNDNlYzUwZTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjowNTo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuaW5kZXggNGYxNWViOTUxMDM5Ni4uZWFhNDdiYmI3MGRhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG5AQCAtMjEsOCArMjEsMTAgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gXG5AQCAtMzcsNiArMzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7XG4gfTtcbiBcbiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7XG4rXHRzdHJ1Y3Qga3JlZiBrcmVmO1xuIFx0dW5zaWduZWQgaW50IG1pbm9yO1xuIFx0aW50IHJlcG9ydF9zaXplO1xuIFx0aW50IG9wZW47XG5AQCAtNzAsOCArNzMsMTAgQEAgc3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XG4gLyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovXG4gc3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xuIFxuLXN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlKVxuK3N0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4rXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cbitcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUk9DQ0FUX0NCVUZfU0laRTsgaSsrKVxuQEAgLTE3MiwxMSArMTc3LDIxIEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpZiAoIWRldmljZSkge1xuIFx0XHRwcl9lbWVyZyhcInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XFxuXCIsIG1pbm9yKTtcbiBcdFx0ZXJyb3IgPSAtRU5PREVWO1xuLVx0XHRnb3RvIGV4aXRfZXJyX2RldmljZXM7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuK1x0XHRrZnJlZShyZWFkZXIpO1xuK1x0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4rXHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXG4rXHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuK1x0XHRlcnJvciA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbitcdH1cbitcbiBcdGlmICghZGV2aWNlLVx1MDAzZW9wZW4rKykge1xuIFx0XHQvKiBwb3dlciBvbiBkZXZpY2Ugb24gYWRkaW5nIGZpcnN0IHJlYWRlciAqL1xuIFx0XHRlcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtXHUwMDNlaGlkLCBQTV9ISU5UX0ZVTExPTik7XG5AQCAtMjAwLDQ2ICsyMTUsMzUgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cmVhZGVyLVx1MDAzZW5vZGUsIFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzKTtcbiBcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gcmVhZGVyO1xuIFxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuK1x0cmV0dXJuIDA7XG4rXG4gZXhpdF9lcnJfcmVhZGVyczpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbi1leGl0X2Vycl9kZXZpY2VzOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGtmcmVlKHJlYWRlcik7XG4rXHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbitcdGtmcmVlKHJlYWRlcik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcbiBcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXG4tXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbi1cdGlmICghZGV2aWNlKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVx0XHRwcl9lbWVyZyhcInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XFxuXCIsIG1pbm9yKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4rXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZyZWFkZXItXHUwMDNlbm9kZSk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4tXHRrZnJlZShyZWFkZXIpO1xuIFxuIFx0aWYgKCEtLWRldmljZS1cdTAwM2VvcGVuKSB7XG4gXHRcdC8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovXG4gXHRcdGlmIChkZXZpY2UtXHUwMDNlZXhpc3QpIHtcbiBcdFx0XHRoaWRfaHdfcG93ZXIoZGV2aWNlLVx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xuIFx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcbiBcdFx0fVxuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4rXHRrZnJlZShyZWFkZXIpO1xuK1x0a3JlZl9wdXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjYwLDcgKzI2NCwxMiBAQCBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxuIFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgKnJlcG9ydDtcbiBcdHVpbnQ4X3QgKm5ld192YWx1ZTtcbiBcbitcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbitcdGlmICghZGV2aWNlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdG5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghbmV3X3ZhbHVlKVxuQEAgLTMxNiw2ICszMjUsMTYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnRcbiBcdGlmICghZGV2aWNlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdGtyZWZfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzKTtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXHRtdXRleF9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuK1x0ZGV2aWNlLVx1MDAzZWhpZCA9IGhpZDtcbitcdGRldmljZS1cdTAwM2VleGlzdCA9IDE7XG4rXHRkZXZpY2UtXHUwMDNlY2J1Zl9lbmQgPSAwO1xuK1x0ZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplID0gcmVwb3J0X3NpemU7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4gXHRmb3IgKG1pbm9yID0gMDsgbWlub3IgXHUwMDNjIFJPQ0NBVF9NQVhfREVWSUNFUzsgKyttaW5vcikge1xuQEAgLTMzMiw2ICszNTEsOCBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGRldmljZS1cdTAwM2VtaW5vciA9IG1pbm9yO1xuK1xuIFx0ZGV2aWNlLVx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFx1MDAyNmhpZC1cdTAwM2VkZXYsXG4gXHRcdFx0TUtERVYocm9jY2F0X21ham9yLCBtaW5vciksIE5VTEwsXG4gXHRcdFx0XCIlcyVzJWRcIiwgXCJyb2NjYXRcIiwgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG5AQCAtMzQ2LDE2ICszNjcsNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4tXHRtdXRleF9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuLVx0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4tXHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuLVx0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbi1cdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4tXHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbi1cbiBcdHJldHVybiBtaW5vcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Nvbm5lY3QpO1xuQEAgLTM2Nyw0MiArMzc4LDM3IEBAIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKVxuIHtcbiBcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4gXG4rXHRpZiAobWlub3IgXHUwMDNjIDAgfHwgbWlub3IgXHUwMDNlPSBST0NDQVRfTUFYX0RFVklDRVMpXG4rXHRcdHJldHVybjtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuK1x0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4tXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwOyAvKiBUT0RPIGV4aXN0IG1heWJlIG5vdCBuZWVkZWQgKi9cbitcdGlmICghZGV2aWNlKVxuK1x0XHRyZXR1cm47XG4gXG4gXHRkZXZpY2VfZGVzdHJveShkZXZpY2UtXHUwMDNlZGV2LVx1MDAzZWNsYXNzLCBNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbitcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwO1xuIFx0aWYgKGRldmljZS1cdTAwM2VvcGVuKSB7XG4gXHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiBcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbi1cdH0gZWxzZSB7XG4tXHRcdHJvY2NhdF9mcmVlX2RldmljZShkZXZpY2UpO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuK1xuK1x0a3JlZl9wdXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTtcbiBcbiBzdGF0aWMgbG9uZyByb2NjYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuLVx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbi1cdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XG4rXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiBcdGxvbmcgcmV0dmFsID0gMDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbi1cdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0cmV0dmFsID0gLUVOT0RFVjtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiBcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuQEAgLTQxMSw4ICs0MTcsNyBAQCBzdGF0aWMgbG9uZyByb2NjYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dmFsID0gLUVOT1RUWTtcbiBcdH1cbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbitcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6NDMuODkxOTg1ODA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNDYyMTc4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb2NjYXQgSElEIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgUm9jY2F0IEhJRCBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBicmVhayBkb3duIHRoZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSByZWZhY3RvcmluZyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSdzIGxpZmV0aW1lIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBzdW1tYXJ5IGluZGljYXRlcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCB0byB1c2luZyBga3JlZmAgZm9yIHJlZmVyZW5jZSBjb3VudGluZywgcmVwbGFjaW5nIHRoZSBvbGQsIHBvdGVudGlhbGx5IGxlc3Mgcm9idXN0IG1ldGhvZHMuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgYGtyZWZgIG1lbWJlciB0byB0aGUgYHJvY2NhdF9kZXZpY2VgIHN0cnVjdHVyZS4gVGhhdCdzIGEgc29saWQgZmlyc3Qgc3RlcC4gVGhlIHJlcGxhY2VtZW50IG9mIGRpcmVjdCBgcm9jY2F0X2ZyZWVfZGV2aWNlYCBjYWxscyB3aXRoIGBrcmVmX3B1dGAgYW5kIHRoZSBpbmNsdXNpb24gb2YgYGtyZWZfaW5pdGAgYW5kIGBrcmVmX2dldGAgcG9pbnQgdG8gYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlLiBgcm9jY2F0X29wZW5gIG5vdyBzZWVtcyB0byBiZSBjb3JyZWN0bHkgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQgdXNpbmcgYGtyZWZfZ2V0YCwgc3RvcmluZyB0aGUgcG9pbnRlciwgYW5kIGByb2NjYXRfcmVsZWFzZWAgZGVjcmVtZW50aW5nIGl0IHdpdGggYGtyZWZfcHV0YC4gU21hcnQgbW92ZS4gVGhpcyBzaG91bGQgaGVscCBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSBzY2VuYXJpb3MuXG5cblRoZSBtb2RpZmljYXRpb24gdG8gYHJvY2NhdF9pb2N0bGAgdG8gZ2V0IHRoZSBkZXZpY2UgZnJvbSBgcmVhZGVyLVx1MDAzZWRldmljZWAgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCBgZGV2aWNlc1ttaW5vcl1gIGlzIGFub3RoZXIgcG9zaXRpdmUgY2hhbmdlLiBUaGF0IGVsaW1pbmF0ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIG1ha2VzIHRoZSBkcml2ZXIgbW9yZSB0aHJlYWQtc2FmZS5cblxuVGhlIGFkanVzdG1lbnRzIGluIGByb2NjYXRfZGlzY29ubmVjdGAgYXJlIGludGVyZXN0aW5nLiBSZW1vdmluZyB0aGUgZGV2aWNlIGZyb20gdGhlIGFycmF5LCBzZXR0aW5nIGBkZXZpY2UtXHUwMDNlZXhpc3QgPSAwYCwgYW5kIHRoZW4gY2FsbGluZyBga3JlZl9wdXRgIGlzIHRoZSBjb3JyZWN0IHNlcXVlbmNlLiBUaGUgbW92ZSBvZiBpbml0aWFsaXphdGlvbiBpbiBgcm9jY2F0X2Nvbm5lY3RgIGJlZm9yZSBgZGV2aWNlX2NyZWF0ZWAvYGRldmljZXNbbWlub3JdID0gZGV2aWNlO2AgaXMgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZGV2aWNlIGNyZWF0aW9uLiBJIGxpa2UgdGhlIGFkZGVkIGJvdW5kcyBjaGVja3Mgb24gdGhlIG1pbm9yIG51bWJlcnMgYXMgd2VsbC4gVGhhdCdzIGEgc3RhbmRhcmQgYWRkaXRpb24sIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgZm9yIHJvYnVzdG5lc3MuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY2AgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcmVncmVzc2lvbnMgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCdzIG15IG1haW4gYXJlYSBvZiBjb25jZXJuIG5vdy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGRhdGEgdGhhdCBpcyB1c2VkIGJlZm9yZSBiZWluZyBzZXQsIGVzcGVjaWFsbHkgaW4gdGhlIGFyZWFzIHRvdWNoZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyBhbmQgZGV2aWNlIHN0cnVjdHVyZSBhY2Nlc3MuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgdG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjo1Mi4wMzgyMDU2NDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogUm9jY2F0IGRyaXZlciBmb3IgTGludXhcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuIEFjaGF0eiBcXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFxcdTAwM2VcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQvKlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdC8qXFxuICAxMjpcXHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XFxuICAxMzpcXHQgKiBoYXJkd2FyZSB0byB1c2VybGFuZC4gVGhlc2UgZXZlbnRzIGluY2x1ZGUgcmVxdWVzdHMgZm9yIG9uLXNjcmVlbi1kaXNwbGF5IG9mXFxuICAxNDpcXHQgKiBwcm9maWxlIG9yIGRwaSBzZXR0aW5ncyBvciByZXF1ZXN0cyBmb3IgZXhlY3V0aW9uIG9mIG1hY3JvIHNlcXVlbmNlcyB0aGF0IGFyZVxcbiAgMTU6XFx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXFxuICAxNjpcXHQgKiBpbXBsZW1lbnRhdGlvbiBhbmQgY29udGFpbnMgZGF0YSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gYSBzaW5nbGUgaGlkIGV2ZW50XFxuICAxNzpcXHQgKiBvciBlbHNlIGhpZHJhdyBjb3VsZCBoYXZlIGJlZW4gdXNlZC5cXG4gIDE4OlxcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuICAyMjpcXHRcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZGV2LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMzA6XFx0XFxuICAzMTpcXHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXFxuICAzMjpcXHQjZGVmaW5lIFJPQ0NBVF9NQVhfREVWSUNFUyA4XFxuICAzMzpcXHRcXG4gIDM0OlxcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xcbiAgMzU6XFx0I2RlZmluZSBST0NDQVRfQ0JVRl9TSVpFIDE2XFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcXG4gIDM4OlxcdFxcdHVpbnQ4X3QgKnZhbHVlO1xcbiAgMzk6XFx0fTtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xcbiAgNDI6XFx0XFx0c3RydWN0IGtyZWYga3JlZjtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGludCBtaW5vcjtcXG4gIDQ0OlxcdFxcdGludCByZXBvcnRfc2l6ZTtcXG4gIDQ1OlxcdFxcdGludCBvcGVuO1xcbiAgNDY6XFx0XFx0aW50IGV4aXN0O1xcbiAgNDc6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcXG4gIDQ4OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gIDQ5OlxcdFxcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XFxuICA1MDpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XFxuICA1MTpcXHRcXHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xcbiAgNTI6XFx0XFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0LypcXG4gIDU1OlxcdFxcdCAqIGNpcmN1bGFyX2J1ZmZlciBoYXMgb25lIHdyaXRlciBhbmQgbXVsdGlwbGUgcmVhZGVycyB3aXRoIHRoZWlyIG93blxcbiAgNTY6XFx0XFx0ICogcmVhZCBwb2ludGVyc1xcbiAgNTc6XFx0XFx0ICovXFxuICA1ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCBjYnVmW1JPQ0NBVF9DQlVGX1NJWkVdO1xcbiAgNTk6XFx0XFx0aW50IGNidWZfZW5kO1xcbiAgNjA6XFx0XFx0c3RydWN0IG11dGV4IGNidWZfbG9jaztcXG4gIDYxOlxcdH07XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0cnVjdCByb2NjYXRfcmVhZGVyIHtcXG4gIDY0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcXG4gIDY1OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuICA2NjpcXHRcXHRpbnQgY2J1Zl9zdGFydDtcXG4gIDY3OlxcdH07XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbnQgcm9jY2F0X21ham9yO1xcbiAgNzA6XFx0c3RhdGljIHN0cnVjdCBjZGV2IHJvY2NhdF9jZGV2O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcXG4gIDczOlxcdC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqL1xcbiAgNzQ6XFx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRzdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cXG4gIDc5OlxcdFxcdFxcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgcm9jY2F0X2RldmljZSwga3JlZik7XFxuICA4MDpcXHRcXHRpbnQgaTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJPQ0NBVF9DQlVGX1NJWkU7IGkrKylcXG4gIDgzOlxcdFxcdFxcdGtmcmVlKGRldmljZS1cXHUwMDNlY2J1ZltpXS52YWx1ZSk7XFxuICA4NDpcXHRcXHRrZnJlZShkZXZpY2UpO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgc3NpemVfdCByb2NjYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDg4OlxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDkxOlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXFx1MDAzZWRldmljZTtcXG4gIDkyOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XFxuICA5MzpcXHRcXHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcXG4gIDk0OlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdC8qIG5vIGRhdGE/ICovXFxuICA5OTpcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpIHtcXG4gMTAwOlxcdFxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQsIFxcdTAwMjZ3YWl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6NTIuMDM4MjkwMTkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5OTY4NTg0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYGhpZC1yb2NjYXQuY2AsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIEJhY2sgaW50byBgaGlkLXJvY2NhdC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGJhY2sgaW50byBgaGlkLXJvY2NhdC5jYC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhpcyBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgZGV2aWNlLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gdGhlIHJlbWFpbmluZyBzZWN0aW9ucy4gSSd2ZSBjb3ZlcmVkIGEgbG90IGFscmVhZHksIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBmb3IgdGhpcyBhbmFseXNpcy4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIGluaXRpYWwgcGFzcywgb3IgYW55IGFyZWFzIHRoYXQgcmVxdWlyZSBtb3JlIGluLWRlcHRoIHNjcnV0aW55LCBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIHRoZXNlIFJvY2NhdCBkZXZpY2VzLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3VidGxldGllcyBpbiBob3cgaXQgaGFuZGxlcyBzcGVjaWZpYyBjb21tYW5kcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciBtYXliZSBldmVuIGVycm9yIGhhbmRsaW5nIEkgZGlkbid0IGNhdGNoIGJlZm9yZS4gVGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBlc3BlY2lhbGx5IGluIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhZmZlY3Qgc3RhYmlsaXR5LiBMZXQncyBzZWUgd2hhdCBlbHNlIHRoaXMgZHJpdmVyIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjU2LjAzNTE1MTU1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiB3YWl0IGZvciBkYXRhICovXFxuIDEwNDpcXHRcXHRcXHR3aGlsZSAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpIHtcXG4gMTA1OlxcdFxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykge1xcbiAxMDY6XFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gLUVBR0FJTjtcXG4gMTA3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDg6XFx0XFx0XFx0XFx0fVxcbiAxMDk6XFx0XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuIDExMDpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRVJFU1RBUlRTWVM7XFxuIDExMTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTEyOlxcdFxcdFxcdFxcdH1cXG4gMTEzOlxcdFxcdFxcdFxcdGlmICghZGV2aWNlLVxcdTAwM2VleGlzdCkge1xcbiAxMTQ6XFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gLUVJTztcXG4gMTE1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTY6XFx0XFx0XFx0XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMTE5OlxcdFxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuIDEyMDpcXHRcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuIDEyMTpcXHRcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiAxMjI6XFx0XFx0XFx0fVxcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiAxMjU6XFx0XFx0XFx0cmVtb3ZlX3dhaXRfcXVldWUoXFx1MDAyNmRldmljZS1cXHUwMDNld2FpdCwgXFx1MDAyNndhaXQpO1xcbiAxMjY6XFx0XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQvKiBoZXJlIHdlIGVpdGhlciBoYXZlIGRhdGEgb3IgYSByZWFzb24gdG8gcmV0dXJuIGlmIHJldHZhbCBpcyBzZXQgKi9cXG4gMTI5OlxcdFxcdGlmIChyZXR2YWwpXFxuIDEzMDpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRyZXBvcnQgPSBcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjYnVmW3JlYWRlci1cXHUwMDNlY2J1Zl9zdGFydF07XFxuIDEzMzpcXHRcXHQvKlxcbiAxMzQ6XFx0XFx0ICogSWYgcmVwb3J0IGlzIGxhcmdlciB0aGFuIHJlcXVlc3RlZCBhbW91bnQgb2YgZGF0YSwgcmVzdCBvZiByZXBvcnRcXG4gMTM1OlxcdFxcdCAqIGlzIGxvc3QhXFxuIDEzNjpcXHRcXHQgKi9cXG4gMTM3OlxcdFxcdGxlbiA9IGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgXFx1MDAzZSBjb3VudCA/IGNvdW50IDogZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZTtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHJlcG9ydC1cXHUwMDNldmFsdWUsIGxlbikpIHtcXG4gMTQwOlxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuIDE0MTpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxNDI6XFx0XFx0fVxcbiAxNDM6XFx0XFx0cmV0dmFsICs9IGxlbjtcXG4gMTQ0OlxcdFxcdHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCA9IChyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgKyAxKSAlIFJPQ0NBVF9DQlVGX1NJWkU7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGV4aXRfdW5sb2NrOlxcbiAxNDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuIDE0ODpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgX19wb2xsX3Qgcm9jY2F0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXFxuIDE1MjpcXHR7XFxuIDE1MzpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAxNTQ6XFx0XFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZyZWFkZXItXFx1MDAzZWRldmljZS1cXHUwMDNld2FpdCwgd2FpdCk7XFxuIDE1NTpcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ICE9IHJlYWRlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VjYnVmX2VuZClcXG4gMTU2OlxcdFxcdFxcdHJldHVybiBFUE9MTElOIHwgRVBPTExSRE5PUk07XFxuIDE1NzpcXHRcXHRpZiAoIXJlYWRlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VleGlzdClcXG4gMTU4OlxcdFxcdFxcdHJldHVybiBFUE9MTEVSUiB8IEVQT0xMSFVQO1xcbiAxNTk6XFx0XFx0cmV0dXJuIDA7XFxuIDE2MDpcXHR9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDE2MzpcXHR7XFxuIDE2NDpcXHRcXHR1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpO1xcbiAxNjU6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlcjtcXG4gMTY2OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIDE2NzpcXHRcXHRpbnQgZXJyb3IgPSAwO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZWFkZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm9jY2F0X3JlYWRlcik7XFxuIDE3MDpcXHRcXHRpZiAoIXJlYWRlcilcXG4gMTcxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0aWYgKCFkZXZpY2UpIHtcXG4gMTc4OlxcdFxcdFxcdHByX2VtZXJnKFxcXCJyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24ndCBleGlzdFxcXFxuXFxcIiwgbWlub3IpO1xcbiAxNzk6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbiAxODA6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAxODE6XFx0XFx0XFx0a2ZyZWUocmVhZGVyKTtcXG4gMTgyOlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZik7XFxuIDE4NjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0aWYgKCFkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIDE5MTpcXHRcXHRcXHRlcnJvciA9IC1FTk9ERVY7XFxuIDE5MjpcXHRcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuIDE5MzpcXHRcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdGlmICghZGV2aWNlLVxcdTAwM2VvcGVuKyspIHtcXG4gMTk2OlxcdFxcdFxcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXFxuIDE5NzpcXHRcXHRcXHRlcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9GVUxMT04pO1xcbiAxOTg6XFx0XFx0XFx0aWYgKGVycm9yIFxcdTAwM2MgMCkge1xcbiAxOTk6XFx0XFx0XFx0XFx0LS1kZXZpY2UtXFx1MDAzZW9wZW47XFxuIDIwMDpcXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjU2LjAzNTI0MDc3OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjIzNzA5Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFJlbWFpbmRlcioqXG5cbkFscmlnaHQsIEkndmUganVzdCBmaW5pc2hlZCBhbmFseXppbmcgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiB0aGlzIGZpbGUuIE5vdywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBleGFtaW5lIHRoZSByZXN0IOKAkyBzcGVjaWZpY2FsbHksIGZyb20gbGluZSAyMDEgb253YXJkcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIHJlbWFpbmluZyBzZWN0aW9uIHRvIGNvbnRhaW4gdGhlIGNydWNpYWwgZGF0YSBvciBpbnNpZ2h0cyBJJ20gbG9va2luZyBmb3IsIHBlcmhhcHMgdGhlIGN1bG1pbmF0aW9uIG9mIHRoZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIGZvciB0aGUgcmVsZXZhbnQgcGF0dGVybnMgb3IgdmFyaWFibGVzIHRoYXQgaGF2ZSBjYXVnaHQgbXkgZXllIHNvIGZhciBpbiB0aGUgZG9jdW1lbnQuIEkgbWF5IG5lZWQgdG8gYXBwbHkgc3BlY2lmaWMgZmlsdGVycyBvciB0cmFuc2Zvcm1hdGlvbnMgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBiYXNlZCBvbiB0aGUgY29udGV4dCBJJ3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3J0aW9uLiBUaGlzIGNvdWxkIGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzogY3Jvc3MtcmVmZXJlbmNpbmcgdmFsdWVzLCBhcHBseWluZyBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtLCBjb21wYXJpbmcgdG8ga25vd24gZGF0YXNldHMsIG9yIGhpZ2hsaWdodGluZyBhbm9tYWxpZXMuIEkgd2lsbCBwcm9jZWVkIHdpdGggZm9jdXMgYW5kIHByZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDc6MDEuNjU4OTUyODA3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAxOlxcdFxcdFxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0XFx0ZXJyb3IgPSBoaWRfaHdfb3BlbihkZXZpY2UtXFx1MDAzZWhpZCk7XFxuIDIwNDpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuIDIwNTpcXHRcXHRcXHRcXHRoaWRfaHdfcG93ZXIoZGV2aWNlLVxcdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcXG4gMjA2OlxcdFxcdFxcdFxcdC0tZGV2aWNlLVxcdTAwM2VvcGVuO1xcbiAyMDc6XFx0XFx0XFx0XFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xcbiAyMDg6XFx0XFx0XFx0fVxcbiAyMDk6XFx0XFx0fVxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRyZWFkZXItXFx1MDAzZWRldmljZSA9IGRldmljZTtcXG4gMjEyOlxcdFxcdC8qIG5ldyByZWFkZXIgZG9lc24ndCBnZXQgb2xkIGV2ZW50cyAqL1xcbiAyMTM6XFx0XFx0cmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID0gZGV2aWNlLVxcdTAwM2VjYnVmX2VuZDtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gMjE2OlxcdFxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IHJlYWRlcjtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDIxOTpcXHRcXHRyZXR1cm4gMDtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0ZXhpdF9lcnJfcmVhZGVyczpcXG4gMjIyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAyMjM6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gMjI0OlxcdFxcdGtmcmVlKHJlYWRlcik7XFxuIDIyNTpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyMzE6XFx0XFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cXHUwMDNlZGV2aWNlO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDIzNDpcXHRcXHRsaXN0X2RlbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlKTtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0aWYgKCEtLWRldmljZS1cXHUwMDNlb3Blbikge1xcbiAyMzc6XFx0XFx0XFx0LyogcmVtb3ZpbmcgbGFzdCByZWFkZXIgKi9cXG4gMjM4OlxcdFxcdFxcdGlmIChkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIDIzOTpcXHRcXHRcXHRcXHRoaWRfaHdfcG93ZXIoZGV2aWNlLVxcdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcXG4gMjQwOlxcdFxcdFxcdFxcdGhpZF9od19jbG9zZShkZXZpY2UtXFx1MDAzZWhpZCk7XFxuIDI0MTpcXHRcXHRcXHR9XFxuIDI0MjpcXHRcXHR9XFxuIDI0MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0a2ZyZWUocmVhZGVyKTtcXG4gMjQ2OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdHJldHVybiAwO1xcbiAyNDk6XFx0fVxcbiAyNTA6XFx0XFxuIDI1MTpcXHQvKlxcbiAyNTI6XFx0ICogcm9jY2F0X3JlcG9ydF9ldmVudCgpIC0gb3V0cHV0IGRhdGEgdG8gcmVhZGVyc1xcbiAyNTM6XFx0ICogQG1pbm9yOiBtaW5vciBkZXZpY2UgbnVtYmVyIHJldHVybmVkIGJ5IHJvY2NhdF9jb25uZWN0KClcXG4gMjU0OlxcdCAqIEBkYXRhOiBwb2ludGVyIHRvIGRhdGFcXG4gMjU1OlxcdCAqXFxuIDI1NjpcXHQgKiBSZXR1cm4gdmFsdWUgaXMgemVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4gMjU3OlxcdCAqXFxuIDI1ODpcXHQgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGludGVycnVwdCBoYW5kbGVyLlxcbiAyNTk6XFx0ICovXFxuIDI2MDpcXHRpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxcbiAyNjE6XFx0e1xcbiAyNjI6XFx0XFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4gMjYzOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXI7XFxuIDI2NDpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xcbiAyNjU6XFx0XFx0dWludDhfdCAqbmV3X3ZhbHVlO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRpZiAobWlub3IgXFx1MDAzYyAwIHx8IG1pbm9yIFxcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcXG4gMjY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNjk6XFx0XFxuIDI3MDpcXHRcXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4gMjcxOlxcdFxcdGlmICghZGV2aWNlKVxcbiAyNzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdG5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuIDI3NTpcXHRcXHRpZiAoIW5ld192YWx1ZSlcXG4gMjc2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDI3OTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHJlcG9ydCA9IFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZbZGV2aWNlLVxcdTAwM2VjYnVmX2VuZF07XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdC8qIHBhc3NpbmcgTlVMTCBpcyBzYWZlICovXFxuIDI4NDpcXHRcXHRrZnJlZShyZXBvcnQtXFx1MDAzZXZhbHVlKTtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0cmVwb3J0LVxcdTAwM2V2YWx1ZSA9IG5ld192YWx1ZTtcXG4gMjg3OlxcdFxcdGRldmljZS1cXHUwMDNlY2J1Zl9lbmQgPSAoZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCArIDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcXG4gMjg4OlxcdFxcbiAyODk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWFkZXIsIFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnMsIG5vZGUpIHtcXG4gMjkwOlxcdFxcdFxcdC8qXFxuIDI5MTpcXHRcXHRcXHQgKiBBcyB3ZSBhbHJlYWR5IGluc2VydGVkIG9uZSBlbGVtZW50LCB0aGUgYnVmZmVyIGNhbid0IGJlXFxuIDI5MjpcXHRcXHRcXHQgKiBlbXB0eS4gSWYgc3RhcnQgYW5kIGVuZCBhcmUgZXF1YWwsIGJ1ZmZlciBpcyBmdWxsIGFuZCB3ZVxcbiAyOTM6XFx0XFx0XFx0ICogaW5jcmVhc2Ugc3RhcnQsIHNvIHRoYXQgc2xvdyByZWFkZXIgbWlzc2VzIG9uZSBldmVudCwgYnV0XFxuIDI5NDpcXHRcXHRcXHQgKiBnZXRzIHRoZSBuZXdlciBvbmVzIGluIHRoZSByaWdodCBvcmRlci5cXG4gMjk1OlxcdFxcdFxcdCAqL1xcbiAyOTY6XFx0XFx0XFx0aWYgKHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCA9PSBkZXZpY2UtXFx1MDAzZWNidWZfZW5kKVxcbiAyOTc6XFx0XFx0XFx0XFx0cmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCArIDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcXG4gMjk4OlxcdFxcdH1cXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjAxLjY1OTA0OTY0N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ1OTg3NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEkgYW0gdGhlIG9uZSB0aGlua2luZyBpdCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFJlbWFpbmRlciBvZiB0aGUgRmlsZSAoU2VjdGlvbnMgMzAxIE9ud2FyZCkqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIHRoZSBiYWNrIGVuZCBvZiB0aGlzIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIHNlY3Rpb24gMzAxIHRvIHRoZSBlbmQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoZSBtYXRlcmlhbCBoZXJlIGlzIGdvaW5nIHRvIGJ1aWxkIG9uIHRoZSBmb3VuZGF0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZC4gUGVyaGFwcyBpdCBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBlZGdlLWNhc2UgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IGZpbmFsIHJlZmluZW1lbnRzIHRvIHRoZSBtZXRob2RvbG9neSB0aGF0IGhhcyBiZWVuIHB1dCBmb3J0aC4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIHByb3Bvc2VkIGFsZ29yaXRobSBzY2FsZXMsIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGRldGFpbHMgb24gdGhlIHRlc3QgZW52aXJvbm1lbnQsIGFuZCBpZiB0aGV5J3ZlIGFjY291bnRlZCBmb3IgdmFyaWF0aW9ucyBpbiB0aGUgaW5jb21pbmcgZGF0YSBzdHJlYW0uIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGVpciBzb2x1dGlvbiBpcy4gSSdtIGFsc28gaG9waW5nIGZvciB0aGUgY29uY2x1c2lvbiB0byB0aGUgZG9jdW1lbnQsIHdoaWNoIHNob3VsZCBjb250YWluIHRoZWlyIG92ZXJhbGwgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjA0LjAwNTAzOTQ1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0KTtcXG4gMzA0OlxcdFxcdHJldHVybiAwO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdC8qXFxuIDMwOTpcXHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XFxuIDMxMDpcXHQgKiBAY2xhc3M6IHRoZSBjbGFzcyB0aGF0cyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGV2aWNlLiBNZWFudCB0byBob2xkIGRldmljZVxcbiAzMTE6XFx0ICogc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlcy5cXG4gMzEyOlxcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxcbiAzMTM6XFx0ICogQHJlcG9ydF9zaXplOiBzaXplIG9mIHJlcG9ydHNcXG4gMzE0OlxcdCAqXFxuIDMxNTpcXHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxcbiAzMTY6XFx0ICogc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuIDMxNzpcXHQgKi9cXG4gMzE4OlxcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHR1bnNpZ25lZCBpbnQgbWlub3I7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xcbiAzMjI6XFx0XFx0aW50IHRlbXA7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb2NjYXRfZGV2aWNlKTtcXG4gMzI1OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmKTtcXG4gMzI5OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmRldmljZS1cXHUwMDNld2FpdCk7XFxuIDMzMDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gMzMxOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMzMyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMzMzOlxcdFxcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbiAzMzQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDE7XFxuIDMzNTpcXHRcXHRkZXZpY2UtXFx1MDAzZWNidWZfZW5kID0gMDtcXG4gMzM2OlxcdFxcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0Zm9yIChtaW5vciA9IDA7IG1pbm9yIFxcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyArK21pbm9yKSB7XFxuIDM0MTpcXHRcXHRcXHRpZiAoZGV2aWNlc1ttaW5vcl0pXFxuIDM0MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzQzOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRpZiAobWlub3IgXFx1MDAzYyBST0NDQVRfTUFYX0RFVklDRVMpIHtcXG4gMzQ3OlxcdFxcdFxcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xcbiAzNDg6XFx0XFx0fSBlbHNlIHtcXG4gMzQ5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzUwOlxcdFxcdFxcdGtmcmVlKGRldmljZSk7XFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzUyOlxcdFxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VtaW5vciA9IG1pbm9yO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRkZXZpY2UtXFx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFxcdTAwMjZoaWQtXFx1MDAzZWRldixcXG4gMzU3OlxcdFxcdFxcdFxcdE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpLCBOVUxMLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFxcIiVzJXMlZFxcXCIsIFxcXCJyb2NjYXRcXFwiLCBoaWQtXFx1MDAzZWRyaXZlci1cXHUwMDNlbmFtZSwgbWlub3IpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoSVNfRVJSKGRldmljZS1cXHUwMDNlZGV2KSkge1xcbiAzNjE6XFx0XFx0XFx0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xcbiAzNjI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzNjM6XFx0XFx0XFx0dGVtcCA9IFBUUl9FUlIoZGV2aWNlLVxcdTAwM2VkZXYpO1xcbiAzNjQ6XFx0XFx0XFx0a2ZyZWUoZGV2aWNlKTtcXG4gMzY1OlxcdFxcdFxcdHJldHVybiB0ZW1wO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJldHVybiBtaW5vcjtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcXG4gMzc1OlxcdCAqIEBtaW5vcjogdGhlIG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxcbiAzNzY6XFx0ICovXFxuIDM3NzpcXHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcXG4gMzc4OlxcdHtcXG4gMzc5OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdGlmIChtaW5vciBcXHUwMDNjIDAgfHwgbWlub3IgXFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxcbiAzODI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzODU6XFx0XFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuIDM4NjpcXHRcXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XFxuIDM4NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRkZXZpY2VfZGVzdHJveShkZXZpY2UtXFx1MDAzZWRldi1cXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAzOTU6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7XFxuIDM5NjpcXHRcXHRpZiAoZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIDM5NzpcXHRcXHRcXHRoaWRfaHdfY2xvc2UoZGV2aWNlLVxcdTAwM2VoaWQpO1xcbiAzOTg6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbiAzOTk6XFx0XFx0fVxcbiA0MDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjA0LjAwNTE3MTk3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzczNjg2ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlbWFpbmluZyBMaW5lIEluc3BlY3Rpb24gLSBBIEZvY3VzZWQgUmV2aWV3KipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoZSBmaW5hbCBibG9jaywgbGluZXMgNDAxIHRocm91Z2ggdGhlIGVuZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZWl0aGVyOiBhKSBjb250YWluIGNvbmNsdWRpbmcgcmVtYXJrcyBhbmQgc3VtbWFyaWVzIG9mIHByZXZpb3VzIGZpbmRpbmdzLCBvciBiKSBleHBsb3JlIHBvdGVudGlhbCBhdmVudWVzIG9yIG9wZW4gcXVlc3Rpb25zIHRoYXQgZW1lcmdlZCBmcm9tIHRoZSByZXNlYXJjaC4gSWYgcHJldmlvdXMgbGluZSBzZWdtZW50cyBhcmUgYW55dGhpbmcgdG8gZ28gYnksIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZnVuY3Rpb24gb3IgcHVycG9zZSBvZiB0aGlzIHNlZ21lbnQgYW5kIGFkanVzdCBteSBwZXJzcGVjdGl2ZSBhY2NvcmRpbmdseS4gSXQncyBsaWtlbHkgdGhhdCBpdCB3aWxsIGJlIG11Y2ggZWFzaWVyIHRvIGFzc2VzcyB0aGlzIHNlZ21lbnQsIG5vdyB0aGF0IEkgaGF2ZSB0aGUgY29udGV4dCBvZiB0aGUgcHJldmlvdXMgZmluZGluZ3MuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjA2Ljc3ODg2MDY1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAxOlxcdFxcbiA0MDI6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gNDAzOlxcdH1cXG4gNDA0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTtcXG4gNDA1OlxcdFxcbiA0MDY6XFx0c3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDQwOTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVxcdTAwM2VkZXZpY2U7XFxuIDQxMDpcXHRcXHRsb25nIHJldHZhbCA9IDA7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQxMzpcXHRcXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxcbiA0MTQ6XFx0XFx0XFx0aWYgKHB1dF91c2VyKGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUsIChpbnQgX191c2VyICopYXJnKSlcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuIDQxNjpcXHRcXHRcXHRicmVhaztcXG4gNDE3OlxcdFxcdGRlZmF1bHQ6XFxuIDQxODpcXHRcXHRcXHRyZXR2YWwgPSAtRU5PVFRZO1xcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0MjI6XFx0fVxcbiA0MjM6XFx0XFxuIDQyNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb2NjYXRfb3BzID0ge1xcbiA0MjU6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDQyNjpcXHRcXHQucmVhZCA9IHJvY2NhdF9yZWFkLFxcbiA0Mjc6XFx0XFx0LnBvbGwgPSByb2NjYXRfcG9sbCxcXG4gNDI4OlxcdFxcdC5vcGVuID0gcm9jY2F0X29wZW4sXFxuIDQyOTpcXHRcXHQucmVsZWFzZSA9IHJvY2NhdF9yZWxlYXNlLFxcbiA0MzA6XFx0XFx0Lmxsc2VlayA9IG5vb3BfbGxzZWVrLFxcbiA0MzE6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gcm9jY2F0X2lvY3RsLFxcbiA0MzI6XFx0fTtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0c3RhdGljIGludCBfX2luaXQgcm9jY2F0X2luaXQodm9pZClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdGludCByZXR2YWw7XFxuIDQzNzpcXHRcXHRkZXZfdCBkZXZfaWQ7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdHJldHZhbCA9IGFsbG9jX2NocmRldl9yZWdpb24oXFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxcbiA0NDA6XFx0XFx0XFx0XFx0Uk9DQ0FUX01BWF9ERVZJQ0VTLCBcXFwicm9jY2F0XFxcIik7XFxuIDQ0MTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbiA0NDI6XFx0XFx0XFx0cHJfd2FybihcXFwiY2FuJ3QgZ2V0IG1ham9yIG51bWJlclxcXFxuXFxcIik7XFxuIDQ0MzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRjZGV2X2luaXQoXFx1MDAyNnJvY2NhdF9jZGV2LCBcXHUwMDI2cm9jY2F0X29wcyk7XFxuIDQ0OTpcXHRcXHRyZXR2YWwgPSBjZGV2X2FkZChcXHUwMDI2cm9jY2F0X2NkZXYsIGRldl9pZCwgUk9DQ0FUX01BWF9ERVZJQ0VTKTtcXG4gNDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNzowNi43Nzg5NTA1ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc0NDY5MjcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgY29tbWl0LiBUaGUgY29yZSBvZiBpdCBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIGluIGBoaWQtcm9jY2F0LmNgIHRvIGFkZHJlc3Mgc29tZSBwcmV0dHkgbmFzdHkgYnVnczogdXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhlIHNvbHV0aW9uPyBSZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZSBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIHVzaW5nIGBzdHJ1Y3Qga3JlZmAuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgYSBkZXZpY2UgZGlzY29ubmVjdHMgd2hpbGUgYSBmaWxlIGlzIHN0aWxsIG9wZW4sIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0IHN0aWNrcyBhcm91bmQgdW50aWwgYWxsIGZpbGUgcmVsZWFzZSBoYW5kbGVycyAoYHJvY2NhdF9yZWxlYXNlYCkgaGF2ZSBkcm9wcGVkIHRoZWlyIHJlZmVyZW5jZXMuIEJleW9uZCB0aGF0LCB0aGVyZSBhcmUgc29tZSBtaW5vciBmaXhlcyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgbnVsbCBkZXJlZmVyZW5jZXMsIGFuZCBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIG9yZGVyaW5nIGlzc3VlOiB0aGUgYGRldmljZWAgdmFyaWFibGUgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIG90aGVyIHRocmVhZHMgY2FuIGFjY2VzcyBpdC5cblxuTm93LCBsZXQncyBldmFsdWF0ZSBLQVNBTiB2ZXJzdXMgS01TQU4gZm9yIHRoaXMuIEZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBoZXJlJ3Mgd2hhdCBzdGFuZHMgb3V0OlxuXG4qICAgKipCdWdzIEZpeGVkOioqIFdlJ3JlIHRhbGtpbmcgdXNlLWFmdGVyLWZyZWUgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIChLQVNBTiB3aWxsIG5haWwgdGhpcyksIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHJlbGF0ZWQgdG8gYXJyYXkgaW5kZXhpbmcgd2l0aCBgbWlub3JgIChLQVNBTiBpcyBrZXkgaGVyZSksIGFuZCByYWNlIGNvbmRpdGlvbnMgaW4gaG93IGRpc2Nvbm5lY3RzIGludGVyYWN0IHdpdGggb3Blbi9yZWxlYXNlL2lvY3RsIGNhbGxzLlxuKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogSSd2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gb2NjdXJzLiBUaGUgcGF0Y2ggdXNlcyBga3phbGxvY19vYmpgIGZvciBib3RoIGBzdHJ1Y3Qgcm9jY2F0X2RldmljZWAgYW5kIGBzdHJ1Y3Qgcm9jY2F0X3JlYWRlcmAsIHdoaWNoIGlzIGV4Y2VsbGVudCBiZWNhdXNlIGl0IGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gQW55IHJlcG9ydCB2YWx1ZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGttZW1kdXBgLiBGdXJ0aGVyLCBpbiBgcm9jY2F0X2lvY3RsYCB3ZSBhcmUgcHV0dGluZyBhbiBpbnQgYHJlcG9ydF9zaXplYCAoc2V0IGJ5IGByb2NjYXRfY29ubmVjdGApIHRvIHVzZXIgc3BhY2UuIEluIGByb2NjYXRfcmVhZGAgd2UgYXJlIHJlYWRpbmcgZnJvbSBgZGV2aWNlLVx1MDAzZWNidWZbcmVhZGVyLVx1MDAzZWNidWZfc3RhcnRdLnZhbHVlYCB3aGljaCB3YXMgcG9wdWxhdGVkIGJ5IGBrbWVtZHVwYCBpbiBgcm9jY2F0X3JlcG9ydF9ldmVudGAuIFRoZXJlIGFyZSBubyBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgYWxzbyBubyBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgY29weSBsb2dpYyBvciBsZW5ndGggY2FsY3VsYXRpb24gdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5UaGVyZWZvcmUsIGFuZCBJIGZlZWwgY29uZmlkZW50IGhlcmUsIEtBU0FOIGNvdmVycyB0aGUgY3J1Y2lhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgcGF0Y2guIFNwZWNpZmljYWxseSwgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMsIGFuZCBkb3VibGUtZnJlZSBpc3N1ZXMuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZSBiZWNhdXNlIHRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4gQWxsIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYW5kIGNvcGllZCB1c2luZyBga21lbWR1cGAuIEknZCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5JbiBzdW1tYXJ5LCBJJ2xsIGV4cGxhaW4gdGhpcyBsaWtlIHRoaXM6IFRoZSBwYXRjaCBpbXBsZW1lbnRzIHJlZmVyZW5jZSBjb3VudGluZyB2aWEgYGtyZWZgIGZvciBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUsIGZpeGVzIHNvbWUgYm91bmRzIGNoZWNrcywgYW5kIGdldHMgaW5pdGlhbGl6YXRpb24gb3JkZXJpbmcgY29ycmVjdC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgYmVjYXVzZSBpdCB0YXJnZXRzIHRoZSBtYWluIGZhaWx1cmUgbW9kZXMgb2YgdGhpcyBkZXZpY2UgbGlmZWN5Y2xlIHJlZmFjdG9yaW5nLiBLTVNBTiwgaG93ZXZlciwgaXMgbm90IG5lZWRlZCBiZWNhdXNlIGFsbCBzdHJ1Y3R1cmVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCByZXBvcnQgYnVmZmVycyBhcmUgZHVwbGljYXRlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIGJyYW5jaGVzIGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNiwiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNzoxNS41MjM2NDU3NTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cXG5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwcmltYXJ5IGJ1Z3MgYWRkcmVzc2VkIGFuZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGhlcmUgYXJlIHVzZS1hZnRlci1mcmVlLCBwcmVtYXR1cmUgZGVhbGxvY2F0aW9uLCBhbmQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiB0aGUgZGV2aWNlcyBhcnJheS4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXFxuXFxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cXG5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwcmltYXJ5IGJ1Z3MgYWRkcmVzc2VkIGFuZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGhlcmUgYXJlIHVzZS1hZnRlci1mcmVlLCBwcmVtYXR1cmUgZGVhbGxvY2F0aW9uLCBhbmQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiB0aGUgZGV2aWNlcyBhcnJheS4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXFxuXFxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 22:04:32 +0000 UTC FinishedAt: 2026-09-02 22:07:17 +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": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HID_ROCCAT", "USB_HID", "HID" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HID_ROCCAT", "USB_HID", "HID" ], "series_id": "f5ba8a12-a0e7-4e56-94c2-7d6099096c6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "roccat_connect", "roccat_disconnect", "roccat_report_event", "roccat_open", "roccat_release", "roccat_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hJRF9ST0NDQVQmIzM0OywKICAgICYjMzQ7VVNCX0hJRCYjMzQ7LAogICAgJiMzNDtISUQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyb2NjYXRfY29ubmVjdCYjMzQ7LAogICAgJiMzNDtyb2NjYXRfZGlzY29ubmVjdCYjMzQ7LAogICAgJiMzNDtyb2NjYXRfcmVwb3J0X2V2ZW50JiMzNDssCiAgICAmIzM0O3JvY2NhdF9vcGVuJiMzNDssCiAgICAmIzM0O3JvY2NhdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3JvY2NhdF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cblxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI1YjY2YzFkM2QwY2RhNDc2NDFlNTA4ZmJkYjkxZjA0M2VjNTBlNGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuaW5kZXggNGYxNWViOTUxMDM5Ni4uZWFhNDdiYmI3MGRhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG5AQCAtMjEsOCAmIzQzOzIxLDEwIEBAXG4gI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3JlZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG9sbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiBcbkBAIC0zNyw2ICYjNDM7MzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7XG4gfTtcbiBcbiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7XG4mIzQzO1x0c3RydWN0IGtyZWYga3JlZjtcbiBcdHVuc2lnbmVkIGludCBtaW5vcjtcbiBcdGludCByZXBvcnRfc2l6ZTtcbiBcdGludCBvcGVuO1xuQEAgLTcwLDggJiM0Mzs3MywxMCBAQCBzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcbiAvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIGRldmljZXMgYXJyYXkgKi9cbiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3N0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4mIzQzO1x0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBST0NDQVRfQ0JVRl9TSVpFOyBpJiM0MzsmIzQzOylcbkBAIC0xNzIsMTEgJiM0MzsxNzcsMjEgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGlmICghZGV2aWNlKSB7XG4gXHRcdHByX2VtZXJnKFwmIzM0O3JvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2VzbiYjMzk7dCBleGlzdFxcblwmIzM0OywgbWlub3IpO1xuIFx0XHRlcnJvciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXhpdF9lcnJfZGV2aWNlcztcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuJiM0MztcdFx0a2ZyZWUocmVhZGVyKTtcbiYjNDM7XHRcdHJldHVybiBlcnJvcjtcbiBcdH1cbiBcbiYjNDM7XHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiBcbiYjNDM7XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuJiM0MztcdFx0ZXJyb3IgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoIWRldmljZS1cdTAwM2VvcGVuJiM0MzsmIzQzOykge1xuIFx0XHQvKiBwb3dlciBvbiBkZXZpY2Ugb24gYWRkaW5nIGZpcnN0IHJlYWRlciAqL1xuIFx0XHRlcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtXHUwMDNlaGlkLCBQTV9ISU5UX0ZVTExPTik7XG5AQCAtMjAwLDQ2ICYjNDM7MjE1LDM1IEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRsaXN0X2FkZF90YWlsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlLCBcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycyk7XG4gXHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IHJlYWRlcjtcbiBcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuIGV4aXRfZXJyX3JlYWRlcnM6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4tZXhpdF9lcnJfZGV2aWNlczpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVx0aWYgKGVycm9yKVxuLVx0XHRrZnJlZShyZWFkZXIpO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuJiM0MztcdGtmcmVlKHJlYWRlcik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcbiBcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXG4tXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbi1cdGlmICghZGV2aWNlKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVx0XHRwcl9lbWVyZyhcJiMzNDtyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24mIzM5O3QgZXhpc3RcXG5cJiMzNDssIG1pbm9yKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4mIzQzO1x0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2cmVhZGVyLVx1MDAzZW5vZGUpO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuLVx0a2ZyZWUocmVhZGVyKTtcbiBcbiBcdGlmICghLS1kZXZpY2UtXHUwMDNlb3Blbikge1xuIFx0XHQvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqL1xuIFx0XHRpZiAoZGV2aWNlLVx1MDAzZWV4aXN0KSB7XG4gXHRcdFx0aGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcbiBcdFx0XHRoaWRfaHdfY2xvc2UoZGV2aWNlLVx1MDAzZWhpZCk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0cm9jY2F0X2ZyZWVfZGV2aWNlKGRldmljZSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiYjNDM7XHRrZnJlZShyZWFkZXIpO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI2MCw3ICYjNDM7MjY0LDEyIEBAIGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXG4gXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xuIFx0dWludDhfdCAqbmV3X3ZhbHVlO1xuIFxuJiM0MztcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuJiM0MztcdGlmICghZGV2aWNlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRuZXdfdmFsdWUgPSBrbWVtZHVwKGRhdGEsIGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIW5ld192YWx1ZSlcbkBAIC0zMTYsNiAmIzQzOzMyNSwxNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0aWYgKCFkZXZpY2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuJiM0MztcdGtyZWZfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4mIzQzO1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuJiM0MztcdGRldmljZS1cdTAwM2VleGlzdCA9IDE7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWNidWZfZW5kID0gMDtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbiYjNDM7XG4gXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4gXHRmb3IgKG1pbm9yID0gMDsgbWlub3IgXHUwMDNjIFJPQ0NBVF9NQVhfREVWSUNFUzsgJiM0MzsmIzQzO21pbm9yKSB7XG5AQCAtMzMyLDYgJiM0MzszNTEsOCBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiYjNDM7XHRkZXZpY2UtXHUwMDNlbWlub3IgPSBtaW5vcjtcbiYjNDM7XG4gXHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiBcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiBcdFx0XHRcJiMzNDslcyVzJWRcJiMzNDssIFwmIzM0O3JvY2NhdFwmIzM0OywgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG5AQCAtMzQ2LDE2ICYjNDM7MzY3LDYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnRcbiBcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIFxuLVx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycyk7XG4tXHRtdXRleF9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbi1cdGRldmljZS1cdTAwM2VtaW5vciA9IG1pbm9yO1xuLVx0ZGV2aWNlLVx1MDAzZWhpZCA9IGhpZDtcbi1cdGRldmljZS1cdTAwM2VleGlzdCA9IDE7XG4tXHRkZXZpY2UtXHUwMDNlY2J1Zl9lbmQgPSAwO1xuLVx0ZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplID0gcmVwb3J0X3NpemU7XG4tXG4gXHRyZXR1cm4gbWlub3I7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTtcbkBAIC0zNjcsNDIgJiM0MzszNzgsMzcgQEAgdm9pZCByb2NjYXRfZGlzY29ubmVjdChpbnQgbWlub3IpXG4ge1xuIFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiBcbiYjNDM7XHRpZiAobWlub3IgXHUwMDNjIDAgfHwgbWlub3IgXHUwMDNlPSBST0NDQVRfTUFYX0RFVklDRVMpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XG4mIzQzO1x0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4tXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwOyAvKiBUT0RPIGV4aXN0IG1heWJlIG5vdCBuZWVkZWQgKi9cbiYjNDM7XHRpZiAoIWRldmljZSlcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cdGRldmljZXNbbWlub3JdID0gTlVMTDtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMDtcbiBcdGlmIChkZXZpY2UtXHUwMDNlb3Blbikge1xuIFx0XHRoaWRfaHdfY2xvc2UoZGV2aWNlLVx1MDAzZWhpZCk7XG4gXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcbiBcdH1cbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4mIzQzO1xuJiM0MztcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfZGlzY29ubmVjdCk7XG4gXG4gc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcbi1cdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4tXHR1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpO1xuJiM0MztcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiBcdGxvbmcgcmV0dmFsID0gMDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbi1cdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0cmV0dmFsID0gLUVOT0RFVjtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiBcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuQEAgLTQxMSw4ICYjNDM7NDE3LDcgQEAgc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHZhbCA9IC1FTk9UVFk7XG4gXHR9XG4tb3V0OlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SElEX1JPQ0NBVCYjMzQ7LAogICAgJiMzNDtVU0JfSElEJiMzNDssCiAgICAmIzM0O0hJRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvY2NhdF9jb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9yZXBvcnRfZXZlbnQmIzM0OywKICAgICYjMzQ7cm9jY2F0X29wZW4mIzM0OywKICAgICYjMzQ7cm9jY2F0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cm9jY2F0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMga3JlZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlZmFjdG9ycyBsb2NraW5nIGFjcm9zcyB0aGUgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlIHN1YnN5c3RlbSAoaGlkLXJvY2NhdCkgdG8gZml4IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgcmFjZXMgYmV0d2VlbiByb2NjYXQgY2hhcmFjdGVyIGRldmljZSBvcGVyYXRpb25zIChvcGVuLCByZWxlYXNlLCBpb2N0bCkgYW5kIGRldmljZSBjb25uZWN0L2Rpc2Nvbm5lY3QvZXZlbnQgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uIChyYXctZ2FkZ2V0L3VoaWQpIGFuZCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyNWI2NmMxZDNkMGNkYTQ3NjQxZTUwOGZiZGI5MWYwNDNlYzUwZTRjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAyMjowNTo0OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYwppbmRleCA0ZjE1ZWI5NTEwMzk2Li5lYWE0N2JiYjcwZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCkBAIC0yMSw4ICYjNDM7MjEsMTAgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgJiMzNDs6ICYjMzQ7IGZtdAogCiAjaW5jbHVkZSAmbHQ7bGludXgvY2Rldi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rcmVmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG9sbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaGlkLXJvY2NhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogCkBAIC0zNyw2ICYjNDM7MzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7CiB9OwogCiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7CiYjNDM7CXN0cnVjdCBrcmVmIGtyZWY7CiAJdW5zaWduZWQgaW50IG1pbm9yOwogCWludCByZXBvcnRfc2l6ZTsKIAlpbnQgb3BlbjsKQEAgLTcwLDggJiM0Mzs3MywxMCBAQCBzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTsKIC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqLwogc3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spOwogCi1zdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSkKJiM0MztzdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiYjNDM7CXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPQomIzQzOwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBST0NDQVRfQ0JVRl9TSVpFOyBpJiM0MzsmIzQzOykKQEAgLTE3MiwxMSAmIzQzOzE3NywyMSBAQCBzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogCWlmICghZGV2aWNlKSB7CiAJCXByX2VtZXJnKCYjMzQ7cm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJiMzOTt0IGV4aXN0XG4mIzM0OywgbWlub3IpOwogCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdF9lcnJfZGV2aWNlczsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7CiYjNDM7CQlrZnJlZShyZWFkZXIpOwomIzQzOwkJcmV0dXJuIGVycm9yOwogCX0KIAomIzQzOwlrcmVmX2dldCgmYW1wO2RldmljZS0mZ3Q7a3JlZik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKIAomIzQzOwlpZiAoIWRldmljZS0mZ3Q7ZXhpc3QpIHsKJiM0MzsJCWVycm9yID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gZXhpdF9lcnJfcmVhZGVyczsKJiM0MzsJfQomIzQzOwogCWlmICghZGV2aWNlLSZndDtvcGVuJiM0MzsmIzQzOykgewogCQkvKiBwb3dlciBvbiBkZXZpY2Ugb24gYWRkaW5nIGZpcnN0IHJlYWRlciAqLwogCQllcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtJmd0O2hpZCwgUE1fSElOVF9GVUxMT04pOwpAQCAtMjAwLDQ2ICYjNDM7MjE1LDM1IEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJbGlzdF9hZGRfdGFpbCgmYW1wO3JlYWRlci0mZ3Q7bm9kZSwgJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnMpOwogCWZpbGUtJmd0O3ByaXZhdGVfZGF0YSA9IHJlYWRlcjsKIAomIzQzOwltdXRleF91bmxvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7CiYjNDM7CXJldHVybiAwOwomIzQzOwogZXhpdF9lcnJfcmVhZGVyczoKIAltdXRleF91bmxvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7Ci1leGl0X2Vycl9kZXZpY2VzOgotCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0JaWYgKGVycm9yKQotCQlrZnJlZShyZWFkZXIpOwomIzQzOwlrcmVmX3B1dCgmYW1wO2RldmljZS0mZ3Q7a3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTsKJiM0MzsJa2ZyZWUocmVhZGVyKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAlzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7Ci0KLQltdXRleF9sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQotCWRldmljZSA9IGRldmljZXNbbWlub3JdOwotCWlmICghZGV2aWNlKSB7Ci0JCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0JCXByX2VtZXJnKCYjMzQ7cm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJiMzOTt0IGV4aXN0XG4mIzM0OywgbWlub3IpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiYjNDM7CXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItJmd0O2RldmljZTsKIAogCW11dGV4X2xvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7CiAJbGlzdF9kZWwoJmFtcDtyZWFkZXItJmd0O25vZGUpOwotCW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKLQlrZnJlZShyZWFkZXIpOwogCiAJaWYgKCEtLWRldmljZS0mZ3Q7b3BlbikgewogCQkvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqLwogCQlpZiAoZGV2aWNlLSZndDtleGlzdCkgewogCQkJaGlkX2h3X3Bvd2VyKGRldmljZS0mZ3Q7aGlkLCBQTV9ISU5UX05PUk1BTCk7CiAJCQloaWRfaHdfY2xvc2UoZGV2aWNlLSZndDtoaWQpOwotCQl9IGVsc2UgewotCQkJcm9jY2F0X2ZyZWVfZGV2aWNlKGRldmljZSk7CiAJCX0KIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKIAotCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7CiYjNDM7CWtmcmVlKHJlYWRlcik7CiYjNDM7CWtyZWZfcHV0KCZhbXA7ZGV2aWNlLSZndDtrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjAsNyAmIzQzOzI2NCwxMiBAQCBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKQogCXN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7CiAJdWludDhfdCAqbmV3X3ZhbHVlOwogCiYjNDM7CWlmIChtaW5vciAmbHQ7IDAgfHwgbWlub3IgJmd0Oz0gUk9DQ0FUX01BWF9ERVZJQ0VTKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07CiYjNDM7CWlmICghZGV2aWNlKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiAKIAluZXdfdmFsdWUgPSBrbWVtZHVwKGRhdGEsIGRldmljZS0mZ3Q7cmVwb3J0X3NpemUsIEdGUF9BVE9NSUMpOwogCWlmICghbmV3X3ZhbHVlKQpAQCAtMzE2LDYgJiM0MzszMjUsMTYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnQKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJa3JlZl9pbml0KCZhbXA7ZGV2aWNlLSZndDtrcmVmKTsKJiM0MzsJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2RldmljZS0mZ3Q7d2FpdCk7CiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzKTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2RldmljZS0mZ3Q7Y2J1Zl9sb2NrKTsKJiM0MzsJZGV2aWNlLSZndDtoaWQgPSBoaWQ7CiYjNDM7CWRldmljZS0mZ3Q7ZXhpc3QgPSAxOwomIzQzOwlkZXZpY2UtJmd0O2NidWZfZW5kID0gMDsKJiM0MzsJZGV2aWNlLSZndDtyZXBvcnRfc2l6ZSA9IHJlcG9ydF9zaXplOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCiAJZm9yIChtaW5vciA9IDA7IG1pbm9yICZsdDsgUk9DQ0FUX01BWF9ERVZJQ0VTOyAmIzQzOyYjNDM7bWlub3IpIHsKQEAgLTMzMiw2ICYjNDM7MzUxLDggQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnQKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiYjNDM7CWRldmljZS0mZ3Q7bWlub3IgPSBtaW5vcjsKJiM0MzsKIAlkZXZpY2UtJmd0O2RldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsICZhbXA7aGlkLSZndDtkZXYsCiAJCQlNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCwKIAkJCSYjMzQ7JXMlcyVkJiMzNDssICYjMzQ7cm9jY2F0JiMzNDssIGhpZC0mZ3Q7ZHJpdmVyLSZndDtuYW1lLCBtaW5vcik7CkBAIC0zNDYsMTYgJiM0MzszNjcsNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydAogCiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKIAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtkZXZpY2UtJmd0O3dhaXQpOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzKTsKLQltdXRleF9pbml0KCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwotCW11dGV4X2luaXQoJmFtcDtkZXZpY2UtJmd0O2NidWZfbG9jayk7Ci0JZGV2aWNlLSZndDttaW5vciA9IG1pbm9yOwotCWRldmljZS0mZ3Q7aGlkID0gaGlkOwotCWRldmljZS0mZ3Q7ZXhpc3QgPSAxOwotCWRldmljZS0mZ3Q7Y2J1Zl9lbmQgPSAwOwotCWRldmljZS0mZ3Q7cmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTsKLQogCXJldHVybiBtaW5vcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTsKQEAgLTM2Nyw0MiAmIzQzOzM3OCwzNyBAQCB2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcikKIHsKIAlzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlOwogCiYjNDM7CWlmIChtaW5vciAmbHQ7IDAgfHwgbWlub3IgJmd0Oz0gUk9DQ0FUX01BWF9ERVZJQ0VTKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCWRldmljZSA9IGRldmljZXNbbWlub3JdOwomIzQzOwlkZXZpY2VzW21pbm9yXSA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKIAotCWRldmljZS0mZ3Q7ZXhpc3QgPSAwOyAvKiBUT0RPIGV4aXN0IG1heWJlIG5vdCBuZWVkZWQgKi8KJiM0MzsJaWYgKCFkZXZpY2UpCiYjNDM7CQlyZXR1cm47CiAKIAlkZXZpY2VfZGVzdHJveShkZXZpY2UtJmd0O2Rldi0mZ3Q7Y2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTsKIAotCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwotCWRldmljZXNbbWlub3JdID0gTlVMTDsKLQltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwotCiYjNDM7CW11dGV4X2xvY2soJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7CiYjNDM7CWRldmljZS0mZ3Q7ZXhpc3QgPSAwOwogCWlmIChkZXZpY2UtJmd0O29wZW4pIHsKIAkJaGlkX2h3X2Nsb3NlKGRldmljZS0mZ3Q7aGlkKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7ZGV2aWNlLSZndDt3YWl0KTsKLQl9IGVsc2UgewotCQlyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKIAl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsKJiM0MzsJa3JlZl9wdXQoJmFtcDtkZXZpY2UtJmd0O2tyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfZGlzY29ubmVjdCk7CiAKIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7Ci0Jc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwomIzQzOwlzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLSZndDtkZXZpY2U7CiAJbG9uZyByZXR2YWwgPSAwOwogCi0JbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0KLQlkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTsKLQlpZiAoIWRldmljZSkgewotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgUk9DQ0FUSU9DR1JFUFNJWkU6CiAJCWlmIChwdXRfdXNlcihkZXZpY2UtJmd0O3JlcG9ydF9zaXplLCAoaW50IF9fdXNlciAqKWFyZykpCkBAIC00MTEsOCAmIzQzOzQxNyw3IEBAIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJZGVmYXVsdDoKIAkJcmV0dmFsID0gLUVOT1RUWTsKIAl9Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsKIAlyZXR1cm4gcmV0dmFsOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb2NjYXQgSElEIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgdGhlIGBoaWQtcm9jY2F0LmNgIGRyaXZlciBhbmQgc2VlIGlmIGl0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYGtyZWZgIHRvIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBzaWduIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGltcHJvdmVtZW50cywgc3BlY2lmaWNhbGx5IHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggaW5kaWNhdGVzIGFuIGF0dGVtcHQgdG8gZml4IHVzZS1hZnRlci1mcmVlIChVQUYpIHZ1bG5lcmFiaWxpdGllcyBvciByYWNlIGNvbmRpdGlvbnMuIFRoaXMgaXMgdGhlIHBhcnQgdGhhdCBwZXJrcyB1cCBteSBlYXJzLgoKVGhlIGNvcmUgZnVuY3Rpb25zIOKAkyBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X3JlcG9ydF9ldmVudGAsIGByb2NjYXRfY29ubmVjdGAsIGByb2NjYXRfZGlzY29ubmVjdGAsIGFuZCBgcm9jY2F0X2lvY3RsYCDigJMgYXJlIGFsbCBiZWluZyB1cGRhdGVkIHRvIHV0aWxpemUgdGhpcyBuZXcgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGlzIHN1Z2dlc3RzIHRoZXkgd2VyZSBpbmRlZWQgZmluZGluZyBVQUYgb3IgcmFjZSBpc3N1ZXMgcmVsYXRlZCB0byBkZXZpY2UgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBSb2NjYXQgZHJpdmVyIGFuZCBhcmUgdGFraW5nIHN0ZXBzIHRvIG1pdGlnYXRlIHRoZW0uIFdlIG5lZWQgdG8gcGF5ICp2ZXJ5KiBjbG9zZSBhdHRlbnRpb24gdG8gdGhlc2UgZnVuY3Rpb25zLgoKVGhpbmtpbmcgYWJvdXQgYXR0YWNrIHN1cmZhY2UsIHRoaXMgZHJpdmVyIGV4cG9zZXMgY2hhcmRldiBpbnRlcmZhY2VzIChsaWtlIGByb2NjYXQwYCkgd2hpY2ggbWVhbnMgd2UgY2FuIGxpa2VseSBpbnRlcmFjdCB3aXRoIGl0IHZpYSBgb3BlbmAsIGByZWFkYCwgYHBvbGxgLCBhbmQgYGlvY3RsYCBjYWxscy4gUm9jY2F0IGRldmljZXMgY2FuIGFsc28gYmUgZW11bGF0ZWQgdGhyb3VnaCBVU0Igb3IgVUhJRCwgd2hpY2ggZ2l2ZXMgdXMgbXVsdGlwbGUgd2F5cyB0byB0cmlnZ2VyIGFuZCBzdHJlc3MgdGhlIGRyaXZlci4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZyBmb3IgZnV6emluZy4KCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIHNldHRpbmdzLiBJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIG9yIGp1c3QgcmVhZCB0aGUgYEtjb25maWdgIGZpbGUgdG8gc2VlIHdoYXQgdHJpZ2dlcnMgdGhlIGluY2x1c2lvbiBvZiBgaGlkLXJvY2NhdC5jYC4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCB0aGUgYnVpbGQgZGVwZW5kZW5jaWVzIGFyZSwgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBtYXkgYWxzbyBiZSBpbXBhY3RlZC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYWxsb3cgbWUgdG8gc2V0IHVwIGFuIGFwcHJvcHJpYXRlIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZW4gSSYjMzk7bGwgc3RhcnQgYnJhaW5zdG9ybWluZyBsaWtlbHkgZm9jdXMgc3ltYm9scyBsaWtlIHRoZSBpb2N0bHMsIG9yIHRoZSBgcm9jY2F0X3JlcG9ydF9ldmVudGAgZnVuY3Rpb24gd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBkcml2ZXIgaGFuZGxlcyByYXcgaW5wdXQuIFRoaXMgd2hvbGUgdGhpbmcgc21lbGxzIGxpa2UgYSBnb29kIHRhcmdldCBmb3Igc29tZSBmb2N1c2VkIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm9jY2F0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxMjIwIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2hpZC9NYWtlZmlsZT0xMjU9b2JqLSQoQ09ORklHX0hJRF9SRVRST0RFKVx0JiM0Mzs9IGhpZC1yZXRyb2RlLm9cbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyNjpvYmotJChDT05GSUdfSElEX1JPQ0NBVClcdCYjNDM7PSBoaWQtcm9jY2F0Lm8gaGlkLXJvY2NhdC1jb21tb24ubyBcXFxuZHJpdmVycy9oaWQvTWFrZWZpbGU6MTI3Olx0aGlkLXJvY2NhdC1hcnZvLm8gaGlkLXJvY2NhdC1pc2t1Lm8gaGlkLXJvY2NhdC1rb25lLm8gXFxcbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyODpcdGhpZC1yb2NjYXQta29uZXBsdXMubyBoaWQtcm9jY2F0LWtvbmVwdXJlLm8gaGlkLXJvY2NhdC1rb3ZhcGx1cy5vIFxcXG5kcml2ZXJzL2hpZC9NYWtlZmlsZToxMjk6XHRoaWQtcm9jY2F0LWx1YS5vIGhpZC1yb2NjYXQtcHlyYS5vIGhpZC1yb2NjYXQtcnlvcy5vIGhpZC1yb2NjYXQtc2F2dS5vXG5kcml2ZXJzL2hpZC9NYWtlZmlsZS0xMzAtb2JqLSQoQ09ORklHX0hJRF9STUkpXHRcdCYjNDM7PSBoaWQtcm1pLm9cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjIxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFx1MDAzZVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjItI2luY2x1ZGUgXCYjMzQ7aGlkLWlkcy5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMzojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWNvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyNDojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWFydm8uaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjUtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0yNj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3Nob3dfbW9kZV9rZXkoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM2LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozNzpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX01PREVfS0VZLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzgtXHRcdFx0XHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19tb2RlX2tleSkpO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTQ2PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X21vZGVfa2V5KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy02NC1cdG11dGV4X2xvY2soXHUwMDI2YXJ2by1cdTAwM2VhcnZvX2xvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6NjU6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9NT0RFX0tFWSxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTY2LVx0XHRcdFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fbW9kZV9rZXkpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz03Nj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3Nob3dfa2V5X21hc2soc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTg2LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo4NzpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX0tFWV9NQVNLLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtODgtXHRcdFx0XHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19rZXlfbWFzaykpO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTk2PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X2tleV9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xMTQtXHRtdXRleF9sb2NrKFx1MDAyNmFydm8tXHUwMDNlYXJ2b19sb2NrKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjExNTpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX0tFWV9NQVNLLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTE2LVx0XHRcdFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fa2V5X21hc2spKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0xMjc9c3RhdGljIGludCBhcnZvX2dldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldilcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xMzEtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoxMzI6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTEzMy1cdFx0XHRcdTAwMjZ0ZW1wX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhcnZvX2FjdHVhbF9wcm9maWxlKSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MTUwPXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xNzEtXHRtdXRleF9sb2NrKFx1MDAyNmFydm8tXHUwMDNlYXJ2b19sb2NrKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjE3MjpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX0FDVFVBTF9QUk9GSUxFLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTczLVx0XHRcdFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fYWN0dWFsX3Byb2ZpbGUpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0xODU9c3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTk3LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoxOTg6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTE5OS1cdG11dGV4X3VubG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MjA0PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjE5LVx0bXV0ZXhfbG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMjA6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTIyMS1cdG11dGV4X3VubG9jayhcdTAwMjZhcnZvLVx1MDAzZWFydm9fbG9jayk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9Mjg5PXN0YXRpYyBpbnQgYXJ2b19pbml0X3NwZWNpYWxzKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMxNC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjMxNTpcdHJldHZhbCA9IHJvY2NhdF9jb25uZWN0KFx1MDAyNmFydm9fY2xhc3MsIGhkZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozMTY6XHRcdFx0c2l6ZW9mKHN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQpKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMxNy1cdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zMjAtXHRcdGFydm8tXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzIxOlx0XHRhcnZvLVx1MDAzZXJvY2NhdF9jbGFpbWVkID0gMTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMyMi1cdH1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0zMzA9c3RhdGljIHZvaWQgYXJ2b19yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzM5LVx0YXJ2byA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM0MDpcdGlmIChhcnZvLVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzQxOlx0XHRyb2NjYXRfZGlzY29ubmVjdChhcnZvLVx1MDAzZWNocmRldl9taW5vcik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zNDItXHRrZnJlZShhcnZvKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz0zODU9c3RhdGljIHZvaWQgYXJ2b19yZXBvcnRfdG9fY2hyZGV2KHN0cnVjdCBhcnZvX2RldmljZSBjb25zdCAqYXJ2byxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zODgtXHRzdHJ1Y3QgYXJ2b19zcGVjaWFsX3JlcG9ydCBjb25zdCAqc3BlY2lhbF9yZXBvcnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozODk6XHRzdHJ1Y3QgYXJ2b19yb2NjYXRfcmVwb3J0IHJvY2NhdF9yZXBvcnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zOTAtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzkyLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzkzOlx0cm9jY2F0X3JlcG9ydC5wcm9maWxlID0gYXJ2by1cdTAwM2VhY3R1YWxfcHJvZmlsZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM5NDpcdHJvY2NhdF9yZXBvcnQuYnV0dG9uID0gc3BlY2lhbF9yZXBvcnQtXHUwMDNlZXZlbnQgXHUwMDI2XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zOTUtXHRcdFx0QVJWT19TUEVDSUFMX1JFUE9SVF9FVkVOVF9NQVNLX0JVVFRPTjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zOTctXHRcdFx0QVJWT19TUEVDSUFMX1JFUE9SVF9FVkVOVF9BQ1RJT05fUFJFU1MpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozOTg6XHRcdHJvY2NhdF9yZXBvcnQuYWN0aW9uID0gQVJWT19ST0NDQVRfUkVQT1JUX0FDVElPTl9QUkVTUztcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM5OS1cdGVsc2VcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQwMDpcdFx0cm9jY2F0X3JlcG9ydC5hY3Rpb24gPSBBUlZPX1JPQ0NBVF9SRVBPUlRfQUNUSU9OX1JFTEVBU0U7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy00MDEtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo0MDI6XHRyb2NjYXRfcmVwb3J0X2V2ZW50KGFydm8tXHUwMDNlY2hyZGV2X21pbm9yLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6NDAzOlx0XHRcdCh1aW50OF90IGNvbnN0ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy00MDQtfVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTQwNj1zdGF0aWMgaW50IGFydm9fcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTQxMy1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQxNDpcdGlmIChhcnZvIFx1MDAyNlx1MDAyNiBhcnZvLVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDE1LVx0XHRhcnZvX3JlcG9ydF90b19jaHJkZXYoYXJ2bywgZGF0YSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg9NTc9ZW51bSBhcnZvX3NwZWNpYWxfcmVwb3J0X2V2ZW50X21hc2tzIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaC02MS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjYyOnN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjMtXHR1aW50OF90IHByb2ZpbGU7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjctXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDo2ODplbnVtIGFydm9fcm9jY2F0X3JlcG9ydF9hY3Rpb24ge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjktXHRBUlZPX1JPQ0NBVF9SRVBPUlRfQUNUSU9OX1JFTEVBU0UgPSAwLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oPTczPXN0cnVjdCBhcnZvX2RldmljZSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDo3NDpcdGludCByb2NjYXRfY2xhaW1lZDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTc1LVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0OiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQtY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTUtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE2OnN0YXRpYyBpbmxpbmUgdWludDE2X3Qgcm9jY2F0X2NvbW1vbjJfZmVhdHVyZV9yZXBvcnQodWludDhfdCByZXBvcnRfaWQpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE3LXtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTIwLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoyMTppbnQgcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCByZXBvcnRfaWQsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTIyLVx0XHR2b2lkICpkYXRhLCB1aW50IHNpemUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0zMy1cdFx0XHRVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX0lOLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzozNDpcdFx0XHRyb2NjYXRfY29tbW9uMl9mZWF0dXJlX3JlcG9ydChyZXBvcnRfaWQpLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0zNS1cdFx0XHQwLCBidWYsIHNpemUsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQwLX1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NDE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQyLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo0MzppbnQgcm9jY2F0X2NvbW1vbjJfc2VuZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCByZXBvcnRfaWQsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQ0LVx0XHR2b2lkIGNvbnN0ICpkYXRhLCB1aW50IHNpemUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy01NS1cdFx0XHRVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfRElSX09VVCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NTY6XHRcdFx0cm9jY2F0X2NvbW1vbjJfZmVhdHVyZV9yZXBvcnQocmVwb3J0X2lkKSxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNTctXHRcdFx0MCwgYnVmLCBzaXplLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy02MS19XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjYyOkVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb21tb24yX3NlbmQpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy02My1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NjQ6ZW51bSByb2NjYXRfY29tbW9uMl9jb250cm9sX3N0YXRlcyB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTY1LVx0Uk9DQ0FUX0NPTU1PTl9DT05UUk9MX1NUQVRVU19DUklUSUNBTCA9IDAsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03MS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NzI6c3RhdGljIGludCByb2NjYXRfY29tbW9uMl9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2KVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03My17XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc0LVx0aW50IHJldHZhbDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NzU6XHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCBjb250cm9sO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03Ni1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc4LVx0XHRtc2xlZXAoNTApO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo3OTpcdFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy04MC1cdFx0XHRcdFJPQ0NBVF9DT01NT05fQ09NTUFORF9DT05UUk9MLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo4MTpcdFx0XHRcdFx1MDAyNmNvbnRyb2wsIHNpemVvZihzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCkpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy04Mi1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTk3LVx0XHRcdGRldl9lcnIoXHUwMDI2dXNiX2Rldi1cdTAwM2VkZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjk4Olx0XHRcdFx0XHRcJiMzNDtyb2NjYXRfY29tbW9uMl9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzOiBcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtOTktXHRcdFx0XHRcdFwmIzM0O3Vua25vd24gcmVzcG9uc2UgdmFsdWUgMHgleFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEwNi1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTA3OmludCByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMDgtXHRcdHVpbnQgY29tbWFuZCwgdm9pZCBjb25zdCAqYnVmLCB1aW50IHNpemUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMTEtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjExMjpcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgY29tbWFuZCwgYnVmLCBzaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTEzLVx0aWYgKHJldHZhbClcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTExNy1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTE4Olx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3JlY2VpdmVfY29udHJvbF9zdGF0dXModXNiX2Rldik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTExOS19XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEyMDpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTIxLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMjI6aW50IHJvY2NhdF9jb21tb24yX2RldmljZV9pbml0X3N0cnVjdChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTIzOlx0XHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlICpkZXYpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyNC17XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMjctfVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMjg6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTI5LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMzA6c3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzMS1cdFx0Y2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQsXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMzQtXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKS1cdTAwM2VwYXJlbnQtXHUwMDNlcGFyZW50O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMzU6XHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlICpyb2NjYXRfZGV2ID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTM2LVx0c3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNDQtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0NTpcdG11dGV4X2xvY2soXHUwMDI2cm9jY2F0X2Rldi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ2Olx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0NzpcdG11dGV4X3VubG9jayhcdTAwMjZyb2NjYXRfZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNDgtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTAtfVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNTE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE1Mi1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTUzOnNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTU0LVx0XHR2b2lkIGNvbnN0ICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE1Ny1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopLVx1MDAzZXBhcmVudC1cdTAwM2VwYXJlbnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE1ODpcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKnJvY2NhdF9kZXYgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTktXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE2NC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTY1Olx0bXV0ZXhfbG9jayhcdTAwMjZyb2NjYXRfZGV2LVx1MDAzZWxvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjY6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTY3Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJvY2NhdF9kZXYtXHUwMDNlbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE2OC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE3MC19XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE3Mi1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTE0LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoxNTplbnVtIHJvY2NhdF9jb21tb24yX2NvbW1hbmRzIHtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMTYtXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCA9IDB4NCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTE4LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoxOTpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTIwLVx0dWludDhfdCBjb21tYW5kO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjQtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI1OmludCByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjYtXHRcdHZvaWQgKmRhdGEsIHVpbnQgc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI3OmludCByb2NjYXRfY29tbW9uMl9zZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjgtXHRcdHZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI5OmludCByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0zMC1cdFx0dWludCBjb21tYW5kLCB2b2lkIGNvbnN0ICpidWYsIHVpbnQgc2l6ZSk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTMxLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozMjpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlIHtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MzM6XHRpbnQgcm9jY2F0X2NsYWltZWQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM0LVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM3LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozODppbnQgcm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozOTpcdFx0c3RydWN0IHJvY2NhdF9jb21tb24yX2RldmljZSAqZGV2KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NDA6c3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQxLVx0XHRjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDItXHRcdHNpemVfdCByZWFsX3NpemUsIHVpbnQgY29tbWFuZCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjQzOnNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDQtXHRcdHZvaWQgY29uc3QgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDctI2RlZmluZSBST0NDQVRfQ09NTU9OMl9TWVNGU19XKHRoaW5neSwgQ09NTUFORCwgU0laRSkgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NDg6c3RhdGljIHNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGVfICMjIHRoaW5neShzdHJ1Y3QgZmlsZSAqZnAsIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQ5LVx0XHRzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIFxcXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC01MS17IFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjUyOlx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTUzLVx0XHRcdFNJWkUsIENPTU1BTkQpOyBcXFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNTYtI2RlZmluZSBST0NDQVRfQ09NTU9OMl9TWVNGU19SKHRoaW5neSwgQ09NTUFORCwgU0laRSkgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NTc6c3RhdGljIHNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZF8gIyMgdGhpbmd5KHN0cnVjdCBmaWxlICpmcCwgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNTgtXHRcdHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTYwLXsgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NjE6XHRyZXR1cm4gcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZChmcCwga29iaiwgYnVmLCBvZmYsIGNvdW50LCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC02Mi1cdFx0XHRTSVpFLCBDT01NQU5EKTsgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl8gIyMgdGhpbmd5ID0geyBcXFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNzMtXHQuc2l6ZSA9IFNJWkUsIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjc0Olx0LnJlYWQgPSByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkXyAjIyB0aGluZ3ksIFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjc1Olx0LndyaXRlID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGVfICMjIHRoaW5neSBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC03Ni19XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaD04MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfICMjIHRoaW5neSA9IHsgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTgyLVx0LnNpemUgPSBTSVpFLCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo4MzpcdC5yZWFkID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZF8gIyMgdGhpbmd5LCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC04NC19XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaD04OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfICMjIHRoaW5neSA9IHsgXFxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTkwLVx0LnNpemUgPSBTSVpFLCBcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo5MTpcdC53cml0ZSA9IHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlXyAjIyB0aGluZ3kgXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtOTItfVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MjE6I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yMi0jaW5jbHVkZSBcJiMzNDtoaWQtaWRzLmhcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjIzOiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQtY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjI0OiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQtaXNrdS5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yNS1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMT1zdGF0aWMgaW50IGlza3VfcmVjZWl2ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCBjb21tYW5kLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMzLXtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM0Olx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgY29tbWFuZCwgYnVmLCBzaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTM1LX1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz00Nz1zdGF0aWMgaW50IGlza3Vfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBpbnQgbmV3X3Byb2ZpbGUpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtNTMtXHRidWYuYWN0dWFsX3Byb2ZpbGUgPSBuZXdfcHJvZmlsZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjU0Olx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3NlbmRfd2l0aF9zdGF0dXModXNiX2RldixcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTU1LVx0XHRcdElTS1VfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSwgXHUwMDI2YnVmLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jPTY3PXN0YXRpYyBzc2l6ZV90IGlza3Vfc3lzZnNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy03My1cdGludCByZXR2YWw7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo3NDpcdHN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTc1LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTk2LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6OTc6XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gSVNLVV9SRVBPUlRfQlVUVE9OX0VWRU5UX1BST0ZJTEU7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo5ODpcdHJvY2NhdF9yZXBvcnQuZGF0YTEgPSBwcm9maWxlICYjNDM7IDE7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo5OTpcdHJvY2NhdF9yZXBvcnQuZGF0YTIgPSAwO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTAwOlx0cm9jY2F0X3JlcG9ydC5wcm9maWxlID0gcHJvZmlsZSAmIzQzOyAxO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTAxOlx0cm9jY2F0X3JlcG9ydF9ldmVudChpc2t1LVx1MDAzZWNocmRldl9taW5vciwgKHVpbnQ4X3QgY29uc3QgKilcdTAwMjZyb2NjYXRfcmVwb3J0KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTEwMi1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0xMzc9c3RhdGljIHNzaXplX3QgaXNrdV9zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTE0OS1cdG11dGV4X2xvY2soXHUwMDI2aXNrdS1cdTAwM2Vpc2t1X2xvY2spO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTUwOlx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LCBjb21tYW5kLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMTUxLVx0XHRcdCh2b2lkICopYnVmLCBjb3VudCk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9MjY5PXN0YXRpYyBpbnQgaXNrdV9pbml0X3NwZWNpYWxzKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTI5NC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjI5NTpcdHJldHZhbCA9IHJvY2NhdF9jb25uZWN0KFx1MDAyNmlza3VfY2xhc3MsIGhkZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzoyOTY6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQpKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTI5Ny1cdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zMDAtXHRcdGlza3UtXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MzAxOlx0XHRpc2t1LVx1MDAzZXJvY2NhdF9jbGFpbWVkID0gMTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMwMi1cdH1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMTA9c3RhdGljIHZvaWQgaXNrdV9yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzE5LVx0aXNrdSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjMyMDpcdGlmIChpc2t1LVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MzIxOlx0XHRyb2NjYXRfZGlzY29ubmVjdChpc2t1LVx1MDAzZWNocmRldl9taW5vcik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zMjItXHRrZnJlZShpc2t1KTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zODI9c3RhdGljIHZvaWQgaXNrdV9yZXBvcnRfdG9fY2hyZGV2KHN0cnVjdCBpc2t1X2RldmljZSBjb25zdCAqaXNrdSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zODQte1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzg1Olx0c3RydWN0IGlza3Vfcm9jY2F0X3JlcG9ydCByb2NjYXRfcmVwb3J0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzg2LVx0c3RydWN0IGlza3VfcmVwb3J0X2J1dHRvbiBjb25zdCAqYnV0dG9uX3JlcG9ydDtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zOTItXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTM6XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gYnV0dG9uX3JlcG9ydC1cdTAwM2VldmVudDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5NDpcdHJvY2NhdF9yZXBvcnQuZGF0YTEgPSBidXR0b25fcmVwb3J0LVx1MDAzZWRhdGExO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk1Olx0cm9jY2F0X3JlcG9ydC5kYXRhMiA9IGJ1dHRvbl9yZXBvcnQtXHUwMDNlZGF0YTI7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTY6XHRyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBpc2t1LVx1MDAzZWFjdHVhbF9wcm9maWxlICYjNDM7IDE7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTc6XHRyb2NjYXRfcmVwb3J0X2V2ZW50KGlza3UtXHUwMDNlY2hyZGV2X21pbm9yLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk4Olx0XHRcdCh1aW50OF90IGNvbnN0ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zOTktfVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jPTQwMT1zdGF0aWMgaW50IGlza3VfcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTQxNS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjQxNjpcdGlmIChpc2t1LVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtNDE3LVx0XHRpc2t1X3JlcG9ydF90b19jaHJkZXYoaXNrdSwgZGF0YSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1Lmg9Nzc9ZW51bSBpc2t1X3JlcG9ydF9idXR0b25fZXZlbnRzIHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaC04MC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjgxOnN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmgtODItXHR1aW50OF90IGV2ZW50O1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oPTg4PXN0cnVjdCBpc2t1X2RldmljZSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaDo4OTpcdGludCByb2NjYXRfY2xhaW1lZDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTkwLVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy0yOS0jaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjMwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFx1MDAzZVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtMzEtI2luY2x1ZGUgXCYjMzQ7aGlkLWlkcy5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzozMjojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWNvbW1vbi5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzozMzojaW5jbHVkZSBcJiMzNDtoaWQtcm9jY2F0LWtvbmUuaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtMzQtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9NDU9c3RhdGljIHZvaWQga29uZV9wcm9maWxlX3JlcG9ydChzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUsIHVpbnQgbmV3X3Byb2ZpbGUpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy00Ni17XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo0NzpcdHN0cnVjdCBrb25lX3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTQ4LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NDk6XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0ga29uZV9tb3VzZV9ldmVudF9zd2l0Y2hfcHJvZmlsZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjUwOlx0cm9jY2F0X3JlcG9ydC52YWx1ZSA9IG5ld19wcm9maWxlO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NTE6XHRyb2NjYXRfcmVwb3J0LmtleSA9IDA7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo1MjpcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cdTAwM2VjaHJkZXZfbWlub3IsICh1aW50OF90ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy01My19XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9NjU0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICprb25lX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTY1OC1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjY1OTovKiBrb25lX2NsYXNzIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHN5c2ZzIGF0dHJpYnV0ZXMgdmlhIHJvY2NhdCBjaGFyIGRldmljZSAqL1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNjYwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3Mga29uZV9jbGFzcyA9IHtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz02OTk9c3RhdGljIGludCBrb25lX2luaXRfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzE5LVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzIwOlx0XHRyZXR2YWwgPSByb2NjYXRfY29ubmVjdChcdTAwMjZrb25lX2NsYXNzLCBoZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzIxOlx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IGtvbmVfcm9jY2F0X3JlcG9ydCkpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzIyLVx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKSB7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzI1LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzI2Olx0XHRcdGtvbmUtXHUwMDNlcm9jY2F0X2NsYWltZWQgPSAxO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzI3LVx0XHRcdGtvbmUtXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTczOT1zdGF0aWMgdm9pZCBrb25lX3JlbW92ZV9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy03NDYtXHRcdGtvbmUgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3NDc6XHRcdGlmIChrb25lLVx1MDAzZXJvY2NhdF9jbGFpbWVkKVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzQ4Olx0XHRcdHJvY2NhdF9kaXNjb25uZWN0KGtvbmUtXHUwMDNlY2hyZGV2X21pbm9yKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTc0OS1cdFx0a2ZyZWUoaGlkX2dldF9kcnZkYXRhKGhkZXYpKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz04MTM9c3RhdGljIHZvaWQga29uZV9yZXBvcnRfdG9fY2hyZGV2KHN0cnVjdCBrb25lX2RldmljZSBjb25zdCAqa29uZSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MTUte1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODE2Olx0c3RydWN0IGtvbmVfcm9jY2F0X3JlcG9ydCByb2NjYXRfcmVwb3J0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODE3LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTgyMi1cdGNhc2Uga29uZV9tb3VzZV9ldmVudF9vc2RfZHBpOlxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODIzOlx0XHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gZXZlbnQtXHUwMDNlZXZlbnQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MjQ6XHRcdHJvY2NhdF9yZXBvcnQudmFsdWUgPSBldmVudC1cdTAwM2V2YWx1ZTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNTpcdFx0cm9jY2F0X3JlcG9ydC5rZXkgPSAwO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODI2Olx0XHRyb2NjYXRfcmVwb3J0X2V2ZW50KGtvbmUtXHUwMDNlY2hyZGV2X21pbm9yLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODI3Olx0XHRcdFx0KHVpbnQ4X3QgKilcdTAwMjZyb2NjYXRfcmVwb3J0KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTgyOC1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODMxLVx0XHRpZiAoZXZlbnQtXHUwMDNldmFsdWUgPT0ga29uZV9rZXlzdHJva2VfYWN0aW9uX3ByZXNzKSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzI6XHRcdFx0cm9jY2F0X3JlcG9ydC5ldmVudCA9IGV2ZW50LVx1MDAzZWV2ZW50O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODMzOlx0XHRcdHJvY2NhdF9yZXBvcnQudmFsdWUgPSBrb25lLVx1MDAzZWFjdHVhbF9wcm9maWxlO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODM0Olx0XHRcdHJvY2NhdF9yZXBvcnQua2V5ID0gZXZlbnQtXHUwMDNlbWFjcm9fa2V5O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODM1Olx0XHRcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cdTAwM2VjaHJkZXZfbWlub3IsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzY6XHRcdFx0XHRcdCh1aW50OF90ICopXHUwMDI2cm9jY2F0X3JlcG9ydCk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MzctXHRcdH1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz04NDg9c3RhdGljIGludCBrb25lX3Jhd19ldmVudChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04NzMtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4NzQ6XHRpZiAoa29uZS1cdTAwM2Vyb2NjYXRfY2xhaW1lZClcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTg3NS1cdFx0a29uZV9yZXBvcnRfdG9fY2hyZGV2KGtvbmUsIGV2ZW50KTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz05NzM9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSBrb25lX3Rlc3Rfc3VpdGUgPSB7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo5NzQ6XHQubmFtZSA9IFwmIzM0O2hpZC1yb2NjYXQta29uZVwmIzM0OyxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTk3NS1cdC50ZXN0X2Nhc2VzID0ga29uZV90ZXN0X2Nhc2VzLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oPTE3Nz1lbnVtIGtvbmVfY29tbWFuZHMge1xuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTE4Ni1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oOjE4NzpzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0IHtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTE4OC1cdHVpbnQ4X3QgZXZlbnQ7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg9MTkzPXN0cnVjdCBrb25lX2RldmljZSB7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMjIxLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg6MjIyOlx0aW50IHJvY2NhdF9jbGFpbWVkO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMjIzLVx0aW50IGNocmRldl9taW5vcjtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6MjI6I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtMjMtI2luY2x1ZGUgXCYjMzQ7aGlkLWlkcy5oXCYjMzQ7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6MjQ6I2luY2x1ZGUgXCYjMzQ7aGlkLXJvY2NhdC1jb21tb24uaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjI1OiNpbmNsdWRlIFwmIzM0O2hpZC1yb2NjYXQta29uZXBsdXMuaFwmIzM0O1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTI2LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYz0zNT1zdGF0aWMgaW50IGtvbmVwbHVzX3NlbmRfY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCB2YWx1ZSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtMzcte1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjM4Olx0c3RydWN0IHJvY2NhdF9jb21tb24yX2NvbnRyb2wgY29udHJvbDtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy0zOS1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNDgtXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6NDk6XHRyZXR1cm4gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTUwLVx0XHRcdFJPQ0NBVF9DT01NT05fQ09NTUFORF9DT05UUk9MLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjUxOlx0XHRcdFx1MDAyNmNvbnRyb2wsIHNpemVvZihzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCkpO1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTUyLX1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9NTY9c3RhdGljIGludCBrb25lcGx1c19nZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTYwLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjYxOlx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBLT05FUExVU19DT01NQU5EX0FDVFVBTF9QUk9GSUxFLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTYyLVx0XHRcdFx1MDAyNmJ1ZiwgS09ORVBMVVNfU0laRV9BQ1RVQUxfUFJPRklMRSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jPTY3PXN0YXRpYyBpbnQga29uZXBsdXNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy03NS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYzo3NjpcdHJldHVybiByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNzctXHRcdFx0S09ORVBMVVNfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9ODE9c3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy05Ni1cdG11dGV4X2xvY2soXHUwMDI2a29uZXBsdXMtXHUwMDNla29uZXBsdXNfbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6OTc6XHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy05OC1cdG11dGV4X3VubG9jayhcdTAwMjZrb25lcGx1cy1cdTAwM2Vrb25lcGx1c19sb2NrKTtcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9MTA2PXN0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTExOC1cdG11dGV4X2xvY2soXHUwMDI2a29uZXBsdXMtXHUwMDNla29uZXBsdXNfbG9jayk7XG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6MTE5Olx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LCBjb21tYW5kLFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTEyMC1cdFx0XHRidWYsIHJlYWxfc2l6ZSk7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jPTI0OD1zdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc19zZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IGRldmljZSAqZGV2LFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNTIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBSb2NjYXQgSElEIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGRyaXZlcnMvaGlkL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBjb25jZXJuaW5nIGBDT05GSUdfSElEX1JPQ0NBVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gUm9jY2F0IEhJRCBkZXZpY2VzLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBjaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgb3IgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaXMgc3RydWN0dXJlZCBhcm91bmQgdGhpcyBjb25maWcgdG8gdW5kZXJzdGFuZCB3aGF0IFJvY2NhdCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQsIGFueSBzcGVjaWFsIGZlYXR1cmVzIGVuYWJsZWQsIGFuZCBhbnkgcG90ZW50aWFsIGNhdmVhdHMgb3IgbGltaXRhdGlvbnMuIFRoaXMgaXMgc3RhbmRhcmQgcHJvY2VkdXJlIHdoZW4gSSYjMzk7bSBhc3Nlc3Npbmcgb3IgbW9kaWZ5aW5nIGRyaXZlciBjb25maWd1cmF0aW9ucy4gVGhpcyBjb25maWd1cmF0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc3VwcG9ydGluZyB0aGUgUm9jY2F0IHNlcmllcyBvZiBwZXJpcGhlcmFscyBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlbGwgdGhlIHN1cHBvcnQgaXMgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SElEX1JPQ0NBVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9LY29uZmlnPTEwOTQ9Y29uZmlnIEhJRF9SRVRST0RFXG4tLVxuZHJpdmVycy9oaWQvS2NvbmZpZy0xMTAwLVxuZHJpdmVycy9oaWQvS2NvbmZpZzoxMTAxOmNvbmZpZyBISURfUk9DQ0FUXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDItXHR0cmlzdGF0ZSBcJiMzNDtSb2NjYXQgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDgtXG5kcml2ZXJzL2hpZC9LY29uZmlnOjExMDk6Y29uZmlnIEhJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMTAtXHRib29sIFwmIzM0O0tVbml0IHRlc3RzIGZvciB0aGUgUm9jY2F0IEtvbmUgZHJpdmVyXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmRyaXZlcnMvaGlkL0tjb25maWc6MTExMTpcdGRlcGVuZHMgb24gSElEX1JPQ0NBVD15IFx1MDAyNlx1MDAyNiBLVU5JVD15XG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMTItXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuLS1cbmRyaXZlcnMvaGlkL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfSElEX1JFVFJPREUpXHQmIzQzOz0gaGlkLXJldHJvZGUub1xuZHJpdmVycy9oaWQvTWFrZWZpbGU6MTI2Om9iai0kKENPTkZJR19ISURfUk9DQ0FUKVx0JiM0Mzs9IGhpZC1yb2NjYXQubyBoaWQtcm9jY2F0LWNvbW1vbi5vIFxcXG5kcml2ZXJzL2hpZC9NYWtlZmlsZS0xMjctXHRoaWQtcm9jY2F0LWFydm8ubyBoaWQtcm9jY2F0LWlza3UubyBoaWQtcm9jY2F0LWtvbmUubyBcXFxuLS1cbmRyaXZlcnMvaGlkL2hpZC1xdWlya3MuYz0yNDE9c3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGhpZF9oYXZlX3NwZWNpYWxfZHJpdmVyW10gPSB7XG4tLVxuZHJpdmVycy9oaWQvaGlkLXF1aXJrcy5jLTY1Ni0jZW5kaWZcbmRyaXZlcnMvaGlkL2hpZC1xdWlya3MuYzo2NTc6I2lmIElTX0VOQUJMRUQoQ09ORklHX0hJRF9ST0NDQVQpXG5kcml2ZXJzL2hpZC9oaWQtcXVpcmtzLmMtNjU4LVx0eyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwgVVNCX0RFVklDRV9JRF9ST0NDQVRfQVJWTykgfSxcbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0FSVk9fSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9BUlZPX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTQtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfQ09NTU9OX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9DT01NT05fSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC00LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfSVNLVV9IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX0lTS1VfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmgtNC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz05MjE9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMIHYyXCYjMzQ7KTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTkyMi1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjkyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSElEX1JPQ0NBVF9LT05FX0tVTklUX1RFU1QpXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy05MjQtI2luY2x1ZGUgXHUwMDNja3VuaXQvdGVzdC5oXHUwMDNlXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9OTc3PWt1bml0X3Rlc3Rfc3VpdGUoa29uZV90ZXN0X3N1aXRlKTtcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjk3ODojZW5kaWYgLyogQ09ORklHX0hJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUICovXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9LT05FX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfS09ORV9IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaC00LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9LT05FUExVU19IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9LT05FUExVU19IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmgtNC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfS09WQVBMVVNfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfS09WQVBMVVNfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oLTQtXG4tLVxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1sdWEuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfTFVBX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtbHVhLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9MVUFfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1sdWEuaC00LVxuLS1cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfUFlSQV9IXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX1BZUkFfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmgtNC1cbi0tXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX1NBVlVfSFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1zYXZ1Lmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9TQVZVX0hcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtc2F2dS5oLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBISUQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzcGVjaWZpYyBISUQgZHJpdmVyLiBHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvaGlkL2AgZGlyZWN0b3J5LiBBbmQgc2luY2UgSSBrbm93IG15IHdheSBhcm91bmQgdGhlIHNvdXJjZSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIHJvdWdobHkgbGluZSAxMTAxLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bnJhdmVsIHdoaWNoIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciB0aGlzIHNwZWNpZmljIGRyaXZlci4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgcmV2ZWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7UmV0cm9kZSAyIFVTQiBhZGFwdGVyIGZvciB2aW50YWdlIHZpZGVvIGdhbWVzXCYjMzQ7XG4xMDk2Olx0XHRkZXBlbmRzIG9uIFVTQl9ISURcbjEwOTc6XHRcdGhlbHBcbjEwOTg6XHRcdFN1cHBvcnQgZm9yXG4xMDk5Olx0XHQgICogUmV0cm9kZSAyIGNhcnRyaWRnZSBhbmQgY29udHJvbGxlciBhZGFwdGVyXG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIEhJRF9ST0NDQVRcbjExMDI6XHRcdHRyaXN0YXRlIFwmIzM0O1JvY2NhdCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuMTEwMzpcdFx0ZGVwZW5kcyBvbiBVU0JfSElEXG4xMTA0Olx0XHRoZWxwXG4xMTA1Olx0XHRTdXBwb3J0IGZvciBSb2NjYXQgZGV2aWNlcy5cbjExMDY6XHRcdFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSb2NjYXQgbW91c2Ugb3Iga2V5Ym9hcmQgYW5kIHdhbnRcbjExMDc6XHRcdHN1cHBvcnQgZm9yIGl0cyBzcGVjaWFsIGZ1bmN0aW9uYWxpdGllcy5cbjExMDg6XHRcbjExMDk6XHRjb25maWcgSElEX1JPQ0NBVF9LT05FX0tVTklUX1RFU1RcbjExMTA6XHRcdGJvb2wgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIHRoZSBSb2NjYXQgS29uZSBkcml2ZXJcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuMTExMTpcdFx0ZGVwZW5kcyBvbiBISURfUk9DQ0FUPXkgXHUwMDI2XHUwMDI2IEtVTklUPXlcbjExMTI6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4xMTEzOlx0XHRoZWxwXG4xMTE0Olx0XHQgIEVuYWJsZSB0aGUgS1VuaXQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIFJvY2NhdCBLb25lIGRyaXZlcixcbjExMTU6XHRcdCAgY292ZXJpbmcgYm91bmRzIGNoZWNraW5nIG9mIGRldmljZS1zdXBwbGllZCBwcm9maWxlIGluZGljZXMuXG4xMTE2Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4xMTE3Olx0XG4xMTE4Olx0Y29uZmlnIEhJRF9TQUlURUtcbjExMTk6XHRcdHRyaXN0YXRlIFwmIzM0O1NhaXRlayAoTWFkIENhdHopIG5vbi1mdWxseSBISUQtY29tcGxpYW50IGRldmljZXNcJiMzNDtcbjExMjA6XHRcdGhlbHBcbjExMjE6XHRcdFN1cHBvcnQgZm9yIFNhaXRlayBkZXZpY2VzIHRoYXQgYXJlIG5vdCBmdWxseSBjb21wbGlhbnQgd2l0aCB0aGVcbjExMjI6XHRcdEhJRCBzdGFuZGFyZC5cbjExMjM6XHRcbjExMjQ6XHRcdFN1cHBvcnRlZCBkZXZpY2VzOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzkwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBSb2NjYXQgSElEIERyaXZlcioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcyBSb2NjYXQgSElEIGRyaXZlciwgYW5kIGZyYW5rbHksIHRoZXJlJiMzOTtzIG5vIGJldHRlciB3YXkgdGhhbiB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYC4gVGhhdCBmaWxlIGlzIHRoZSBjYW5vbmljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIGl04oCZbGwgY29udGFpbiB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nIGFsbCB0aGUgZGVmaW5lZCBmdW5jdGlvbnMgYW5kLCBob3BlZnVsbHksIHdlbGwtc3RydWN0dXJlZCBsb2dpYy4gSG9wZWZ1bGx5IGl0JiMzOTtzIHdlbGwtY29tbWVudGVkIGFuZCBlYXN5IHRvIG5hdmlnYXRlLCBiZWNhdXNlIEkgZG9uJiMzOTt0IGhhdmUgYWxsIGRheS4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGZlYXR1cmUgcmVwb3J0cywgYW5kIGFueSBjdXN0b20gZXZlbnQgcHJvY2Vzc2luZyBmb3IgdGhlIFJvY2NhdCBoYXJkd2FyZS4gSSB3YW50IHRvIHNlZSAqZXZlcnl0aGluZyogYXQgYSBnbGFuY2UsIHNvIEkgY2FuIHN0YXJ0IGZvcm1pbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBkcml2ZXImIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBpZGVudGlmeSB0aGUgY3JpdGljYWwgYXJlYXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBuZWVkZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBSb2NjYXQgZHJpdmVyIGZvciBMaW51eFxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwIFN0ZWZhbiBBY2hhdHogXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdC8qXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0LypcbiAgMTI6XHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XG4gIDEzOlx0ICogaGFyZHdhcmUgdG8gdXNlcmxhbmQuIFRoZXNlIGV2ZW50cyBpbmNsdWRlIHJlcXVlc3RzIGZvciBvbi1zY3JlZW4tZGlzcGxheSBvZlxuICAxNDpcdCAqIHByb2ZpbGUgb3IgZHBpIHNldHRpbmdzIG9yIHJlcXVlc3RzIGZvciBleGVjdXRpb24gb2YgbWFjcm8gc2VxdWVuY2VzIHRoYXQgYXJlXG4gIDE1Olx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXG4gIDE2Olx0ICogaW1wbGVtZW50YXRpb24gYW5kIGNvbnRhaW5zIGRhdGEgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIGEgc2luZ2xlIGhpZCBldmVudFxuICAxNzpcdCAqIG9yIGVsc2UgaGlkcmF3IGNvdWxkIGhhdmUgYmVlbiB1c2VkLlxuICAxODpcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cbiAgMTk6XHQgKi9cbiAgMjA6XHRcbiAgMjE6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXG4gIDMyOlx0I2RlZmluZSBST0NDQVRfTUFYX0RFVklDRVMgOFxuICAzMzpcdFxuICAzNDpcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xuICAzNTpcdCNkZWZpbmUgUk9DQ0FUX0NCVUZfU0laRSAxNlxuICAzNjpcdFxuICAzNzpcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcbiAgMzg6XHRcdHVpbnQ4X3QgKnZhbHVlO1xuICAzOTpcdH07XG4gIDQwOlx0XG4gIDQxOlx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xuICA0MjpcdFx0c3RydWN0IGtyZWYga3JlZjtcbiAgNDM6XHRcdHVuc2lnbmVkIGludCBtaW5vcjtcbiAgNDQ6XHRcdGludCByZXBvcnRfc2l6ZTtcbiAgNDU6XHRcdGludCBvcGVuO1xuICA0NjpcdFx0aW50IGV4aXN0O1xuICA0NzpcdFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbiAgNDg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiAgNDk6XHRcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XG4gIDUwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XG4gIDUxOlx0XHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xuICA1MjpcdFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcbiAgNTM6XHRcbiAgNTQ6XHRcdC8qXG4gIDU1Olx0XHQgKiBjaXJjdWxhcl9idWZmZXIgaGFzIG9uZSB3cml0ZXIgYW5kIG11bHRpcGxlIHJlYWRlcnMgd2l0aCB0aGVpciBvd25cbiAgNTY6XHRcdCAqIHJlYWQgcG9pbnRlcnNcbiAgNTc6XHRcdCAqL1xuICA1ODpcdFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgY2J1ZltST0NDQVRfQ0JVRl9TSVpFXTtcbiAgNTk6XHRcdGludCBjYnVmX2VuZDtcbiAgNjA6XHRcdHN0cnVjdCBtdXRleCBjYnVmX2xvY2s7XG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciB7XG4gIDY0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gIDY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuICA2NjpcdFx0aW50IGNidWZfc3RhcnQ7XG4gIDY3Olx0fTtcbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW50IHJvY2NhdF9tYWpvcjtcbiAgNzA6XHRzdGF0aWMgc3RydWN0IGNkZXYgcm9jY2F0X2NkZXY7XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XG4gIDczOlx0LyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovXG4gIDc0Olx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xuICA3NTpcdFxuICA3NjpcdHN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cbiAgNzk6XHRcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTtcbiAgODA6XHRcdGludCBpO1xuICA4MTpcdFxuICA4MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUk9DQ0FUX0NCVUZfU0laRTsgaSYjNDM7JiM0MzspXG4gIDgzOlx0XHRcdGtmcmVlKGRldmljZS1cdTAwM2VjYnVmW2ldLnZhbHVlKTtcbiAgODQ6XHRcdGtmcmVlKGRldmljZSk7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBzc2l6ZV90IHJvY2NhdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuICA4ODpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAgODk6XHR7XG4gIDkwOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDkxOlx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiAgOTI6XHRcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XG4gIDkzOlx0XHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcbiAgOTQ6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuICA5NTpcdFxuICA5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAgOTc6XHRcbiAgOTg6XHRcdC8qIG5vIGRhdGE/ICovXG4gIDk5Olx0XHRpZiAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTAwOlx0XHRcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0LCBcdTAwMjZ3YWl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcmVzdCBvZiBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIG9wZXJhdGVzLiBLbm93aW5nIHRoZSBiYXNpY3Mgb2YgSElELCBhbmQgaGF2aW5nIHBva2VkIGFyb3VuZCBpbiB0aGUgb3RoZXIgZHJpdmVycywgSSBjYW4gcHJvYmFibHkgcGllY2UgdG9nZXRoZXIgdGhlIGNvcmUgbG9naWMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIHRoZSBkZXZpY2Utc3BlY2lmaWMgcXVpcmtzIGFuZCBtYXBwaW5ncyBmb3IgUm9jY2F0IGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgZm9yIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlcywgcmVwb3J0IGRlc2NyaXB0b3IgcGFyc2luZywgYW5kIGhvdyBpdCB0cmFuc2xhdGVzIHRob3NlIEhJRCByZXBvcnRzIGludG8gbWVhbmluZ2Z1bCBldmVudHMgZm9yIHRoZSBzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbWJpbmF0aW9uIG9mIHN0YW5kYXJkIEhJRCB1c2FnZSBwYWdlcyBhbmQgc29tZSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBhbmQgZmVhdHVyZSByZXBvcnRzIHdpbGwgYmUgY3J1Y2lhbCB0b28sIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gdXN1YWxseSBsaXZlcy4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgdW51c3VhbCBpbnRlcnJ1cHQgaGFuZGxpbmcgb3IgcG9sbGluZyBzdHJhdGVnaWVzLCBhcyBSb2NjYXQgZGV2aWNlcyBvZnRlbiBoYXZlIGNvbXBsZXggZmVhdHVyZXMgdGhhdCBkZW1hbmQgc29tZSBjdXN0b20gaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHNvbWUgaW50ZXJwbGF5IGJldHdlZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLiBGaW5hbGx5LCBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyBhbmQgZGVidWdnaW5nIG1lY2hhbmlzbXMgdXNlZC4gS25vd2luZyBob3cgdGhlIGRyaXZlciByZXNwb25kcyB0byB1bmV4cGVjdGVkIGRldmljZSBiZWhhdmlvciBvciBjb21tdW5pY2F0aW9uIGVycm9ycyBpcyBlc3NlbnRpYWwgZm9yIGRlYnVnZ2luZyBsYXRlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0Lyogd2FpdCBmb3IgZGF0YSAqL1xuIDEwNDpcdFx0XHR3aGlsZSAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTA1Olx0XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSykge1xuIDEwNjpcdFx0XHRcdFx0cmV0dmFsID0gLUVBR0FJTjtcbiAxMDc6XHRcdFx0XHRcdGJyZWFrO1xuIDEwODpcdFx0XHRcdH1cbiAxMDk6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAxMTA6XHRcdFx0XHRcdHJldHZhbCA9IC1FUkVTVEFSVFNZUztcbiAxMTE6XHRcdFx0XHRcdGJyZWFrO1xuIDExMjpcdFx0XHRcdH1cbiAxMTM6XHRcdFx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDExNDpcdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbiAxMTU6XHRcdFx0XHRcdGJyZWFrO1xuIDExNjpcdFx0XHRcdH1cbiAxMTc6XHRcbiAxMTg6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMTE5Olx0XHRcdFx0c2NoZWR1bGUoKTtcbiAxMjA6XHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuIDEyMTpcdFx0XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gMTIyOlx0XHRcdH1cbiAxMjM6XHRcbiAxMjQ6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAxMjU6XHRcdFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0LyogaGVyZSB3ZSBlaXRoZXIgaGF2ZSBkYXRhIG9yIGEgcmVhc29uIHRvIHJldHVybiBpZiByZXR2YWwgaXMgc2V0ICovXG4gMTI5Olx0XHRpZiAocmV0dmFsKVxuIDEzMDpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDEzMTpcdFxuIDEzMjpcdFx0cmVwb3J0ID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZbcmVhZGVyLVx1MDAzZWNidWZfc3RhcnRdO1xuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIElmIHJlcG9ydCBpcyBsYXJnZXIgdGhhbiByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEsIHJlc3Qgb2YgcmVwb3J0XG4gMTM1Olx0XHQgKiBpcyBsb3N0IVxuIDEzNjpcdFx0ICovXG4gMTM3Olx0XHRsZW4gPSBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgXHUwMDNlIGNvdW50ID8gY291bnQgOiBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemU7XG4gMTM4Olx0XG4gMTM5Olx0XHRpZiAoY29weV90b191c2VyKGJ1ZmZlciwgcmVwb3J0LVx1MDAzZXZhbHVlLCBsZW4pKSB7XG4gMTQwOlx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gMTQxOlx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMTQyOlx0XHR9XG4gMTQzOlx0XHRyZXR2YWwgJiM0Mzs9IGxlbjtcbiAxNDQ6XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAxNDU6XHRcbiAxNDY6XHRleGl0X3VubG9jazpcbiAxNDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAxNDg6XHRcdHJldHVybiByZXR2YWw7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyBfX3BvbGxfdCByb2NjYXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiAxNTI6XHR7XG4gMTUzOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMTU0Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2cmVhZGVyLVx1MDAzZWRldmljZS1cdTAwM2V3YWl0LCB3YWl0KTtcbiAxNTU6XHRcdGlmIChyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCAhPSByZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWNidWZfZW5kKVxuIDE1NjpcdFx0XHRyZXR1cm4gRVBPTExJTiB8IEVQT0xMUkROT1JNO1xuIDE1NzpcdFx0aWYgKCFyZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWV4aXN0KVxuIDE1ODpcdFx0XHRyZXR1cm4gRVBPTExFUlIgfCBFUE9MTEhVUDtcbiAxNTk6XHRcdHJldHVybiAwO1xuIDE2MDpcdH1cbiAxNjE6XHRcbiAxNjI6XHRzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDE2MzpcdHtcbiAxNjQ6XHRcdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XG4gMTY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xuIDE2NjpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAxNjc6XHRcdGludCBlcnJvciA9IDA7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZWFkZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm9jY2F0X3JlYWRlcik7XG4gMTcwOlx0XHRpZiAoIXJlYWRlcilcbiAxNzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTcyOlx0XG4gMTczOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMTc0Olx0XG4gMTc1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICghZGV2aWNlKSB7XG4gMTc4Olx0XHRcdHByX2VtZXJnKFwmIzM0O3JvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2VzbiYjMzk7dCBleGlzdFxcblwmIzM0OywgbWlub3IpO1xuIDE3OTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTgwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDE4MTpcdFx0XHRrZnJlZShyZWFkZXIpO1xuIDE4MjpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4gMTg2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAxODc6XHRcbiAxODg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMTg5Olx0XG4gMTkwOlx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDE5MTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTkyOlx0XHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbiAxOTM6XHRcdH1cbiAxOTQ6XHRcbiAxOTU6XHRcdGlmICghZGV2aWNlLVx1MDAzZW9wZW4mIzQzOyYjNDM7KSB7XG4gMTk2Olx0XHRcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXG4gMTk3Olx0XHRcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcbiAxOTg6XHRcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gMTk5Olx0XHRcdFx0LS1kZXZpY2UtXHUwMDNlb3BlbjtcbiAyMDA6XHRcdFx0XHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDc3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQmIzM5O3MgbXkgb3duLgoKKipBbmFseXppbmcgdGhlIFdvcmtmbG93KioKCkFscmlnaHQsIEkmIzM5O20gYXQgdGhlIHBvaW50IHdoZXJlIEkgbmVlZCB0byBjb250aW51ZSBteSBhbmFseXNpcy4gVGhlIGN1cnJlbnQgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnQgSSYjMzk7bSBmb2N1c2luZyBvbiBlbmRzIGF0IGxpbmUgMjAwLCBzbyBJIG5lZWQgdG8gcGljayB1cCB0aGUgdGhyZWFkIGF0IGxpbmUgMjAxIGFuZCBwcm9jZWVkIHRvIGxpbmUgNDMwLiBUaGlzIHNlZW1zIHRvIGltcGx5IGEgc3RydWN0dXJlZCBhcHByb2FjaCB0byB0aGUgZGF0YSwgcGVyaGFwcyBhIHNlZ21lbnRlZCByZXNlYXJjaCBwYXBlciwgY29kZSBjaHVuaywgb3IgZXZlbiBhIGxvZyBmaWxlLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCAyMDEtNDMwIGNvbnRhaW5zIHRoZSBuZXh0IGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIG92ZXJhbGwgcHJvamVjdC4gTm93LCBJIGhhdmUgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IGNyaXRpY2FsIGVsZW1lbnRzIGluIHRoaXMgcGFydCBvZiB0aGUgZG9jdW1lbnQsIGFzIGl0IGNvdWxkIGhhdmUga2V5IGluc2lnaHRzLiBJdCYjMzk7cyB0aW1lIHRvIGRpdmUgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAxOlx0XHRcdH1cbiAyMDI6XHRcbiAyMDM6XHRcdFx0ZXJyb3IgPSBoaWRfaHdfb3BlbihkZXZpY2UtXHUwMDNlaGlkKTtcbiAyMDQ6XHRcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gMjA1Olx0XHRcdFx0aGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcbiAyMDY6XHRcdFx0XHQtLWRldmljZS1cdTAwM2VvcGVuO1xuIDIwNzpcdFx0XHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbiAyMDg6XHRcdFx0fVxuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0cmVhZGVyLVx1MDAzZWRldmljZSA9IGRldmljZTtcbiAyMTI6XHRcdC8qIG5ldyByZWFkZXIgZG9lc24mIzM5O3QgZ2V0IG9sZCBldmVudHMgKi9cbiAyMTM6XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gZGV2aWNlLVx1MDAzZWNidWZfZW5kO1xuIDIxNDpcdFxuIDIxNTpcdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZyZWFkZXItXHUwMDNlbm9kZSwgXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIDIxNjpcdFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSByZWFkZXI7XG4gMjE3Olx0XG4gMjE4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMjE5Olx0XHRyZXR1cm4gMDtcbiAyMjA6XHRcbiAyMjE6XHRleGl0X2Vycl9yZWFkZXJzOlxuIDIyMjpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIDIyMzpcdFx0a3JlZl9wdXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XG4gMjI0Olx0XHRrZnJlZShyZWFkZXIpO1xuIDIyNTpcdFx0cmV0dXJuIGVycm9yO1xuIDIyNjpcdH1cbiAyMjc6XHRcbiAyMjg6XHRzdGF0aWMgaW50IHJvY2NhdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDIyOTpcdHtcbiAyMzA6XHRcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyMzE6XHRcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXHUwMDNlZGV2aWNlO1xuIDIzMjpcdFxuIDIzMzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyMzQ6XHRcdGxpc3RfZGVsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlKTtcbiAyMzU6XHRcbiAyMzY6XHRcdGlmICghLS1kZXZpY2UtXHUwMDNlb3Blbikge1xuIDIzNzpcdFx0XHQvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqL1xuIDIzODpcdFx0XHRpZiAoZGV2aWNlLVx1MDAzZWV4aXN0KSB7XG4gMjM5Olx0XHRcdFx0aGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcbiAyNDA6XHRcdFx0XHRoaWRfaHdfY2xvc2UoZGV2aWNlLVx1MDAzZWhpZCk7XG4gMjQxOlx0XHRcdH1cbiAyNDI6XHRcdH1cbiAyNDM6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyNDQ6XHRcbiAyNDU6XHRcdGtmcmVlKHJlYWRlcik7XG4gMjQ2Olx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiAyNDc6XHRcbiAyNDg6XHRcdHJldHVybiAwO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHQvKlxuIDI1MjpcdCAqIHJvY2NhdF9yZXBvcnRfZXZlbnQoKSAtIG91dHB1dCBkYXRhIHRvIHJlYWRlcnNcbiAyNTM6XHQgKiBAbWlub3I6IG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxuIDI1NDpcdCAqIEBkYXRhOiBwb2ludGVyIHRvIGRhdGFcbiAyNTU6XHQgKlxuIDI1NjpcdCAqIFJldHVybiB2YWx1ZSBpcyB6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuIDI1NzpcdCAqXG4gMjU4Olx0ICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlci5cbiAyNTk6XHQgKi9cbiAyNjA6XHRpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxuIDI2MTpcdHtcbiAyNjI6XHRcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4gMjYzOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xuIDI2NDpcdFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgKnJlcG9ydDtcbiAyNjU6XHRcdHVpbnQ4X3QgKm5ld192YWx1ZTtcbiAyNjY6XHRcbiAyNjc6XHRcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbiAyNjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMjY5Olx0XG4gMjcwOlx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAyNzE6XHRcdGlmICghZGV2aWNlKVxuIDI3MjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAyNzM6XHRcbiAyNzQ6XHRcdG5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcbiAyNzU6XHRcdGlmICghbmV3X3ZhbHVlKVxuIDI3NjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAyNzc6XHRcbiAyNzg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMjc5Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuIDI4MDpcdFxuIDI4MTpcdFx0cmVwb3J0ID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZbZGV2aWNlLVx1MDAzZWNidWZfZW5kXTtcbiAyODI6XHRcbiAyODM6XHRcdC8qIHBhc3NpbmcgTlVMTCBpcyBzYWZlICovXG4gMjg0Olx0XHRrZnJlZShyZXBvcnQtXHUwMDNldmFsdWUpO1xuIDI4NTpcdFxuIDI4NjpcdFx0cmVwb3J0LVx1MDAzZXZhbHVlID0gbmV3X3ZhbHVlO1xuIDI4NzpcdFx0ZGV2aWNlLVx1MDAzZWNidWZfZW5kID0gKGRldmljZS1cdTAwM2VjYnVmX2VuZCAmIzQzOyAxKSAlIFJPQ0NBVF9DQlVGX1NJWkU7XG4gMjg4Olx0XG4gMjg5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlYWRlciwgXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMsIG5vZGUpIHtcbiAyOTA6XHRcdFx0LypcbiAyOTE6XHRcdFx0ICogQXMgd2UgYWxyZWFkeSBpbnNlcnRlZCBvbmUgZWxlbWVudCwgdGhlIGJ1ZmZlciBjYW4mIzM5O3QgYmVcbiAyOTI6XHRcdFx0ICogZW1wdHkuIElmIHN0YXJ0IGFuZCBlbmQgYXJlIGVxdWFsLCBidWZmZXIgaXMgZnVsbCBhbmQgd2VcbiAyOTM6XHRcdFx0ICogaW5jcmVhc2Ugc3RhcnQsIHNvIHRoYXQgc2xvdyByZWFkZXIgbWlzc2VzIG9uZSBldmVudCwgYnV0XG4gMjk0Olx0XHRcdCAqIGdldHMgdGhlIG5ld2VyIG9uZXMgaW4gdGhlIHJpZ2h0IG9yZGVyLlxuIDI5NTpcdFx0XHQgKi9cbiAyOTY6XHRcdFx0aWYgKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cdTAwM2VjYnVmX2VuZClcbiAyOTc6XHRcdFx0XHRyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCA9IChyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCAmIzQzOyAxKSAlIFJPQ0NBVF9DQlVGX1NJWkU7XG4gMjk4Olx0XHR9XG4gMjk5Olx0XG4gMzAwOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzQ3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgRGVlcGVyOiBOZXh0IENodW5rIEFuYWx5c2lzKioKClJpZ2h0LCBsZXQmIzM5O3Mga2VlcCBtb3ZpbmcuIEkmIzM5O3ZlIGZpbmlzaGVkIHRoZSBpbml0aWFsIHNlY3Rpb25zLCBhbmQgbm93IEkgbmVlZCB0byBzaGlmdCBmb2N1cyB0byB0aGUgbmV4dCBibG9jayBvZiB0ZXh0IOKAkyBzcGVjaWZpY2FsbHksIGxpbmVzIDMwMSB0aHJvdWdoIDQ0MC4gVGhpcyBpc24mIzM5O3QganVzdCBhIG1hdHRlciBvZiBzZXF1ZW50aWFsIHJlYWRpbmc7IGl0JiMzOTtzIGFib3V0IHN0cmF0ZWdpY2FsbHkgbmF2aWdhdGluZyB0aGUgaW5mb3JtYXRpb24gZmxvdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgbmV4dCBzZWN0aW9uIGNvbnRyaWJ1dGVzIHRvIHRoZSBvdmVyYWxsIGFyZ3VtZW50IG9yIG5hcnJhdGl2ZSBhcmMuIEFyZSB3ZSBtb3ZpbmcgaW50byBhIG1vcmUgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgYSBrZXkgY29uY2VwdCBpbnRyb2R1Y2VkIGVhcmxpZXI/IERvZXMgdGhpcyBzZWdtZW50IHByZXNlbnQgc3VwcG9ydGluZyBldmlkZW5jZSwgY291bnRlcmFyZ3VtZW50cywgb3IgcGVyaGFwcyBhIGNvbXBsZXRlbHkgbmV3IHBlcnNwZWN0aXZlIHRoYXQgcmVxdWlyZXMgY2FyZWZ1bCBzY3J1dGlueT8gSeKAmW0gZXhwZWN0aW5nIGEgY2VydGFpbiB0eXBlIG9mIGNvbnRlbnQsIGJ1dCBJIGhhdmUgdG8gcmVtYWluIG9iamVjdGl2ZSBhYm91dCB3aGF0IEkgZmluZC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXM6IFdoYXQgaW5zaWdodHMgb3IgZGV0YWlscyBkb2VzIHRoaXMgYmxvY2sgcHJvdmlkZSB0aGF0IGFyZSBjcml0aWNhbCB0byBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBlbnRpcmUgd29yaz8gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4gMzA0Olx0XHRyZXR1cm4gMDtcbiAzMDU6XHR9XG4gMzA2Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XG4gMzA3Olx0XG4gMzA4Olx0LypcbiAzMDk6XHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XG4gMzEwOlx0ICogQGNsYXNzOiB0aGUgY2xhc3MgdGhhdHMgdXNlZCB0byBjcmVhdGUgdGhlIGRldmljZS4gTWVhbnQgdG8gaG9sZCBkZXZpY2VcbiAzMTE6XHQgKiBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzLlxuIDMxMjpcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuIDMxMzpcdCAqIEByZXBvcnRfc2l6ZTogc2l6ZSBvZiByZXBvcnRzXG4gMzE0Olx0ICpcbiAzMTU6XHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxuIDMxNjpcdCAqIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuIDMxNzpcdCAqL1xuIDMxODpcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXG4gMzE5Olx0e1xuIDMyMDpcdFx0dW5zaWduZWQgaW50IG1pbm9yO1xuIDMyMTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAzMjI6XHRcdGludCB0ZW1wO1xuIDMyMzpcdFxuIDMyNDpcdFx0ZGV2aWNlID0ga3phbGxvY19vYmooc3RydWN0IHJvY2NhdF9kZXZpY2UpO1xuIDMyNTpcdFx0aWYgKCFkZXZpY2UpXG4gMzI2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMyNzpcdFxuIDMyODpcdFx0a3JlZl9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbiAzMjk6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuIDMzMDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIDMzMTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMzI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMzMzOlx0XHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuIDMzNDpcdFx0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbiAzMzU6XHRcdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4gMzM2Olx0XHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbiAzMzc6XHRcbiAzMzg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAzMzk6XHRcbiAzNDA6XHRcdGZvciAobWlub3IgPSAwOyBtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyAmIzQzOyYjNDM7bWlub3IpIHtcbiAzNDE6XHRcdFx0aWYgKGRldmljZXNbbWlub3JdKVxuIDM0MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDM0MzpcdFx0XHRicmVhaztcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdGlmIChtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTKSB7XG4gMzQ3Olx0XHRcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xuIDM0ODpcdFx0fSBlbHNlIHtcbiAzNDk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzUwOlx0XHRcdGtmcmVlKGRldmljZSk7XG4gMzUxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1MjpcdFx0fVxuIDM1MzpcdFxuIDM1NDpcdFx0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4gMzU1Olx0XG4gMzU2Olx0XHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiAzNTc6XHRcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiAzNTg6XHRcdFx0XHRcJiMzNDslcyVzJWRcJiMzNDssIFwmIzM0O3JvY2NhdFwmIzM0OywgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoSVNfRVJSKGRldmljZS1cdTAwM2VkZXYpKSB7XG4gMzYxOlx0XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzNjI6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzYzOlx0XHRcdHRlbXAgPSBQVFJfRVJSKGRldmljZS1cdTAwM2VkZXYpO1xuIDM2NDpcdFx0XHRrZnJlZShkZXZpY2UpO1xuIDM2NTpcdFx0XHRyZXR1cm4gdGVtcDtcbiAzNjY6XHRcdH1cbiAzNjc6XHRcbiAzNjg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM2OTpcdFxuIDM3MDpcdFx0cmV0dXJuIG1pbm9yO1xuIDM3MTpcdH1cbiAzNzI6XHRFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XG4gMzczOlx0XG4gMzc0Olx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcbiAzNzU6XHQgKiBAbWlub3I6IHRoZSBtaW5vciBkZXZpY2UgbnVtYmVyIHJldHVybmVkIGJ5IHJvY2NhdF9jb25uZWN0KClcbiAzNzY6XHQgKi9cbiAzNzc6XHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcbiAzNzg6XHR7XG4gMzc5Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuIDM4MDpcdFxuIDM4MTpcdFx0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuIDM4MjpcdFx0XHRyZXR1cm47XG4gMzgzOlx0XG4gMzg0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzg1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAzODY6XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzODc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKCFkZXZpY2UpXG4gMzkwOlx0XHRcdHJldHVybjtcbiAzOTE6XHRcbiAzOTI6XHRcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiAzOTM6XHRcbiAzOTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMzk1Olx0XHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwO1xuIDM5NjpcdFx0aWYgKGRldmljZS1cdTAwM2VvcGVuKSB7XG4gMzk3Olx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiAzOTg6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbiAzOTk6XHRcdH1cbiA0MDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY0MTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkZpbGUgSW5zcGVjdGlvbiAtIEZpbmFsIFRob3VnaHRzIEZpcnN0KioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29yZSBvZiB0aGlzIGludmVzdGlnYXRpb24sIGxldCYjMzk7cyBhZG9wdCBhIGNyaXRpY2FsLCBleHBlcmllbmNlZCBzdGFuY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvLCBvZiBjb3Vyc2UsIGhlYWQgdG8gdGhlIHRhaWwgZW5kIG9mIHRoZSBmaWxlLiBJdCYjMzk7cyBvZnRlbiB0aGUgY2FzZSB0aGF0IHRoZSBjb25jbHVzaXZlIHBpZWNlcyBvciBwb3RlbnRpYWwgZXJyb3IgbWVzc2FnZXMgd291bGQgcmVzaWRlIGhlcmUsIG9mZmVyaW5nIGEgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0ZXZlciB0aGUgcHJvY2VzcyBoYXMgYWNoaWV2ZWQuIEJ5IGV4YW1pbmluZyB3aGF0JiMzOTtzIGNvbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLCBpdCYjMzk7cyBvZnRlbiBmYXN0ZXIgdG8gZGVkdWNlIHRoZSBnZW5lcmFsIHN0YXRlIG9mIHRoZSBkYXRhLCBhbmQgd2hldGhlciB0aGUgcHJpbWFyeSB0YXNrIGhhcyBiZWVuIGFjaGlldmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAxOlx0XG4gNDAyOlx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiA0MDM6XHR9XG4gNDA0Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xuIDQwNTpcdFxuIDQwNjpcdHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gNDA3Olx0e1xuIDQwODpcdFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDQwOTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gNDEwOlx0XHRsb25nIHJldHZhbCA9IDA7XG4gNDExOlx0XG4gNDEyOlx0XHRzd2l0Y2ggKGNtZCkge1xuIDQxMzpcdFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiA0MTQ6XHRcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuIDQxNTpcdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gNDE2Olx0XHRcdGJyZWFrO1xuIDQxNzpcdFx0ZGVmYXVsdDpcbiA0MTg6XHRcdFx0cmV0dmFsID0gLUVOT1RUWTtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldHVybiByZXR2YWw7XG4gNDIyOlx0fVxuIDQyMzpcdFxuIDQyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJvY2NhdF9vcHMgPSB7XG4gNDI1Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA0MjY6XHRcdC5yZWFkID0gcm9jY2F0X3JlYWQsXG4gNDI3Olx0XHQucG9sbCA9IHJvY2NhdF9wb2xsLFxuIDQyODpcdFx0Lm9wZW4gPSByb2NjYXRfb3BlbixcbiA0Mjk6XHRcdC5yZWxlYXNlID0gcm9jY2F0X3JlbGVhc2UsXG4gNDMwOlx0XHQubGxzZWVrID0gbm9vcF9sbHNlZWssXG4gNDMxOlx0XHQudW5sb2NrZWRfaW9jdGwgPSByb2NjYXRfaW9jdGwsXG4gNDMyOlx0fTtcbiA0MzM6XHRcbiA0MzQ6XHRzdGF0aWMgaW50IF9faW5pdCByb2NjYXRfaW5pdCh2b2lkKVxuIDQzNTpcdHtcbiA0MzY6XHRcdGludCByZXR2YWw7XG4gNDM3Olx0XHRkZXZfdCBkZXZfaWQ7XG4gNDM4Olx0XG4gNDM5Olx0XHRyZXR2YWwgPSBhbGxvY19jaHJkZXZfcmVnaW9uKFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxuIDQ0MDpcdFx0XHRcdFJPQ0NBVF9NQVhfREVWSUNFUywgXCYjMzQ7cm9jY2F0XCYjMzQ7KTtcbiA0NDE6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiA0NDI6XHRcdFx0cHJfd2FybihcJiMzNDtjYW4mIzM5O3QgZ2V0IG1ham9yIG51bWJlclxcblwmIzM0Oyk7XG4gNDQzOlx0XHRcdGdvdG8gZXJyb3I7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XG4gNDQ2Olx0XHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0Y2Rldl9pbml0KFx1MDAyNnJvY2NhdF9jZGV2LCBcdTAwMjZyb2NjYXRfb3BzKTtcbiA0NDk6XHRcdHJldHZhbCA9IGNkZXZfYWRkKFx1MDAyNnJvY2NhdF9jZGV2LCBkZXZfaWQsIFJPQ0NBVF9NQVhfREVWSUNFUyk7XG4gNDUwOlx0XG4gNDUxOlx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKSB7XG4gNDUyOlx0XHRcdHByX3dhcm4oXCYjMzQ7Y2Fubm90IGFkZCBjZGV2XFxuXCYjMzQ7KTtcbiA0NTM6XHRcdFx0Z290byBjbGVhbnVwX2FsbG9jX2NocmRldl9yZWdpb247XG4gNDU0Olx0XHR9XG4gNDU1Olx0XHRyZXR1cm4gMDtcbiA0NTY6XHRcbiA0NTc6XHRcbiA0NTg6XHQgY2xlYW51cF9hbGxvY19jaHJkZXZfcmVnaW9uOlxuIDQ1OTpcdFx0dW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldl9pZCwgUk9DQ0FUX01BWF9ERVZJQ0VTKTtcbiA0NjA6XHQgZXJyb3I6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDYyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGFjY2Vzc2liaWxpdHkgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZywgbGlrZSBRRU1VLiBHb29kLCBpdCYjMzk7cyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSBjYW4gc2ltdWxhdGUgVVNCIEhJRCBkZXZpY2VzIGluIFFFTVUgdXNpbmcgc2V2ZXJhbCBtZXRob2RzOiBVU0IgUmF3IEdhZGdldCwgRHVtbXkgSENELCBVSElELCBvciBldmVuIHRoZSBzdGFuZGFyZCBRRU1VIFVTQiBlbXVsYXRpb24uIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHdpdGhvdXQgbmVlZGluZyB0aGUgYWN0dWFsIGhhcmR3YXJlLgoKTm93LCBmcm9tIHdoYXQgSSBnYXRoZXIsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGlzc3VlcyB3aXRoaW4gdGhlIFJvY2NhdCBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW50IGNhbGxzIHRvIGZpbGUgb3BlcmF0aW9ucy4gQmFzaWNhbGx5LCBpdOKAmXMgYWJvdXQgZml4aW5nIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSB0byBtYWtlIGl0IHNhZmVyIHdoZW4gZGV2aWNlcyBhcmUgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCB3aGlsZSBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X2lvY3RsYCwgYW5kIG90aGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBzaW11bHRhbmVvdXNseS4KCkkmIzM5O20gY2hlY2tpbmcgdGhlIGtleSBmdW5jdGlvbnMgdGFyZ2V0ZWQgYnkgdGhlIHBhdGNoOiBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X3JlcG9ydF9ldmVudGAsIGByb2NjYXRfY29ubmVjdGAsIGByb2NjYXRfZGlzY29ubmVjdGAsIGFuZCBgcm9jY2F0X2lvY3RsYC4gSSB3YW50IHRvIHZlcmlmeSBpZiB0aGV5IGFyZSBleHBvcnRlZCBvciBub3QsIGFuZCBJIHNlZSBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBhbmQgYHJvY2NhdF9yZXBvcnRfZXZlbnRgIGFyZSBleHBvcnRlZCBzeW1ib2xzLiBUaGUgb3RoZXJzIGFyZSBzdGF0aWMgZm9wcy4KCkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzLCBub3QgaG90LXBhdGggY29kZS4gVGhleSBhcmUgaW5kZWVkIHRoZSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBmb3IgdGhlIFJvY2NhdCBkZXZpY2UgaW50ZXJmYWNlLiBUaGlzIGNvbmZpcm1zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBjcnVjaWFsLCBhcyB0aGVzZSBlbnRyeXBvaW50cyB3b3VsZCBiZSB1c2VkIGJ5IGV4dGVybmFsIHByb2Nlc3NlcyB0byB1c2UgdGhlIGRldmljZS4KCkZpbmFsbHksIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGBDT05GSUdgIG9wdGlvbnM6IGBISURfUk9DQ0FUYCBkZXBlbmRzIG9uIGBVU0JfSElEYCBhbmQgYEhJRGAuIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IGBVU0JfSElEYCYjMzk7cyBkZXBlbmRlbmNpZXMgaW4gYEtjb25maWdgIGZvciBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGNvbXBsZXRlcyB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlIG9mIHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1zIGl0IGlzIGFuIGVzc2VudGlhbCBmaXggZm9yIHRoZSBkcml2ZXIsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfSElEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnPTI9bWVudSBcJiMzNDtVU0IgSElEIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZy00LVxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc6NTpjb25maWcgVVNCX0hJRFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWctNi1cdHRyaXN0YXRlIFwmIzM0O1VTQiBISUQgdHJhbnNwb3J0IGxheWVyXCYjMzQ7XG4tLVxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc9Mjc9Y29uZmlnIEhJRF9QSURcbi0tXG5kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZy0zMy1cbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnOjM0OmNvbmZpZyBVU0JfSElEREVWXG5kcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZy0zNS1cdGJvb2wgXCYjMzQ7L2Rldi9oaWRkZXYgcmF3IEhJRCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUyMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgSElEIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBjaGVjayBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgVVNCIEh1bWFuIEludGVyZmFjZSBEZXZpY2UgKEhJRCkgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWdgIGZpbGUuIEkmIzM5O20gcHJldHR5IGZhbWlsaWFyIHdpdGggdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gZXhwZXJpZW5jZSwgdGhhdCB0aGUgcmVsZXZhbnQgc2V0dGluZ3MgYXJlIGxpa2VseSBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHNvIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA1IHRvIGJlZ2luIG15IHNlYXJjaC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLiBIb3BlZnVsbHksIHRoaXMgd2lsbCBxdWlja2x5IGxlYWQgbWUgdG8gdGhlIGluZm9ybWF0aW9uIEkmIzM5O20gbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O1VTQiBISUQgc3VwcG9ydFwmIzM0O1xuICAgMzpcdFx0ZGVwZW5kcyBvbiBVU0JcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgVVNCX0hJRFxuICAgNjpcdFx0dHJpc3RhdGUgXCYjMzQ7VVNCIEhJRCB0cmFuc3BvcnQgbGF5ZXJcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0ZGVwZW5kcyBvbiBISURcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IFVTQiBrZXlib2FyZHMsXG4gIDExOlx0XHQgIG1pY2UsIGpveXN0aWNrcywgZ3JhcGhpYyB0YWJsZXRzLCBvciBhbnkgb3RoZXIgSElEIGJhc2VkIGRldmljZXNcbiAgMTI6XHRcdCAgdG8geW91ciBjb21wdXRlciB2aWEgVVNCLCBhcyB3ZWxsIGFzIFVuaW50ZXJydXB0aWJsZSBQb3dlciBTdXBwbHlcbiAgMTM6XHRcdCAgKFVQUykgYW5kIG1vbml0b3IgY29udHJvbCBkZXZpY2VzLlxuICAxNDpcdFxuICAxNTpcdFx0ICBZb3UgY2FuJiMzOTt0IHVzZSB0aGlzIGRyaXZlciBhbmQgdGhlIEhJREJQIChCb290IFByb3RvY29sKSBrZXlib2FyZFxuICAxNjpcdFx0ICBhbmQgbW91c2UgZHJpdmVycyBhdCB0aGUgc2FtZSB0aW1lLiBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZTpcbiAgMTc6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnJzdFx1MDAzZS5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5OTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBISUQgU3VwcG9ydCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBISUQgc3Vic3lzdGVtJiMzOTtzIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCBwbGFjZSBJJiMzOTtkIGNoZWNrIGlzIHRoZSBgZHJpdmVycy9oaWQvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiB0aGUgYG1lbnUgJiMzNDtISUQgc3VwcG9ydCYjMzQ7YCBzZWN0aW9uLCBzaW5jZSB0aGF0JiMzOTtzIHRoZSB0b3AtbGV2ZWwgZW50cnkgZm9yIHRoZSBISUQgZnJhbWV3b3JrLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoYXQgbWVudS4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgdGhlIEhJRCBzdXBwb3J0IG1lbnUgZXZlbiBhcHBlYXJzPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBISUQgdG8gYmUgYXZhaWxhYmxlIGFuZCB3aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgSElEIGRldmljZSBvciBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQuIEl0JiMzOTtzIGFsbCBhYm91dCBtYWtpbmcgc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGZvdW5kYXRpb24gaW4gcGxhY2UgZmlyc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIEhJRCBkcml2ZXIgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIEhJRF9TVVBQT1JUXG4gICA2Olx0XHRib29sIFwmIzM0O0hJRCBidXMgc3VwcG9ydFwmIzM0O1xuICAgNzpcdFx0ZGVmYXVsdCB5XG4gICA4Olx0XHRkZXBlbmRzIG9uIElOUFVUXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgY29yZSBzdXBwb3J0IGZvciBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpLlxuICAxMTpcdFx0ICBZb3Ugd2lsbCBhbHNvIG5lZWQgZHJpdmVycyBmcm9tIHRoZSBmb2xsb3dpbmcgbWVudSB0byBtYWtlIHVzZSBvZiBpdC5cbiAgMTI6XHRcbiAgMTM6XHRpZiBISURfU1VQUE9SVFxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBISURcbiAgMTY6XHRcdHRyaXN0YXRlIFwmIzM0O0hJRCBidXMgY29yZSBzdXBwb3J0XCYjMzQ7XG4gIDE3Olx0XHRkZWZhdWx0IHlcbiAgMTg6XHRcdGRlcGVuZHMgb24gSU5QVVRcbiAgMTk6XHRcdGhlbHBcbiAgMjA6XHRcdCAgQSBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpIGlzIGEgdHlwZSBvZiBjb21wdXRlciBkZXZpY2UgdGhhdFxuICAyMTpcdFx0ICBpbnRlcmFjdHMgZGlyZWN0bHkgd2l0aCBhbmQgdGFrZXMgaW5wdXQgZnJvbSBodW1hbnMuIFRoZSB0ZXJtIFwmIzM0O0hJRFwmIzM0O1xuICAyMjpcdFx0ICBtb3N0IGNvbW1vbmx5IHVzZWQgdG8gcmVmZXIgdG8gdGhlIFVTQi1ISUQgc3BlY2lmaWNhdGlvbiwgYnV0IG90aGVyXG4gIDIzOlx0XHQgIGRldmljZXMgKHN1Y2ggYXMsIGJ1dCBub3Qgc3RyaWN0bHkgbGltaXRlZCB0bywgQmx1ZXRvb3RoKSBhcmVcbiAgMjQ6XHRcdCAgZGVzaWduZWQgdXNpbmcgSElEIHNwZWNpZmljYXRpb24gKHRoaXMgaW52b2x2ZXMgY2VydGFpbiBrZXlib2FyZHMsXG4gIDI1Olx0XHQgIG1pY2UsIHRhYmxldHMsIGV0YykuIFRoaXMgb3B0aW9uIGFkZHMgdGhlIEhJRCBidXMgdG8gdGhlIGtlcm5lbCxcbiAgMjY6XHRcdCAgdG9nZXRoZXIgd2l0aCBnZW5lcmljIEhJRCBsYXllciBjb2RlLiBUaGUgSElEIGRldmljZXMgYXJlIGFkZGVkIGFuZFxuICAyNzpcdFx0ICByZW1vdmVkIGZyb20gdGhlIEhJRCBidXMgYnkgdGhlIHRyYW5zcG9ydC1sYXllciBkcml2ZXJzLCBzdWNoIGFzXG4gIDI4Olx0XHQgIHVzYmhpZCAoVVNCX0hJRCkgYW5kIGhpZHAgKEJUX0hJRFApLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgZG9jcyBhbmQgc3BlY3MsIHNlZSBodHRwczovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvaGlkcGFnZS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NjQKCQkJCQkJCW91dHB1dDogMTc3CgkJCQkJCQl0aG91Z2h0czogNTA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFJvY2NhdCBISUQgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSB1cGRhdGVkIFJvY2NhdCBISUQgZmVhdHVyZS4gVGhlIGJhc2UgY29uZmlndXJhdGlvbnMgSSYjMzk7bSB3b3JraW5nIHdpdGggYXJlIGBISURfUk9DQ0FUYCwgYFVTQl9ISURgLCBhbmQgYEhJRGAuIEkgbmVlZCB0byBlbnN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnkgZGVwZW5kZW5jaWVzIGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIGZpbGVzIHRob3JvdWdobHksIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGAjaWZkZWZgIGRpcmVjdGl2ZXMgYW5kICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzLiBJIG11c3QgcmVtZW1iZXIgdG8gb3V0cHV0IHRoZSBuZWVkZWQgY29uZmlndXJhdGlvbnMgd2l0aG91dCB0aGUgYENPTkZJR19gIHByZWZpeC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCByZWxldmFudCwgbm9uLXN0YXRpYywgb3Igb3RoZXJ3aXNlIGRpc3RpbmN0IHN5bWJvbHMgYXMgZ29vZCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGlkZW50aWZpZWQgYHJvY2NhdF9jb25uZWN0YCwgYHJvY2NhdF9kaXNjb25uZWN0YCwgYHJvY2NhdF9yZXBvcnRfZXZlbnRgLCBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBhbmQgYHJvY2NhdF9pb2N0bGAgYXMgbGlrZWx5IGNhbmRpZGF0ZXMuIEkgZGlkIGEgcXVpY2sgY2hlY2sgb2YgYGhpZC1yb2NjYXQuY2AgdG8gc2VlIGlmIHRoZXJlIHdlcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucywgYW5kIGNvbmZpcm1lZCB0aG9zZSBhcmUgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCYjMzk7cyBhZGRyZXNzaW5nIGNyaXRpY2FsIGlzc3VlcyBsaWtlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBmb3IgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlcywgYWltaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBhbmQgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb25zIGFuZCBkZXZpY2UgbGlmZWN5Y2xlLiBUaGlzIGlzICp2ZXJ5KiByZWFjaGFibGUgdmlhIGVtdWxhdGVkIFVTQiBlbnZpcm9ubWVudHMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIGAvZGV2L3JvY2NhdCpgIGNoYXIgZGV2aWNlcy4KCkZpbmFsbHksIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBldmVyeXRoaW5nIGNvdmVyZWQ6IEkmIzM5O20gdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYW5kIEkmIzM5O2xsIGNhbGwgaXQgb25seSBvbmNlLiBJJiMzOTttIG9taXR0aW5nIHRoZSBgQ09ORklHX2AgcHJlZml4LCBhbmQgSSYjMzk7bSB0YXJnZXRpbmcgbm9uLWhvdC1wYXRoIGtlcm5lbCBmdW5jdGlvbnMgdG8gbWFrZSBmdXp6aW5nIG1vcmUgZWZmZWN0aXZlLiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtISURfUk9DQ0FUJiMzNDssCiAgICAmIzM0O1VTQl9ISUQmIzM0OywKICAgICYjMzQ7SElEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm9jY2F0X2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cm9jY2F0X2Rpc2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7cm9jY2F0X3JlcG9ydF9ldmVudCYjMzQ7LAogICAgJiMzNDtyb2NjYXRfb3BlbiYjMzQ7LAogICAgJiMzNDtyb2NjYXRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtyb2NjYXRfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SElEX1JPQ0NBVCYjMzQ7LAogICAgJiMzNDtVU0JfSElEJiMzNDssCiAgICAmIzM0O0hJRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvY2NhdF9jb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9kaXNjb25uZWN0JiMzNDssCiAgICAmIzM0O3JvY2NhdF9yZXBvcnRfZXZlbnQmIzM0OywKICAgICYjMzQ7cm9jY2F0X29wZW4mIzM0OywKICAgICYjMzQ7cm9jY2F0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cm9jY2F0X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMga3JlZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlZmFjdG9ycyBsb2NraW5nIGFjcm9zcyB0aGUgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlIHN1YnN5c3RlbSAoaGlkLXJvY2NhdCkgdG8gZml4IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgcmFjZXMgYmV0d2VlbiByb2NjYXQgY2hhcmFjdGVyIGRldmljZSBvcGVyYXRpb25zIChvcGVuLCByZWxlYXNlLCBpb2N0bCkgYW5kIGRldmljZSBjb25uZWN0L2Rpc2Nvbm5lY3QvZXZlbnQgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uIChyYXctZ2FkZ2V0L3VoaWQpIGFuZCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMgYnkgaW50cm9kdWNpbmcga3JlZi1iYXNlZCByZWZlcmVuY2UgY291bnRpbmcgZm9yIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBwcm9wZXJseSBib3VuZHMtY2hlY2tpbmcgbWlub3IgZGV2aWNlIGluZGV4ZXMsIGFuZCBlbnN1cmluZyBzdHJ1Y3QgZmllbGRzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgZXhwb3NpbmcgdGhlIGRldmljZSBpbiB0aGUgZ2xvYmFsIGRldmljZXMgYXJyYXkuXG5cbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHByaW1hcnkgYnVncyBhZGRyZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludHJvZHVjZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIHByZW1hdHVyZSBkZWFsbG9jYXRpb24sIGFuZCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHRoZSBkZXZpY2VzIGFycmF5LiBUaGVzZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgS0FTQU4uXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKHN0cnVjdCByb2NjYXRfZGV2aWNlLCBzdHJ1Y3Qgcm9jY2F0X3JlYWRlcikgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqKCksIHJlcG9ydCBkYXRhIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIHdpdGgga21lbWR1cCgpLCBhbmQgYWxsIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIgaW4gcm9jY2F0X3JlYWQgb3IgcHV0X3VzZXIgaW4gcm9jY2F0X2lvY3RsKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxuXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1YjY2YzFkM2QwY2RhNDc2NDFlNTA4ZmJkYjkxZjA0M2VjNTBlNGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jCmluZGV4IDRmMTVlYjk1MTAzOTYuLmVhYTQ3YmJiNzBkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMKQEAgLTIxLDggJiM0MzsyMSwxMCBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAmIzM0OzogJiMzNDsgZm10CiAKICNpbmNsdWRlICZsdDtsaW51eC9jZGV2LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tyZWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wb2xsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc2lnbmFsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9oaWQtcm9jY2F0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiAKQEAgLTM3LDYgJiM0MzszOSw3IEBAIHN0cnVjdCByb2NjYXRfcmVwb3J0IHsKIH07CiAKIHN0cnVjdCByb2NjYXRfZGV2aWNlIHsKJiM0MzsJc3RydWN0IGtyZWYga3JlZjsKIAl1bnNpZ25lZCBpbnQgbWlub3I7CiAJaW50IHJlcG9ydF9zaXplOwogCWludCBvcGVuOwpAQCAtNzAsOCAmIzQzOzczLDEwIEBAIHN0YXRpYyBzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlc1tST0NDQVRfTUFYX0RFVklDRVNdOwogLyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7CiAKLXN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlKQomIzQzO3N0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKJiM0MzsJc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9CiYjNDM7CQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IFJPQ0NBVF9DQlVGX1NJWkU7IGkmIzQzOyYjNDM7KQpAQCAtMTcyLDExICYjNDM7MTc3LDIxIEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAJaWYgKCFkZXZpY2UpIHsKIAkJcHJfZW1lcmcoJiMzNDtyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24mIzM5O3QgZXhpc3RcbiYjMzQ7LCBtaW5vcik7CiAJCWVycm9yID0gLUVOT0RFVjsKLQkJZ290byBleGl0X2Vycl9kZXZpY2VzOwomIzQzOwkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsJCWtmcmVlKHJlYWRlcik7CiYjNDM7CQlyZXR1cm4gZXJyb3I7CiAJfQogCiYjNDM7CWtyZWZfZ2V0KCZhbXA7ZGV2aWNlLSZndDtrcmVmKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwogCiYjNDM7CWlmICghZGV2aWNlLSZndDtleGlzdCkgewomIzQzOwkJZXJyb3IgPSAtRU5PREVWOwomIzQzOwkJZ290byBleGl0X2Vycl9yZWFkZXJzOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFkZXZpY2UtJmd0O29wZW4mIzQzOyYjNDM7KSB7CiAJCS8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovCiAJCWVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS0mZ3Q7aGlkLCBQTV9ISU5UX0ZVTExPTik7CkBAIC0yMDAsNDYgJiM0MzsyMTUsMzUgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAlsaXN0X2FkZF90YWlsKCZhbXA7cmVhZGVyLSZndDtub2RlLCAmYW1wO2RldmljZS0mZ3Q7cmVhZGVycyk7CiAJZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhID0gcmVhZGVyOwogCiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiBleGl0X2Vycl9yZWFkZXJzOgogCW11dGV4X3VubG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKLWV4aXRfZXJyX2RldmljZXM6Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQlpZiAoZXJyb3IpCi0JCWtmcmVlKHJlYWRlcik7CiYjNDM7CWtyZWZfcHV0KCZhbXA7ZGV2aWNlLSZndDtrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpOwomIzQzOwlrZnJlZShyZWFkZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIGludCByb2NjYXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTsKLQotCW11dGV4X2xvY2soJmFtcDtkZXZpY2VzX2xvY2spOwotCi0JZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07Ci0JaWYgKCFkZXZpY2UpIHsKLQkJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQkJcHJfZW1lcmcoJiMzNDtyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24mIzM5O3QgZXhpc3RcbiYjMzQ7LCBtaW5vcik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KJiM0MzsJc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci0mZ3Q7ZGV2aWNlOwogCiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO3JlYWRlci0mZ3Q7bm9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwotCWtmcmVlKHJlYWRlcik7CiAKIAlpZiAoIS0tZGV2aWNlLSZndDtvcGVuKSB7CiAJCS8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovCiAJCWlmIChkZXZpY2UtJmd0O2V4aXN0KSB7CiAJCQloaWRfaHdfcG93ZXIoZGV2aWNlLSZndDtoaWQsIFBNX0hJTlRfTk9STUFMKTsKIAkJCWhpZF9od19jbG9zZShkZXZpY2UtJmd0O2hpZCk7Ci0JCX0gZWxzZSB7Ci0JCQlyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTsKIAkJfQogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKJiM0MzsJa2ZyZWUocmVhZGVyKTsKJiM0MzsJa3JlZl9wdXQoJmFtcDtkZXZpY2UtJmd0O2tyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2MCw3ICYjNDM7MjY0LDEyIEBAIGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpCiAJc3RydWN0IHJvY2NhdF9yZXBvcnQgKnJlcG9ydDsKIAl1aW50OF90ICpuZXdfdmFsdWU7CiAKJiM0MzsJaWYgKG1pbm9yICZsdDsgMCB8fCBtaW5vciAmZ3Q7PSBST0NDQVRfTUFYX0RFVklDRVMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAlkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTsKJiM0MzsJaWYgKCFkZXZpY2UpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKIAogCW5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLSZndDtyZXBvcnRfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfdmFsdWUpCkBAIC0zMTYsNiAmIzQzOzMyNSwxNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAomIzQzOwlrcmVmX2luaXQoJmFtcDtkZXZpY2UtJmd0O2tyZWYpOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7ZGV2aWNlLSZndDt3YWl0KTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnMpOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwomIzQzOwltdXRleF9pbml0KCZhbXA7ZGV2aWNlLSZndDtjYnVmX2xvY2spOwomIzQzOwlkZXZpY2UtJmd0O2hpZCA9IGhpZDsKJiM0MzsJZGV2aWNlLSZndDtleGlzdCA9IDE7CiYjNDM7CWRldmljZS0mZ3Q7Y2J1Zl9lbmQgPSAwOwomIzQzOwlkZXZpY2UtJmd0O3JlcG9ydF9zaXplID0gcmVwb3J0X3NpemU7CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7CiAKIAlmb3IgKG1pbm9yID0gMDsgbWlub3IgJmx0OyBST0NDQVRfTUFYX0RFVklDRVM7ICYjNDM7JiM0MzttaW5vcikgewpAQCAtMzMyLDYgJiM0MzszNTEsOCBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKJiM0MzsJZGV2aWNlLSZndDttaW5vciA9IG1pbm9yOwomIzQzOwogCWRldmljZS0mZ3Q7ZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgJmFtcDtoaWQtJmd0O2RldiwKIAkJCU1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpLCBOVUxMLAogCQkJJiMzNDslcyVzJWQmIzM0OywgJiMzNDtyb2NjYXQmIzM0OywgaGlkLSZndDtkcml2ZXItJmd0O25hbWUsIG1pbm9yKTsKQEAgLTM0NiwxNiAmIzQzOzM2Nyw2IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0CiAKIAltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO2RldmljZS0mZ3Q7d2FpdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnMpOwotCW11dGV4X2luaXQoJmFtcDtkZXZpY2UtJmd0O3JlYWRlcnNfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmYW1wO2RldmljZS0mZ3Q7Y2J1Zl9sb2NrKTsKLQlkZXZpY2UtJmd0O21pbm9yID0gbWlub3I7Ci0JZGV2aWNlLSZndDtoaWQgPSBoaWQ7Ci0JZGV2aWNlLSZndDtleGlzdCA9IDE7Ci0JZGV2aWNlLSZndDtjYnVmX2VuZCA9IDA7Ci0JZGV2aWNlLSZndDtyZXBvcnRfc2l6ZSA9IHJlcG9ydF9zaXplOwotCiAJcmV0dXJuIG1pbm9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Nvbm5lY3QpOwpAQCAtMzY3LDQyICYjNDM7Mzc4LDM3IEBAIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKQogewogCXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7CiAKJiM0MzsJaWYgKG1pbm9yICZsdDsgMCB8fCBtaW5vciAmZ3Q7PSBST0NDQVRfTUFYX0RFVklDRVMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7CiAJZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07CiYjNDM7CWRldmljZXNbbWlub3JdID0gTlVMTDsKIAltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwogCi0JZGV2aWNlLSZndDtleGlzdCA9IDA7IC8qIFRPRE8gZXhpc3QgbWF5YmUgbm90IG5lZWRlZCAqLwomIzQzOwlpZiAoIWRldmljZSkKJiM0MzsJCXJldHVybjsKIAogCWRldmljZV9kZXN0cm95KGRldmljZS0mZ3Q7ZGV2LSZndDtjbGFzcywgTUtERVYocm9jY2F0X21ham9yLCBtaW5vcikpOwogCi0JbXV0ZXhfbG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0JZGV2aWNlc1ttaW5vcl0gPSBOVUxMOwotCW11dGV4X3VubG9jaygmYW1wO2RldmljZXNfbG9jayk7Ci0KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2RldmljZS0mZ3Q7cmVhZGVyc19sb2NrKTsKJiM0MzsJZGV2aWNlLSZndDtleGlzdCA9IDA7CiAJaWYgKGRldmljZS0mZ3Q7b3BlbikgewogCQloaWRfaHdfY2xvc2UoZGV2aWNlLSZndDtoaWQpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDtkZXZpY2UtJmd0O3dhaXQpOwotCX0gZWxzZSB7Ci0JCXJvY2NhdF9mcmVlX2RldmljZShkZXZpY2UpOwogCX0KJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGV2aWNlLSZndDtyZWFkZXJzX2xvY2spOwomIzQzOwomIzQzOwlrcmVmX3B1dCgmYW1wO2RldmljZS0mZ3Q7a3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTsKIAogc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKLQlzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlOwotCXVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7CiYjNDM7CXN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItJmd0O2RldmljZTsKIAlsb25nIHJldHZhbCA9IDA7CiAKLQltdXRleF9sb2NrKCZhbXA7ZGV2aWNlc19sb2NrKTsKLQotCWRldmljZSA9IGRldmljZXNbbWlub3JdOwotCWlmICghZGV2aWNlKSB7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBST0NDQVRJT0NHUkVQU0laRToKIAkJaWYgKHB1dF91c2VyKGRldmljZS0mZ3Q7cmVwb3J0X3NpemUsIChpbnQgX191c2VyICopYXJnKSkKQEAgLTQxMSw4ICYjNDM7NDE3LDcgQEAgc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIAlkZWZhdWx0OgogCQlyZXR2YWwgPSAtRU5PVFRZOwogCX0KLW91dDoKLQltdXRleF91bmxvY2soJmFtcDtkZXZpY2VzX2xvY2spOwomIzQzOwogCXJldHVybiByZXR2YWw7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNjYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSb2NjYXQgSElEIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggZm9yIHRoZSBSb2NjYXQgSElEIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGJyZWFrIGRvd24gdGhlIGNoYW5nZXMsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIHJlZmFjdG9yaW5nIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlJiMzOTtzIGxpZmV0aW1lIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBzdW1tYXJ5IGluZGljYXRlcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCB0byB1c2luZyBga3JlZmAgZm9yIHJlZmVyZW5jZSBjb3VudGluZywgcmVwbGFjaW5nIHRoZSBvbGQsIHBvdGVudGlhbGx5IGxlc3Mgcm9idXN0IG1ldGhvZHMuCgpTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgdGhleSYjMzk7dmUgYWRkZWQgYSBga3JlZmAgbWVtYmVyIHRvIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgc29saWQgZmlyc3Qgc3RlcC4gVGhlIHJlcGxhY2VtZW50IG9mIGRpcmVjdCBgcm9jY2F0X2ZyZWVfZGV2aWNlYCBjYWxscyB3aXRoIGBrcmVmX3B1dGAgYW5kIHRoZSBpbmNsdXNpb24gb2YgYGtyZWZfaW5pdGAgYW5kIGBrcmVmX2dldGAgcG9pbnQgdG8gYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgZGV2aWNlJiMzOTtzIGxpZmVjeWNsZS4gYHJvY2NhdF9vcGVuYCBub3cgc2VlbXMgdG8gYmUgY29ycmVjdGx5IGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50IHVzaW5nIGBrcmVmX2dldGAsIHN0b3JpbmcgdGhlIHBvaW50ZXIsIGFuZCBgcm9jY2F0X3JlbGVhc2VgIGRlY3JlbWVudGluZyBpdCB3aXRoIGBrcmVmX3B1dGAuIFNtYXJ0IG1vdmUuIFRoaXMgc2hvdWxkIGhlbHAgcHJldmVudCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgc2NlbmFyaW9zLgoKVGhlIG1vZGlmaWNhdGlvbiB0byBgcm9jY2F0X2lvY3RsYCB0byBnZXQgdGhlIGRldmljZSBmcm9tIGByZWFkZXItJmd0O2RldmljZWAgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCBgZGV2aWNlc1ttaW5vcl1gIGlzIGFub3RoZXIgcG9zaXRpdmUgY2hhbmdlLiBUaGF0IGVsaW1pbmF0ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIG1ha2VzIHRoZSBkcml2ZXIgbW9yZSB0aHJlYWQtc2FmZS4KClRoZSBhZGp1c3RtZW50cyBpbiBgcm9jY2F0X2Rpc2Nvbm5lY3RgIGFyZSBpbnRlcmVzdGluZy4gUmVtb3ZpbmcgdGhlIGRldmljZSBmcm9tIHRoZSBhcnJheSwgc2V0dGluZyBgZGV2aWNlLSZndDtleGlzdCA9IDBgLCBhbmQgdGhlbiBjYWxsaW5nIGBrcmVmX3B1dGAgaXMgdGhlIGNvcnJlY3Qgc2VxdWVuY2UuIFRoZSBtb3ZlIG9mIGluaXRpYWxpemF0aW9uIGluIGByb2NjYXRfY29ubmVjdGAgYmVmb3JlIGBkZXZpY2VfY3JlYXRlYC9gZGV2aWNlc1ttaW5vcl0gPSBkZXZpY2U7YCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBkZXZpY2UgY3JlYXRpb24uIEkgbGlrZSB0aGUgYWRkZWQgYm91bmRzIGNoZWNrcyBvbiB0aGUgbWlub3IgbnVtYmVycyBhcyB3ZWxsLiBUaGF0JiMzOTtzIGEgc3RhbmRhcmQgYWRkaXRpb24sIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgZm9yIHJvYnVzdG5lc3MuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYCBpdHNlbGYuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcmVncmVzc2lvbnMgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCYjMzk7cyBteSBtYWluIGFyZWEgb2YgY29uY2VybiBub3cuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciBhbnkgZGF0YSB0aGF0IGlzIHVzZWQgYmVmb3JlIGJlaW5nIHNldCwgZXNwZWNpYWxseSBpbiB0aGUgYXJlYXMgdG91Y2hlZCBieSB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyBhbmQgZGV2aWNlIHN0cnVjdHVyZSBhY2Nlc3MuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgdG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBSb2NjYXQgZHJpdmVyIGZvciBMaW51eFxuICAgNDpcdCAqXG4gICA1Olx0ICogQ29weXJpZ2h0IChjKSAyMDEwIFN0ZWZhbiBBY2hhdHogXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFx1MDAzZVxuICAgNjpcdCAqL1xuICAgNzpcdFxuICAgODpcdC8qXG4gICA5Olx0ICovXG4gIDEwOlx0XG4gIDExOlx0LypcbiAgMTI6XHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XG4gIDEzOlx0ICogaGFyZHdhcmUgdG8gdXNlcmxhbmQuIFRoZXNlIGV2ZW50cyBpbmNsdWRlIHJlcXVlc3RzIGZvciBvbi1zY3JlZW4tZGlzcGxheSBvZlxuICAxNDpcdCAqIHByb2ZpbGUgb3IgZHBpIHNldHRpbmdzIG9yIHJlcXVlc3RzIGZvciBleGVjdXRpb24gb2YgbWFjcm8gc2VxdWVuY2VzIHRoYXQgYXJlXG4gIDE1Olx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXG4gIDE2Olx0ICogaW1wbGVtZW50YXRpb24gYW5kIGNvbnRhaW5zIGRhdGEgdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIGEgc2luZ2xlIGhpZCBldmVudFxuICAxNzpcdCAqIG9yIGVsc2UgaGlkcmF3IGNvdWxkIGhhdmUgYmVlbiB1c2VkLlxuICAxODpcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cbiAgMTk6XHQgKi9cbiAgMjA6XHRcbiAgMjE6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAyMjpcdFxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICAyNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gIDI3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDI4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMzA6XHRcbiAgMzE6XHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXG4gIDMyOlx0I2RlZmluZSBST0NDQVRfTUFYX0RFVklDRVMgOFxuICAzMzpcdFxuICAzNDpcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xuICAzNTpcdCNkZWZpbmUgUk9DQ0FUX0NCVUZfU0laRSAxNlxuICAzNjpcdFxuICAzNzpcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcbiAgMzg6XHRcdHVpbnQ4X3QgKnZhbHVlO1xuICAzOTpcdH07XG4gIDQwOlx0XG4gIDQxOlx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xuICA0MjpcdFx0c3RydWN0IGtyZWYga3JlZjtcbiAgNDM6XHRcdHVuc2lnbmVkIGludCBtaW5vcjtcbiAgNDQ6XHRcdGludCByZXBvcnRfc2l6ZTtcbiAgNDU6XHRcdGludCBvcGVuO1xuICA0NjpcdFx0aW50IGV4aXN0O1xuICA0NzpcdFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbiAgNDg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiAgNDk6XHRcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XG4gIDUwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XG4gIDUxOlx0XHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xuICA1MjpcdFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcbiAgNTM6XHRcbiAgNTQ6XHRcdC8qXG4gIDU1Olx0XHQgKiBjaXJjdWxhcl9idWZmZXIgaGFzIG9uZSB3cml0ZXIgYW5kIG11bHRpcGxlIHJlYWRlcnMgd2l0aCB0aGVpciBvd25cbiAgNTY6XHRcdCAqIHJlYWQgcG9pbnRlcnNcbiAgNTc6XHRcdCAqL1xuICA1ODpcdFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgY2J1ZltST0NDQVRfQ0JVRl9TSVpFXTtcbiAgNTk6XHRcdGludCBjYnVmX2VuZDtcbiAgNjA6XHRcdHN0cnVjdCBtdXRleCBjYnVmX2xvY2s7XG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciB7XG4gIDY0Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7XG4gIDY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuICA2NjpcdFx0aW50IGNidWZfc3RhcnQ7XG4gIDY3Olx0fTtcbiAgNjg6XHRcbiAgNjk6XHRzdGF0aWMgaW50IHJvY2NhdF9tYWpvcjtcbiAgNzA6XHRzdGF0aWMgc3RydWN0IGNkZXYgcm9jY2F0X2NkZXY7XG4gIDcxOlx0XG4gIDcyOlx0c3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XG4gIDczOlx0LyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovXG4gIDc0Olx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xuICA3NTpcdFxuICA3NjpcdHN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiAgNzc6XHR7XG4gIDc4Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cbiAgNzk6XHRcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTtcbiAgODA6XHRcdGludCBpO1xuICA4MTpcdFxuICA4MjpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUk9DQ0FUX0NCVUZfU0laRTsgaSYjNDM7JiM0MzspXG4gIDgzOlx0XHRcdGtmcmVlKGRldmljZS1cdTAwM2VjYnVmW2ldLnZhbHVlKTtcbiAgODQ6XHRcdGtmcmVlKGRldmljZSk7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBzc2l6ZV90IHJvY2NhdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuICA4ODpcdFx0XHRzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcbiAgODk6XHR7XG4gIDkwOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gIDkxOlx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiAgOTI6XHRcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XG4gIDkzOlx0XHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcbiAgOTQ6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuICA5NTpcdFxuICA5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAgOTc6XHRcbiAgOTg6XHRcdC8qIG5vIGRhdGE/ICovXG4gIDk5Olx0XHRpZiAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTAwOlx0XHRcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0LCBcdTAwMjZ3YWl0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU4MQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgaGlkLXJvY2NhdC5jYCwgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBCYWNrIGludG8gYGhpZC1yb2NjYXQuY2AqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgYmFjayBpbnRvIGBoaWQtcm9jY2F0LmNgLiBJIG5lZWQgdG8gcmUtZXhhbWluZSB0aGlzIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBkZXZpY2UsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgcmVtYWluaW5nIHNlY3Rpb25zLiBJJiMzOTt2ZSBjb3ZlcmVkIGEgbG90IGFscmVhZHksIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBmb3IgdGhpcyBhbmFseXNpcy4gSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyBJIG1pZ2h0IGhhdmUgbWlzc2VkIGluIHRoZSBpbml0aWFsIHBhc3MsIG9yIGFueSBhcmVhcyB0aGF0IHJlcXVpcmUgbW9yZSBpbi1kZXB0aCBzY3J1dGlueSwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiB0aGVzZSBSb2NjYXQgZGV2aWNlcy4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBzdWJ0bGV0aWVzIGluIGhvdyBpdCBoYW5kbGVzIHNwZWNpZmljIGNvbW1hbmRzLCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIG9yIG1heWJlIGV2ZW4gZXJyb3IgaGFuZGxpbmcgSSBkaWRuJiMzOTt0IGNhdGNoIGJlZm9yZS4gVGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBlc3BlY2lhbGx5IGluIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYWZmZWN0IHN0YWJpbGl0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgdGhpcyBkcml2ZXIgaGFzIHRvIHNheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiAxMDI6XHRcbiAxMDM6XHRcdFx0Lyogd2FpdCBmb3IgZGF0YSAqL1xuIDEwNDpcdFx0XHR3aGlsZSAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKSB7XG4gMTA1Olx0XHRcdFx0aWYgKGZpbGUtXHUwMDNlZl9mbGFncyBcdTAwMjYgT19OT05CTE9DSykge1xuIDEwNjpcdFx0XHRcdFx0cmV0dmFsID0gLUVBR0FJTjtcbiAxMDc6XHRcdFx0XHRcdGJyZWFrO1xuIDEwODpcdFx0XHRcdH1cbiAxMDk6XHRcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbiAxMTA6XHRcdFx0XHRcdHJldHZhbCA9IC1FUkVTVEFSVFNZUztcbiAxMTE6XHRcdFx0XHRcdGJyZWFrO1xuIDExMjpcdFx0XHRcdH1cbiAxMTM6XHRcdFx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDExNDpcdFx0XHRcdFx0cmV0dmFsID0gLUVJTztcbiAxMTU6XHRcdFx0XHRcdGJyZWFrO1xuIDExNjpcdFx0XHRcdH1cbiAxMTc6XHRcbiAxMTg6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMTE5Olx0XHRcdFx0c2NoZWR1bGUoKTtcbiAxMjA6XHRcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuIDEyMTpcdFx0XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gMTIyOlx0XHRcdH1cbiAxMjM6XHRcbiAxMjQ6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbiAxMjU6XHRcdFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQsIFx1MDAyNndhaXQpO1xuIDEyNjpcdFx0fVxuIDEyNzpcdFxuIDEyODpcdFx0LyogaGVyZSB3ZSBlaXRoZXIgaGF2ZSBkYXRhIG9yIGEgcmVhc29uIHRvIHJldHVybiBpZiByZXR2YWwgaXMgc2V0ICovXG4gMTI5Olx0XHRpZiAocmV0dmFsKVxuIDEzMDpcdFx0XHRnb3RvIGV4aXRfdW5sb2NrO1xuIDEzMTpcdFxuIDEzMjpcdFx0cmVwb3J0ID0gXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZbcmVhZGVyLVx1MDAzZWNidWZfc3RhcnRdO1xuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIElmIHJlcG9ydCBpcyBsYXJnZXIgdGhhbiByZXF1ZXN0ZWQgYW1vdW50IG9mIGRhdGEsIHJlc3Qgb2YgcmVwb3J0XG4gMTM1Olx0XHQgKiBpcyBsb3N0IVxuIDEzNjpcdFx0ICovXG4gMTM3Olx0XHRsZW4gPSBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgXHUwMDNlIGNvdW50ID8gY291bnQgOiBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemU7XG4gMTM4Olx0XG4gMTM5Olx0XHRpZiAoY29weV90b191c2VyKGJ1ZmZlciwgcmVwb3J0LVx1MDAzZXZhbHVlLCBsZW4pKSB7XG4gMTQwOlx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gMTQxOlx0XHRcdGdvdG8gZXhpdF91bmxvY2s7XG4gMTQyOlx0XHR9XG4gMTQzOlx0XHRyZXR2YWwgJiM0Mzs9IGxlbjtcbiAxNDQ6XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAxNDU6XHRcbiAxNDY6XHRleGl0X3VubG9jazpcbiAxNDc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiAxNDg6XHRcdHJldHVybiByZXR2YWw7XG4gMTQ5Olx0fVxuIDE1MDpcdFxuIDE1MTpcdHN0YXRpYyBfX3BvbGxfdCByb2NjYXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcbiAxNTI6XHR7XG4gMTUzOlx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMTU0Olx0XHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2cmVhZGVyLVx1MDAzZWRldmljZS1cdTAwM2V3YWl0LCB3YWl0KTtcbiAxNTU6XHRcdGlmIChyZWFkZXItXHUwMDNlY2J1Zl9zdGFydCAhPSByZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWNidWZfZW5kKVxuIDE1NjpcdFx0XHRyZXR1cm4gRVBPTExJTiB8IEVQT0xMUkROT1JNO1xuIDE1NzpcdFx0aWYgKCFyZWFkZXItXHUwMDNlZGV2aWNlLVx1MDAzZWV4aXN0KVxuIDE1ODpcdFx0XHRyZXR1cm4gRVBPTExFUlIgfCBFUE9MTEhVUDtcbiAxNTk6XHRcdHJldHVybiAwO1xuIDE2MDpcdH1cbiAxNjE6XHRcbiAxNjI6XHRzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIDE2MzpcdHtcbiAxNjQ6XHRcdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XG4gMTY1Olx0XHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xuIDE2NjpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAxNjc6XHRcdGludCBlcnJvciA9IDA7XG4gMTY4Olx0XG4gMTY5Olx0XHRyZWFkZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm9jY2F0X3JlYWRlcik7XG4gMTcwOlx0XHRpZiAoIXJlYWRlcilcbiAxNzE6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTcyOlx0XG4gMTczOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMTc0Olx0XG4gMTc1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAxNzY6XHRcbiAxNzc6XHRcdGlmICghZGV2aWNlKSB7XG4gMTc4Olx0XHRcdHByX2VtZXJnKFwmIzM0O3JvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2VzbiYjMzk7dCBleGlzdFxcblwmIzM0OywgbWlub3IpO1xuIDE3OTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTgwOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDE4MTpcdFx0XHRrZnJlZShyZWFkZXIpO1xuIDE4MjpcdFx0XHRyZXR1cm4gZXJyb3I7XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4gMTg2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAxODc6XHRcbiAxODg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMTg5Olx0XG4gMTkwOlx0XHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuIDE5MTpcdFx0XHRlcnJvciA9IC1FTk9ERVY7XG4gMTkyOlx0XHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbiAxOTM6XHRcdH1cbiAxOTQ6XHRcbiAxOTU6XHRcdGlmICghZGV2aWNlLVx1MDAzZW9wZW4mIzQzOyYjNDM7KSB7XG4gMTk2Olx0XHRcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXG4gMTk3Olx0XHRcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcbiAxOTg6XHRcdFx0aWYgKGVycm9yIFx1MDAzYyAwKSB7XG4gMTk5Olx0XHRcdFx0LS1kZXZpY2UtXHUwMDNlb3BlbjtcbiAyMDA6XHRcdFx0XHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFJlbWFpbmRlcioqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBqdXN0IGZpbmlzaGVkIGFuYWx5emluZyB0aGUgaW5pdGlhbCBwb3J0aW9uIG9mIHRoaXMgZmlsZS4gTm93LCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGV4YW1pbmUgdGhlIHJlc3Qg4oCTIHNwZWNpZmljYWxseSwgZnJvbSBsaW5lIDIwMSBvbndhcmRzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHJlbWFpbmluZyBzZWN0aW9uIHRvIGNvbnRhaW4gdGhlIGNydWNpYWwgZGF0YSBvciBpbnNpZ2h0cyBJJiMzOTttIGxvb2tpbmcgZm9yLCBwZXJoYXBzIHRoZSBjdWxtaW5hdGlvbiBvZiB0aGUgcHJvY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byByYXBpZGx5IHNjYW4gZm9yIHRoZSByZWxldmFudCBwYXR0ZXJucyBvciB2YXJpYWJsZXMgdGhhdCBoYXZlIGNhdWdodCBteSBleWUgc28gZmFyIGluIHRoZSBkb2N1bWVudC4gSSBtYXkgbmVlZCB0byBhcHBseSBzcGVjaWZpYyBmaWx0ZXJzIG9yIHRyYW5zZm9ybWF0aW9ucyBkZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIGJhc2VkIG9uIHRoZSBjb250ZXh0IEkmIzM5O3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3J0aW9uLiBUaGlzIGNvdWxkIGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzogY3Jvc3MtcmVmZXJlbmNpbmcgdmFsdWVzLCBhcHBseWluZyBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtLCBjb21wYXJpbmcgdG8ga25vd24gZGF0YXNldHMsIG9yIGhpZ2hsaWdodGluZyBhbm9tYWxpZXMuIEkgd2lsbCBwcm9jZWVkIHdpdGggZm9jdXMgYW5kIHByZWNpc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDE6XHRcdFx0fVxuIDIwMjpcdFxuIDIwMzpcdFx0XHRlcnJvciA9IGhpZF9od19vcGVuKGRldmljZS1cdTAwM2VoaWQpO1xuIDIwNDpcdFx0XHRpZiAoZXJyb3IgXHUwMDNjIDApIHtcbiAyMDU6XHRcdFx0XHRoaWRfaHdfcG93ZXIoZGV2aWNlLVx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xuIDIwNjpcdFx0XHRcdC0tZGV2aWNlLVx1MDAzZW9wZW47XG4gMjA3Olx0XHRcdFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xuIDIwODpcdFx0XHR9XG4gMjA5Olx0XHR9XG4gMjEwOlx0XG4gMjExOlx0XHRyZWFkZXItXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xuIDIxMjpcdFx0LyogbmV3IHJlYWRlciBkb2VzbiYjMzk7dCBnZXQgb2xkIGV2ZW50cyAqL1xuIDIxMzpcdFx0cmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPSBkZXZpY2UtXHUwMDNlY2J1Zl9lbmQ7XG4gMjE0Olx0XG4gMjE1Olx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlLCBcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycyk7XG4gMjE2Olx0XHRmaWxlLVx1MDAzZXByaXZhdGVfZGF0YSA9IHJlYWRlcjtcbiAyMTc6XHRcbiAyMTg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyMTk6XHRcdHJldHVybiAwO1xuIDIyMDpcdFxuIDIyMTpcdGV4aXRfZXJyX3JlYWRlcnM6XG4gMjIyOlx0XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMjIzOlx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiAyMjQ6XHRcdGtmcmVlKHJlYWRlcik7XG4gMjI1Olx0XHRyZXR1cm4gZXJyb3I7XG4gMjI2Olx0fVxuIDIyNzpcdFxuIDIyODpcdHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gMjI5Olx0e1xuIDIzMDpcdFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDIzMTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gMjMyOlx0XG4gMjMzOlx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIDIzNDpcdFx0bGlzdF9kZWwoXHUwMDI2cmVhZGVyLVx1MDAzZW5vZGUpO1xuIDIzNTpcdFxuIDIzNjpcdFx0aWYgKCEtLWRldmljZS1cdTAwM2VvcGVuKSB7XG4gMjM3Olx0XHRcdC8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovXG4gMjM4Olx0XHRcdGlmIChkZXZpY2UtXHUwMDNlZXhpc3QpIHtcbiAyMzk6XHRcdFx0XHRoaWRfaHdfcG93ZXIoZGV2aWNlLVx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xuIDI0MDpcdFx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiAyNDE6XHRcdFx0fVxuIDI0MjpcdFx0fVxuIDI0MzpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIDI0NDpcdFxuIDI0NTpcdFx0a2ZyZWUocmVhZGVyKTtcbiAyNDY6XHRcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuIDI0NzpcdFxuIDI0ODpcdFx0cmV0dXJuIDA7XG4gMjQ5Olx0fVxuIDI1MDpcdFxuIDI1MTpcdC8qXG4gMjUyOlx0ICogcm9jY2F0X3JlcG9ydF9ldmVudCgpIC0gb3V0cHV0IGRhdGEgdG8gcmVhZGVyc1xuIDI1MzpcdCAqIEBtaW5vcjogbWlub3IgZGV2aWNlIG51bWJlciByZXR1cm5lZCBieSByb2NjYXRfY29ubmVjdCgpXG4gMjU0Olx0ICogQGRhdGE6IHBvaW50ZXIgdG8gZGF0YVxuIDI1NTpcdCAqXG4gMjU2Olx0ICogUmV0dXJuIHZhbHVlIGlzIHplcm8gb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4gMjU3Olx0ICpcbiAyNTg6XHQgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGludGVycnVwdCBoYW5kbGVyLlxuIDI1OTpcdCAqL1xuIDI2MDpcdGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXG4gMjYxOlx0e1xuIDI2MjpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAyNjM6XHRcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXI7XG4gMjY0Olx0XHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xuIDI2NTpcdFx0dWludDhfdCAqbmV3X3ZhbHVlO1xuIDI2NjpcdFxuIDI2NzpcdFx0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuIDI2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyNjk6XHRcbiAyNzA6XHRcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuIDI3MTpcdFx0aWYgKCFkZXZpY2UpXG4gMjcyOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDI3MzpcdFxuIDI3NDpcdFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUsIEdGUF9BVE9NSUMpO1xuIDI3NTpcdFx0aWYgKCFuZXdfdmFsdWUpXG4gMjc2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDI3NzpcdFxuIDI3ODpcdFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAyNzk6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMjgwOlx0XG4gMjgxOlx0XHRyZXBvcnQgPSBcdTAwMjZkZXZpY2UtXHUwMDNlY2J1ZltkZXZpY2UtXHUwMDNlY2J1Zl9lbmRdO1xuIDI4MjpcdFxuIDI4MzpcdFx0LyogcGFzc2luZyBOVUxMIGlzIHNhZmUgKi9cbiAyODQ6XHRcdGtmcmVlKHJlcG9ydC1cdTAwM2V2YWx1ZSk7XG4gMjg1Olx0XG4gMjg2Olx0XHRyZXBvcnQtXHUwMDNldmFsdWUgPSBuZXdfdmFsdWU7XG4gMjg3Olx0XHRkZXZpY2UtXHUwMDNlY2J1Zl9lbmQgPSAoZGV2aWNlLVx1MDAzZWNidWZfZW5kICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAyODg6XHRcbiAyODk6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocmVhZGVyLCBcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVycywgbm9kZSkge1xuIDI5MDpcdFx0XHQvKlxuIDI5MTpcdFx0XHQgKiBBcyB3ZSBhbHJlYWR5IGluc2VydGVkIG9uZSBlbGVtZW50LCB0aGUgYnVmZmVyIGNhbiYjMzk7dCBiZVxuIDI5MjpcdFx0XHQgKiBlbXB0eS4gSWYgc3RhcnQgYW5kIGVuZCBhcmUgZXF1YWwsIGJ1ZmZlciBpcyBmdWxsIGFuZCB3ZVxuIDI5MzpcdFx0XHQgKiBpbmNyZWFzZSBzdGFydCwgc28gdGhhdCBzbG93IHJlYWRlciBtaXNzZXMgb25lIGV2ZW50LCBidXRcbiAyOTQ6XHRcdFx0ICogZ2V0cyB0aGUgbmV3ZXIgb25lcyBpbiB0aGUgcmlnaHQgb3JkZXIuXG4gMjk1Olx0XHRcdCAqL1xuIDI5NjpcdFx0XHRpZiAocmVhZGVyLVx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVx1MDAzZWNidWZfZW5kKVxuIDI5NzpcdFx0XHRcdHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cdTAwM2VjYnVmX3N0YXJ0ICYjNDM7IDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcbiAyOTg6XHRcdH1cbiAyOTk6XHRcbiAzMDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlY2J1Zl9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJIGFtIHRoZSBvbmUgdGhpbmtpbmcgaXQsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgUmVtYWluZGVyIG9mIHRoZSBGaWxlIChTZWN0aW9ucyAzMDEgT253YXJkKSoqCgpBbHJpZ2h0LCB0aW1lIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIHRoZSBiYWNrIGVuZCBvZiB0aGlzIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIHNlY3Rpb24gMzAxIHRvIHRoZSBlbmQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoZSBtYXRlcmlhbCBoZXJlIGlzIGdvaW5nIHRvIGJ1aWxkIG9uIHRoZSBmb3VuZGF0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZC4gUGVyaGFwcyBpdCBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBlZGdlLWNhc2UgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IGZpbmFsIHJlZmluZW1lbnRzIHRvIHRoZSBtZXRob2RvbG9neSB0aGF0IGhhcyBiZWVuIHB1dCBmb3J0aC4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIHByb3Bvc2VkIGFsZ29yaXRobSBzY2FsZXMsIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGRldGFpbHMgb24gdGhlIHRlc3QgZW52aXJvbm1lbnQsIGFuZCBpZiB0aGV5JiMzOTt2ZSBhY2NvdW50ZWQgZm9yIHZhcmlhdGlvbnMgaW4gdGhlIGluY29taW5nIGRhdGEgc3RyZWFtLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhlaXIgc29sdXRpb24gaXMuIEkmIzM5O20gYWxzbyBob3BpbmcgZm9yIHRoZSBjb25jbHVzaW9uIHRvIHRoZSBkb2N1bWVudCwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gdGhlaXIgb3ZlcmFsbCBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDE6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMDI6XHRcbiAzMDM6XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZkZXZpY2UtXHUwMDNld2FpdCk7XG4gMzA0Olx0XHRyZXR1cm4gMDtcbiAzMDU6XHR9XG4gMzA2Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XG4gMzA3Olx0XG4gMzA4Olx0LypcbiAzMDk6XHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XG4gMzEwOlx0ICogQGNsYXNzOiB0aGUgY2xhc3MgdGhhdHMgdXNlZCB0byBjcmVhdGUgdGhlIGRldmljZS4gTWVhbnQgdG8gaG9sZCBkZXZpY2VcbiAzMTE6XHQgKiBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzLlxuIDMxMjpcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxuIDMxMzpcdCAqIEByZXBvcnRfc2l6ZTogc2l6ZSBvZiByZXBvcnRzXG4gMzE0Olx0ICpcbiAzMTU6XHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxuIDMxNjpcdCAqIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuIDMxNzpcdCAqL1xuIDMxODpcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXG4gMzE5Olx0e1xuIDMyMDpcdFx0dW5zaWduZWQgaW50IG1pbm9yO1xuIDMyMTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiAzMjI6XHRcdGludCB0ZW1wO1xuIDMyMzpcdFxuIDMyNDpcdFx0ZGV2aWNlID0ga3phbGxvY19vYmooc3RydWN0IHJvY2NhdF9kZXZpY2UpO1xuIDMyNTpcdFx0aWYgKCFkZXZpY2UpXG4gMzI2Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDMyNzpcdFxuIDMyODpcdFx0a3JlZl9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbiAzMjk6XHRcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuIDMzMDpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIDMzMTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiAzMzI6XHRcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4gMzMzOlx0XHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuIDMzNDpcdFx0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbiAzMzU6XHRcdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4gMzM2Olx0XHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbiAzMzc6XHRcbiAzMzg6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiAzMzk6XHRcbiAzNDA6XHRcdGZvciAobWlub3IgPSAwOyBtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyAmIzQzOyYjNDM7bWlub3IpIHtcbiAzNDE6XHRcdFx0aWYgKGRldmljZXNbbWlub3JdKVxuIDM0MjpcdFx0XHRcdGNvbnRpbnVlO1xuIDM0MzpcdFx0XHRicmVhaztcbiAzNDQ6XHRcdH1cbiAzNDU6XHRcbiAzNDY6XHRcdGlmIChtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTKSB7XG4gMzQ3Olx0XHRcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xuIDM0ODpcdFx0fSBlbHNlIHtcbiAzNDk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzUwOlx0XHRcdGtmcmVlKGRldmljZSk7XG4gMzUxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM1MjpcdFx0fVxuIDM1MzpcdFxuIDM1NDpcdFx0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4gMzU1Olx0XG4gMzU2Olx0XHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiAzNTc6XHRcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiAzNTg6XHRcdFx0XHRcJiMzNDslcyVzJWRcJiMzNDssIFwmIzM0O3JvY2NhdFwmIzM0OywgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG4gMzU5Olx0XG4gMzYwOlx0XHRpZiAoSVNfRVJSKGRldmljZS1cdTAwM2VkZXYpKSB7XG4gMzYxOlx0XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzNjI6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzYzOlx0XHRcdHRlbXAgPSBQVFJfRVJSKGRldmljZS1cdTAwM2VkZXYpO1xuIDM2NDpcdFx0XHRrZnJlZShkZXZpY2UpO1xuIDM2NTpcdFx0XHRyZXR1cm4gdGVtcDtcbiAzNjY6XHRcdH1cbiAzNjc6XHRcbiAzNjg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM2OTpcdFxuIDM3MDpcdFx0cmV0dXJuIG1pbm9yO1xuIDM3MTpcdH1cbiAzNzI6XHRFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XG4gMzczOlx0XG4gMzc0Olx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcbiAzNzU6XHQgKiBAbWlub3I6IHRoZSBtaW5vciBkZXZpY2UgbnVtYmVyIHJldHVybmVkIGJ5IHJvY2NhdF9jb25uZWN0KClcbiAzNzY6XHQgKi9cbiAzNzc6XHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcbiAzNzg6XHR7XG4gMzc5Olx0XHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuIDM4MDpcdFxuIDM4MTpcdFx0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuIDM4MjpcdFx0XHRyZXR1cm47XG4gMzgzOlx0XG4gMzg0Olx0XHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gMzg1Olx0XHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbiAzODY6XHRcdGRldmljZXNbbWlub3JdID0gTlVMTDtcbiAzODc6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIDM4ODpcdFxuIDM4OTpcdFx0aWYgKCFkZXZpY2UpXG4gMzkwOlx0XHRcdHJldHVybjtcbiAzOTE6XHRcbiAzOTI6XHRcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiAzOTM6XHRcbiAzOTQ6XHRcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gMzk1Olx0XHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwO1xuIDM5NjpcdFx0aWYgKGRldmljZS1cdTAwM2VvcGVuKSB7XG4gMzk3Olx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiAzOTg6XHRcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbiAzOTk6XHRcdH1cbiA0MDA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMjI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgZ2VhcmVkIHRvd2FyZCBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlJlbWFpbmluZyBMaW5lIEluc3BlY3Rpb24gLSBBIEZvY3VzZWQgUmV2aWV3KioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGZpbmFsIGJsb2NrLCBsaW5lcyA0MDEgdGhyb3VnaCB0aGUgZW5kLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZWl0aGVyOiBhKSBjb250YWluIGNvbmNsdWRpbmcgcmVtYXJrcyBhbmQgc3VtbWFyaWVzIG9mIHByZXZpb3VzIGZpbmRpbmdzLCBvciBiKSBleHBsb3JlIHBvdGVudGlhbCBhdmVudWVzIG9yIG9wZW4gcXVlc3Rpb25zIHRoYXQgZW1lcmdlZCBmcm9tIHRoZSByZXNlYXJjaC4gSWYgcHJldmlvdXMgbGluZSBzZWdtZW50cyBhcmUgYW55dGhpbmcgdG8gZ28gYnksIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZnVuY3Rpb24gb3IgcHVycG9zZSBvZiB0aGlzIHNlZ21lbnQgYW5kIGFkanVzdCBteSBwZXJzcGVjdGl2ZSBhY2NvcmRpbmdseS4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgaXQgd2lsbCBiZSBtdWNoIGVhc2llciB0byBhc3Nlc3MgdGhpcyBzZWdtZW50LCBub3cgdGhhdCBJIGhhdmUgdGhlIGNvbnRleHQgb2YgdGhlIHByZXZpb3VzIGZpbmRpbmdzLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAyMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAxOlx0XG4gNDAyOlx0XHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiA0MDM6XHR9XG4gNDA0Olx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xuIDQwNTpcdFxuIDQwNjpcdHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gNDA3Olx0e1xuIDQwODpcdFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIDQwOTpcdFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cdTAwM2VkZXZpY2U7XG4gNDEwOlx0XHRsb25nIHJldHZhbCA9IDA7XG4gNDExOlx0XG4gNDEyOlx0XHRzd2l0Y2ggKGNtZCkge1xuIDQxMzpcdFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiA0MTQ6XHRcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuIDQxNTpcdFx0XHRcdHJldHZhbCA9IC1FRkFVTFQ7XG4gNDE2Olx0XHRcdGJyZWFrO1xuIDQxNzpcdFx0ZGVmYXVsdDpcbiA0MTg6XHRcdFx0cmV0dmFsID0gLUVOT1RUWTtcbiA0MTk6XHRcdH1cbiA0MjA6XHRcbiA0MjE6XHRcdHJldHVybiByZXR2YWw7XG4gNDIyOlx0fVxuIDQyMzpcdFxuIDQyNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJvY2NhdF9vcHMgPSB7XG4gNDI1Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiA0MjY6XHRcdC5yZWFkID0gcm9jY2F0X3JlYWQsXG4gNDI3Olx0XHQucG9sbCA9IHJvY2NhdF9wb2xsLFxuIDQyODpcdFx0Lm9wZW4gPSByb2NjYXRfb3BlbixcbiA0Mjk6XHRcdC5yZWxlYXNlID0gcm9jY2F0X3JlbGVhc2UsXG4gNDMwOlx0XHQubGxzZWVrID0gbm9vcF9sbHNlZWssXG4gNDMxOlx0XHQudW5sb2NrZWRfaW9jdGwgPSByb2NjYXRfaW9jdGwsXG4gNDMyOlx0fTtcbiA0MzM6XHRcbiA0MzQ6XHRzdGF0aWMgaW50IF9faW5pdCByb2NjYXRfaW5pdCh2b2lkKVxuIDQzNTpcdHtcbiA0MzY6XHRcdGludCByZXR2YWw7XG4gNDM3Olx0XHRkZXZfdCBkZXZfaWQ7XG4gNDM4Olx0XG4gNDM5Olx0XHRyZXR2YWwgPSBhbGxvY19jaHJkZXZfcmVnaW9uKFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxuIDQ0MDpcdFx0XHRcdFJPQ0NBVF9NQVhfREVWSUNFUywgXCYjMzQ7cm9jY2F0XCYjMzQ7KTtcbiA0NDE6XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiA0NDI6XHRcdFx0cHJfd2FybihcJiMzNDtjYW4mIzM5O3QgZ2V0IG1ham9yIG51bWJlclxcblwmIzM0Oyk7XG4gNDQzOlx0XHRcdGdvdG8gZXJyb3I7XG4gNDQ0Olx0XHR9XG4gNDQ1Olx0XG4gNDQ2Olx0XHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xuIDQ0NzpcdFxuIDQ0ODpcdFx0Y2Rldl9pbml0KFx1MDAyNnJvY2NhdF9jZGV2LCBcdTAwMjZyb2NjYXRfb3BzKTtcbiA0NDk6XHRcdHJldHZhbCA9IGNkZXZfYWRkKFx1MDAyNnJvY2NhdF9jZGV2LCBkZXZfaWQsIFJPQ0NBVF9NQVhfREVWSUNFUyk7XG4gNDUwOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTA2CgkJCQkJCQlvdXRwdXQ6IDI0OQoJCQkJCQkJdGhvdWdodHM6IDY3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBjb21taXQuIFRoZSBjb3JlIG9mIGl0IGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcgaW4gYGhpZC1yb2NjYXQuY2AgdG8gYWRkcmVzcyBzb21lIHByZXR0eSBuYXN0eSBidWdzOiB1c2UtYWZ0ZXItZnJlZSBhbmQgY29uY3VycmVuY3kgaXNzdWVzLiBUaGUgc29sdXRpb24/IFJlZmVyZW5jZSBjb3VudGluZyBmb3IgdGhlIGBzdHJ1Y3Qgcm9jY2F0X2RldmljZWAgdXNpbmcgYHN0cnVjdCBrcmVmYC4gVGhpcyBlbnN1cmVzIHRoYXQgZXZlbiBpZiBhIGRldmljZSBkaXNjb25uZWN0cyB3aGlsZSBhIGZpbGUgaXMgc3RpbGwgb3BlbiwgdGhlIGByb2NjYXRfZGV2aWNlYCBzdHJ1Y3Qgc3RpY2tzIGFyb3VuZCB1bnRpbCBhbGwgZmlsZSByZWxlYXNlIGhhbmRsZXJzIChgcm9jY2F0X3JlbGVhc2VgKSBoYXZlIGRyb3BwZWQgdGhlaXIgcmVmZXJlbmNlcy4gQmV5b25kIHRoYXQsIHRoZXJlIGFyZSBzb21lIG1pbm9yIGZpeGVzIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBudWxsIGRlcmVmZXJlbmNlcywgYW5kIGEgY3JpdGljYWwgaW5pdGlhbGl6YXRpb24gb3JkZXJpbmcgaXNzdWU6IHRoZSBgZGV2aWNlYCB2YXJpYWJsZSBuZWVkcyB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgb3RoZXIgdGhyZWFkcyBjYW4gYWNjZXNzIGl0LgoKTm93LCBsZXQmIzM5O3MgZXZhbHVhdGUgS0FTQU4gdmVyc3VzIEtNU0FOIGZvciB0aGlzLiBGcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZSwgaGVyZSYjMzk7cyB3aGF0IHN0YW5kcyBvdXQ6CgoqICAgKipCdWdzIEZpeGVkOioqIFdlJiMzOTtyZSB0YWxraW5nIHVzZS1hZnRlci1mcmVlIHJlbGF0ZWQgdG8gdGhlIGxpZmVjeWNsZSBvZiB0aGUgYHN0cnVjdCByb2NjYXRfZGV2aWNlYCAoS0FTQU4gd2lsbCBuYWlsIHRoaXMpLCBvdXQtb2YtYm91bmRzIHJlYWRzL3dyaXRlcyByZWxhdGVkIHRvIGFycmF5IGluZGV4aW5nIHdpdGggYG1pbm9yYCAoS0FTQU4gaXMga2V5IGhlcmUpLCBhbmQgcmFjZSBjb25kaXRpb25zIGluIGhvdyBkaXNjb25uZWN0cyBpbnRlcmFjdCB3aXRoIG9wZW4vcmVsZWFzZS9pb2N0bCBjYWxscy4KKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogSSYjMzk7dmUgY2FyZWZ1bGx5IHJldmlld2VkIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIG9jY3Vycy4gVGhlIHBhdGNoIHVzZXMgYGt6YWxsb2Nfb2JqYCBmb3IgYm90aCBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIGFuZCBgc3RydWN0IHJvY2NhdF9yZWFkZXJgLCB3aGljaCBpcyBleGNlbGxlbnQgYmVjYXVzZSBpdCBndWFyYW50ZWVzIHplcm8taW5pdGlhbGl6YXRpb24uIEFueSByZXBvcnQgdmFsdWVzIGFyZSBhbGxvY2F0ZWQgdmlhIGBrbWVtZHVwYC4gRnVydGhlciwgaW4gYHJvY2NhdF9pb2N0bGAgd2UgYXJlIHB1dHRpbmcgYW4gaW50IGByZXBvcnRfc2l6ZWAgKHNldCBieSBgcm9jY2F0X2Nvbm5lY3RgKSB0byB1c2VyIHNwYWNlLiBJbiBgcm9jY2F0X3JlYWRgIHdlIGFyZSByZWFkaW5nIGZyb20gYGRldmljZS0mZ3Q7Y2J1ZltyZWFkZXItJmd0O2NidWZfc3RhcnRdLnZhbHVlYCB3aGljaCB3YXMgcG9wdWxhdGVkIGJ5IGBrbWVtZHVwYCBpbiBgcm9jY2F0X3JlcG9ydF9ldmVudGAuIFRoZXJlIGFyZSBubyBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgYWxzbyBubyBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgY29weSBsb2dpYyBvciBsZW5ndGggY2FsY3VsYXRpb24gdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgoKVGhlcmVmb3JlLCBhbmQgSSBmZWVsIGNvbmZpZGVudCBoZXJlLCBLQVNBTiBjb3ZlcnMgdGhlIGNydWNpYWwgbWVtb3J5IHNhZmV0eSBjb25jZXJucyBpbiB0aGlzIHBhdGNoLiBTcGVjaWZpY2FsbHksIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzLCBhbmQgZG91YmxlLWZyZWUgaXNzdWVzLiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5IGhlcmUgYmVjYXVzZSB0aGUgY29kZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LXJlbGF0ZWQgdnVsbmVyYWJpbGl0aWVzLiBBbGwgc3RydWN0dXJlcyBhcmUgemVyby1pbml0aWFsaXplZCBhbmQgY29waWVkIHVzaW5nIGBrbWVtZHVwYC4gSSYjMzk7ZCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLgoKSW4gc3VtbWFyeSwgSSYjMzk7bGwgZXhwbGFpbiB0aGlzIGxpa2UgdGhpczogVGhlIHBhdGNoIGltcGxlbWVudHMgcmVmZXJlbmNlIGNvdW50aW5nIHZpYSBga3JlZmAgZm9yIGBzdHJ1Y3Qgcm9jY2F0X2RldmljZWAgdG8gcHJldmVudCB1c2UtYWZ0ZXItZnJlZSwgZml4ZXMgc29tZSBib3VuZHMgY2hlY2tzLCBhbmQgZ2V0cyBpbml0aWFsaXphdGlvbiBvcmRlcmluZyBjb3JyZWN0LiBLQVNBTiBpcyB0aGUgcmlnaHQgdG9vbCBiZWNhdXNlIGl0IHRhcmdldHMgdGhlIG1haW4gZmFpbHVyZSBtb2RlcyBvZiB0aGlzIGRldmljZSBsaWZlY3ljbGUgcmVmYWN0b3JpbmcuIEtNU0FOLCBob3dldmVyLCBpcyBub3QgbmVlZGVkIGJlY2F1c2UgYWxsIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQsIHJlcG9ydCBidWZmZXJzIGFyZSBkdXBsaWNhdGVkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3Mgb3IgYnJhbmNoZXMgYXJlIGludHJvZHVjZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDIyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cblxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cblxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG5cblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDU6NDkuOTgxODQxMjg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU1NDE4NTQwNTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSElEX1JPQ0NBVFwiLFxuICAgIFwiVVNCX0hJRFwiLFxuICAgIFwiSElEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm9jY2F0X2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9kaXNjb25uZWN0XCIsXG4gICAgXCJyb2NjYXRfcmVwb3J0X2V2ZW50XCIsXG4gICAgXCJyb2NjYXRfb3BlblwiLFxuICAgIFwicm9jY2F0X3JlbGVhc2VcIixcbiAgICBcInJvY2NhdF9pb2N0bFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGJ5IGludHJvZHVjaW5nIGtyZWYtYmFzZWQgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBzdHJ1Y3Qgcm9jY2F0X2RldmljZSwgcHJvcGVybHkgYm91bmRzLWNoZWNraW5nIG1pbm9yIGRldmljZSBpbmRleGVzLCBhbmQgZW5zdXJpbmcgc3RydWN0IGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGV4cG9zaW5nIHRoZSBkZXZpY2UgaW4gdGhlIGdsb2JhbCBkZXZpY2VzIGFycmF5Llxcblxcbi0gS0FTQU4gYXBwbGljYWJpbGl0eTogVGhlIHByaW1hcnkgYnVncyBhZGRyZXNzZWQgYW5kIHBvdGVudGlhbGx5IGludHJvZHVjZWQgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIHByZW1hdHVyZSBkZWFsbG9jYXRpb24sIGFuZCBvdXQtb2YtYm91bmRzIGluZGV4aW5nIGluIHRoZSBkZXZpY2VzIGFycmF5LiBUaGVzZSBtZW1vcnkgc2FmZXR5IGlzc3VlcyBhcmUgZGlyZWN0bHkgZGV0ZWN0ZWQgYnkgS0FTQU4uXFxuLSBLTVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzdHJ1Y3R1cmVzIChzdHJ1Y3Qgcm9jY2F0X2RldmljZSwgc3RydWN0IHJvY2NhdF9yZWFkZXIpIGFyZSBhbGxvY2F0ZWQgd2l0aCBremFsbG9jX29iaigpLCByZXBvcnQgZGF0YSBpcyBhbGxvY2F0ZWQgYW5kIGNvcGllZCB3aXRoIGttZW1kdXAoKSwgYW5kIGFsbCBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyIGluIHJvY2NhdF9yZWFkIG9yIHB1dF91c2VyIGluIHJvY2NhdF9pb2N0bCkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZC5cXG5cXG5UaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDU6NDkuOTgxODQ2MTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5MzE4NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjViNjZjMWQzZDBjZGE0NzY0MWU1MDhmYmRiOTFmMDQzZWM1MGU0Y1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xcbmluZGV4IDRmMTVlYjk1MTAzOTYuLmVhYTQ3YmJiNzBkYTggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXFxuKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXFxuQEAgLTIxLDggKzIxLDEwIEBAXFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXFxcIjogXFxcIiBmbXRcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZGV2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rcmVmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wb2xsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiBcXG5AQCAtMzcsNiArMzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7XFxuK1xcdHN0cnVjdCBrcmVmIGtyZWY7XFxuIFxcdHVuc2lnbmVkIGludCBtaW5vcjtcXG4gXFx0aW50IHJlcG9ydF9zaXplO1xcbiBcXHRpbnQgb3BlbjtcXG5AQCAtNzAsOCArNzMsMTAgQEAgc3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XFxuIC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqL1xcbiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7XFxuIFxcbi1zdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSlcXG4rc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKVxcbiB7XFxuK1xcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPVxcbitcXHRcXHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBST0NDQVRfQ0JVRl9TSVpFOyBpKyspXFxuQEAgLTE3MiwxMSArMTc3LDIxIEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcdGlmICghZGV2aWNlKSB7XFxuIFxcdFxcdHByX2VtZXJnKFxcXCJyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24ndCBleGlzdFxcXFxuXFxcIiwgbWlub3IpO1xcbiBcXHRcXHRlcnJvciA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gZXhpdF9lcnJfZGV2aWNlcztcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbitcXHRcXHRrZnJlZShyZWFkZXIpO1xcbitcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIFxcdH1cXG4gXFxuK1xcdGtyZWZfZ2V0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIFxcbitcXHRpZiAoIWRldmljZS1cXHUwMDNlZXhpc3QpIHtcXG4rXFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICghZGV2aWNlLVxcdTAwM2VvcGVuKyspIHtcXG4gXFx0XFx0LyogcG93ZXIgb24gZGV2aWNlIG9uIGFkZGluZyBmaXJzdCByZWFkZXIgKi9cXG4gXFx0XFx0ZXJyb3IgPSBoaWRfaHdfcG93ZXIoZGV2aWNlLVxcdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcXG5AQCAtMjAwLDQ2ICsyMTUsMzUgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gXFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gcmVhZGVyO1xcbiBcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuK1xcdHJldHVybiAwO1xcbitcXG4gZXhpdF9lcnJfcmVhZGVyczpcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuLWV4aXRfZXJyX2RldmljZXM6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRrZnJlZShyZWFkZXIpO1xcbitcXHRrcmVmX3B1dChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xcbitcXHRrZnJlZShyZWFkZXIpO1xcbiBcXHRyZXR1cm4gZXJyb3I7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcXG4gXFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4tXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuLVxcbi1cXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4tXFx0aWYgKCFkZXZpY2UpIHtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbi1cXHRcXHRwcl9lbWVyZyhcXFwicm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJ3QgZXhpc3RcXFxcblxcXCIsIG1pbm9yKTtcXG4tXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLVxcdH1cXG4rXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cXHUwMDNlZGV2aWNlO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiBcXHRsaXN0X2RlbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlKTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuLVxcdGtmcmVlKHJlYWRlcik7XFxuIFxcbiBcXHRpZiAoIS0tZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIFxcdFxcdC8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovXFxuIFxcdFxcdGlmIChkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIFxcdFxcdFxcdGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xcbiBcXHRcXHRcXHRoaWRfaHdfY2xvc2UoZGV2aWNlLVxcdTAwM2VoaWQpO1xcbi1cXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbitcXHRrZnJlZShyZWFkZXIpO1xcbitcXHRrcmVmX3B1dChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjYwLDcgKzI2NCwxMiBAQCBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxcbiBcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xcbiBcXHR1aW50OF90ICpuZXdfdmFsdWU7XFxuIFxcbitcXHRpZiAobWlub3IgXFx1MDAzYyAwIHx8IG1pbm9yIFxcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4rXFx0aWYgKCFkZXZpY2UpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXFx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcXG4gXFx0aWYgKCFuZXdfdmFsdWUpXFxuQEAgLTMxNiw2ICszMjUsMTYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnRcXG4gXFx0aWYgKCFkZXZpY2UpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYpO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbitcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuK1xcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbitcXHRkZXZpY2UtXFx1MDAzZWV4aXN0ID0gMTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCA9IDA7XFxuK1xcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIFxcbiBcXHRmb3IgKG1pbm9yID0gMDsgbWlub3IgXFx1MDAzYyBST0NDQVRfTUFYX0RFVklDRVM7ICsrbWlub3IpIHtcXG5AQCAtMzMyLDYgKzM1MSw4IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0XFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbitcXHRkZXZpY2UtXFx1MDAzZW1pbm9yID0gbWlub3I7XFxuK1xcbiBcXHRkZXZpY2UtXFx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFxcdTAwMjZoaWQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0TUtERVYocm9jY2F0X21ham9yLCBtaW5vciksIE5VTEwsXFxuIFxcdFxcdFxcdFxcXCIlcyVzJWRcXFwiLCBcXFwicm9jY2F0XFxcIiwgaGlkLVxcdTAwM2Vkcml2ZXItXFx1MDAzZW5hbWUsIG1pbm9yKTtcXG5AQCAtMzQ2LDE2ICszNjcsNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxcbiBcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiBcXG4tXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0KTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVycyk7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4tXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjYnVmX2xvY2spO1xcbi1cXHRkZXZpY2UtXFx1MDAzZW1pbm9yID0gbWlub3I7XFxuLVxcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbi1cXHRkZXZpY2UtXFx1MDAzZWV4aXN0ID0gMTtcXG4tXFx0ZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCA9IDA7XFxuLVxcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4tXFxuIFxcdHJldHVybiBtaW5vcjtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XFxuQEAgLTM2Nyw0MiArMzc4LDM3IEBAIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKVxcbiB7XFxuIFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIFxcbitcXHRpZiAobWlub3IgXFx1MDAzYyAwIHx8IG1pbm9yIFxcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gXFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuK1xcdGRldmljZXNbbWlub3JdID0gTlVMTDtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiBcXG4tXFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7IC8qIFRPRE8gZXhpc3QgbWF5YmUgbm90IG5lZWRlZCAqL1xcbitcXHRpZiAoIWRldmljZSlcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0ZGV2aWNlX2Rlc3Ryb3koZGV2aWNlLVxcdTAwM2VkZXYtXFx1MDAzZWNsYXNzLCBNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSk7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbi1cXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4tXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7XFxuIFxcdGlmIChkZXZpY2UtXFx1MDAzZW9wZW4pIHtcXG4gXFx0XFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cXHUwMDNlaGlkKTtcXG4gXFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4rXFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xcbiBcXG4gc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4ge1xcbi1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTtcXG4tXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4tXFx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcXG4rXFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cXHUwMDNlZGV2aWNlO1xcbiBcXHRsb25nIHJldHZhbCA9IDA7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbi1cXG4tXFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuLVxcdGlmICghZGV2aWNlKSB7XFxuLVxcdFxcdHJldHZhbCA9IC1FTk9ERVY7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHR9XFxuLVxcbiBcXHRzd2l0Y2ggKGNtZCkge1xcbiBcXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxcbiBcXHRcXHRpZiAocHV0X3VzZXIoZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxcbkBAIC00MTEsOCArNDE3LDcgQEAgc3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dmFsID0gLUVOT1RUWTtcXG4gXFx0fVxcbi1vdXQ6XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4rXFxuIFxcdHJldHVybiByZXR2YWw7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA1OjUxLjU0MTc5MTI4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTIzNDk3NDk2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSElEX1JPQ0NBVFwiLFxuICAgIFwiVVNCX0hJRFwiLFxuICAgIFwiSElEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm9jY2F0X2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9kaXNjb25uZWN0XCIsXG4gICAgXCJyb2NjYXRfcmVwb3J0X2V2ZW50XCIsXG4gICAgXCJyb2NjYXRfb3BlblwiLFxuICAgIFwicm9jY2F0X3JlbGVhc2VcIixcbiAgICBcInJvY2NhdF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMga3JlZiByZWZlcmVuY2UgY291bnRpbmcgYW5kIHJlZmFjdG9ycyBsb2NraW5nIGFjcm9zcyB0aGUgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlIHN1YnN5c3RlbSAoaGlkLXJvY2NhdCkgdG8gZml4IGxpZmVjeWNsZSBhbmQgY29uY3VycmVuY3kgcmFjZXMgYmV0d2VlbiByb2NjYXQgY2hhcmFjdGVyIGRldmljZSBvcGVyYXRpb25zIChvcGVuLCByZWxlYXNlLCBpb2N0bCkgYW5kIGRldmljZSBjb25uZWN0L2Rpc2Nvbm5lY3QvZXZlbnQgaGFuZGxpbmcuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1enphYmxlIHZpYSBVU0IgZW11bGF0aW9uIChyYXctZ2FkZ2V0L3VoaWQpIGFuZCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1YjY2YzFkM2QwY2RhNDc2NDFlNTA4ZmJkYjkxZjA0M2VjNTBlNGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDIyOjA1OjQ4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG5pbmRleCA0ZjE1ZWI5NTEwMzk2Li5lYWE0N2JiYjcwZGE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG4rKysgYi9kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcbkBAIC0yMSw4ICsyMSwxMCBAQFxuICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgXCI6IFwiIGZtdFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NkZXYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BvbGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiBcbkBAIC0zNyw2ICszOSw3IEBAIHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcbiB9O1xuIFxuIHN0cnVjdCByb2NjYXRfZGV2aWNlIHtcbitcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHR1bnNpZ25lZCBpbnQgbWlub3I7XG4gXHRpbnQgcmVwb3J0X3NpemU7XG4gXHRpbnQgb3BlbjtcbkBAIC03MCw4ICs3MywxMCBAQCBzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcbiAvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIGRldmljZXMgYXJyYXkgKi9cbiBzdGF0aWMgREVGSU5FX01VVEVYKGRldmljZXNfbG9jayk7XG4gXG4tc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UpXG4rc3RhdGljIHZvaWQgcm9jY2F0X2ZyZWVfZGV2aWNlKHN0cnVjdCBrcmVmICprcmVmKVxuIHtcbitcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPVxuK1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJvY2NhdF9kZXZpY2UsIGtyZWYpO1xuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBST0NDQVRfQ0JVRl9TSVpFOyBpKyspXG5AQCAtMTcyLDExICsxNzcsMjEgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGlmICghZGV2aWNlKSB7XG4gXHRcdHByX2VtZXJnKFwicm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJ3QgZXhpc3RcXG5cIiwgbWlub3IpO1xuIFx0XHRlcnJvciA9IC1FTk9ERVY7XG4tXHRcdGdvdG8gZXhpdF9lcnJfZGV2aWNlcztcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4rXHRcdGtmcmVlKHJlYWRlcik7XG4rXHRcdHJldHVybiBlcnJvcjtcbiBcdH1cbiBcbitcdGtyZWZfZ2V0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiBcbitcdGlmICghZGV2aWNlLVx1MDAzZWV4aXN0KSB7XG4rXHRcdGVycm9yID0gLUVOT0RFVjtcbitcdFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xuK1x0fVxuK1xuIFx0aWYgKCFkZXZpY2UtXHUwMDNlb3BlbisrKSB7XG4gXHRcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXG4gXHRcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cdTAwM2VoaWQsIFBNX0hJTlRfRlVMTE9OKTtcbkBAIC0yMDAsNDYgKzIxNSwzNSBAQCBzdGF0aWMgaW50IHJvY2NhdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0bGlzdF9hZGRfdGFpbChcdTAwMjZyZWFkZXItXHUwMDNlbm9kZSwgXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuIFx0ZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSByZWFkZXI7XG4gXG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXHRyZXR1cm4gMDtcbitcbiBleGl0X2Vycl9yZWFkZXJzOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuLWV4aXRfZXJyX2RldmljZXM6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0a2ZyZWUocmVhZGVyKTtcbitcdGtyZWZfcHV0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xuK1x0a2ZyZWUocmVhZGVyKTtcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4gc3RhdGljIGludCByb2NjYXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpO1xuIFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbi1cbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbi1cdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXHRcdHByX2VtZXJnKFwicm9jY2F0IGRldmljZSB3aXRoIG1pbm9yICVkIGRvZXNuJ3QgZXhpc3RcXG5cIiwgbWlub3IpO1xuLVx0XHRyZXR1cm4gLUVOT0RFVjtcbi1cdH1cbitcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXHUwMDNlZGV2aWNlO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbiBcdGxpc3RfZGVsKFx1MDAyNnJlYWRlci1cdTAwM2Vub2RlKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbi1cdGtmcmVlKHJlYWRlcik7XG4gXG4gXHRpZiAoIS0tZGV2aWNlLVx1MDAzZW9wZW4pIHtcbiBcdFx0LyogcmVtb3ZpbmcgbGFzdCByZWFkZXIgKi9cbiBcdFx0aWYgKGRldmljZS1cdTAwM2VleGlzdCkge1xuIFx0XHRcdGhpZF9od19wb3dlcihkZXZpY2UtXHUwMDNlaGlkLCBQTV9ISU5UX05PUk1BTCk7XG4gXHRcdFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cdTAwM2VoaWQpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHJvY2NhdF9mcmVlX2RldmljZShkZXZpY2UpO1xuIFx0XHR9XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbitcdGtmcmVlKHJlYWRlcik7XG4rXHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0yNjAsNyArMjY0LDEyIEBAIGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXG4gXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xuIFx0dWludDhfdCAqbmV3X3ZhbHVlO1xuIFxuK1x0aWYgKG1pbm9yIFx1MDAzYyAwIHx8IG1pbm9yIFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuK1x0aWYgKCFkZXZpY2UpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCFuZXdfdmFsdWUpXG5AQCAtMzE2LDYgKzMyNSwxNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0aWYgKCFkZXZpY2UpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuK1x0a3JlZl9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VrcmVmKTtcbitcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4rXHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuK1x0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbitcdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4rXHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcbiBcdGZvciAobWlub3IgPSAwOyBtaW5vciBcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyArK21pbm9yKSB7XG5AQCAtMzMyLDYgKzM1MSw4IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuK1x0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4rXG4gXHRkZXZpY2UtXHUwMDNlZGV2ID0gZGV2aWNlX2NyZWF0ZShrbGFzcywgXHUwMDI2aGlkLVx1MDAzZWRldixcbiBcdFx0XHRNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSwgTlVMTCxcbiBcdFx0XHRcIiVzJXMlZFwiLCBcInJvY2NhdFwiLCBoaWQtXHUwMDNlZHJpdmVyLVx1MDAzZW5hbWUsIG1pbm9yKTtcbkBAIC0zNDYsMTYgKzM2Nyw2IEBAIGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0XG4gXG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcbi1cdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnMpO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWNidWZfbG9jayk7XG4tXHRkZXZpY2UtXHUwMDNlbWlub3IgPSBtaW5vcjtcbi1cdGRldmljZS1cdTAwM2VoaWQgPSBoaWQ7XG4tXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAxO1xuLVx0ZGV2aWNlLVx1MDAzZWNidWZfZW5kID0gMDtcbi1cdGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSA9IHJlcG9ydF9zaXplO1xuLVxuIFx0cmV0dXJuIG1pbm9yO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29ubmVjdCk7XG5AQCAtMzY3LDQyICszNzgsMzcgQEAgdm9pZCByb2NjYXRfZGlzY29ubmVjdChpbnQgbWlub3IpXG4ge1xuIFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbiBcbitcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbitcdFx0cmV0dXJuO1xuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuIFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XG4rXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcbi1cdGRldmljZS1cdTAwM2VleGlzdCA9IDA7IC8qIFRPRE8gZXhpc3QgbWF5YmUgbm90IG5lZWRlZCAqL1xuK1x0aWYgKCFkZXZpY2UpXG4rXHRcdHJldHVybjtcbiBcbiBcdGRldmljZV9kZXN0cm95KGRldmljZS1cdTAwM2VkZXYtXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cdGRldmljZXNbbWlub3JdID0gTlVMTDtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVxuK1x0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbitcdGRldmljZS1cdTAwM2VleGlzdCA9IDA7XG4gXHRpZiAoZGV2aWNlLVx1MDAzZW9wZW4pIHtcbiBcdFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cdTAwM2VoaWQpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2ZGV2aWNlLVx1MDAzZXdhaXQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cm9jY2F0X2ZyZWVfZGV2aWNlKGRldmljZSk7XG4gXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXG4rXHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Rpc2Nvbm5lY3QpO1xuIFxuIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuLVx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XG4tXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xuLVx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcbitcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbitcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXHUwMDNlZGV2aWNlO1xuIFx0bG9uZyByZXR2YWwgPSAwO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVxuLVx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XG4tXHRpZiAoIWRldmljZSkge1xuLVx0XHRyZXR2YWwgPSAtRU5PREVWO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxuIFx0XHRpZiAocHV0X3VzZXIoZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplLCAoaW50IF9fdXNlciAqKWFyZykpXG5AQCAtNDExLDggKzQxNyw3IEBAIHN0YXRpYyBsb25nIHJvY2NhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR2YWwgPSAtRU5PVFRZO1xuIFx0fVxuLW91dDpcbi1cdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuK1xuIFx0cmV0dXJuIHJldHZhbDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNTo1MS41NDE3OTI4MjRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjY3NDg0NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciB0aGUgYGhpZC1yb2NjYXQuY2AgZHJpdmVyIGFuZCBzZWUgaWYgaXQncyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgYWRkZWQgYGtyZWZgIHRvIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0dXJlLiBUaGF0J3MgYSBjbGFzc2ljIHNpZ24gb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW1wcm92ZW1lbnRzLCBzcGVjaWZpY2FsbHkgcmVmZXJlbmNlIGNvdW50aW5nLCB3aGljaCBpbmRpY2F0ZXMgYW4gYXR0ZW1wdCB0byBmaXggdXNlLWFmdGVyLWZyZWUgKFVBRikgdnVsbmVyYWJpbGl0aWVzIG9yIHJhY2UgY29uZGl0aW9ucy4gVGhpcyBpcyB0aGUgcGFydCB0aGF0IHBlcmtzIHVwIG15IGVhcnMuXG5cblRoZSBjb3JlIGZ1bmN0aW9ucyDigJMgYHJvY2NhdF9vcGVuYCwgYHJvY2NhdF9yZWxlYXNlYCwgYHJvY2NhdF9yZXBvcnRfZXZlbnRgLCBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBhbmQgYHJvY2NhdF9pb2N0bGAg4oCTIGFyZSBhbGwgYmVpbmcgdXBkYXRlZCB0byB1dGlsaXplIHRoaXMgbmV3IHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBzdWdnZXN0cyB0aGV5IHdlcmUgaW5kZWVkIGZpbmRpbmcgVUFGIG9yIHJhY2UgaXNzdWVzIHJlbGF0ZWQgdG8gZGV2aWNlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgUm9jY2F0IGRyaXZlciBhbmQgYXJlIHRha2luZyBzdGVwcyB0byBtaXRpZ2F0ZSB0aGVtLiBXZSBuZWVkIHRvIHBheSAqdmVyeSogY2xvc2UgYXR0ZW50aW9uIHRvIHRoZXNlIGZ1bmN0aW9ucy5cblxuVGhpbmtpbmcgYWJvdXQgYXR0YWNrIHN1cmZhY2UsIHRoaXMgZHJpdmVyIGV4cG9zZXMgY2hhcmRldiBpbnRlcmZhY2VzIChsaWtlIGByb2NjYXQwYCkgd2hpY2ggbWVhbnMgd2UgY2FuIGxpa2VseSBpbnRlcmFjdCB3aXRoIGl0IHZpYSBgb3BlbmAsIGByZWFkYCwgYHBvbGxgLCBhbmQgYGlvY3RsYCBjYWxscy4gUm9jY2F0IGRldmljZXMgY2FuIGFsc28gYmUgZW11bGF0ZWQgdGhyb3VnaCBVU0Igb3IgVUhJRCwgd2hpY2ggZ2l2ZXMgdXMgbXVsdGlwbGUgd2F5cyB0byB0cmlnZ2VyIGFuZCBzdHJlc3MgdGhlIGRyaXZlci4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZyBmb3IgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgc2V0dGluZ3MuIEknbGwgdXNlIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhlIGBLY29uZmlnYCBmaWxlIHRvIHNlZSB3aGF0IHRyaWdnZXJzIHRoZSBpbmNsdXNpb24gb2YgYGhpZC1yb2NjYXQuY2AuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhcmUsIGFuZCB3aGF0IG90aGVyIG1vZHVsZXMgbWF5IGFsc28gYmUgaW1wYWN0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHNldCB1cCBhbiBhcHByb3ByaWF0ZSBmdXp6aW5nIGVudmlyb25tZW50LiBUaGVuIEknbGwgc3RhcnQgYnJhaW5zdG9ybWluZyBsaWtlbHkgZm9jdXMgc3ltYm9scyBsaWtlIHRoZSBpb2N0bHMsIG9yIHRoZSBgcm9jY2F0X3JlcG9ydF9ldmVudGAgZnVuY3Rpb24gd2hpY2ggaXMgbGlrZWx5IHdoZXJlIHRoZSBkcml2ZXIgaGFuZGxlcyByYXcgaW5wdXQuIFRoaXMgd2hvbGUgdGhpbmcgc21lbGxzIGxpa2UgYSBnb29kIHRhcmdldCBmb3Igc29tZSBmb2N1c2VkIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNTo1Ny4yMDkyNzkxNTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjI5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicm9jY2F0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaGlkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDEyMjAgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvaGlkL01ha2VmaWxlPTEyNT1vYmotJChDT05GSUdfSElEX1JFVFJPREUpXFx0Kz0gaGlkLXJldHJvZGUub1xcbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyNjpvYmotJChDT05GSUdfSElEX1JPQ0NBVClcXHQrPSBoaWQtcm9jY2F0Lm8gaGlkLXJvY2NhdC1jb21tb24ubyBcXFxcXFxuZHJpdmVycy9oaWQvTWFrZWZpbGU6MTI3OlxcdGhpZC1yb2NjYXQtYXJ2by5vIGhpZC1yb2NjYXQtaXNrdS5vIGhpZC1yb2NjYXQta29uZS5vIFxcXFxcXG5kcml2ZXJzL2hpZC9NYWtlZmlsZToxMjg6XFx0aGlkLXJvY2NhdC1rb25lcGx1cy5vIGhpZC1yb2NjYXQta29uZXB1cmUubyBoaWQtcm9jY2F0LWtvdmFwbHVzLm8gXFxcXFxcbmRyaXZlcnMvaGlkL01ha2VmaWxlOjEyOTpcXHRoaWQtcm9jY2F0LWx1YS5vIGhpZC1yb2NjYXQtcHlyYS5vIGhpZC1yb2NjYXQtcnlvcy5vIGhpZC1yb2NjYXQtc2F2dS5vXFxuZHJpdmVycy9oaWQvTWFrZWZpbGUtMTMwLW9iai0kKENPTkZJR19ISURfUk1JKVxcdFxcdCs9IGhpZC1ybWkub1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjAtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMTojaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTIyLSNpbmNsdWRlIFxcXCJoaWQtaWRzLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MjM6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQtY29tbW9uLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MjQ6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQtYXJ2by5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTI1LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTI2PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2hvd19tb2RlX2tleShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zNi1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM3OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX01PREVfS0VZLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM4LVxcdFxcdFxcdFxcdTAwMjZ0ZW1wX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhcnZvX21vZGVfa2V5KSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz00Nj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3NldF9tb2RlX2tleShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy02NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjY1OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX01PREVfS0VZLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTY2LVxcdFxcdFxcdFxcdTAwMjZ0ZW1wX2J1Ziwgc2l6ZW9mKHN0cnVjdCBhcnZvX21vZGVfa2V5KSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYz03Nj1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3Nob3dfa2V5X21hc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtODYtXFx0bXV0ZXhfbG9jayhcXHUwMDI2YXJ2by1cXHUwMDNlYXJ2b19sb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo4NzpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9LRVlfTUFTSyxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy04OC1cXHRcXHRcXHRcXHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19rZXlfbWFzaykpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9OTY9c3RhdGljIHNzaXplX3QgYXJ2b19zeXNmc19zZXRfa2V5X21hc2soc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMTE0LVxcdG11dGV4X2xvY2soXFx1MDAyNmFydm8tXFx1MDAzZWFydm9fbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MTE1OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3NlbmQodXNiX2RldiwgQVJWT19DT01NQU5EX0tFWV9NQVNLLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTExNi1cXHRcXHRcXHRcXHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19rZXlfbWFzaykpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MTI3PXN0YXRpYyBpbnQgYXJ2b19nZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xMzEtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MTMyOlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgQVJWT19DT01NQU5EX0FDVFVBTF9QUk9GSUxFLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTEzMy1cXHRcXHRcXHRcXHUwMDI2dGVtcF9idWYsIHNpemVvZihzdHJ1Y3QgYXJ2b19hY3R1YWxfcHJvZmlsZSkpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MTUwPXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfc2V0X2FjdHVhbF9wcm9maWxlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTE3MS1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjE3MjpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIEFSVk9fQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xNzMtXFx0XFx0XFx0XFx1MDAyNnRlbXBfYnVmLCBzaXplb2Yoc3RydWN0IGFydm9fYWN0dWFsX3Byb2ZpbGUpKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTE4NT1zdGF0aWMgc3NpemVfdCBhcnZvX3N5c2ZzX3dyaXRlKHN0cnVjdCBmaWxlICpmcCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTE5Ny1cXHRtdXRleF9sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjE5ODpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1ZiwgcmVhbF9zaXplKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0xOTktXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhcnZvLVxcdTAwM2VhcnZvX2xvY2spO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9MjA0PXN0YXRpYyBzc2l6ZV90IGFydm9fc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0yMTktXFx0bXV0ZXhfbG9jayhcXHUwMDI2YXJ2by1cXHUwMDNlYXJ2b19sb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzoyMjA6XFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMjIxLVxcdG11dGV4X3VubG9jayhcXHUwMDI2YXJ2by1cXHUwMDNlYXJ2b19sb2NrKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTI4OT1zdGF0aWMgaW50IGFydm9faW5pdF9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMxNC1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozMTU6XFx0cmV0dmFsID0gcm9jY2F0X2Nvbm5lY3QoXFx1MDAyNmFydm9fY2xhc3MsIGhkZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzE2OlxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgYXJ2b19yb2NjYXRfcmVwb3J0KSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzE3LVxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zMjAtXFx0XFx0YXJ2by1cXHUwMDNlY2hyZGV2X21pbm9yID0gcmV0dmFsO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjMyMTpcXHRcXHRhcnZvLVxcdTAwM2Vyb2NjYXRfY2xhaW1lZCA9IDE7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzIyLVxcdH1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTMzMD1zdGF0aWMgdm9pZCBhcnZvX3JlbW92ZV9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTMzOS1cXHRhcnZvID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM0MDpcXHRpZiAoYXJ2by1cXHUwMDNlcm9jY2F0X2NsYWltZWQpXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM6MzQxOlxcdFxcdHJvY2NhdF9kaXNjb25uZWN0KGFydm8tXFx1MDAzZWNocmRldl9taW5vcik7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzQyLVxcdGtmcmVlKGFydm8pO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmM9Mzg1PXN0YXRpYyB2b2lkIGFydm9fcmVwb3J0X3RvX2NocmRldihzdHJ1Y3QgYXJ2b19kZXZpY2UgY29uc3QgKmFydm8sXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy0zODgtXFx0c3RydWN0IGFydm9fc3BlY2lhbF9yZXBvcnQgY29uc3QgKnNwZWNpYWxfcmVwb3J0O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM4OTpcXHRzdHJ1Y3QgYXJ2b19yb2NjYXRfcmVwb3J0IHJvY2NhdF9yZXBvcnQ7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzkwLVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzkyLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM5MzpcXHRyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBhcnZvLVxcdTAwM2VhY3R1YWxfcHJvZmlsZTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzozOTQ6XFx0cm9jY2F0X3JlcG9ydC5idXR0b24gPSBzcGVjaWFsX3JlcG9ydC1cXHUwMDNlZXZlbnQgXFx1MDAyNlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jLTM5NS1cXHRcXHRcXHRBUlZPX1NQRUNJQUxfUkVQT1JUX0VWRU5UX01BU0tfQlVUVE9OO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzk3LVxcdFxcdFxcdEFSVk9fU1BFQ0lBTF9SRVBPUlRfRVZFTlRfQUNUSU9OX1BSRVNTKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjM5ODpcXHRcXHRyb2NjYXRfcmVwb3J0LmFjdGlvbiA9IEFSVk9fUk9DQ0FUX1JFUE9SVF9BQ1RJT05fUFJFU1M7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtMzk5LVxcdGVsc2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo0MDA6XFx0XFx0cm9jY2F0X3JlcG9ydC5hY3Rpb24gPSBBUlZPX1JPQ0NBVF9SRVBPUlRfQUNUSU9OX1JFTEVBU0U7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDAxLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQwMjpcXHRyb2NjYXRfcmVwb3J0X2V2ZW50KGFydm8tXFx1MDAzZWNocmRldl9taW5vcixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYzo0MDM6XFx0XFx0XFx0KHVpbnQ4X3QgY29uc3QgKilcXHUwMDI2cm9jY2F0X3JlcG9ydCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDA0LX1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jPTQwNj1zdGF0aWMgaW50IGFydm9fcmF3X2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmMtNDEzLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5jOjQxNDpcXHRpZiAoYXJ2byBcXHUwMDI2XFx1MDAyNiBhcnZvLVxcdTAwM2Vyb2NjYXRfY2xhaW1lZClcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uYy00MTUtXFx0XFx0YXJ2b19yZXBvcnRfdG9fY2hyZGV2KGFydm8sIGRhdGEpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg9NTc9ZW51bSBhcnZvX3NwZWNpYWxfcmVwb3J0X2V2ZW50X21hc2tzIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTYxLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjYyOnN0cnVjdCBhcnZvX3JvY2NhdF9yZXBvcnQge1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTYzLVxcdHVpbnQ4X3QgcHJvZmlsZTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTY3LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjY4OmVudW0gYXJ2b19yb2NjYXRfcmVwb3J0X2FjdGlvbiB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNjktXFx0QVJWT19ST0NDQVRfUkVQT1JUX0FDVElPTl9SRUxFQVNFID0gMCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oPTczPXN0cnVjdCBhcnZvX2RldmljZSB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmg6NzQ6XFx0aW50IHJvY2NhdF9jbGFpbWVkO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTc1LVxcdGludCBjaHJkZXZfbWlub3I7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE0OiNpbmNsdWRlIFxcXCJoaWQtcm9jY2F0LWNvbW1vbi5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTUtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjpzdGF0aWMgaW5saW5lIHVpbnQxNl90IHJvY2NhdF9jb21tb24yX2ZlYXR1cmVfcmVwb3J0KHVpbnQ4X3QgcmVwb3J0X2lkKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTcte1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0yMC1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjIxOmludCByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTIyLVxcdFxcdHZvaWQgKmRhdGEsIHVpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMzMtXFx0XFx0XFx0VVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9JTixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjM0OlxcdFxcdFxcdHJvY2NhdF9jb21tb24yX2ZlYXR1cmVfcmVwb3J0KHJlcG9ydF9pZCksXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0zNS1cXHRcXHRcXHQwLCBidWYsIHNpemUsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNDAtfVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6NDE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy00Mi1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjQzOmludCByb2NjYXRfY29tbW9uMl9zZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTQ0LVxcdFxcdHZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNTUtXFx0XFx0XFx0VVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX0RJUl9PVVQsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo1NjpcXHRcXHRcXHRyb2NjYXRfY29tbW9uMl9mZWF0dXJlX3JlcG9ydChyZXBvcnRfaWQpLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNTctXFx0XFx0XFx0MCwgYnVmLCBzaXplLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTYxLX1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjYyOkVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb21tb24yX3NlbmQpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNjMtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo2NDplbnVtIHJvY2NhdF9jb21tb24yX2NvbnRyb2xfc3RhdGVzIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTY1LVxcdFJPQ0NBVF9DT01NT05fQ09OVFJPTF9TVEFUVVNfQ1JJVElDQUwgPSAwLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy03MS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjcyOnN0YXRpYyBpbnQgcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZV9jb250cm9sX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldilcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTczLXtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc0LVxcdGludCByZXR2YWw7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo3NTpcXHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCBjb250cm9sO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtNzYtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTc4LVxcdFxcdG1zbGVlcCg1MCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo3OTpcXHRcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy04MC1cXHRcXHRcXHRcXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjgxOlxcdFxcdFxcdFxcdFxcdTAwMjZjb250cm9sLCBzaXplb2Yoc3RydWN0IHJvY2NhdF9jb21tb24yX2NvbnRyb2wpKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTgyLVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy05Ny1cXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZ1c2JfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzo5ODpcXHRcXHRcXHRcXHRcXHRcXFwicm9jY2F0X2NvbW1vbjJfcmVjZWl2ZV9jb250cm9sX3N0YXR1czogXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtOTktXFx0XFx0XFx0XFx0XFx0XFxcInVua25vd24gcmVzcG9uc2UgdmFsdWUgMHgleFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTA2LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTA3OmludCByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTA4LVxcdFxcdHVpbnQgY29tbWFuZCwgdm9pZCBjb25zdCAqYnVmLCB1aW50IHNpemUpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTExMS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjExMjpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kKHVzYl9kZXYsIGNvbW1hbmQsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xMTMtXFx0aWYgKHJldHZhbClcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTE3LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTE4OlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9yZWNlaXZlX2NvbnRyb2xfc3RhdHVzKHVzYl9kZXYpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTE5LX1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEyMDpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyMS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEyMjppbnQgcm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTIzOlxcdFxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKmRldilcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyNC17XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyNy19XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxMjg6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfZGV2aWNlX2luaXRfc3RydWN0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEyOS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEzMDpzc2l6ZV90IHJvY2NhdF9jb21tb24yX3N5c2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzMS1cXHRcXHRjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTM0LVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopLVxcdTAwM2VwYXJlbnQtXFx1MDAzZXBhcmVudDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjEzNTpcXHRzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlICpyb2NjYXRfZGV2ID0gaGlkX2dldF9kcnZkYXRhKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTEzNi1cXHRzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYodG9fdXNiX2ludGVyZmFjZShkZXYpKTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTQ0LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ1OlxcdG11dGV4X2xvY2soXFx1MDAyNnJvY2NhdF9kZXYtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ2OlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgY29tbWFuZCwgYnVmLCByZWFsX3NpemUpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTQ3OlxcdG11dGV4X3VubG9jayhcXHUwMDI2cm9jY2F0X2Rldi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNDgtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE1MC19XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNTE6RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTItXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNTM6c3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTU0LVxcdFxcdHZvaWQgY29uc3QgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNTctXFx0c3RydWN0IGRldmljZSAqZGV2ID0ga29ial90b19kZXYoa29iaiktXFx1MDAzZXBhcmVudC1cXHUwMDNlcGFyZW50O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmM6MTU4OlxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKnJvY2NhdF9kZXYgPSBoaWRfZ2V0X2RydmRhdGEoZGV2X2dldF9kcnZkYXRhKGRldikpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTU5LVxcdHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih0b191c2JfaW50ZXJmYWNlKGRldikpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNjQtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjU6XFx0bXV0ZXhfbG9jayhcXHUwMDI2cm9jY2F0X2Rldi1cXHUwMDNlbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjY6XFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYzoxNjc6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyb2NjYXRfZGV2LVxcdTAwM2Vsb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jLTE2OC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmMtMTcwLX1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5jOjE3MTpFWFBPUlRfU1lNQk9MX0dQTChyb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uYy0xNzItXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTE0LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MTU6ZW51bSByb2NjYXRfY29tbW9uMl9jb21tYW5kcyB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0xNi1cXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCA9IDB4NCxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMTgtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoxOTpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC0yMC1cXHR1aW50OF90IGNvbW1hbmQ7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTI0LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MjU6aW50IHJvY2NhdF9jb21tb24yX3JlY2VpdmUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHVpbnQgcmVwb3J0X2lkLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMjYtXFx0XFx0dm9pZCAqZGF0YSwgdWludCBzaXplKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjI3OmludCByb2NjYXRfY29tbW9uMl9zZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1aW50IHJlcG9ydF9pZCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTI4LVxcdFxcdHZvaWQgY29uc3QgKmRhdGEsIHVpbnQgc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDoyOTppbnQgcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTMwLVxcdFxcdHVpbnQgY29tbWFuZCwgdm9pZCBjb25zdCAqYnVmLCB1aW50IHNpemUpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMzEtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDozMjpzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfZGV2aWNlIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjMzOlxcdGludCByb2NjYXRfY2xhaW1lZDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM0LVxcdGludCBjaHJkZXZfbWlub3I7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTM3LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6Mzg6aW50IHJvY2NhdF9jb21tb24yX2RldmljZV9pbml0X3N0cnVjdChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjM5OlxcdFxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9kZXZpY2UgKmRldik7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo0MDpzc2l6ZV90IHJvY2NhdF9jb21tb24yX3N5c2ZzX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQxLVxcdFxcdGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDItXFx0XFx0c2l6ZV90IHJlYWxfc2l6ZSwgdWludCBjb21tYW5kKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjQzOnNzaXplX3Qgcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTQ0LVxcdFxcdHZvaWQgY29uc3QgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC00Ny0jZGVmaW5lIFJPQ0NBVF9DT01NT04yX1NZU0ZTX1codGhpbmd5LCBDT01NQU5ELCBTSVpFKSBcXFxcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaDo0ODpzdGF0aWMgc3NpemVfdCByb2NjYXRfY29tbW9uMl9zeXNmc193cml0ZV8gIyMgdGhpbmd5KHN0cnVjdCBmaWxlICpmcCwgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNDktXFx0XFx0c3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLCBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTUxLXsgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NTI6XFx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTUzLVxcdFxcdFxcdFNJWkUsIENPTU1BTkQpOyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTU2LSNkZWZpbmUgUk9DQ0FUX0NPTU1PTjJfU1lTRlNfUih0aGluZ3ksIENPTU1BTkQsIFNJWkUpIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjU3OnN0YXRpYyBzc2l6ZV90IHJvY2NhdF9jb21tb24yX3N5c2ZzX3JlYWRfICMjIHRoaW5neShzdHJ1Y3QgZmlsZSAqZnAsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTU4LVxcdFxcdHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwgXFxcXFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC02MC17IFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjYxOlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkKGZwLCBrb2JqLCBidWYsIG9mZiwgY291bnQsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTYyLVxcdFxcdFxcdFNJWkUsIENPTU1BTkQpOyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl8gIyMgdGhpbmd5ID0geyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTczLVxcdC5zaXplID0gU0laRSwgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6NzQ6XFx0LnJlYWQgPSByb2NjYXRfY29tbW9uMl9zeXNmc19yZWFkXyAjIyB0aGluZ3ksIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjc1OlxcdC53cml0ZSA9IHJvY2NhdF9jb21tb24yX3N5c2ZzX3dyaXRlXyAjIyB0aGluZ3kgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNzYtfVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaD04MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJpbl9hdHRyaWJ1dGUgYmluX2F0dHJfICMjIHRoaW5neSA9IHsgXFxcXFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC04Mi1cXHQuc2l6ZSA9IFNJWkUsIFxcXFxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oOjgzOlxcdC5yZWFkID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfcmVhZF8gIyMgdGhpbmd5LCBcXFxcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC04NC19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oPTg4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl8gIyMgdGhpbmd5ID0geyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWNvbW1vbi5oLTkwLVxcdC5zaXplID0gU0laRSwgXFxcXFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6OTE6XFx0LndyaXRlID0gcm9jY2F0X2NvbW1vbjJfc3lzZnNfd3JpdGVfICMjIHRoaW5neSBcXFxcXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1jb21tb24uaC05Mi19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjIxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9oaWQtcm9jY2F0LmhcXHUwMDNlXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMjItI2luY2x1ZGUgXFxcImhpZC1pZHMuaFxcXCJcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzoyMzojaW5jbHVkZSBcXFwiaGlkLXJvY2NhdC1jb21tb24uaFxcXCJcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzoyNDojaW5jbHVkZSBcXFwiaGlkLXJvY2NhdC1pc2t1LmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMjUtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMT1zdGF0aWMgaW50IGlza3VfcmVjZWl2ZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCBjb21tYW5kLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzMte1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM0OlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9yZWNlaXZlKHVzYl9kZXYsIGNvbW1hbmQsIGJ1Ziwgc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzUtfVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9NDc9c3RhdGljIGludCBpc2t1X3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgaW50IG5ld19wcm9maWxlKVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtNTMtXFx0YnVmLmFjdHVhbF9wcm9maWxlID0gbmV3X3Byb2ZpbGU7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6NTQ6XFx0cmV0dXJuIHJvY2NhdF9jb21tb24yX3NlbmRfd2l0aF9zdGF0dXModXNiX2RldixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy01NS1cXHRcXHRcXHRJU0tVX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUsIFxcdTAwMjZidWYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz02Nz1zdGF0aWMgc3NpemVfdCBpc2t1X3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy03My1cXHRpbnQgcmV0dmFsO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjc0OlxcdHN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy03NS1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTk2LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjk3OlxcdHJvY2NhdF9yZXBvcnQuZXZlbnQgPSBJU0tVX1JFUE9SVF9CVVRUT05fRVZFTlRfUFJPRklMRTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzo5ODpcXHRyb2NjYXRfcmVwb3J0LmRhdGExID0gcHJvZmlsZSArIDE7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6OTk6XFx0cm9jY2F0X3JlcG9ydC5kYXRhMiA9IDA7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6MTAwOlxcdHJvY2NhdF9yZXBvcnQucHJvZmlsZSA9IHByb2ZpbGUgKyAxO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjEwMTpcXHRyb2NjYXRfcmVwb3J0X2V2ZW50KGlza3UtXFx1MDAzZWNocmRldl9taW5vciwgKHVpbnQ4X3QgY29uc3QgKilcXHUwMDI2cm9jY2F0X3JlcG9ydCk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMTAyLVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9MTM3PXN0YXRpYyBzc2l6ZV90IGlza3Vfc3lzZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZwLCBzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTE0OS1cXHRtdXRleF9sb2NrKFxcdTAwMjZpc2t1LVxcdTAwM2Vpc2t1X2xvY2spO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjE1MDpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsIGNvbW1hbmQsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMTUxLVxcdFxcdFxcdCh2b2lkICopYnVmLCBjb3VudCk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0yNjk9c3RhdGljIGludCBpc2t1X2luaXRfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0yOTQtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mjk1OlxcdHJldHZhbCA9IHJvY2NhdF9jb25uZWN0KFxcdTAwMjZpc2t1X2NsYXNzLCBoZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjI5NjpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGlza3Vfcm9jY2F0X3JlcG9ydCkpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTI5Ny1cXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzAwLVxcdFxcdGlza3UtXFx1MDAzZWNocmRldl9taW5vciA9IHJldHZhbDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozMDE6XFx0XFx0aXNrdS1cXHUwMDNlcm9jY2F0X2NsYWltZWQgPSAxO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMwMi1cXHR9XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYz0zMTA9c3RhdGljIHZvaWQgaXNrdV9yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zMTktXFx0aXNrdSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozMjA6XFx0aWYgKGlza3UtXFx1MDAzZXJvY2NhdF9jbGFpbWVkKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjMyMTpcXHRcXHRyb2NjYXRfZGlzY29ubmVjdChpc2t1LVxcdTAwM2VjaHJkZXZfbWlub3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTMyMi1cXHRrZnJlZShpc2t1KTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jPTM4Mj1zdGF0aWMgdm9pZCBpc2t1X3JlcG9ydF90b19jaHJkZXYoc3RydWN0IGlza3VfZGV2aWNlIGNvbnN0ICppc2t1LFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzg0LXtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozODU6XFx0c3RydWN0IGlza3Vfcm9jY2F0X3JlcG9ydCByb2NjYXRfcmVwb3J0O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jLTM4Ni1cXHRzdHJ1Y3QgaXNrdV9yZXBvcnRfYnV0dG9uIGNvbnN0ICpidXR0b25fcmVwb3J0O1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmMtMzkyLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5MzpcXHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gYnV0dG9uX3JlcG9ydC1cXHUwMDNlZXZlbnQ7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk0OlxcdHJvY2NhdF9yZXBvcnQuZGF0YTEgPSBidXR0b25fcmVwb3J0LVxcdTAwM2VkYXRhMTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYzozOTU6XFx0cm9jY2F0X3JlcG9ydC5kYXRhMiA9IGJ1dHRvbl9yZXBvcnQtXFx1MDAzZWRhdGEyO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5NjpcXHRyb2NjYXRfcmVwb3J0LnByb2ZpbGUgPSBpc2t1LVxcdTAwM2VhY3R1YWxfcHJvZmlsZSArIDE7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6Mzk3OlxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoaXNrdS1cXHUwMDNlY2hyZGV2X21pbm9yLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5jOjM5ODpcXHRcXHRcXHQodWludDhfdCBjb25zdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy0zOTktfVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM9NDAxPXN0YXRpYyBpbnQgaXNrdV9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy00MTUtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmM6NDE2OlxcdGlmIChpc2t1LVxcdTAwM2Vyb2NjYXRfY2xhaW1lZClcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuYy00MTctXFx0XFx0aXNrdV9yZXBvcnRfdG9fY2hyZGV2KGlza3UsIGRhdGEpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1Lmg9Nzc9ZW51bSBpc2t1X3JlcG9ydF9idXR0b25fZXZlbnRzIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTgwLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjgxOnN0cnVjdCBpc2t1X3JvY2NhdF9yZXBvcnQge1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTgyLVxcdHVpbnQ4X3QgZXZlbnQ7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaD04OD1zdHJ1Y3QgaXNrdV9kZXZpY2Uge1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjg5OlxcdGludCByb2NjYXRfY2xhaW1lZDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaC05MC1cXHRpbnQgY2hyZGV2X21pbm9yO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzozMDojaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTMxLSNpbmNsdWRlIFxcXCJoaWQtaWRzLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6MzI6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQtY29tbW9uLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6MzM6I2luY2x1ZGUgXFxcImhpZC1yb2NjYXQta29uZS5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTM0LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9NDU9c3RhdGljIHZvaWQga29uZV9wcm9maWxlX3JlcG9ydChzdHJ1Y3Qga29uZV9kZXZpY2UgKmtvbmUsIHVpbnQgbmV3X3Byb2ZpbGUpXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNDYte1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjQ3OlxcdHN0cnVjdCBrb25lX3JvY2NhdF9yZXBvcnQgcm9jY2F0X3JlcG9ydDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy00OC1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo0OTpcXHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0ga29uZV9tb3VzZV9ldmVudF9zd2l0Y2hfcHJvZmlsZTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo1MDpcXHRyb2NjYXRfcmVwb3J0LnZhbHVlID0gbmV3X3Byb2ZpbGU7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NTE6XFx0cm9jY2F0X3JlcG9ydC5rZXkgPSAwO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjUyOlxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cXHUwMDNlY2hyZGV2X21pbm9yLCAodWludDhfdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy01My19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz02NTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmtvbmVfZ3JvdXBzW10gPSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy02NTgtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NjU5Oi8qIGtvbmVfY2xhc3MgaXMgdXNlZCBmb3IgY3JlYXRpbmcgc3lzZnMgYXR0cmlidXRlcyB2aWEgcm9jY2F0IGNoYXIgZGV2aWNlICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNjYwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xhc3Mga29uZV9jbGFzcyA9IHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTY5OT1zdGF0aWMgaW50IGtvbmVfaW5pdF9zcGVjaWFscyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldilcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTcxOS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3MjA6XFx0XFx0cmV0dmFsID0gcm9jY2F0X2Nvbm5lY3QoXFx1MDAyNmtvbmVfY2xhc3MsIGhkZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6NzIxOlxcdFxcdFxcdFxcdFxcdHNpemVvZihzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0KSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtNzIyLVxcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy03MjUtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3MjY6XFx0XFx0XFx0a29uZS1cXHUwMDNlcm9jY2F0X2NsYWltZWQgPSAxO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTcyNy1cXHRcXHRcXHRrb25lLVxcdTAwM2VjaHJkZXZfbWlub3IgPSByZXR2YWw7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz03Mzk9c3RhdGljIHZvaWQga29uZV9yZW1vdmVfc3BlY2lhbHMoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy03NDYtXFx0XFx0a29uZSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo3NDc6XFx0XFx0aWYgKGtvbmUtXFx1MDAzZXJvY2NhdF9jbGFpbWVkKVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjc0ODpcXHRcXHRcXHRyb2NjYXRfZGlzY29ubmVjdChrb25lLVxcdTAwM2VjaHJkZXZfbWlub3IpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jLTc0OS1cXHRcXHRrZnJlZShoaWRfZ2V0X2RydmRhdGEoaGRldikpO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9ODEzPXN0YXRpYyB2b2lkIGtvbmVfcmVwb3J0X3RvX2NocmRldihzdHJ1Y3Qga29uZV9kZXZpY2UgY29uc3QgKmtvbmUsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MTUte1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgxNjpcXHRzdHJ1Y3Qga29uZV9yb2NjYXRfcmVwb3J0IHJvY2NhdF9yZXBvcnQ7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODE3LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtODIyLVxcdGNhc2Uga29uZV9tb3VzZV9ldmVudF9vc2RfZHBpOlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyMzpcXHRcXHRyb2NjYXRfcmVwb3J0LmV2ZW50ID0gZXZlbnQtXFx1MDAzZWV2ZW50O1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNDpcXHRcXHRyb2NjYXRfcmVwb3J0LnZhbHVlID0gZXZlbnQtXFx1MDAzZXZhbHVlO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNTpcXHRcXHRyb2NjYXRfcmVwb3J0LmtleSA9IDA7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODI2OlxcdFxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cXHUwMDNlY2hyZGV2X21pbm9yLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgyNzpcXHRcXHRcXHRcXHQodWludDhfdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MjgtXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MzEtXFx0XFx0aWYgKGV2ZW50LVxcdTAwM2V2YWx1ZSA9PSBrb25lX2tleXN0cm9rZV9hY3Rpb25fcHJlc3MpIHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzI6XFx0XFx0XFx0cm9jY2F0X3JlcG9ydC5ldmVudCA9IGV2ZW50LVxcdTAwM2VldmVudDtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo4MzM6XFx0XFx0XFx0cm9jY2F0X3JlcG9ydC52YWx1ZSA9IGtvbmUtXFx1MDAzZWFjdHVhbF9wcm9maWxlO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgzNDpcXHRcXHRcXHRyb2NjYXRfcmVwb3J0LmtleSA9IGV2ZW50LVxcdTAwM2VtYWNyb19rZXk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODM1OlxcdFxcdFxcdHJvY2NhdF9yZXBvcnRfZXZlbnQoa29uZS1cXHUwMDNlY2hyZGV2X21pbm9yLFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjgzNjpcXHRcXHRcXHRcXHRcXHQodWludDhfdCAqKVxcdTAwMjZyb2NjYXRfcmVwb3J0KTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04MzctXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM9ODQ4PXN0YXRpYyBpbnQga29uZV9yYXdfZXZlbnQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04NzMtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmM6ODc0OlxcdGlmIChrb25lLVxcdTAwM2Vyb2NjYXRfY2xhaW1lZClcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy04NzUtXFx0XFx0a29uZV9yZXBvcnRfdG9fY2hyZGV2KGtvbmUsIGV2ZW50KTtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTk3Mz1zdGF0aWMgc3RydWN0IGt1bml0X3N1aXRlIGtvbmVfdGVzdF9zdWl0ZSA9IHtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYzo5NzQ6XFx0Lm5hbWUgPSBcXFwiaGlkLXJvY2NhdC1rb25lXFxcIixcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYy05NzUtXFx0LnRlc3RfY2FzZXMgPSBrb25lX3Rlc3RfY2FzZXMsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaD0xNzc9ZW51bSBrb25lX2NvbW1hbmRzIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTE4Ni1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaDoxODc6c3RydWN0IGtvbmVfcm9jY2F0X3JlcG9ydCB7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmgtMTg4LVxcdHVpbnQ4X3QgZXZlbnQ7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaD0xOTM9c3RydWN0IGtvbmVfZGV2aWNlIHtcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTIyMS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaDoyMjI6XFx0aW50IHJvY2NhdF9jbGFpbWVkO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTIyMy1cXHRpbnQgY2hyZGV2X21pbm9yO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTIxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjIyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9oaWQtcm9jY2F0LmhcXHUwMDNlXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTIzLSNpbmNsdWRlIFxcXCJoaWQtaWRzLmhcXFwiXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjI0OiNpbmNsdWRlIFxcXCJoaWQtcm9jY2F0LWNvbW1vbi5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYzoyNTojaW5jbHVkZSBcXFwiaGlkLXJvY2NhdC1rb25lcGx1cy5oXFxcIlxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy0yNi1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYz0zNT1zdGF0aWMgaW50IGtvbmVwbHVzX3NlbmRfY29udHJvbChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwgdWludCB2YWx1ZSxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy0zNy17XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjM4OlxcdHN0cnVjdCByb2NjYXRfY29tbW9uMl9jb250cm9sIGNvbnRyb2w7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTM5LVxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTQ4LVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYzo0OTpcXHRyZXR1cm4gcm9jY2F0X2NvbW1vbjJfc2VuZF93aXRoX3N0YXR1cyh1c2JfZGV2LFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy01MC1cXHRcXHRcXHRST0NDQVRfQ09NTU9OX0NPTU1BTkRfQ09OVFJPTCxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6NTE6XFx0XFx0XFx0XFx1MDAyNmNvbnRyb2wsIHNpemVvZihzdHJ1Y3Qgcm9jY2F0X2NvbW1vbjJfY29udHJvbCkpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuYy01Mi19XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9NTY9c3RhdGljIGludCBrb25lcGx1c19nZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYpXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNjAtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjYxOlxcdHJldHZhbCA9IHJvY2NhdF9jb21tb24yX3JlY2VpdmUodXNiX2RldiwgS09ORVBMVVNfQ09NTUFORF9BQ1RVQUxfUFJPRklMRSxcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNjItXFx0XFx0XFx0XFx1MDAyNmJ1ZiwgS09ORVBMVVNfU0laRV9BQ1RVQUxfUFJPRklMRSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9Njc9c3RhdGljIGludCBrb25lcGx1c19zZXRfYWN0dWFsX3Byb2ZpbGUoc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmMtNzUtXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjc2OlxcdHJldHVybiByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTc3LVxcdFxcdFxcdEtPTkVQTFVTX0NPTU1BTkRfQUNUVUFMX1BST0ZJTEUsXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9ODE9c3RhdGljIHNzaXplX3Qga29uZXBsdXNfc3lzZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTk2LVxcdG11dGV4X2xvY2soXFx1MDAyNmtvbmVwbHVzLVxcdTAwM2Vrb25lcGx1c19sb2NrKTtcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM6OTc6XFx0cmV0dmFsID0gcm9jY2F0X2NvbW1vbjJfcmVjZWl2ZSh1c2JfZGV2LCBjb21tYW5kLCBidWYsIHJlYWxfc2l6ZSk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTk4LVxcdG11dGV4X3VubG9jayhcXHUwMDI2a29uZXBsdXMtXFx1MDAzZWtvbmVwbHVzX2xvY2spO1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jPTEwNj1zdGF0aWMgc3NpemVfdCBrb25lcGx1c19zeXNmc193cml0ZShzdHJ1Y3QgZmlsZSAqZnAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTExOC1cXHRtdXRleF9sb2NrKFxcdTAwMjZrb25lcGx1cy1cXHUwMDNla29uZXBsdXNfbG9jayk7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jOjExOTpcXHRyZXR2YWwgPSByb2NjYXRfY29tbW9uMl9zZW5kX3dpdGhfc3RhdHVzKHVzYl9kZXYsIGNvbW1hbmQsXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5jLTEyMC1cXHRcXHRcXHRidWYsIHJlYWxfc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmM9MjQ4PXN0YXRpYyBzc2l6ZV90IGtvbmVwbHVzX3N5c2ZzX3NldF9hY3R1YWxfcHJvZmlsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA1OjU3LjI2MjIwODcwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2MTE2NzIxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUm9jY2F0IEhJRCBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBkaXZlIGluLiBNeSBmb2N1cyBpcyBvbiB0aGUgYGRyaXZlcnMvaGlkL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSB0aGUgc2VjdGlvbiBjb25jZXJuaW5nIGBDT05GSUdfSElEX1JPQ0NBVGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gUm9jY2F0IEhJRCBkZXZpY2VzLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBjaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcywgZGVmYXVsdCBzZXR0aW5ncywgb3IgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGFyb3VuZCB0aGlzIGNvbmZpZyB0byB1bmRlcnN0YW5kIHdoYXQgUm9jY2F0IGRldmljZXMgYXJlIHN1cHBvcnRlZCwgYW55IHNwZWNpYWwgZmVhdHVyZXMgZW5hYmxlZCwgYW5kIGFueSBwb3RlbnRpYWwgY2F2ZWF0cyBvciBsaW1pdGF0aW9ucy4gVGhpcyBpcyBzdGFuZGFyZCBwcm9jZWR1cmUgd2hlbiBJJ20gYXNzZXNzaW5nIG9yIG1vZGlmeWluZyBkcml2ZXIgY29uZmlndXJhdGlvbnMuIFRoaXMgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHN1cHBvcnRpbmcgdGhlIFJvY2NhdCBzZXJpZXMgb2YgcGVyaXBoZXJhbHMgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZWxsIHRoZSBzdXBwb3J0IGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzI1MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjAxLjg3Mzg4MjU3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI2NjcxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJISURfUk9DQ0FUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaGlkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2hpZC9LY29uZmlnPTEwOTQ9Y29uZmlnIEhJRF9SRVRST0RFXFxuLS1cXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDAtXFxuZHJpdmVycy9oaWQvS2NvbmZpZzoxMTAxOmNvbmZpZyBISURfUk9DQ0FUXFxuZHJpdmVycy9oaWQvS2NvbmZpZy0xMTAyLVxcdHRyaXN0YXRlIFxcXCJSb2NjYXQgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2hpZC9LY29uZmlnLTExMDgtXFxuZHJpdmVycy9oaWQvS2NvbmZpZzoxMTA5OmNvbmZpZyBISURfUk9DQ0FUX0tPTkVfS1VOSVRfVEVTVFxcbmRyaXZlcnMvaGlkL0tjb25maWctMTExMC1cXHRib29sIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIFJvY2NhdCBLb25lIGRyaXZlclxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmRyaXZlcnMvaGlkL0tjb25maWc6MTExMTpcXHRkZXBlbmRzIG9uIEhJRF9ST0NDQVQ9eSBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuZHJpdmVycy9oaWQvS2NvbmZpZy0xMTEyLVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5kcml2ZXJzL2hpZC9NYWtlZmlsZT0xMjU9b2JqLSQoQ09ORklHX0hJRF9SRVRST0RFKVxcdCs9IGhpZC1yZXRyb2RlLm9cXG5kcml2ZXJzL2hpZC9NYWtlZmlsZToxMjY6b2JqLSQoQ09ORklHX0hJRF9ST0NDQVQpXFx0Kz0gaGlkLXJvY2NhdC5vIGhpZC1yb2NjYXQtY29tbW9uLm8gXFxcXFxcbmRyaXZlcnMvaGlkL01ha2VmaWxlLTEyNy1cXHRoaWQtcm9jY2F0LWFydm8ubyBoaWQtcm9jY2F0LWlza3UubyBoaWQtcm9jY2F0LWtvbmUubyBcXFxcXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcXVpcmtzLmM9MjQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfaGF2ZV9zcGVjaWFsX2RyaXZlcltdID0ge1xcbi0tXFxuZHJpdmVycy9oaWQvaGlkLXF1aXJrcy5jLTY1Ni0jZW5kaWZcXG5kcml2ZXJzL2hpZC9oaWQtcXVpcmtzLmM6NjU3OiNpZiBJU19FTkFCTEVEKENPTkZJR19ISURfUk9DQ0FUKVxcbmRyaXZlcnMvaGlkL2hpZC1xdWlya3MuYy02NTgtXFx0eyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1JPQ0NBVCwgVVNCX0RFVklDRV9JRF9ST0NDQVRfQVJWTykgfSxcXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWFydm8uaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0FSVk9fSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtYXJ2by5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfQVJWT19IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1hcnZvLmgtNC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9DT01NT05fSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9DT01NT05fSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtY29tbW9uLmgtNC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWlza3UuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0lTS1VfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtaXNrdS5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfSVNLVV9IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1pc2t1LmgtNC1cXG4tLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jPTkyMT1NT0RVTEVfTElDRU5TRShcXFwiR1BMIHYyXFxcIik7XFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtOTIyLVxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjkyMzojaWYgSVNfRU5BQkxFRChDT05GSUdfSElEX1JPQ0NBVF9LT05FX0tVTklUX1RFU1QpXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmMtOTI0LSNpbmNsdWRlIFxcdTAwM2NrdW5pdC90ZXN0LmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuYz05Nzc9a3VuaXRfdGVzdF9zdWl0ZShrb25lX3Rlc3Rfc3VpdGUpO1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5jOjk3ODojZW5kaWYgLyogQ09ORklHX0hJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUICovXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9LT05FX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmUuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX0tPTkVfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZS5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta29uZXBsdXMuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0tPTkVQTFVTX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvbmVwbHVzLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9LT05FUExVU19IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb25lcGx1cy5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQta292YXBsdXMuaDoyOiNpZm5kZWYgX19ISURfUk9DQ0FUX0tPVkFQTFVTX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWtvdmFwbHVzLmg6MzojZGVmaW5lIF9fSElEX1JPQ0NBVF9LT1ZBUExVU19IXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1rb3ZhcGx1cy5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oOjI6I2lmbmRlZiBfX0hJRF9ST0NDQVRfTFVBX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oOjM6I2RlZmluZSBfX0hJRF9ST0NDQVRfTFVBX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LWx1YS5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1weXJhLmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9QWVJBX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXB5cmEuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX1BZUkFfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtcHlyYS5oLTQtXFxuLS1cXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaC0xLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuZHJpdmVycy9oaWQvaGlkLXJvY2NhdC1zYXZ1Lmg6MjojaWZuZGVmIF9fSElEX1JPQ0NBVF9TQVZVX0hcXG5kcml2ZXJzL2hpZC9oaWQtcm9jY2F0LXNhdnUuaDozOiNkZWZpbmUgX19ISURfUk9DQ0FUX1NBVlVfSFxcbmRyaXZlcnMvaGlkL2hpZC1yb2NjYXQtc2F2dS5oLTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjAxLjkyNDE1NzMzNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM1MDI1NjA1NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEhJRCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBzcGVjaWZpYyBISUQgZHJpdmVyLiBHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCBkaXJlY3Qgcm91dGUgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSBpbiB0aGUgYGRyaXZlcnMvaGlkL2AgZGlyZWN0b3J5LiBBbmQgc2luY2UgSSBrbm93IG15IHdheSBhcm91bmQgdGhlIHNvdXJjZSwgSSdtIGdvaW5nIHRvIGp1bXAgdG8gcm91Z2hseSBsaW5lIDExMDEuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVucmF2ZWwgd2hpY2ggb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIHRoaXMgc3BlY2lmaWMgZHJpdmVyLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGRlcGVuZGVuY2llcyByZXZlYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTU2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MDUuNDI2NzIwNDY5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSZXRyb2RlIDIgVVNCIGFkYXB0ZXIgZm9yIHZpbnRhZ2UgdmlkZW8gZ2FtZXNcXFwiXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIFVTQl9ISURcXG4xMDk3OlxcdFxcdGhlbHBcXG4xMDk4OlxcdFxcdFN1cHBvcnQgZm9yXFxuMTA5OTpcXHRcXHQgICogUmV0cm9kZSAyIGNhcnRyaWRnZSBhbmQgY29udHJvbGxlciBhZGFwdGVyXFxuMTEwMDpcXHRcXG4xMTAxOlxcdGNvbmZpZyBISURfUk9DQ0FUXFxuMTEwMjpcXHRcXHR0cmlzdGF0ZSBcXFwiUm9jY2F0IGRldmljZSBzdXBwb3J0XFxcIlxcbjExMDM6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfSElEXFxuMTEwNDpcXHRcXHRoZWxwXFxuMTEwNTpcXHRcXHRTdXBwb3J0IGZvciBSb2NjYXQgZGV2aWNlcy5cXG4xMTA2OlxcdFxcdFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSb2NjYXQgbW91c2Ugb3Iga2V5Ym9hcmQgYW5kIHdhbnRcXG4xMTA3OlxcdFxcdHN1cHBvcnQgZm9yIGl0cyBzcGVjaWFsIGZ1bmN0aW9uYWxpdGllcy5cXG4xMTA4OlxcdFxcbjExMDk6XFx0Y29uZmlnIEhJRF9ST0NDQVRfS09ORV9LVU5JVF9URVNUXFxuMTExMDpcXHRcXHRib29sIFxcXCJLVW5pdCB0ZXN0cyBmb3IgdGhlIFJvY2NhdCBLb25lIGRyaXZlclxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbjExMTE6XFx0XFx0ZGVwZW5kcyBvbiBISURfUk9DQ0FUPXkgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbjExMTI6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4xMTEzOlxcdFxcdGhlbHBcXG4xMTE0OlxcdFxcdCAgRW5hYmxlIHRoZSBLVW5pdCByZWdyZXNzaW9uIHRlc3RzIGZvciB0aGUgUm9jY2F0IEtvbmUgZHJpdmVyLFxcbjExMTU6XFx0XFx0ICBjb3ZlcmluZyBib3VuZHMgY2hlY2tpbmcgb2YgZGV2aWNlLXN1cHBsaWVkIHByb2ZpbGUgaW5kaWNlcy5cXG4xMTE2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4xMTE3OlxcdFxcbjExMTg6XFx0Y29uZmlnIEhJRF9TQUlURUtcXG4xMTE5OlxcdFxcdHRyaXN0YXRlIFxcXCJTYWl0ZWsgKE1hZCBDYXR6KSBub24tZnVsbHkgSElELWNvbXBsaWFudCBkZXZpY2VzXFxcIlxcbjExMjA6XFx0XFx0aGVscFxcbjExMjE6XFx0XFx0U3VwcG9ydCBmb3IgU2FpdGVrIGRldmljZXMgdGhhdCBhcmUgbm90IGZ1bGx5IGNvbXBsaWFudCB3aXRoIHRoZVxcbjExMjI6XFx0XFx0SElEIHN0YW5kYXJkLlxcbjExMjM6XFx0XFxuMTEyNDpcXHRcXHRTdXBwb3J0ZWQgZGV2aWNlczpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MDUuNDI2ODE3NjU5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwMzAxNzMwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIFJvY2NhdCBISUQgRHJpdmVyKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHRoaXMgUm9jY2F0IEhJRCBkcml2ZXIsIGFuZCBmcmFua2x5LCB0aGVyZSdzIG5vIGJldHRlciB3YXkgdGhhbiB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNgLiBUaGF0IGZpbGUgaXMgdGhlIGNhbm9uaWNhbCBzdGFydGluZyBwb2ludCDigJMgaXTigJlsbCBjb250YWluIHRoZSBjb3JlIGltcGxlbWVudGF0aW9uLCBpbmNsdWRpbmcgYWxsIHRoZSBkZWZpbmVkIGZ1bmN0aW9ucyBhbmQsIGhvcGVmdWxseSwgd2VsbC1zdHJ1Y3R1cmVkIGxvZ2ljLiBIb3BlZnVsbHkgaXQncyB3ZWxsLWNvbW1lbnRlZCBhbmQgZWFzeSB0byBuYXZpZ2F0ZSwgYmVjYXVzZSBJIGRvbid0IGhhdmUgYWxsIGRheS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoZXkncmUgaGFuZGxpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBmZWF0dXJlIHJlcG9ydHMsIGFuZCBhbnkgY3VzdG9tIGV2ZW50IHByb2Nlc3NpbmcgZm9yIHRoZSBSb2NjYXQgaGFyZHdhcmUuIEkgd2FudCB0byBzZWUgKmV2ZXJ5dGhpbmcqIGF0IGEgZ2xhbmNlLCBzbyBJIGNhbiBzdGFydCBmb3JtaW5nIGEgbWVudGFsIG1hcCBvZiB0aGUgZHJpdmVyJ3MgYXJjaGl0ZWN0dXJlIGFuZCBpZGVudGlmeSB0aGUgY3JpdGljYWwgYXJlYXMgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBpZiBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzkwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoxMS43Mjk4Mzg0MTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY2NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogUm9jY2F0IGRyaXZlciBmb3IgTGludXhcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuIEFjaGF0eiBcXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFxcdTAwM2VcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQvKlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdC8qXFxuICAxMjpcXHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XFxuICAxMzpcXHQgKiBoYXJkd2FyZSB0byB1c2VybGFuZC4gVGhlc2UgZXZlbnRzIGluY2x1ZGUgcmVxdWVzdHMgZm9yIG9uLXNjcmVlbi1kaXNwbGF5IG9mXFxuICAxNDpcXHQgKiBwcm9maWxlIG9yIGRwaSBzZXR0aW5ncyBvciByZXF1ZXN0cyBmb3IgZXhlY3V0aW9uIG9mIG1hY3JvIHNlcXVlbmNlcyB0aGF0IGFyZVxcbiAgMTU6XFx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXFxuICAxNjpcXHQgKiBpbXBsZW1lbnRhdGlvbiBhbmQgY29udGFpbnMgZGF0YSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gYSBzaW5nbGUgaGlkIGV2ZW50XFxuICAxNzpcXHQgKiBvciBlbHNlIGhpZHJhdyBjb3VsZCBoYXZlIGJlZW4gdXNlZC5cXG4gIDE4OlxcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuICAyMjpcXHRcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZGV2LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMzA6XFx0XFxuICAzMTpcXHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXFxuICAzMjpcXHQjZGVmaW5lIFJPQ0NBVF9NQVhfREVWSUNFUyA4XFxuICAzMzpcXHRcXG4gIDM0OlxcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xcbiAgMzU6XFx0I2RlZmluZSBST0NDQVRfQ0JVRl9TSVpFIDE2XFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcXG4gIDM4OlxcdFxcdHVpbnQ4X3QgKnZhbHVlO1xcbiAgMzk6XFx0fTtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xcbiAgNDI6XFx0XFx0c3RydWN0IGtyZWYga3JlZjtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGludCBtaW5vcjtcXG4gIDQ0OlxcdFxcdGludCByZXBvcnRfc2l6ZTtcXG4gIDQ1OlxcdFxcdGludCBvcGVuO1xcbiAgNDY6XFx0XFx0aW50IGV4aXN0O1xcbiAgNDc6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcXG4gIDQ4OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gIDQ5OlxcdFxcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XFxuICA1MDpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XFxuICA1MTpcXHRcXHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xcbiAgNTI6XFx0XFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0LypcXG4gIDU1OlxcdFxcdCAqIGNpcmN1bGFyX2J1ZmZlciBoYXMgb25lIHdyaXRlciBhbmQgbXVsdGlwbGUgcmVhZGVycyB3aXRoIHRoZWlyIG93blxcbiAgNTY6XFx0XFx0ICogcmVhZCBwb2ludGVyc1xcbiAgNTc6XFx0XFx0ICovXFxuICA1ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCBjYnVmW1JPQ0NBVF9DQlVGX1NJWkVdO1xcbiAgNTk6XFx0XFx0aW50IGNidWZfZW5kO1xcbiAgNjA6XFx0XFx0c3RydWN0IG11dGV4IGNidWZfbG9jaztcXG4gIDYxOlxcdH07XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0cnVjdCByb2NjYXRfcmVhZGVyIHtcXG4gIDY0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcXG4gIDY1OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuICA2NjpcXHRcXHRpbnQgY2J1Zl9zdGFydDtcXG4gIDY3OlxcdH07XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbnQgcm9jY2F0X21ham9yO1xcbiAgNzA6XFx0c3RhdGljIHN0cnVjdCBjZGV2IHJvY2NhdF9jZGV2O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcXG4gIDczOlxcdC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqL1xcbiAgNzQ6XFx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRzdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cXG4gIDc5OlxcdFxcdFxcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgcm9jY2F0X2RldmljZSwga3JlZik7XFxuICA4MDpcXHRcXHRpbnQgaTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJPQ0NBVF9DQlVGX1NJWkU7IGkrKylcXG4gIDgzOlxcdFxcdFxcdGtmcmVlKGRldmljZS1cXHUwMDNlY2J1ZltpXS52YWx1ZSk7XFxuICA4NDpcXHRcXHRrZnJlZShkZXZpY2UpO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgc3NpemVfdCByb2NjYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDg4OlxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDkxOlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXFx1MDAzZWRldmljZTtcXG4gIDkyOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XFxuICA5MzpcXHRcXHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcXG4gIDk0OlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdC8qIG5vIGRhdGE/ICovXFxuICA5OTpcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpIHtcXG4gMTAwOlxcdFxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQsIFxcdTAwMjZ3YWl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTEuNzI5OTM3NTM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyNjI4NjI1MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgcmVzdCBvZiBgZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jYC4gSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gaG93IHRoaXMgZHJpdmVyIG9wZXJhdGVzLiBLbm93aW5nIHRoZSBiYXNpY3Mgb2YgSElELCBhbmQgaGF2aW5nIHBva2VkIGFyb3VuZCBpbiB0aGUgb3RoZXIgZHJpdmVycywgSSBjYW4gcHJvYmFibHkgcGllY2UgdG9nZXRoZXIgdGhlIGNvcmUgbG9naWMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgdGhlIGRldmljZS1zcGVjaWZpYyBxdWlya3MgYW5kIG1hcHBpbmdzIGZvciBSb2NjYXQgaGFyZHdhcmUuIEknbGwgbmVlZCB0byBsb29rIGZvciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZXMsIHJlcG9ydCBkZXNjcmlwdG9yIHBhcnNpbmcsIGFuZCBob3cgaXQgdHJhbnNsYXRlcyB0aG9zZSBISUQgcmVwb3J0cyBpbnRvIG1lYW5pbmdmdWwgZXZlbnRzIGZvciB0aGUgc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhIGNvbWJpbmF0aW9uIG9mIHN0YW5kYXJkIEhJRCB1c2FnZSBwYWdlcyBhbmQgc29tZSB2ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgY29udHJvbCBhbmQgZmVhdHVyZSByZXBvcnRzIHdpbGwgYmUgY3J1Y2lhbCB0b28sIHRoYXQncyB3aGVyZSB0aGUgYWR2YW5jZWQgY29uZmlndXJhdGlvbiB1c3VhbGx5IGxpdmVzLiBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgaW50ZXJydXB0IGhhbmRsaW5nIG9yIHBvbGxpbmcgc3RyYXRlZ2llcywgYXMgUm9jY2F0IGRldmljZXMgb2Z0ZW4gaGF2ZSBjb21wbGV4IGZlYXR1cmVzIHRoYXQgZGVtYW5kIHNvbWUgY3VzdG9tIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIEknbSBleHBlY3RpbmcgdG8gc2VlIHNvbWUgaW50ZXJwbGF5IGJldHdlZW4gVVNCIGNvbnRyb2wgdHJhbnNmZXJzIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzLiBGaW5hbGx5LCBJJ2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcyB1c2VkLiBLbm93aW5nIGhvdyB0aGUgZHJpdmVyIHJlc3BvbmRzIHRvIHVuZXhwZWN0ZWQgZGV2aWNlIGJlaGF2aW9yIG9yIGNvbW11bmljYXRpb24gZXJyb3JzIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQwMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTQuOTkyODAyNzc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdFxcdC8qIHdhaXQgZm9yIGRhdGEgKi9cXG4gMTA0OlxcdFxcdFxcdHdoaWxlIChyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgPT0gZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCkge1xcbiAxMDU6XFx0XFx0XFx0XFx0aWYgKGZpbGUtXFx1MDAzZWZfZmxhZ3MgXFx1MDAyNiBPX05PTkJMT0NLKSB7XFxuIDEwNjpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUFHQUlOO1xcbiAxMDc6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDEwODpcXHRcXHRcXHRcXHR9XFxuIDEwOTpcXHRcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4gMTEwOlxcdFxcdFxcdFxcdFxcdHJldHZhbCA9IC1FUkVTVEFSVFNZUztcXG4gMTExOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTI6XFx0XFx0XFx0XFx0fVxcbiAxMTM6XFx0XFx0XFx0XFx0aWYgKCFkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIDExNDpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRUlPO1xcbiAxMTU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNjpcXHRcXHRcXHRcXHR9XFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjYnVmX2xvY2spO1xcbiAxMTk6XFx0XFx0XFx0XFx0c2NoZWR1bGUoKTtcXG4gMTIwOlxcdFxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMTIxOlxcdFxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuIDEyMjpcXHRcXHRcXHR9XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuIDEyNTpcXHRcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0LCBcXHUwMDI2d2FpdCk7XFxuIDEyNjpcXHRcXHR9XFxuIDEyNzpcXHRcXG4gMTI4OlxcdFxcdC8qIGhlcmUgd2UgZWl0aGVyIGhhdmUgZGF0YSBvciBhIHJlYXNvbiB0byByZXR1cm4gaWYgcmV0dmFsIGlzIHNldCAqL1xcbiAxMjk6XFx0XFx0aWYgKHJldHZhbClcXG4gMTMwOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdHJlcG9ydCA9IFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZbcmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0XTtcXG4gMTMzOlxcdFxcdC8qXFxuIDEzNDpcXHRcXHQgKiBJZiByZXBvcnQgaXMgbGFyZ2VyIHRoYW4gcmVxdWVzdGVkIGFtb3VudCBvZiBkYXRhLCByZXN0IG9mIHJlcG9ydFxcbiAxMzU6XFx0XFx0ICogaXMgbG9zdCFcXG4gMTM2OlxcdFxcdCAqL1xcbiAxMzc6XFx0XFx0bGVuID0gZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZSBcXHUwMDNlIGNvdW50ID8gY291bnQgOiBkZXZpY2UtXFx1MDAzZXJlcG9ydF9zaXplO1xcbiAxMzg6XFx0XFxuIDEzOTpcXHRcXHRpZiAoY29weV90b191c2VyKGJ1ZmZlciwgcmVwb3J0LVxcdTAwM2V2YWx1ZSwgbGVuKSkge1xcbiAxNDA6XFx0XFx0XFx0cmV0dmFsID0gLUVGQVVMVDtcXG4gMTQxOlxcdFxcdFxcdGdvdG8gZXhpdF91bmxvY2s7XFxuIDE0MjpcXHRcXHR9XFxuIDE0MzpcXHRcXHRyZXR2YWwgKz0gbGVuO1xcbiAxNDQ6XFx0XFx0cmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCArIDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcXG4gMTQ1OlxcdFxcbiAxNDY6XFx0ZXhpdF91bmxvY2s6XFxuIDE0NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMTQ4OlxcdFxcdHJldHVybiByZXR2YWw7XFxuIDE0OTpcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdHN0YXRpYyBfX3BvbGxfdCByb2NjYXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdClcXG4gMTUyOlxcdHtcXG4gMTUzOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDE1NDpcXHRcXHRwb2xsX3dhaXQoZmlsZSwgXFx1MDAyNnJlYWRlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2V3YWl0LCB3YWl0KTtcXG4gMTU1OlxcdFxcdGlmIChyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgIT0gcmVhZGVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZWNidWZfZW5kKVxcbiAxNTY6XFx0XFx0XFx0cmV0dXJuIEVQT0xMSU4gfCBFUE9MTFJETk9STTtcXG4gMTU3OlxcdFxcdGlmICghcmVhZGVyLVxcdTAwM2VkZXZpY2UtXFx1MDAzZWV4aXN0KVxcbiAxNTg6XFx0XFx0XFx0cmV0dXJuIEVQT0xMRVJSIHwgRVBPTExIVVA7XFxuIDE1OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTYwOlxcdH1cXG4gMTYxOlxcdFxcbiAxNjI6XFx0c3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gMTYzOlxcdHtcXG4gMTY0OlxcdFxcdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XFxuIDE2NTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyO1xcbiAxNjY6XFx0XFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4gMTY3OlxcdFxcdGludCBlcnJvciA9IDA7XFxuIDE2ODpcXHRcXG4gMTY5OlxcdFxcdHJlYWRlciA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb2NjYXRfcmVhZGVyKTtcXG4gMTcwOlxcdFxcdGlmICghcmVhZGVyKVxcbiAxNzE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE3MjpcXHRcXG4gMTczOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xcbiAxNzY6XFx0XFxuIDE3NzpcXHRcXHRpZiAoIWRldmljZSkge1xcbiAxNzg6XFx0XFx0XFx0cHJfZW1lcmcoXFxcInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XFxcXG5cXFwiLCBtaW5vcik7XFxuIDE3OTpcXHRcXHRcXHRlcnJvciA9IC1FTk9ERVY7XFxuIDE4MDpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDE4MTpcXHRcXHRcXHRrZnJlZShyZWFkZXIpO1xcbiAxODI6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbiAxODM6XFx0XFx0fVxcbiAxODQ6XFx0XFxuIDE4NTpcXHRcXHRrcmVmX2dldChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmKTtcXG4gMTg2OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAxODk6XFx0XFxuIDE5MDpcXHRcXHRpZiAoIWRldmljZS1cXHUwMDNlZXhpc3QpIHtcXG4gMTkxOlxcdFxcdFxcdGVycm9yID0gLUVOT0RFVjtcXG4gMTkyOlxcdFxcdFxcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcXG4gMTkzOlxcdFxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0aWYgKCFkZXZpY2UtXFx1MDAzZW9wZW4rKykge1xcbiAxOTY6XFx0XFx0XFx0LyogcG93ZXIgb24gZGV2aWNlIG9uIGFkZGluZyBmaXJzdCByZWFkZXIgKi9cXG4gMTk3OlxcdFxcdFxcdGVycm9yID0gaGlkX2h3X3Bvd2VyKGRldmljZS1cXHUwMDNlaGlkLCBQTV9ISU5UX0ZVTExPTik7XFxuIDE5ODpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuIDE5OTpcXHRcXHRcXHRcXHQtLWRldmljZS1cXHUwMDNlb3BlbjtcXG4gMjAwOlxcdFxcdFxcdFxcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTQuOTkyODk4Nzk0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0Mzg3NTQ4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCdzIG15IG93bi5cblxuKipBbmFseXppbmcgdGhlIFdvcmtmbG93KipcblxuQWxyaWdodCwgSSdtIGF0IHRoZSBwb2ludCB3aGVyZSBJIG5lZWQgdG8gY29udGludWUgbXkgYW5hbHlzaXMuIFRoZSBjdXJyZW50IHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50IEknbSBmb2N1c2luZyBvbiBlbmRzIGF0IGxpbmUgMjAwLCBzbyBJIG5lZWQgdG8gcGljayB1cCB0aGUgdGhyZWFkIGF0IGxpbmUgMjAxIGFuZCBwcm9jZWVkIHRvIGxpbmUgNDMwLiBUaGlzIHNlZW1zIHRvIGltcGx5IGEgc3RydWN0dXJlZCBhcHByb2FjaCB0byB0aGUgZGF0YSwgcGVyaGFwcyBhIHNlZ21lbnRlZCByZXNlYXJjaCBwYXBlciwgY29kZSBjaHVuaywgb3IgZXZlbiBhIGxvZyBmaWxlLiBJdCdzIGxpa2VseSB0aGF0IDIwMS00MzAgY29udGFpbnMgdGhlIG5leHQgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgb3ZlcmFsbCBwcm9qZWN0LiBOb3csIEkgaGF2ZSB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBlbGVtZW50cyBpbiB0aGlzIHBhcnQgb2YgdGhlIGRvY3VtZW50LCBhcyBpdCBjb3VsZCBoYXZlIGtleSBpbnNpZ2h0cy4gSXQncyB0aW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMDc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoxOS40MzE2NTU1MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU0NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDE6XFx0XFx0XFx0fVxcbiAyMDI6XFx0XFxuIDIwMzpcXHRcXHRcXHRlcnJvciA9IGhpZF9od19vcGVuKGRldmljZS1cXHUwMDNlaGlkKTtcXG4gMjA0OlxcdFxcdFxcdGlmIChlcnJvciBcXHUwMDNjIDApIHtcXG4gMjA1OlxcdFxcdFxcdFxcdGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xcbiAyMDY6XFx0XFx0XFx0XFx0LS1kZXZpY2UtXFx1MDAzZW9wZW47XFxuIDIwNzpcXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuIDIwODpcXHRcXHRcXHR9XFxuIDIwOTpcXHRcXHR9XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdHJlYWRlci1cXHUwMDNlZGV2aWNlID0gZGV2aWNlO1xcbiAyMTI6XFx0XFx0LyogbmV3IHJlYWRlciBkb2Vzbid0IGdldCBvbGQgZXZlbnRzICovXFxuIDIxMzpcXHRcXHRyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgPSBkZXZpY2UtXFx1MDAzZWNidWZfZW5kO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZyZWFkZXItXFx1MDAzZW5vZGUsIFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnMpO1xcbiAyMTY6XFx0XFx0ZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gcmVhZGVyO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjE5OlxcdFxcdHJldHVybiAwO1xcbiAyMjA6XFx0XFxuIDIyMTpcXHRleGl0X2Vycl9yZWFkZXJzOlxcbiAyMjI6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDIyMzpcXHRcXHRrcmVmX3B1dChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmLCByb2NjYXRfZnJlZV9kZXZpY2UpO1xcbiAyMjQ6XFx0XFx0a2ZyZWUocmVhZGVyKTtcXG4gMjI1OlxcdFxcdHJldHVybiBlcnJvcjtcXG4gMjI2OlxcdH1cXG4gMjI3OlxcdFxcbiAyMjg6XFx0c3RhdGljIGludCByb2NjYXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gMjI5OlxcdHtcXG4gMjMwOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDIzMTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVxcdTAwM2VkZXZpY2U7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjM0OlxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZWFkZXItXFx1MDAzZW5vZGUpO1xcbiAyMzU6XFx0XFxuIDIzNjpcXHRcXHRpZiAoIS0tZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIDIzNzpcXHRcXHRcXHQvKiByZW1vdmluZyBsYXN0IHJlYWRlciAqL1xcbiAyMzg6XFx0XFx0XFx0aWYgKGRldmljZS1cXHUwMDNlZXhpc3QpIHtcXG4gMjM5OlxcdFxcdFxcdFxcdGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xcbiAyNDA6XFx0XFx0XFx0XFx0aGlkX2h3X2Nsb3NlKGRldmljZS1cXHUwMDNlaGlkKTtcXG4gMjQxOlxcdFxcdFxcdH1cXG4gMjQyOlxcdFxcdH1cXG4gMjQzOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAyNDQ6XFx0XFxuIDI0NTpcXHRcXHRrZnJlZShyZWFkZXIpO1xcbiAyNDY6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gMjQ3OlxcdFxcbiAyNDg6XFx0XFx0cmV0dXJuIDA7XFxuIDI0OTpcXHR9XFxuIDI1MDpcXHRcXG4gMjUxOlxcdC8qXFxuIDI1MjpcXHQgKiByb2NjYXRfcmVwb3J0X2V2ZW50KCkgLSBvdXRwdXQgZGF0YSB0byByZWFkZXJzXFxuIDI1MzpcXHQgKiBAbWlub3I6IG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxcbiAyNTQ6XFx0ICogQGRhdGE6IHBvaW50ZXIgdG8gZGF0YVxcbiAyNTU6XFx0ICpcXG4gMjU2OlxcdCAqIFJldHVybiB2YWx1ZSBpcyB6ZXJvIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbiAyNTc6XFx0ICpcXG4gMjU4OlxcdCAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGhhbmRsZXIuXFxuIDI1OTpcXHQgKi9cXG4gMjYwOlxcdGludCByb2NjYXRfcmVwb3J0X2V2ZW50KGludCBtaW5vciwgdTggY29uc3QgKmRhdGEpXFxuIDI2MTpcXHR7XFxuIDI2MjpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xcbiAyNjM6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlcjtcXG4gMjY0OlxcdFxcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XFxuIDI2NTpcXHRcXHR1aW50OF90ICpuZXdfdmFsdWU7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdGlmIChtaW5vciBcXHUwMDNjIDAgfHwgbWlub3IgXFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxcbiAyNjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDI2OTpcXHRcXG4gMjcwOlxcdFxcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xcbiAyNzE6XFx0XFx0aWYgKCFkZXZpY2UpXFxuIDI3MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0XFx0bmV3X3ZhbHVlID0ga21lbWR1cChkYXRhLCBkZXZpY2UtXFx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcXG4gMjc1OlxcdFxcdGlmICghbmV3X3ZhbHVlKVxcbiAyNzY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI3NzpcXHRcXG4gMjc4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjc5OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0cmVwb3J0ID0gXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1ZltkZXZpY2UtXFx1MDAzZWNidWZfZW5kXTtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0LyogcGFzc2luZyBOVUxMIGlzIHNhZmUgKi9cXG4gMjg0OlxcdFxcdGtmcmVlKHJlcG9ydC1cXHUwMDNldmFsdWUpO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRyZXBvcnQtXFx1MDAzZXZhbHVlID0gbmV3X3ZhbHVlO1xcbiAyODc6XFx0XFx0ZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCA9IChkZXZpY2UtXFx1MDAzZWNidWZfZW5kICsgMSkgJSBST0NDQVRfQ0JVRl9TSVpFO1xcbiAyODg6XFx0XFxuIDI4OTpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlYWRlciwgXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVycywgbm9kZSkge1xcbiAyOTA6XFx0XFx0XFx0LypcXG4gMjkxOlxcdFxcdFxcdCAqIEFzIHdlIGFscmVhZHkgaW5zZXJ0ZWQgb25lIGVsZW1lbnQsIHRoZSBidWZmZXIgY2FuJ3QgYmVcXG4gMjkyOlxcdFxcdFxcdCAqIGVtcHR5LiBJZiBzdGFydCBhbmQgZW5kIGFyZSBlcXVhbCwgYnVmZmVyIGlzIGZ1bGwgYW5kIHdlXFxuIDI5MzpcXHRcXHRcXHQgKiBpbmNyZWFzZSBzdGFydCwgc28gdGhhdCBzbG93IHJlYWRlciBtaXNzZXMgb25lIGV2ZW50LCBidXRcXG4gMjk0OlxcdFxcdFxcdCAqIGdldHMgdGhlIG5ld2VyIG9uZXMgaW4gdGhlIHJpZ2h0IG9yZGVyLlxcbiAyOTU6XFx0XFx0XFx0ICovXFxuIDI5NjpcXHRcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpXFxuIDI5NzpcXHRcXHRcXHRcXHRyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgPSAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ICsgMSkgJSBST0NDQVRfQ0JVRl9TSVpFO1xcbiAyOTg6XFx0XFx0fVxcbiAyOTk6XFx0XFxuIDMwMDpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MTkuNDMxNzQyMzYyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NjI4MTMyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIERlZXBlcjogTmV4dCBDaHVuayBBbmFseXNpcyoqXG5cblJpZ2h0LCBsZXQncyBrZWVwIG1vdmluZy4gSSd2ZSBmaW5pc2hlZCB0aGUgaW5pdGlhbCBzZWN0aW9ucywgYW5kIG5vdyBJIG5lZWQgdG8gc2hpZnQgZm9jdXMgdG8gdGhlIG5leHQgYmxvY2sgb2YgdGV4dCDigJMgc3BlY2lmaWNhbGx5LCBsaW5lcyAzMDEgdGhyb3VnaCA0NDAuIFRoaXMgaXNuJ3QganVzdCBhIG1hdHRlciBvZiBzZXF1ZW50aWFsIHJlYWRpbmc7IGl0J3MgYWJvdXQgc3RyYXRlZ2ljYWxseSBuYXZpZ2F0aW5nIHRoZSBpbmZvcm1hdGlvbiBmbG93LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBuZXh0IHNlY3Rpb24gY29udHJpYnV0ZXMgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQgb3IgbmFycmF0aXZlIGFyYy4gQXJlIHdlIG1vdmluZyBpbnRvIGEgbW9yZSBkZXRhaWxlZCBleGFtaW5hdGlvbiBvZiBhIGtleSBjb25jZXB0IGludHJvZHVjZWQgZWFybGllcj8gRG9lcyB0aGlzIHNlZ21lbnQgcHJlc2VudCBzdXBwb3J0aW5nIGV2aWRlbmNlLCBjb3VudGVyYXJndW1lbnRzLCBvciBwZXJoYXBzIGEgY29tcGxldGVseSBuZXcgcGVyc3BlY3RpdmUgdGhhdCByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55PyBJ4oCZbSBleHBlY3RpbmcgYSBjZXJ0YWluIHR5cGUgb2YgY29udGVudCwgYnV0IEkgaGF2ZSB0byByZW1haW4gb2JqZWN0aXZlIGFib3V0IHdoYXQgSSBmaW5kLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpczogV2hhdCBpbnNpZ2h0cyBvciBkZXRhaWxzIGRvZXMgdGhpcyBibG9jayBwcm92aWRlIHRoYXQgYXJlIGNyaXRpY2FsIHRvIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGVudGlyZSB3b3JrPyBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NzQ3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoyMi4zOTQ1NTc0NDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0KTtcXG4gMzA0OlxcdFxcdHJldHVybiAwO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdC8qXFxuIDMwOTpcXHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XFxuIDMxMDpcXHQgKiBAY2xhc3M6IHRoZSBjbGFzcyB0aGF0cyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGV2aWNlLiBNZWFudCB0byBob2xkIGRldmljZVxcbiAzMTE6XFx0ICogc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlcy5cXG4gMzEyOlxcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxcbiAzMTM6XFx0ICogQHJlcG9ydF9zaXplOiBzaXplIG9mIHJlcG9ydHNcXG4gMzE0OlxcdCAqXFxuIDMxNTpcXHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxcbiAzMTY6XFx0ICogc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuIDMxNzpcXHQgKi9cXG4gMzE4OlxcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHR1bnNpZ25lZCBpbnQgbWlub3I7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xcbiAzMjI6XFx0XFx0aW50IHRlbXA7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb2NjYXRfZGV2aWNlKTtcXG4gMzI1OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmKTtcXG4gMzI5OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmRldmljZS1cXHUwMDNld2FpdCk7XFxuIDMzMDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gMzMxOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMzMyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMzMzOlxcdFxcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbiAzMzQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDE7XFxuIDMzNTpcXHRcXHRkZXZpY2UtXFx1MDAzZWNidWZfZW5kID0gMDtcXG4gMzM2OlxcdFxcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0Zm9yIChtaW5vciA9IDA7IG1pbm9yIFxcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyArK21pbm9yKSB7XFxuIDM0MTpcXHRcXHRcXHRpZiAoZGV2aWNlc1ttaW5vcl0pXFxuIDM0MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzQzOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRpZiAobWlub3IgXFx1MDAzYyBST0NDQVRfTUFYX0RFVklDRVMpIHtcXG4gMzQ3OlxcdFxcdFxcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xcbiAzNDg6XFx0XFx0fSBlbHNlIHtcXG4gMzQ5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzUwOlxcdFxcdFxcdGtmcmVlKGRldmljZSk7XFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzUyOlxcdFxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VtaW5vciA9IG1pbm9yO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRkZXZpY2UtXFx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFxcdTAwMjZoaWQtXFx1MDAzZWRldixcXG4gMzU3OlxcdFxcdFxcdFxcdE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpLCBOVUxMLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFxcIiVzJXMlZFxcXCIsIFxcXCJyb2NjYXRcXFwiLCBoaWQtXFx1MDAzZWRyaXZlci1cXHUwMDNlbmFtZSwgbWlub3IpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoSVNfRVJSKGRldmljZS1cXHUwMDNlZGV2KSkge1xcbiAzNjE6XFx0XFx0XFx0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xcbiAzNjI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzNjM6XFx0XFx0XFx0dGVtcCA9IFBUUl9FUlIoZGV2aWNlLVxcdTAwM2VkZXYpO1xcbiAzNjQ6XFx0XFx0XFx0a2ZyZWUoZGV2aWNlKTtcXG4gMzY1OlxcdFxcdFxcdHJldHVybiB0ZW1wO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJldHVybiBtaW5vcjtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcXG4gMzc1OlxcdCAqIEBtaW5vcjogdGhlIG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxcbiAzNzY6XFx0ICovXFxuIDM3NzpcXHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcXG4gMzc4OlxcdHtcXG4gMzc5OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdGlmIChtaW5vciBcXHUwMDNjIDAgfHwgbWlub3IgXFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxcbiAzODI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzODU6XFx0XFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuIDM4NjpcXHRcXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XFxuIDM4NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRkZXZpY2VfZGVzdHJveShkZXZpY2UtXFx1MDAzZWRldi1cXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAzOTU6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7XFxuIDM5NjpcXHRcXHRpZiAoZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIDM5NzpcXHRcXHRcXHRoaWRfaHdfY2xvc2UoZGV2aWNlLVxcdTAwM2VoaWQpO1xcbiAzOTg6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbiAzOTk6XFx0XFx0fVxcbiA0MDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjIyLjM5NDY0OTk5NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTI2NDc1NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkZpbGUgSW5zcGVjdGlvbiAtIEZpbmFsIFRob3VnaHRzIEZpcnN0KipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIHRoZSBjb3JlIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiwgbGV0J3MgYWRvcHQgYSBjcml0aWNhbCwgZXhwZXJpZW5jZWQgc3RhbmNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0bywgb2YgY291cnNlLCBoZWFkIHRvIHRoZSB0YWlsIGVuZCBvZiB0aGUgZmlsZS4gSXQncyBvZnRlbiB0aGUgY2FzZSB0aGF0IHRoZSBjb25jbHVzaXZlIHBpZWNlcyBvciBwb3RlbnRpYWwgZXJyb3IgbWVzc2FnZXMgd291bGQgcmVzaWRlIGhlcmUsIG9mZmVyaW5nIGEgY29uY2lzZSBvdmVydmlldyBvZiB3aGF0ZXZlciB0aGUgcHJvY2VzcyBoYXMgYWNoaWV2ZWQuIEJ5IGV4YW1pbmluZyB3aGF0J3MgY29uY2x1ZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGl0J3Mgb2Z0ZW4gZmFzdGVyIHRvIGRlZHVjZSB0aGUgZ2VuZXJhbCBzdGF0ZSBvZiB0aGUgZGF0YSwgYW5kIHdoZXRoZXIgdGhlIHByaW1hcnkgdGFzayBoYXMgYmVlbiBhY2hpZXZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY0MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjI0LjUyMTEyODc4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAxLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAxOlxcdFxcbiA0MDI6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gNDAzOlxcdH1cXG4gNDA0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTtcXG4gNDA1OlxcdFxcbiA0MDY6XFx0c3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDQwOTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVxcdTAwM2VkZXZpY2U7XFxuIDQxMDpcXHRcXHRsb25nIHJldHZhbCA9IDA7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQxMzpcXHRcXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxcbiA0MTQ6XFx0XFx0XFx0aWYgKHB1dF91c2VyKGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUsIChpbnQgX191c2VyICopYXJnKSlcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuIDQxNjpcXHRcXHRcXHRicmVhaztcXG4gNDE3OlxcdFxcdGRlZmF1bHQ6XFxuIDQxODpcXHRcXHRcXHRyZXR2YWwgPSAtRU5PVFRZO1xcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0MjI6XFx0fVxcbiA0MjM6XFx0XFxuIDQyNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb2NjYXRfb3BzID0ge1xcbiA0MjU6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDQyNjpcXHRcXHQucmVhZCA9IHJvY2NhdF9yZWFkLFxcbiA0Mjc6XFx0XFx0LnBvbGwgPSByb2NjYXRfcG9sbCxcXG4gNDI4OlxcdFxcdC5vcGVuID0gcm9jY2F0X29wZW4sXFxuIDQyOTpcXHRcXHQucmVsZWFzZSA9IHJvY2NhdF9yZWxlYXNlLFxcbiA0MzA6XFx0XFx0Lmxsc2VlayA9IG5vb3BfbGxzZWVrLFxcbiA0MzE6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gcm9jY2F0X2lvY3RsLFxcbiA0MzI6XFx0fTtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0c3RhdGljIGludCBfX2luaXQgcm9jY2F0X2luaXQodm9pZClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdGludCByZXR2YWw7XFxuIDQzNzpcXHRcXHRkZXZfdCBkZXZfaWQ7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdHJldHZhbCA9IGFsbG9jX2NocmRldl9yZWdpb24oXFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxcbiA0NDA6XFx0XFx0XFx0XFx0Uk9DQ0FUX01BWF9ERVZJQ0VTLCBcXFwicm9jY2F0XFxcIik7XFxuIDQ0MTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbiA0NDI6XFx0XFx0XFx0cHJfd2FybihcXFwiY2FuJ3QgZ2V0IG1ham9yIG51bWJlclxcXFxuXFxcIik7XFxuIDQ0MzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRjZGV2X2luaXQoXFx1MDAyNnJvY2NhdF9jZGV2LCBcXHUwMDI2cm9jY2F0X29wcyk7XFxuIDQ0OTpcXHRcXHRyZXR2YWwgPSBjZGV2X2FkZChcXHUwMDI2cm9jY2F0X2NkZXYsIGRldl9pZCwgUk9DQ0FUX01BWF9ERVZJQ0VTKTtcXG4gNDUwOlxcdFxcbiA0NTE6XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIDApIHtcXG4gNDUyOlxcdFxcdFxcdHByX3dhcm4oXFxcImNhbm5vdCBhZGQgY2RldlxcXFxuXFxcIik7XFxuIDQ1MzpcXHRcXHRcXHRnb3RvIGNsZWFudXBfYWxsb2NfY2hyZGV2X3JlZ2lvbjtcXG4gNDU0OlxcdFxcdH1cXG4gNDU1OlxcdFxcdHJldHVybiAwO1xcbiA0NTY6XFx0XFxuIDQ1NzpcXHRcXG4gNDU4OlxcdCBjbGVhbnVwX2FsbG9jX2NocmRldl9yZWdpb246XFxuIDQ1OTpcXHRcXHR1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X2lkLCBST0NDQVRfTUFYX0RFVklDRVMpO1xcbiA0NjA6XFx0IGVycm9yOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjoyNC41MjEyMTcwMDlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTUwMjQwMTMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJvY2NhdCBISUQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGFzc2VzcyBpdHMgYWNjZXNzaWJpbGl0eSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCBsaWtlIFFFTVUuIEdvb2QsIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIEkgY2FuIHNpbXVsYXRlIFVTQiBISUQgZGV2aWNlcyBpbiBRRU1VIHVzaW5nIHNldmVyYWwgbWV0aG9kczogVVNCIFJhdyBHYWRnZXQsIER1bW15IEhDRCwgVUhJRCwgb3IgZXZlbiB0aGUgc3RhbmRhcmQgUUVNVSBVU0IgZW11bGF0aW9uLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyB3aXRob3V0IG5lZWRpbmcgdGhlIGFjdHVhbCBoYXJkd2FyZS5cblxuTm93LCBmcm9tIHdoYXQgSSBnYXRoZXIsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGNvbmN1cnJlbmN5IGlzc3VlcyB3aXRoaW4gdGhlIFJvY2NhdCBkcml2ZXIsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHRoZSBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW50IGNhbGxzIHRvIGZpbGUgb3BlcmF0aW9ucy4gQmFzaWNhbGx5LCBpdOKAmXMgYWJvdXQgZml4aW5nIHJlZmVyZW5jZSBjb3VudGluZyAoYGtyZWZgKSB0byBtYWtlIGl0IHNhZmVyIHdoZW4gZGV2aWNlcyBhcmUgY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCB3aGlsZSBgcm9jY2F0X29wZW5gLCBgcm9jY2F0X3JlbGVhc2VgLCBgcm9jY2F0X2lvY3RsYCwgYW5kIG90aGVyIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBzaW11bHRhbmVvdXNseS5cblxuSSdtIGNoZWNraW5nIHRoZSBrZXkgZnVuY3Rpb25zIHRhcmdldGVkIGJ5IHRoZSBwYXRjaDogYHJvY2NhdF9vcGVuYCwgYHJvY2NhdF9yZWxlYXNlYCwgYHJvY2NhdF9yZXBvcnRfZXZlbnRgLCBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBhbmQgYHJvY2NhdF9pb2N0bGAuIEkgd2FudCB0byB2ZXJpZnkgaWYgdGhleSBhcmUgZXhwb3J0ZWQgb3Igbm90LCBhbmQgSSBzZWUgYHJvY2NhdF9jb25uZWN0YCwgYHJvY2NhdF9kaXNjb25uZWN0YCwgYW5kIGByb2NjYXRfcmVwb3J0X2V2ZW50YCBhcmUgZXhwb3J0ZWQgc3ltYm9scy4gVGhlIG90aGVycyBhcmUgc3RhdGljIGZvcHMuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzLCBub3QgaG90LXBhdGggY29kZS4gVGhleSBhcmUgaW5kZWVkIHRoZSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBmb3IgdGhlIFJvY2NhdCBkZXZpY2UgaW50ZXJmYWNlLiBUaGlzIGNvbmZpcm1zIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBjcnVjaWFsLCBhcyB0aGVzZSBlbnRyeXBvaW50cyB3b3VsZCBiZSB1c2VkIGJ5IGV4dGVybmFsIHByb2Nlc3NlcyB0byB1c2UgdGhlIGRldmljZS5cblxuRmluYWxseSwgSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBgQ09ORklHYCBvcHRpb25zOiBgSElEX1JPQ0NBVGAgZGVwZW5kcyBvbiBgVVNCX0hJRGAgYW5kIGBISURgLiBJIHNob3VsZCBxdWlja2x5IHJldmlldyBgVVNCX0hJRGAncyBkZXBlbmRlbmNpZXMgaW4gYEtjb25maWdgIGZvciBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uLiBUaGlzIGNvbXBsZXRlcyB0aGUgaGlnaC1sZXZlbCBwaWN0dXJlIG9mIHRoaXMgcGF0Y2ggYW5kIGNvbmZpcm1zIGl0IGlzIGFuIGVzc2VudGlhbCBmaXggZm9yIHRoZSBkcml2ZXIsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDYyLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MzAuMDIzNjIwNjZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODY1NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfSElEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaGlkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZz0yPW1lbnUgXFxcIlVTQiBISUQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnLTQtXFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc6NTpjb25maWcgVVNCX0hJRFxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnLTYtXFx0dHJpc3RhdGUgXFxcIlVTQiBISUQgdHJhbnNwb3J0IGxheWVyXFxcIlxcbi0tXFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWc9Mjc9Y29uZmlnIEhJRF9QSURcXG4tLVxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnLTMzLVxcbmRyaXZlcnMvaGlkL3VzYmhpZC9LY29uZmlnOjM0OmNvbmZpZyBVU0JfSElEREVWXFxuZHJpdmVycy9oaWQvdXNiaGlkL0tjb25maWctMzUtXFx0Ym9vbCBcXFwiL2Rldi9oaWRkZXYgcmF3IEhJRCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6MzAuMDc3NDkyMDQ5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MzQ2NDc0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgSElEIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBVU0IgSHVtYW4gSW50ZXJmYWNlIERldmljZSAoSElEKSBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZ2AgZmlsZS4gSSdtIHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIHNvIHRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydC4gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiBleHBlcmllbmNlLCB0aGF0IHRoZSByZWxldmFudCBzZXR0aW5ncyBhcmUgbGlrZWx5IG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSwgc28gSSdtIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgNSB0byBiZWdpbiBteSBzZWFyY2guIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHF1aWNrbHkgbGVhZCBtZSB0byB0aGUgaW5mb3JtYXRpb24gSSdtIGxvb2tpbmcgZm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODUyMCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjM1LjgxMjE0MzEyNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC91c2JoaWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0bWVudSBcXFwiVVNCIEhJRCBzdXBwb3J0XFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBVU0JcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIFVTQl9ISURcXG4gICA2OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgSElEIHRyYW5zcG9ydCBsYXllclxcXCJcXG4gICA3OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiBISURcXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IFVTQiBrZXlib2FyZHMsXFxuICAxMTpcXHRcXHQgIG1pY2UsIGpveXN0aWNrcywgZ3JhcGhpYyB0YWJsZXRzLCBvciBhbnkgb3RoZXIgSElEIGJhc2VkIGRldmljZXNcXG4gIDEyOlxcdFxcdCAgdG8geW91ciBjb21wdXRlciB2aWEgVVNCLCBhcyB3ZWxsIGFzIFVuaW50ZXJydXB0aWJsZSBQb3dlciBTdXBwbHlcXG4gIDEzOlxcdFxcdCAgKFVQUykgYW5kIG1vbml0b3IgY29udHJvbCBkZXZpY2VzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIFlvdSBjYW4ndCB1c2UgdGhpcyBkcml2ZXIgYW5kIHRoZSBISURCUCAoQm9vdCBQcm90b2NvbCkga2V5Ym9hcmRcXG4gIDE2OlxcdFxcdCAgYW5kIG1vdXNlIGRyaXZlcnMgYXQgdGhlIHNhbWUgdGltZS4gTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGU6XFxuICAxNzpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQucnN0XFx1MDAzZS5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjM1LjgxMjIwNjM4NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjQ4ODk5Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqSW52ZXN0aWdhdGluZyBISUQgU3VwcG9ydCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiB0aGUgSElEIHN1YnN5c3RlbSdzIGNvbmZpZ3VyYXRpb24sIHRoZSBmaXJzdCBwbGFjZSBJJ2QgY2hlY2sgaXMgdGhlIGBkcml2ZXJzL2hpZC9LY29uZmlnYCBmaWxlLiBJJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGBtZW51IFwiSElEIHN1cHBvcnRcImAgc2VjdGlvbiwgc2luY2UgdGhhdCdzIHRoZSB0b3AtbGV2ZWwgZW50cnkgZm9yIHRoZSBISUQgZnJhbWV3b3JrLiBJIHdhbnQgdG8gc2VlIHdoYXQgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoYXQgbWVudS4gTW9yZSBpbXBvcnRhbnRseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIHNwZWNpZmljIGtlcm5lbCBmZWF0dXJlcyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucyB0aGF0IG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgdGhlIEhJRCBzdXBwb3J0IG1lbnUgZXZlbiBhcHBlYXJzPyBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBoZWxwIG1lIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgbmVjZXNzYXJ5IGZvciBISUQgdG8gYmUgYXZhaWxhYmxlIGFuZCB3aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgSElEIGRldmljZSBvciBkcml2ZXIgY2FuIGJlIGNvbmZpZ3VyZWQuIEl0J3MgYWxsIGFib3V0IG1ha2luZyBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgZm91bmRhdGlvbiBpbiBwbGFjZSBmaXJzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5OTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjM4LjQ2MTEwODA5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEhJRCBkcml2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBISURfU1VQUE9SVFxcbiAgIDY6XFx0XFx0Ym9vbCBcXFwiSElEIGJ1cyBzdXBwb3J0XFxcIlxcbiAgIDc6XFx0XFx0ZGVmYXVsdCB5XFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElOUFVUXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgY29yZSBzdXBwb3J0IGZvciBodW1hbiBpbnRlcmZhY2UgZGV2aWNlIChISUQpLlxcbiAgMTE6XFx0XFx0ICBZb3Ugd2lsbCBhbHNvIG5lZWQgZHJpdmVycyBmcm9tIHRoZSBmb2xsb3dpbmcgbWVudSB0byBtYWtlIHVzZSBvZiBpdC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aWYgSElEX1NVUFBPUlRcXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIEhJRFxcbiAgMTY6XFx0XFx0dHJpc3RhdGUgXFxcIkhJRCBidXMgY29yZSBzdXBwb3J0XFxcIlxcbiAgMTc6XFx0XFx0ZGVmYXVsdCB5XFxuICAxODpcXHRcXHRkZXBlbmRzIG9uIElOUFVUXFxuICAxOTpcXHRcXHRoZWxwXFxuICAyMDpcXHRcXHQgIEEgaHVtYW4gaW50ZXJmYWNlIGRldmljZSAoSElEKSBpcyBhIHR5cGUgb2YgY29tcHV0ZXIgZGV2aWNlIHRoYXRcXG4gIDIxOlxcdFxcdCAgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggYW5kIHRha2VzIGlucHV0IGZyb20gaHVtYW5zLiBUaGUgdGVybSBcXFwiSElEXFxcIlxcbiAgMjI6XFx0XFx0ICBtb3N0IGNvbW1vbmx5IHVzZWQgdG8gcmVmZXIgdG8gdGhlIFVTQi1ISUQgc3BlY2lmaWNhdGlvbiwgYnV0IG90aGVyXFxuICAyMzpcXHRcXHQgIGRldmljZXMgKHN1Y2ggYXMsIGJ1dCBub3Qgc3RyaWN0bHkgbGltaXRlZCB0bywgQmx1ZXRvb3RoKSBhcmVcXG4gIDI0OlxcdFxcdCAgZGVzaWduZWQgdXNpbmcgSElEIHNwZWNpZmljYXRpb24gKHRoaXMgaW52b2x2ZXMgY2VydGFpbiBrZXlib2FyZHMsXFxuICAyNTpcXHRcXHQgIG1pY2UsIHRhYmxldHMsIGV0YykuIFRoaXMgb3B0aW9uIGFkZHMgdGhlIEhJRCBidXMgdG8gdGhlIGtlcm5lbCxcXG4gIDI2OlxcdFxcdCAgdG9nZXRoZXIgd2l0aCBnZW5lcmljIEhJRCBsYXllciBjb2RlLiBUaGUgSElEIGRldmljZXMgYXJlIGFkZGVkIGFuZFxcbiAgMjc6XFx0XFx0ICByZW1vdmVkIGZyb20gdGhlIEhJRCBidXMgYnkgdGhlIHRyYW5zcG9ydC1sYXllciBkcml2ZXJzLCBzdWNoIGFzXFxuICAyODpcXHRcXHQgIHVzYmhpZCAoVVNCX0hJRCkgYW5kIGhpZHAgKEJUX0hJRFApLlxcbiAgMjk6XFx0XFxuICAzMDpcXHRcXHQgIEZvciBkb2NzIGFuZCBzcGVjcywgc2VlIGh0dHBzOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9oaWRwYWdlL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjozOC40NjEyMDYwNjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM1MTY3MTU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBSb2NjYXQgSElEIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIHRoZSBpbnN0cnVjdGlvbnMgYXJlIGNsZWFyOiBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGBDT05GSUdfYCBvcHRpb25zIGZvciB0ZXN0aW5nIHRoZSB1cGRhdGVkIFJvY2NhdCBISUQgZmVhdHVyZS4gVGhlIGJhc2UgY29uZmlndXJhdGlvbnMgSSdtIHdvcmtpbmcgd2l0aCBhcmUgYEhJRF9ST0NDQVRgLCBgVVNCX0hJRGAsIGFuZCBgSElEYC4gSSBuZWVkIHRvIGVuc3VyZSBJIGRvbid0IG1pc3MgYW55IGRlcGVuZGVuY2llcyBieSBjaGVja2luZyB0aGUgS2NvbmZpZyBmaWxlcyB0aG9yb3VnaGx5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBgI2lmZGVmYCBkaXJlY3RpdmVzIGFuZCBcImRlcGVuZHMgb25cIiBsaW5lcy4gSSBtdXN0IHJlbWVtYmVyIHRvIG91dHB1dCB0aGUgbmVlZGVkIGNvbmZpZ3VyYXRpb25zIHdpdGhvdXQgdGhlIGBDT05GSUdfYCBwcmVmaXguXG5cbk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCByZWxldmFudCwgbm9uLXN0YXRpYywgb3Igb3RoZXJ3aXNlIGRpc3RpbmN0IHN5bWJvbHMgYXMgZ29vZCBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuIEkndmUgaWRlbnRpZmllZCBgcm9jY2F0X2Nvbm5lY3RgLCBgcm9jY2F0X2Rpc2Nvbm5lY3RgLCBgcm9jY2F0X3JlcG9ydF9ldmVudGAsIGByb2NjYXRfb3BlbmAsIGByb2NjYXRfcmVsZWFzZWAsIGFuZCBgcm9jY2F0X2lvY3RsYCBhcyBsaWtlbHkgY2FuZGlkYXRlcy4gSSBkaWQgYSBxdWljayBjaGVjayBvZiBgaGlkLXJvY2NhdC5jYCB0byBzZWUgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zLCBhbmQgY29uZmlybWVkIHRob3NlIGFyZSB0aGUgcmlnaHQgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5UaGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQncyBhZGRyZXNzaW5nIGNyaXRpY2FsIGlzc3VlcyBsaWtlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBmb3IgUm9jY2F0IEhJRCBjaGFyYWN0ZXIgZGV2aWNlcywgYWltaW5nIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBhbmQgcmFjZSBjb25kaXRpb25zIHdpdGhpbiB0aGUgZmlsZSBvcGVyYXRpb25zIGFuZCBkZXZpY2UgbGlmZWN5Y2xlLiBUaGlzIGlzICp2ZXJ5KiByZWFjaGFibGUgdmlhIGVtdWxhdGVkIFVTQiBlbnZpcm9ubWVudHMgYW5kIGludGVyYWN0aW5nIHdpdGggdGhlIGAvZGV2L3JvY2NhdCpgIGNoYXIgZGV2aWNlcy5cblxuRmluYWxseSwganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgZXZlcnl0aGluZyBjb3ZlcmVkOiBJJ20gdXNpbmcgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCwgYW5kIEknbGwgY2FsbCBpdCBvbmx5IG9uY2UuIEknbSBvbWl0dGluZyB0aGUgYENPTkZJR19gIHByZWZpeCwgYW5kIEknbSB0YXJnZXRpbmcgbm9uLWhvdC1wYXRoIGtlcm5lbCBmdW5jdGlvbnMgdG8gbWFrZSBmdXp6aW5nIG1vcmUgZWZmZWN0aXZlLiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NjY0LCJPdXRwdXRUb2tlbnMiOjE3NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjQzLjgxMjg4MDA1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NjU4NTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJISURfUk9DQ0FUXCIsXG4gICAgXCJVU0JfSElEXCIsXG4gICAgXCJISURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb2NjYXRfY29ubmVjdFwiLFxuICAgIFwicm9jY2F0X2Rpc2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9yZXBvcnRfZXZlbnRcIixcbiAgICBcInJvY2NhdF9vcGVuXCIsXG4gICAgXCJyb2NjYXRfcmVsZWFzZVwiLFxuICAgIFwicm9jY2F0X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJISURfUk9DQ0FUXCIsXG4gICAgXCJVU0JfSElEXCIsXG4gICAgXCJISURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb2NjYXRfY29ubmVjdFwiLFxuICAgIFwicm9jY2F0X2Rpc2Nvbm5lY3RcIixcbiAgICBcInJvY2NhdF9yZXBvcnRfZXZlbnRcIixcbiAgICBcInJvY2NhdF9vcGVuXCIsXG4gICAgXCJyb2NjYXRfcmVsZWFzZVwiLFxuICAgIFwicm9jY2F0X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBrcmVmIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgcmVmYWN0b3JzIGxvY2tpbmcgYWNyb3NzIHRoZSBSb2NjYXQgSElEIGNoYXJhY3RlciBkZXZpY2Ugc3Vic3lzdGVtIChoaWQtcm9jY2F0KSB0byBmaXggbGlmZWN5Y2xlIGFuZCBjb25jdXJyZW5jeSByYWNlcyBiZXR3ZWVuIHJvY2NhdCBjaGFyYWN0ZXIgZGV2aWNlIG9wZXJhdGlvbnMgKG9wZW4sIHJlbGVhc2UsIGlvY3RsKSBhbmQgZGV2aWNlIGNvbm5lY3QvZGlzY29ubmVjdC9ldmVudCBoYW5kbGluZy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnV6emFibGUgdmlhIFVTQiBlbXVsYXRpb24gKHJhdy1nYWRnZXQvdWhpZCkgYW5kIGNoYXJhY3RlciBkZXZpY2Ugb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6NDMuODkxNTQ0MTM1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTYzMjE0MDM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjQzLjg5MTk4MzQ5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxNjMxNjkzNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgYW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmMgYnkgaW50cm9kdWNpbmcga3JlZi1iYXNlZCByZWZlcmVuY2UgY291bnRpbmcgZm9yIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBwcm9wZXJseSBib3VuZHMtY2hlY2tpbmcgbWlub3IgZGV2aWNlIGluZGV4ZXMsIGFuZCBlbnN1cmluZyBzdHJ1Y3QgZmllbGRzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgZXhwb3NpbmcgdGhlIGRldmljZSBpbiB0aGUgZ2xvYmFsIGRldmljZXMgYXJyYXkuXFxuXFxuLSBLQVNBTiBhcHBsaWNhYmlsaXR5OiBUaGUgcHJpbWFyeSBidWdzIGFkZHJlc3NlZCBhbmQgcG90ZW50aWFsbHkgaW50cm9kdWNlZCBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgcHJlbWF0dXJlIGRlYWxsb2NhdGlvbiwgYW5kIG91dC1vZi1ib3VuZHMgaW5kZXhpbmcgaW4gdGhlIGRldmljZXMgYXJyYXkuIFRoZXNlIG1lbW9yeSBzYWZldHkgaXNzdWVzIGFyZSBkaXJlY3RseSBkZXRlY3RlZCBieSBLQVNBTi5cXG4tIEtNU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdHVyZXMgKHN0cnVjdCByb2NjYXRfZGV2aWNlLCBzdHJ1Y3Qgcm9jY2F0X3JlYWRlcikgYXJlIGFsbG9jYXRlZCB3aXRoIGt6YWxsb2Nfb2JqKCksIHJlcG9ydCBkYXRhIGlzIGFsbG9jYXRlZCBhbmQgY29waWVkIHdpdGgga21lbWR1cCgpLCBhbmQgYWxsIGRhdGEgY29waWVkIHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIgaW4gcm9jY2F0X3JlYWQgb3IgcHV0X3VzZXIgaW4gcm9jY2F0X2lvY3RsKSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkLlxcblxcblRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNWI2NmMxZDNkMGNkYTQ3NjQxZTUwOGZiZGI5MWYwNDNlYzUwZTRjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAyMjowNTo0OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBiL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuaW5kZXggNGYxNWViOTUxMDM5Ni4uZWFhNDdiYmI3MGRhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1xuKysrIGIvZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXG5AQCAtMjEsOCArMjEsMTAgQEBcbiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwiOiBcIiBmbXRcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jZGV2LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wb2xsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2hpZC1yb2NjYXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gXG5AQCAtMzcsNiArMzksNyBAQCBzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCB7XG4gfTtcbiBcbiBzdHJ1Y3Qgcm9jY2F0X2RldmljZSB7XG4rXHRzdHJ1Y3Qga3JlZiBrcmVmO1xuIFx0dW5zaWduZWQgaW50IG1pbm9yO1xuIFx0aW50IHJlcG9ydF9zaXplO1xuIFx0aW50IG9wZW47XG5AQCAtNzAsOCArNzMsMTAgQEAgc3RhdGljIHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2VzW1JPQ0NBVF9NQVhfREVWSUNFU107XG4gLyogcHJvdGVjdHMgbW9kaWZpY2F0aW9ucyBvZiBkZXZpY2VzIGFycmF5ICovXG4gc3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xuIFxuLXN0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlKVxuK3N0YXRpYyB2b2lkIHJvY2NhdF9mcmVlX2RldmljZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiB7XG4rXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cbitcdFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByb2NjYXRfZGV2aWNlLCBrcmVmKTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUk9DQ0FUX0NCVUZfU0laRTsgaSsrKVxuQEAgLTE3MiwxMSArMTc3LDIxIEBAIHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRpZiAoIWRldmljZSkge1xuIFx0XHRwcl9lbWVyZyhcInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XFxuXCIsIG1pbm9yKTtcbiBcdFx0ZXJyb3IgPSAtRU5PREVWO1xuLVx0XHRnb3RvIGV4aXRfZXJyX2RldmljZXM7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuK1x0XHRrZnJlZShyZWFkZXIpO1xuK1x0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG4gXG4rXHRrcmVmX2dldChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXG4rXHRpZiAoIWRldmljZS1cdTAwM2VleGlzdCkge1xuK1x0XHRlcnJvciA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gZXhpdF9lcnJfcmVhZGVycztcbitcdH1cbitcbiBcdGlmICghZGV2aWNlLVx1MDAzZW9wZW4rKykge1xuIFx0XHQvKiBwb3dlciBvbiBkZXZpY2Ugb24gYWRkaW5nIGZpcnN0IHJlYWRlciAqL1xuIFx0XHRlcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtXHUwMDNlaGlkLCBQTV9ISU5UX0ZVTExPTik7XG5AQCAtMjAwLDQ2ICsyMTUsMzUgQEAgc3RhdGljIGludCByb2NjYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cmVhZGVyLVx1MDAzZW5vZGUsIFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzKTtcbiBcdGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhID0gcmVhZGVyO1xuIFxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuK1x0cmV0dXJuIDA7XG4rXG4gZXhpdF9lcnJfcmVhZGVyczpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2UtXHUwMDNlcmVhZGVyc19sb2NrKTtcbi1leGl0X2Vycl9kZXZpY2VzOlxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGtmcmVlKHJlYWRlcik7XG4rXHRrcmVmX3B1dChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcbitcdGtmcmVlKHJlYWRlcik7XG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuLVx0dW5zaWduZWQgaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTtcbiBcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4tXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXG4tXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbi1cdGlmICghZGV2aWNlKSB7XG4tXHRcdG11dGV4X3VubG9jayhcdTAwMjZkZXZpY2VzX2xvY2spO1xuLVx0XHRwcl9lbWVyZyhcInJvY2NhdCBkZXZpY2Ugd2l0aCBtaW5vciAlZCBkb2Vzbid0IGV4aXN0XFxuXCIsIG1pbm9yKTtcbi1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tXHR9XG4rXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4gXHRsaXN0X2RlbChcdTAwMjZyZWFkZXItXHUwMDNlbm9kZSk7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4tXHRrZnJlZShyZWFkZXIpO1xuIFxuIFx0aWYgKCEtLWRldmljZS1cdTAwM2VvcGVuKSB7XG4gXHRcdC8qIHJlbW92aW5nIGxhc3QgcmVhZGVyICovXG4gXHRcdGlmIChkZXZpY2UtXHUwMDNlZXhpc3QpIHtcbiBcdFx0XHRoaWRfaHdfcG93ZXIoZGV2aWNlLVx1MDAzZWhpZCwgUE1fSElOVF9OT1JNQUwpO1xuIFx0XHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRyb2NjYXRfZnJlZV9kZXZpY2UoZGV2aWNlKTtcbiBcdFx0fVxuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4rXHRrZnJlZShyZWFkZXIpO1xuK1x0a3JlZl9wdXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjYwLDcgKzI2NCwxMiBAQCBpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxuIFx0c3RydWN0IHJvY2NhdF9yZXBvcnQgKnJlcG9ydDtcbiBcdHVpbnQ4X3QgKm5ld192YWx1ZTtcbiBcbitcdGlmIChtaW5vciBcdTAwM2MgMCB8fCBtaW5vciBcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcbitcdGlmICghZGV2aWNlKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdG5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplLCBHRlBfQVRPTUlDKTtcbiBcdGlmICghbmV3X3ZhbHVlKVxuQEAgLTMxNiw2ICszMjUsMTYgQEAgaW50IHJvY2NhdF9jb25uZWN0KGNvbnN0IHN0cnVjdCBjbGFzcyAqa2xhc3MsIHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCByZXBvcnRcbiBcdGlmICghZGV2aWNlKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdGtyZWZfaW5pdChcdTAwMjZkZXZpY2UtXHUwMDNla3JlZik7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzKTtcbitcdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXHRtdXRleF9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuK1x0ZGV2aWNlLVx1MDAzZWhpZCA9IGhpZDtcbitcdGRldmljZS1cdTAwM2VleGlzdCA9IDE7XG4rXHRkZXZpY2UtXHUwMDNlY2J1Zl9lbmQgPSAwO1xuK1x0ZGV2aWNlLVx1MDAzZXJlcG9ydF9zaXplID0gcmVwb3J0X3NpemU7XG4rXG4gXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4gXHRmb3IgKG1pbm9yID0gMDsgbWlub3IgXHUwMDNjIFJPQ0NBVF9NQVhfREVWSUNFUzsgKyttaW5vcikge1xuQEAgLTMzMiw2ICszNTEsOCBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbitcdGRldmljZS1cdTAwM2VtaW5vciA9IG1pbm9yO1xuK1xuIFx0ZGV2aWNlLVx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFx1MDAyNmhpZC1cdTAwM2VkZXYsXG4gXHRcdFx0TUtERVYocm9jY2F0X21ham9yLCBtaW5vciksIE5VTEwsXG4gXHRcdFx0XCIlcyVzJWRcIiwgXCJyb2NjYXRcIiwgaGlkLVx1MDAzZWRyaXZlci1cdTAwM2VuYW1lLCBtaW5vcik7XG5AQCAtMzQ2LDE2ICszNjcsNiBAQCBpbnQgcm9jY2F0X2Nvbm5lY3QoY29uc3Qgc3RydWN0IGNsYXNzICprbGFzcywgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgaW50IHJlcG9ydFxuIFxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4tXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzKTtcbi1cdG11dGV4X2luaXQoXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4tXHRtdXRleF9pbml0KFx1MDAyNmRldmljZS1cdTAwM2VjYnVmX2xvY2spO1xuLVx0ZGV2aWNlLVx1MDAzZW1pbm9yID0gbWlub3I7XG4tXHRkZXZpY2UtXHUwMDNlaGlkID0gaGlkO1xuLVx0ZGV2aWNlLVx1MDAzZWV4aXN0ID0gMTtcbi1cdGRldmljZS1cdTAwM2VjYnVmX2VuZCA9IDA7XG4tXHRkZXZpY2UtXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcbi1cbiBcdHJldHVybiBtaW5vcjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X2Nvbm5lY3QpO1xuQEAgLTM2Nyw0MiArMzc4LDM3IEBAIHZvaWQgcm9jY2F0X2Rpc2Nvbm5lY3QoaW50IG1pbm9yKVxuIHtcbiBcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XG4gXG4rXHRpZiAobWlub3IgXHUwMDNjIDAgfHwgbWlub3IgXHUwMDNlPSBST0NDQVRfTUFYX0RFVklDRVMpXG4rXHRcdHJldHVybjtcbitcbiBcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbiBcdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuK1x0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4gXG4tXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwOyAvKiBUT0RPIGV4aXN0IG1heWJlIG5vdCBuZWVkZWQgKi9cbitcdGlmICghZGV2aWNlKVxuK1x0XHRyZXR1cm47XG4gXG4gXHRkZXZpY2VfZGVzdHJveShkZXZpY2UtXHUwMDNlZGV2LVx1MDAzZWNsYXNzLCBNS0RFVihyb2NjYXRfbWFqb3IsIG1pbm9yKSk7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNmRldmljZXNfbG9jayk7XG4tXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbitcdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlLVx1MDAzZXJlYWRlcnNfbG9jayk7XG4rXHRkZXZpY2UtXHUwMDNlZXhpc3QgPSAwO1xuIFx0aWYgKGRldmljZS1cdTAwM2VvcGVuKSB7XG4gXHRcdGhpZF9od19jbG9zZShkZXZpY2UtXHUwMDNlaGlkKTtcbiBcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNmRldmljZS1cdTAwM2V3YWl0KTtcbi1cdH0gZWxzZSB7XG4tXHRcdHJvY2NhdF9mcmVlX2RldmljZShkZXZpY2UpO1xuIFx0fVxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldmljZS1cdTAwM2VyZWFkZXJzX2xvY2spO1xuK1xuK1x0a3JlZl9wdXQoXHUwMDI2ZGV2aWNlLVx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTtcbiBcbiBzdGF0aWMgbG9uZyByb2NjYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbi1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuLVx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcbi1cdHVuc2lnbmVkIGludCBtaW5vciA9IGltaW5vcihpbm9kZSk7XG4rXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVx1MDAzZWRldmljZTtcbiBcdGxvbmcgcmV0dmFsID0gMDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbi1cbi1cdGRldmljZSA9IGRldmljZXNbbWlub3JdO1xuLVx0aWYgKCFkZXZpY2UpIHtcbi1cdFx0cmV0dmFsID0gLUVOT0RFVjtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBST0NDQVRJT0NHUkVQU0laRTpcbiBcdFx0aWYgKHB1dF91c2VyKGRldmljZS1cdTAwM2VyZXBvcnRfc2l6ZSwgKGludCBfX3VzZXIgKilhcmcpKVxuQEAgLTQxMSw4ICs0MTcsNyBAQCBzdGF0aWMgbG9uZyByb2NjYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dmFsID0gLUVOT1RUWTtcbiBcdH1cbi1vdXQ6XG4tXHRtdXRleF91bmxvY2soXHUwMDI2ZGV2aWNlc19sb2NrKTtcbitcbiBcdHJldHVybiByZXR2YWw7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6NDMuODkxOTg1ODA1WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNDYyMTc4MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSb2NjYXQgSElEIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciB0aGUgUm9jY2F0IEhJRCBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNhcmVmdWxseSBicmVhayBkb3duIHRoZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSByZWZhY3RvcmluZyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSdzIGxpZmV0aW1lIG1hbmFnZW1lbnQuIFRoZSBwYXRjaCBzdW1tYXJ5IGluZGljYXRlcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCB0byB1c2luZyBga3JlZmAgZm9yIHJlZmVyZW5jZSBjb3VudGluZywgcmVwbGFjaW5nIHRoZSBvbGQsIHBvdGVudGlhbGx5IGxlc3Mgcm9idXN0IG1ldGhvZHMuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgYGtyZWZgIG1lbWJlciB0byB0aGUgYHJvY2NhdF9kZXZpY2VgIHN0cnVjdHVyZS4gVGhhdCdzIGEgc29saWQgZmlyc3Qgc3RlcC4gVGhlIHJlcGxhY2VtZW50IG9mIGRpcmVjdCBgcm9jY2F0X2ZyZWVfZGV2aWNlYCBjYWxscyB3aXRoIGBrcmVmX3B1dGAgYW5kIHRoZSBpbmNsdXNpb24gb2YgYGtyZWZfaW5pdGAgYW5kIGBrcmVmX2dldGAgcG9pbnQgdG8gYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gaG93IHRoZSBkcml2ZXIgbWFuYWdlcyB0aGUgZGV2aWNlJ3MgbGlmZWN5Y2xlLiBgcm9jY2F0X29wZW5gIG5vdyBzZWVtcyB0byBiZSBjb3JyZWN0bHkgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQgdXNpbmcgYGtyZWZfZ2V0YCwgc3RvcmluZyB0aGUgcG9pbnRlciwgYW5kIGByb2NjYXRfcmVsZWFzZWAgZGVjcmVtZW50aW5nIGl0IHdpdGggYGtyZWZfcHV0YC4gU21hcnQgbW92ZS4gVGhpcyBzaG91bGQgaGVscCBwcmV2ZW50IHVzZS1hZnRlci1mcmVlIGFuZCBkb3VibGUtZnJlZSBzY2VuYXJpb3MuXG5cblRoZSBtb2RpZmljYXRpb24gdG8gYHJvY2NhdF9pb2N0bGAgdG8gZ2V0IHRoZSBkZXZpY2UgZnJvbSBgcmVhZGVyLVx1MDAzZWRldmljZWAgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCBgZGV2aWNlc1ttaW5vcl1gIGlzIGFub3RoZXIgcG9zaXRpdmUgY2hhbmdlLiBUaGF0IGVsaW1pbmF0ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIG1ha2VzIHRoZSBkcml2ZXIgbW9yZSB0aHJlYWQtc2FmZS5cblxuVGhlIGFkanVzdG1lbnRzIGluIGByb2NjYXRfZGlzY29ubmVjdGAgYXJlIGludGVyZXN0aW5nLiBSZW1vdmluZyB0aGUgZGV2aWNlIGZyb20gdGhlIGFycmF5LCBzZXR0aW5nIGBkZXZpY2UtXHUwMDNlZXhpc3QgPSAwYCwgYW5kIHRoZW4gY2FsbGluZyBga3JlZl9wdXRgIGlzIHRoZSBjb3JyZWN0IHNlcXVlbmNlLiBUaGUgbW92ZSBvZiBpbml0aWFsaXphdGlvbiBpbiBgcm9jY2F0X2Nvbm5lY3RgIGJlZm9yZSBgZGV2aWNlX2NyZWF0ZWAvYGRldmljZXNbbWlub3JdID0gZGV2aWNlO2AgaXMgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgZGV2aWNlIGNyZWF0aW9uLiBJIGxpa2UgdGhlIGFkZGVkIGJvdW5kcyBjaGVja3Mgb24gdGhlIG1pbm9yIG51bWJlcnMgYXMgd2VsbC4gVGhhdCdzIGEgc3RhbmRhcmQgYWRkaXRpb24sIGJ1dCBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgZm9yIHJvYnVzdG5lc3MuXG5cbk5vdywgSSdtIGdvaW5nIHRvIHB1bGwgdXAgYGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY2AgaXRzZWxmLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIEkgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgcmVncmVzc2lvbnMgZHVlIHRvIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhhdCdzIG15IG1haW4gYXJlYSBvZiBjb25jZXJuIG5vdy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IGRhdGEgdGhhdCBpcyB1c2VkIGJlZm9yZSBiZWluZyBzZXQsIGVzcGVjaWFsbHkgaW4gdGhlIGFyZWFzIHRvdWNoZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyBhbmQgZGV2aWNlIHN0cnVjdHVyZSBhY2Nlc3MuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgdG8gdGhlIGNvZGUhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzNjYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNjo1Mi4wMzgyMDU2NDNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogUm9jY2F0IGRyaXZlciBmb3IgTGludXhcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU3RlZmFuIEFjaGF0eiBcXHUwMDNjZXJhem9yX2RlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldFxcdTAwM2VcXG4gICA2OlxcdCAqL1xcbiAgIDc6XFx0XFxuICAgODpcXHQvKlxcbiAgIDk6XFx0ICovXFxuICAxMDpcXHRcXG4gIDExOlxcdC8qXFxuICAxMjpcXHQgKiBNb2R1bGUgcm9jY2F0IGlzIGEgY2hhciBkZXZpY2UgdXNlZCB0byByZXBvcnQgc3BlY2lhbCBldmVudHMgb2Ygcm9jY2F0XFxuICAxMzpcXHQgKiBoYXJkd2FyZSB0byB1c2VybGFuZC4gVGhlc2UgZXZlbnRzIGluY2x1ZGUgcmVxdWVzdHMgZm9yIG9uLXNjcmVlbi1kaXNwbGF5IG9mXFxuICAxNDpcXHQgKiBwcm9maWxlIG9yIGRwaSBzZXR0aW5ncyBvciByZXF1ZXN0cyBmb3IgZXhlY3V0aW9uIG9mIG1hY3JvIHNlcXVlbmNlcyB0aGF0IGFyZVxcbiAgMTU6XFx0ICogbm90IHN0b3JlZCBpbiBkZXZpY2UuIFRoZSBpbmZvcm1hdGlvbiBpbiB0aGVzZSBldmVudHMgZGVwZW5kcyBvbiBoaWQgZGV2aWNlXFxuICAxNjpcXHQgKiBpbXBsZW1lbnRhdGlvbiBhbmQgY29udGFpbnMgZGF0YSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4gYSBzaW5nbGUgaGlkIGV2ZW50XFxuICAxNzpcXHQgKiBvciBlbHNlIGhpZHJhdyBjb3VsZCBoYXZlIGJlZW4gdXNlZC5cXG4gIDE4OlxcdCAqIEl0IGlzIGluc3BpcmVkIGJ5IGhpZHJhdywgYnV0IHVzZXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyIGZvciBhbGwgcmVhZGVycy5cXG4gIDE5OlxcdCAqL1xcbiAgMjA6XFx0XFxuICAyMTpcXHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuICAyMjpcXHRcXG4gIDIzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jZGV2LmhcXHUwMDNlXFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaGlkLXJvY2NhdC5oXFx1MDAzZVxcbiAgMjk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAgMzA6XFx0XFxuICAzMTpcXHQjZGVmaW5lIFJPQ0NBVF9GSVJTVF9NSU5PUiAwXFxuICAzMjpcXHQjZGVmaW5lIFJPQ0NBVF9NQVhfREVWSUNFUyA4XFxuICAzMzpcXHRcXG4gIDM0OlxcdC8qIHNob3VsZCBiZSBhIHBvd2VyIG9mIDIgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbiAqL1xcbiAgMzU6XFx0I2RlZmluZSBST0NDQVRfQ0JVRl9TSVpFIDE2XFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0cnVjdCByb2NjYXRfcmVwb3J0IHtcXG4gIDM4OlxcdFxcdHVpbnQ4X3QgKnZhbHVlO1xcbiAgMzk6XFx0fTtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0c3RydWN0IHJvY2NhdF9kZXZpY2Uge1xcbiAgNDI6XFx0XFx0c3RydWN0IGtyZWYga3JlZjtcXG4gIDQzOlxcdFxcdHVuc2lnbmVkIGludCBtaW5vcjtcXG4gIDQ0OlxcdFxcdGludCByZXBvcnRfc2l6ZTtcXG4gIDQ1OlxcdFxcdGludCBvcGVuO1xcbiAgNDY6XFx0XFx0aW50IGV4aXN0O1xcbiAgNDc6XFx0XFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcXG4gIDQ4OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gIDQ5OlxcdFxcdHN0cnVjdCBoaWRfZGV2aWNlICpoaWQ7XFxuICA1MDpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRlcnM7XFxuICA1MTpcXHRcXHQvKiBwcm90ZWN0cyBtb2RpZmljYXRpb25zIG9mIHJlYWRlcnMgbGlzdCAqL1xcbiAgNTI6XFx0XFx0c3RydWN0IG11dGV4IHJlYWRlcnNfbG9jaztcXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0LypcXG4gIDU1OlxcdFxcdCAqIGNpcmN1bGFyX2J1ZmZlciBoYXMgb25lIHdyaXRlciBhbmQgbXVsdGlwbGUgcmVhZGVycyB3aXRoIHRoZWlyIG93blxcbiAgNTY6XFx0XFx0ICogcmVhZCBwb2ludGVyc1xcbiAgNTc6XFx0XFx0ICovXFxuICA1ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCBjYnVmW1JPQ0NBVF9DQlVGX1NJWkVdO1xcbiAgNTk6XFx0XFx0aW50IGNidWZfZW5kO1xcbiAgNjA6XFx0XFx0c3RydWN0IG11dGV4IGNidWZfbG9jaztcXG4gIDYxOlxcdH07XFxuICA2MjpcXHRcXG4gIDYzOlxcdHN0cnVjdCByb2NjYXRfcmVhZGVyIHtcXG4gIDY0OlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgbm9kZTtcXG4gIDY1OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuICA2NjpcXHRcXHRpbnQgY2J1Zl9zdGFydDtcXG4gIDY3OlxcdH07XFxuICA2ODpcXHRcXG4gIDY5OlxcdHN0YXRpYyBpbnQgcm9jY2F0X21ham9yO1xcbiAgNzA6XFx0c3RhdGljIHN0cnVjdCBjZGV2IHJvY2NhdF9jZGV2O1xcbiAgNzE6XFx0XFxuICA3MjpcXHRzdGF0aWMgc3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZXNbUk9DQ0FUX01BWF9ERVZJQ0VTXTtcXG4gIDczOlxcdC8qIHByb3RlY3RzIG1vZGlmaWNhdGlvbnMgb2YgZGV2aWNlcyBhcnJheSAqL1xcbiAgNzQ6XFx0c3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX2xvY2spO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRzdGF0aWMgdm9pZCByb2NjYXRfZnJlZV9kZXZpY2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuICA3NzpcXHR7XFxuICA3ODpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID1cXG4gIDc5OlxcdFxcdFxcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgcm9jY2F0X2RldmljZSwga3JlZik7XFxuICA4MDpcXHRcXHRpbnQgaTtcXG4gIDgxOlxcdFxcbiAgODI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJPQ0NBVF9DQlVGX1NJWkU7IGkrKylcXG4gIDgzOlxcdFxcdFxcdGtmcmVlKGRldmljZS1cXHUwMDNlY2J1ZltpXS52YWx1ZSk7XFxuICA4NDpcXHRcXHRrZnJlZShkZXZpY2UpO1xcbiAgODU6XFx0fVxcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgc3NpemVfdCByb2NjYXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlcixcXG4gIDg4OlxcdFxcdFxcdHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKVxcbiAgODk6XFx0e1xcbiAgOTA6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlciA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gIDkxOlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2UgPSByZWFkZXItXFx1MDAzZWRldmljZTtcXG4gIDkyOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVwb3J0ICpyZXBvcnQ7XFxuICA5MzpcXHRcXHRzc2l6ZV90IHJldHZhbCA9IDAsIGxlbjtcXG4gIDk0OlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdC8qIG5vIGRhdGE/ICovXFxuICA5OTpcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpIHtcXG4gMTAwOlxcdFxcdFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQsIFxcdTAwMjZ3YWl0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDY6NTIuMDM4MjkwMTkzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5OTY4NTg0OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYGhpZC1yb2NjYXQuY2AsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIEJhY2sgaW50byBgaGlkLXJvY2NhdC5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGJhY2sgaW50byBgaGlkLXJvY2NhdC5jYC4gSSBuZWVkIHRvIHJlLWV4YW1pbmUgdGhpcyBjb2RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgZGV2aWNlLCBwYXJ0aWN1bGFybHkgZm9jdXNpbmcgb24gdGhlIHJlbWFpbmluZyBzZWN0aW9ucy4gSSd2ZSBjb3ZlcmVkIGEgbG90IGFscmVhZHksIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIGEgY29tcGxldGUgcGljdHVyZSBmb3IgdGhpcyBhbmFseXNpcy4gSSdtIGxvb2tpbmcgZm9yIGFueXRoaW5nIEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gdGhlIGluaXRpYWwgcGFzcywgb3IgYW55IGFyZWFzIHRoYXQgcmVxdWlyZSBtb3JlIGluLWRlcHRoIHNjcnV0aW55LCBnaXZlbiB0aGUgY29tcGxleGl0aWVzIG9mIHRoZXNlIFJvY2NhdCBkZXZpY2VzLiBJJ20gZXhwZWN0aW5nIHNvbWUgc3VidGxldGllcyBpbiBob3cgaXQgaGFuZGxlcyBzcGVjaWZpYyBjb21tYW5kcywgY29uZmlndXJhdGlvbiBvcHRpb25zLCBvciBtYXliZSBldmVuIGVycm9yIGhhbmRsaW5nIEkgZGlkbid0IGNhdGNoIGJlZm9yZS4gVGhlIGRldmlsIGlzIG9mdGVuIGluIHRoZSBkZXRhaWxzLCBlc3BlY2lhbGx5IGluIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYXJlYXMgZm9yIG9wdGltaXphdGlvbiwgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBhZmZlY3Qgc3RhYmlsaXR5LiBMZXQncyBzZWUgd2hhdCBlbHNlIHRoaXMgZHJpdmVyIGhhcyB0byBzYXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1ODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjU2LjAzNTE1MTU1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiAxMDI6XFx0XFxuIDEwMzpcXHRcXHRcXHQvKiB3YWl0IGZvciBkYXRhICovXFxuIDEwNDpcXHRcXHRcXHR3aGlsZSAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID09IGRldmljZS1cXHUwMDNlY2J1Zl9lbmQpIHtcXG4gMTA1OlxcdFxcdFxcdFxcdGlmIChmaWxlLVxcdTAwM2VmX2ZsYWdzIFxcdTAwMjYgT19OT05CTE9DSykge1xcbiAxMDY6XFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gLUVBR0FJTjtcXG4gMTA3OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMDg6XFx0XFx0XFx0XFx0fVxcbiAxMDk6XFx0XFx0XFx0XFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7XFxuIDExMDpcXHRcXHRcXHRcXHRcXHRyZXR2YWwgPSAtRVJFU1RBUlRTWVM7XFxuIDExMTpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gMTEyOlxcdFxcdFxcdFxcdH1cXG4gMTEzOlxcdFxcdFxcdFxcdGlmICghZGV2aWNlLVxcdTAwM2VleGlzdCkge1xcbiAxMTQ6XFx0XFx0XFx0XFx0XFx0cmV0dmFsID0gLUVJTztcXG4gMTE1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMTY6XFx0XFx0XFx0XFx0fVxcbiAxMTc6XFx0XFxuIDExODpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMTE5OlxcdFxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuIDEyMDpcXHRcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuIDEyMTpcXHRcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiAxMjI6XFx0XFx0XFx0fVxcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbiAxMjU6XFx0XFx0XFx0cmVtb3ZlX3dhaXRfcXVldWUoXFx1MDAyNmRldmljZS1cXHUwMDNld2FpdCwgXFx1MDAyNndhaXQpO1xcbiAxMjY6XFx0XFx0fVxcbiAxMjc6XFx0XFxuIDEyODpcXHRcXHQvKiBoZXJlIHdlIGVpdGhlciBoYXZlIGRhdGEgb3IgYSByZWFzb24gdG8gcmV0dXJuIGlmIHJldHZhbCBpcyBzZXQgKi9cXG4gMTI5OlxcdFxcdGlmIChyZXR2YWwpXFxuIDEzMDpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxMzE6XFx0XFxuIDEzMjpcXHRcXHRyZXBvcnQgPSBcXHUwMDI2ZGV2aWNlLVxcdTAwM2VjYnVmW3JlYWRlci1cXHUwMDNlY2J1Zl9zdGFydF07XFxuIDEzMzpcXHRcXHQvKlxcbiAxMzQ6XFx0XFx0ICogSWYgcmVwb3J0IGlzIGxhcmdlciB0aGFuIHJlcXVlc3RlZCBhbW91bnQgb2YgZGF0YSwgcmVzdCBvZiByZXBvcnRcXG4gMTM1OlxcdFxcdCAqIGlzIGxvc3QhXFxuIDEzNjpcXHRcXHQgKi9cXG4gMTM3OlxcdFxcdGxlbiA9IGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgXFx1MDAzZSBjb3VudCA/IGNvdW50IDogZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZTtcXG4gMTM4OlxcdFxcbiAxMzk6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIHJlcG9ydC1cXHUwMDNldmFsdWUsIGxlbikpIHtcXG4gMTQwOlxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuIDE0MTpcXHRcXHRcXHRnb3RvIGV4aXRfdW5sb2NrO1xcbiAxNDI6XFx0XFx0fVxcbiAxNDM6XFx0XFx0cmV0dmFsICs9IGxlbjtcXG4gMTQ0OlxcdFxcdHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCA9IChyZWFkZXItXFx1MDAzZWNidWZfc3RhcnQgKyAxKSAlIFJPQ0NBVF9DQlVGX1NJWkU7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdGV4aXRfdW5sb2NrOlxcbiAxNDc6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuIDE0ODpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiAxNDk6XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRzdGF0aWMgX19wb2xsX3Qgcm9jY2F0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpXFxuIDE1MjpcXHR7XFxuIDE1MzpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAxNTQ6XFx0XFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZyZWFkZXItXFx1MDAzZWRldmljZS1cXHUwMDNld2FpdCwgd2FpdCk7XFxuIDE1NTpcXHRcXHRpZiAocmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ICE9IHJlYWRlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VjYnVmX2VuZClcXG4gMTU2OlxcdFxcdFxcdHJldHVybiBFUE9MTElOIHwgRVBPTExSRE5PUk07XFxuIDE1NzpcXHRcXHRpZiAoIXJlYWRlci1cXHUwMDNlZGV2aWNlLVxcdTAwM2VleGlzdClcXG4gMTU4OlxcdFxcdFxcdHJldHVybiBFUE9MTEVSUiB8IEVQT0xMSFVQO1xcbiAxNTk6XFx0XFx0cmV0dXJuIDA7XFxuIDE2MDpcXHR9XFxuIDE2MTpcXHRcXG4gMTYyOlxcdHN0YXRpYyBpbnQgcm9jY2F0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDE2MzpcXHR7XFxuIDE2NDpcXHRcXHR1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpO1xcbiAxNjU6XFx0XFx0c3RydWN0IHJvY2NhdF9yZWFkZXIgKnJlYWRlcjtcXG4gMTY2OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIDE2NzpcXHRcXHRpbnQgZXJyb3IgPSAwO1xcbiAxNjg6XFx0XFxuIDE2OTpcXHRcXHRyZWFkZXIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm9jY2F0X3JlYWRlcik7XFxuIDE3MDpcXHRcXHRpZiAoIXJlYWRlcilcXG4gMTcxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0aWYgKCFkZXZpY2UpIHtcXG4gMTc4OlxcdFxcdFxcdHByX2VtZXJnKFxcXCJyb2NjYXQgZGV2aWNlIHdpdGggbWlub3IgJWQgZG9lc24ndCBleGlzdFxcXFxuXFxcIiwgbWlub3IpO1xcbiAxNzk6XFx0XFx0XFx0ZXJyb3IgPSAtRU5PREVWO1xcbiAxODA6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAxODE6XFx0XFx0XFx0a2ZyZWUocmVhZGVyKTtcXG4gMTgyOlxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZik7XFxuIDE4NjpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMTg5OlxcdFxcbiAxOTA6XFx0XFx0aWYgKCFkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIDE5MTpcXHRcXHRcXHRlcnJvciA9IC1FTk9ERVY7XFxuIDE5MjpcXHRcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuIDE5MzpcXHRcXHR9XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdGlmICghZGV2aWNlLVxcdTAwM2VvcGVuKyspIHtcXG4gMTk2OlxcdFxcdFxcdC8qIHBvd2VyIG9uIGRldmljZSBvbiBhZGRpbmcgZmlyc3QgcmVhZGVyICovXFxuIDE5NzpcXHRcXHRcXHRlcnJvciA9IGhpZF9od19wb3dlcihkZXZpY2UtXFx1MDAzZWhpZCwgUE1fSElOVF9GVUxMT04pO1xcbiAxOTg6XFx0XFx0XFx0aWYgKGVycm9yIFxcdTAwM2MgMCkge1xcbiAxOTk6XFx0XFx0XFx0XFx0LS1kZXZpY2UtXFx1MDAzZW9wZW47XFxuIDIwMDpcXHRcXHRcXHRcXHRnb3RvIGV4aXRfZXJyX3JlYWRlcnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA2OjU2LjAzNTI0MDc3OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjIzNzA5Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFJlbWFpbmRlcioqXG5cbkFscmlnaHQsIEkndmUganVzdCBmaW5pc2hlZCBhbmFseXppbmcgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiB0aGlzIGZpbGUuIE5vdywgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBleGFtaW5lIHRoZSByZXN0IOKAkyBzcGVjaWZpY2FsbHksIGZyb20gbGluZSAyMDEgb253YXJkcy4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIHJlbWFpbmluZyBzZWN0aW9uIHRvIGNvbnRhaW4gdGhlIGNydWNpYWwgZGF0YSBvciBpbnNpZ2h0cyBJJ20gbG9va2luZyBmb3IsIHBlcmhhcHMgdGhlIGN1bG1pbmF0aW9uIG9mIHRoZSBwcm9jZXNzLiBJJ2xsIG5lZWQgdG8gcmFwaWRseSBzY2FuIGZvciB0aGUgcmVsZXZhbnQgcGF0dGVybnMgb3IgdmFyaWFibGVzIHRoYXQgaGF2ZSBjYXVnaHQgbXkgZXllIHNvIGZhciBpbiB0aGUgZG9jdW1lbnQuIEkgbWF5IG5lZWQgdG8gYXBwbHkgc3BlY2lmaWMgZmlsdGVycyBvciB0cmFuc2Zvcm1hdGlvbnMgZGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCBiYXNlZCBvbiB0aGUgY29udGV4dCBJJ3ZlIGFscmVhZHkgZXN0YWJsaXNoZWQgZnJvbSB0aGUgaW5pdGlhbCBwb3J0aW9uLiBUaGlzIGNvdWxkIGluY2x1ZGUsIGJ1dCBpcyBub3QgbGltaXRlZCB0bzogY3Jvc3MtcmVmZXJlbmNpbmcgdmFsdWVzLCBhcHBseWluZyBhIHBhcnRpY3VsYXIgYWxnb3JpdGhtLCBjb21wYXJpbmcgdG8ga25vd24gZGF0YXNldHMsIG9yIGhpZ2hsaWdodGluZyBhbm9tYWxpZXMuIEkgd2lsbCBwcm9jZWVkIHdpdGggZm9jdXMgYW5kIHByZWNpc2lvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI0NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMjI6MDc6MDEuNjU4OTUyODA3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAxOlxcdFxcdFxcdH1cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0XFx0ZXJyb3IgPSBoaWRfaHdfb3BlbihkZXZpY2UtXFx1MDAzZWhpZCk7XFxuIDIwNDpcXHRcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKSB7XFxuIDIwNTpcXHRcXHRcXHRcXHRoaWRfaHdfcG93ZXIoZGV2aWNlLVxcdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcXG4gMjA2OlxcdFxcdFxcdFxcdC0tZGV2aWNlLVxcdTAwM2VvcGVuO1xcbiAyMDc6XFx0XFx0XFx0XFx0Z290byBleGl0X2Vycl9yZWFkZXJzO1xcbiAyMDg6XFx0XFx0XFx0fVxcbiAyMDk6XFx0XFx0fVxcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRyZWFkZXItXFx1MDAzZWRldmljZSA9IGRldmljZTtcXG4gMjEyOlxcdFxcdC8qIG5ldyByZWFkZXIgZG9lc24ndCBnZXQgb2xkIGV2ZW50cyAqL1xcbiAyMTM6XFx0XFx0cmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID0gZGV2aWNlLVxcdTAwM2VjYnVmX2VuZDtcXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gMjE2OlxcdFxcdGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YSA9IHJlYWRlcjtcXG4gMjE3OlxcdFxcbiAyMTg6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDIxOTpcXHRcXHRyZXR1cm4gMDtcXG4gMjIwOlxcdFxcbiAyMjE6XFx0ZXhpdF9lcnJfcmVhZGVyczpcXG4gMjIyOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAyMjM6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gMjI0OlxcdFxcdGtmcmVlKHJlYWRlcik7XFxuIDIyNTpcXHRcXHRyZXR1cm4gZXJyb3I7XFxuIDIyNjpcXHR9XFxuIDIyNzpcXHRcXG4gMjI4OlxcdHN0YXRpYyBpbnQgcm9jY2F0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIDIyOTpcXHR7XFxuIDIzMDpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlYWRlciAqcmVhZGVyID0gZmlsZS1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbiAyMzE6XFx0XFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZSA9IHJlYWRlci1cXHUwMDNlZGV2aWNlO1xcbiAyMzI6XFx0XFxuIDIzMzpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDIzNDpcXHRcXHRsaXN0X2RlbChcXHUwMDI2cmVhZGVyLVxcdTAwM2Vub2RlKTtcXG4gMjM1OlxcdFxcbiAyMzY6XFx0XFx0aWYgKCEtLWRldmljZS1cXHUwMDNlb3Blbikge1xcbiAyMzc6XFx0XFx0XFx0LyogcmVtb3ZpbmcgbGFzdCByZWFkZXIgKi9cXG4gMjM4OlxcdFxcdFxcdGlmIChkZXZpY2UtXFx1MDAzZWV4aXN0KSB7XFxuIDIzOTpcXHRcXHRcXHRcXHRoaWRfaHdfcG93ZXIoZGV2aWNlLVxcdTAwM2VoaWQsIFBNX0hJTlRfTk9STUFMKTtcXG4gMjQwOlxcdFxcdFxcdFxcdGhpZF9od19jbG9zZShkZXZpY2UtXFx1MDAzZWhpZCk7XFxuIDI0MTpcXHRcXHRcXHR9XFxuIDI0MjpcXHRcXHR9XFxuIDI0MzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0a2ZyZWUocmVhZGVyKTtcXG4gMjQ2OlxcdFxcdGtyZWZfcHV0KFxcdTAwMjZkZXZpY2UtXFx1MDAzZWtyZWYsIHJvY2NhdF9mcmVlX2RldmljZSk7XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdHJldHVybiAwO1xcbiAyNDk6XFx0fVxcbiAyNTA6XFx0XFxuIDI1MTpcXHQvKlxcbiAyNTI6XFx0ICogcm9jY2F0X3JlcG9ydF9ldmVudCgpIC0gb3V0cHV0IGRhdGEgdG8gcmVhZGVyc1xcbiAyNTM6XFx0ICogQG1pbm9yOiBtaW5vciBkZXZpY2UgbnVtYmVyIHJldHVybmVkIGJ5IHJvY2NhdF9jb25uZWN0KClcXG4gMjU0OlxcdCAqIEBkYXRhOiBwb2ludGVyIHRvIGRhdGFcXG4gMjU1OlxcdCAqXFxuIDI1NjpcXHQgKiBSZXR1cm4gdmFsdWUgaXMgemVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cXG4gMjU3OlxcdCAqXFxuIDI1ODpcXHQgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGludGVycnVwdCBoYW5kbGVyLlxcbiAyNTk6XFx0ICovXFxuIDI2MDpcXHRpbnQgcm9jY2F0X3JlcG9ydF9ldmVudChpbnQgbWlub3IsIHU4IGNvbnN0ICpkYXRhKVxcbiAyNjE6XFx0e1xcbiAyNjI6XFx0XFx0c3RydWN0IHJvY2NhdF9kZXZpY2UgKmRldmljZTtcXG4gMjYzOlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXI7XFxuIDI2NDpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X3JlcG9ydCAqcmVwb3J0O1xcbiAyNjU6XFx0XFx0dWludDhfdCAqbmV3X3ZhbHVlO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHRpZiAobWlub3IgXFx1MDAzYyAwIHx8IG1pbm9yIFxcdTAwM2U9IFJPQ0NBVF9NQVhfREVWSUNFUylcXG4gMjY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAyNjk6XFx0XFxuIDI3MDpcXHRcXHRkZXZpY2UgPSBkZXZpY2VzW21pbm9yXTtcXG4gMjcxOlxcdFxcdGlmICghZGV2aWNlKVxcbiAyNzI6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdG5ld192YWx1ZSA9IGttZW1kdXAoZGF0YSwgZGV2aWNlLVxcdTAwM2VyZXBvcnRfc2l6ZSwgR0ZQX0FUT01JQyk7XFxuIDI3NTpcXHRcXHRpZiAoIW5ld192YWx1ZSlcXG4gMjc2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDI3OTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdHJlcG9ydCA9IFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZbZGV2aWNlLVxcdTAwM2VjYnVmX2VuZF07XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdC8qIHBhc3NpbmcgTlVMTCBpcyBzYWZlICovXFxuIDI4NDpcXHRcXHRrZnJlZShyZXBvcnQtXFx1MDAzZXZhbHVlKTtcXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0cmVwb3J0LVxcdTAwM2V2YWx1ZSA9IG5ld192YWx1ZTtcXG4gMjg3OlxcdFxcdGRldmljZS1cXHUwMDNlY2J1Zl9lbmQgPSAoZGV2aWNlLVxcdTAwM2VjYnVmX2VuZCArIDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcXG4gMjg4OlxcdFxcbiAyODk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWFkZXIsIFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnMsIG5vZGUpIHtcXG4gMjkwOlxcdFxcdFxcdC8qXFxuIDI5MTpcXHRcXHRcXHQgKiBBcyB3ZSBhbHJlYWR5IGluc2VydGVkIG9uZSBlbGVtZW50LCB0aGUgYnVmZmVyIGNhbid0IGJlXFxuIDI5MjpcXHRcXHRcXHQgKiBlbXB0eS4gSWYgc3RhcnQgYW5kIGVuZCBhcmUgZXF1YWwsIGJ1ZmZlciBpcyBmdWxsIGFuZCB3ZVxcbiAyOTM6XFx0XFx0XFx0ICogaW5jcmVhc2Ugc3RhcnQsIHNvIHRoYXQgc2xvdyByZWFkZXIgbWlzc2VzIG9uZSBldmVudCwgYnV0XFxuIDI5NDpcXHRcXHRcXHQgKiBnZXRzIHRoZSBuZXdlciBvbmVzIGluIHRoZSByaWdodCBvcmRlci5cXG4gMjk1OlxcdFxcdFxcdCAqL1xcbiAyOTY6XFx0XFx0XFx0aWYgKHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCA9PSBkZXZpY2UtXFx1MDAzZWNidWZfZW5kKVxcbiAyOTc6XFx0XFx0XFx0XFx0cmVhZGVyLVxcdTAwM2VjYnVmX3N0YXJ0ID0gKHJlYWRlci1cXHUwMDNlY2J1Zl9zdGFydCArIDEpICUgUk9DQ0FUX0NCVUZfU0laRTtcXG4gMjk4OlxcdFxcdH1cXG4gMjk5OlxcdFxcbiAzMDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZWNidWZfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjAxLjY1OTA0OTY0N1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzQ1OTg3NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGlmIEkgYW0gdGhlIG9uZSB0aGlua2luZyBpdCwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIFJlbWFpbmRlciBvZiB0aGUgRmlsZSAoU2VjdGlvbnMgMzAxIE9ud2FyZCkqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHNoaWZ0IGdlYXJzIGFuZCBkZWx2ZSBpbnRvIHRoZSBiYWNrIGVuZCBvZiB0aGlzIGZpbGUsIHNwZWNpZmljYWxseSBmcm9tIHNlY3Rpb24gMzAxIHRvIHRoZSBlbmQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoZSBtYXRlcmlhbCBoZXJlIGlzIGdvaW5nIHRvIGJ1aWxkIG9uIHRoZSBmb3VuZGF0aW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBlc3RhYmxpc2hlZC4gUGVyaGFwcyBpdCBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBlZGdlLWNhc2UgaGFuZGxpbmcsIG9yIHBvdGVudGlhbGx5IGZpbmFsIHJlZmluZW1lbnRzIHRvIHRoZSBtZXRob2RvbG9neSB0aGF0IGhhcyBiZWVuIHB1dCBmb3J0aC4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlOiBob3cgdGhlIHByb3Bvc2VkIGFsZ29yaXRobSBzY2FsZXMsIGlmIHRoZXJlIGFyZSBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGRldGFpbHMgb24gdGhlIHRlc3QgZW52aXJvbm1lbnQsIGFuZCBpZiB0aGV5J3ZlIGFjY291bnRlZCBmb3IgdmFyaWF0aW9ucyBpbiB0aGUgaW5jb21pbmcgZGF0YSBzdHJlYW0uIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGVpciBzb2x1dGlvbiBpcy4gSSdtIGFsc28gaG9waW5nIGZvciB0aGUgY29uY2x1c2lvbiB0byB0aGUgZG9jdW1lbnQsIHdoaWNoIHNob3VsZCBjb250YWluIHRoZWlyIG92ZXJhbGwgaW5zaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MjgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjA0LjAwNTAzOTQ1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9oaWQvaGlkLXJvY2NhdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMDE6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuIDMwMjpcXHRcXG4gMzAzOlxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2ZGV2aWNlLVxcdTAwM2V3YWl0KTtcXG4gMzA0OlxcdFxcdHJldHVybiAwO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0RVhQT1JUX1NZTUJPTF9HUEwocm9jY2F0X3JlcG9ydF9ldmVudCk7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdC8qXFxuIDMwOTpcXHQgKiByb2NjYXRfY29ubmVjdCgpIC0gY3JlYXRlIGEgY2hhciBkZXZpY2UgZm9yIHNwZWNpYWwgZXZlbnQgb3V0cHV0XFxuIDMxMDpcXHQgKiBAY2xhc3M6IHRoZSBjbGFzcyB0aGF0cyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGV2aWNlLiBNZWFudCB0byBob2xkIGRldmljZVxcbiAzMTE6XFx0ICogc3BlY2lmaWMgc3lzZnMgYXR0cmlidXRlcy5cXG4gMzEyOlxcdCAqIEBoaWQ6IHRoZSBoaWQgZGV2aWNlIHRoZSBjaGFyIGRldmljZSBzaG91bGQgYmUgY29ubmVjdGVkIHRvLlxcbiAzMTM6XFx0ICogQHJlcG9ydF9zaXplOiBzaXplIG9mIHJlcG9ydHNcXG4gMzE0OlxcdCAqXFxuIDMxNTpcXHQgKiBSZXR1cm4gdmFsdWUgaXMgbWlub3IgZGV2aWNlIG51bWJlciBpbiBSYW5nZSBbMCwgUk9DQ0FUX01BWF9ERVZJQ0VTXSBvblxcbiAzMTY6XFx0ICogc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuIDMxNzpcXHQgKi9cXG4gMzE4OlxcdGludCByb2NjYXRfY29ubmVjdChjb25zdCBzdHJ1Y3QgY2xhc3MgKmtsYXNzLCBzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBpbnQgcmVwb3J0X3NpemUpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHR1bnNpZ25lZCBpbnQgbWlub3I7XFxuIDMyMTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlO1xcbiAzMjI6XFx0XFx0aW50IHRlbXA7XFxuIDMyMzpcXHRcXG4gMzI0OlxcdFxcdGRldmljZSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb2NjYXRfZGV2aWNlKTtcXG4gMzI1OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzMjY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdGtyZWZfaW5pdChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VrcmVmKTtcXG4gMzI5OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmRldmljZS1cXHUwMDNld2FpdCk7XFxuIDMzMDpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzKTtcXG4gMzMxOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlcmVhZGVyc19sb2NrKTtcXG4gMzMyOlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRldmljZS1cXHUwMDNlY2J1Zl9sb2NrKTtcXG4gMzMzOlxcdFxcdGRldmljZS1cXHUwMDNlaGlkID0gaGlkO1xcbiAzMzQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDE7XFxuIDMzNTpcXHRcXHRkZXZpY2UtXFx1MDAzZWNidWZfZW5kID0gMDtcXG4gMzM2OlxcdFxcdGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUgPSByZXBvcnRfc2l6ZTtcXG4gMzM3OlxcdFxcbiAzMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzM5OlxcdFxcbiAzNDA6XFx0XFx0Zm9yIChtaW5vciA9IDA7IG1pbm9yIFxcdTAwM2MgUk9DQ0FUX01BWF9ERVZJQ0VTOyArK21pbm9yKSB7XFxuIDM0MTpcXHRcXHRcXHRpZiAoZGV2aWNlc1ttaW5vcl0pXFxuIDM0MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gMzQzOlxcdFxcdFxcdGJyZWFrO1xcbiAzNDQ6XFx0XFx0fVxcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRpZiAobWlub3IgXFx1MDAzYyBST0NDQVRfTUFYX0RFVklDRVMpIHtcXG4gMzQ3OlxcdFxcdFxcdGRldmljZXNbbWlub3JdID0gZGV2aWNlO1xcbiAzNDg6XFx0XFx0fSBlbHNlIHtcXG4gMzQ5OlxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2ZGV2aWNlc19sb2NrKTtcXG4gMzUwOlxcdFxcdFxcdGtmcmVlKGRldmljZSk7XFxuIDM1MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzUyOlxcdFxcdH1cXG4gMzUzOlxcdFxcbiAzNTQ6XFx0XFx0ZGV2aWNlLVxcdTAwM2VtaW5vciA9IG1pbm9yO1xcbiAzNTU6XFx0XFxuIDM1NjpcXHRcXHRkZXZpY2UtXFx1MDAzZWRldiA9IGRldmljZV9jcmVhdGUoa2xhc3MsIFxcdTAwMjZoaWQtXFx1MDAzZWRldixcXG4gMzU3OlxcdFxcdFxcdFxcdE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpLCBOVUxMLFxcbiAzNTg6XFx0XFx0XFx0XFx0XFxcIiVzJXMlZFxcXCIsIFxcXCJyb2NjYXRcXFwiLCBoaWQtXFx1MDAzZWRyaXZlci1cXHUwMDNlbmFtZSwgbWlub3IpO1xcbiAzNTk6XFx0XFxuIDM2MDpcXHRcXHRpZiAoSVNfRVJSKGRldmljZS1cXHUwMDNlZGV2KSkge1xcbiAzNjE6XFx0XFx0XFx0ZGV2aWNlc1ttaW5vcl0gPSBOVUxMO1xcbiAzNjI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzNjM6XFx0XFx0XFx0dGVtcCA9IFBUUl9FUlIoZGV2aWNlLVxcdTAwM2VkZXYpO1xcbiAzNjQ6XFx0XFx0XFx0a2ZyZWUoZGV2aWNlKTtcXG4gMzY1OlxcdFxcdFxcdHJldHVybiB0ZW1wO1xcbiAzNjY6XFx0XFx0fVxcbiAzNjc6XFx0XFxuIDM2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHJldHVybiBtaW5vcjtcXG4gMzcxOlxcdH1cXG4gMzcyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9jb25uZWN0KTtcXG4gMzczOlxcdFxcbiAzNzQ6XFx0Lyogcm9jY2F0X2Rpc2Nvbm5lY3QoKSAtIHJlbW92ZSBjaGFyIGRldmljZSBmcm9tIGhpZCBkZXZpY2VcXG4gMzc1OlxcdCAqIEBtaW5vcjogdGhlIG1pbm9yIGRldmljZSBudW1iZXIgcmV0dXJuZWQgYnkgcm9jY2F0X2Nvbm5lY3QoKVxcbiAzNzY6XFx0ICovXFxuIDM3NzpcXHR2b2lkIHJvY2NhdF9kaXNjb25uZWN0KGludCBtaW5vcilcXG4gMzc4OlxcdHtcXG4gMzc5OlxcdFxcdHN0cnVjdCByb2NjYXRfZGV2aWNlICpkZXZpY2U7XFxuIDM4MDpcXHRcXG4gMzgxOlxcdFxcdGlmIChtaW5vciBcXHUwMDNjIDAgfHwgbWlub3IgXFx1MDAzZT0gUk9DQ0FUX01BWF9ERVZJQ0VTKVxcbiAzODI6XFx0XFx0XFx0cmV0dXJuO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZkZXZpY2VzX2xvY2spO1xcbiAzODU6XFx0XFx0ZGV2aWNlID0gZGV2aWNlc1ttaW5vcl07XFxuIDM4NjpcXHRcXHRkZXZpY2VzW21pbm9yXSA9IE5VTEw7XFxuIDM4NzpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldmljZXNfbG9jayk7XFxuIDM4ODpcXHRcXG4gMzg5OlxcdFxcdGlmICghZGV2aWNlKVxcbiAzOTA6XFx0XFx0XFx0cmV0dXJuO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRkZXZpY2VfZGVzdHJveShkZXZpY2UtXFx1MDAzZWRldi1cXHUwMDNlY2xhc3MsIE1LREVWKHJvY2NhdF9tYWpvciwgbWlub3IpKTtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2aWNlLVxcdTAwM2VyZWFkZXJzX2xvY2spO1xcbiAzOTU6XFx0XFx0ZGV2aWNlLVxcdTAwM2VleGlzdCA9IDA7XFxuIDM5NjpcXHRcXHRpZiAoZGV2aWNlLVxcdTAwM2VvcGVuKSB7XFxuIDM5NzpcXHRcXHRcXHRoaWRfaHdfY2xvc2UoZGV2aWNlLVxcdTAwM2VoaWQpO1xcbiAzOTg6XFx0XFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXdhaXQpO1xcbiAzOTk6XFx0XFx0fVxcbiA0MDA6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkZXZpY2UtXFx1MDAzZXJlYWRlcnNfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjA0LjAwNTE3MTk3OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzczNjg2ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGdlYXJlZCB0b3dhcmQgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlbWFpbmluZyBMaW5lIEluc3BlY3Rpb24gLSBBIEZvY3VzZWQgUmV2aWV3KipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoZSBmaW5hbCBibG9jaywgbGluZXMgNDAxIHRocm91Z2ggdGhlIGVuZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gZWl0aGVyOiBhKSBjb250YWluIGNvbmNsdWRpbmcgcmVtYXJrcyBhbmQgc3VtbWFyaWVzIG9mIHByZXZpb3VzIGZpbmRpbmdzLCBvciBiKSBleHBsb3JlIHBvdGVudGlhbCBhdmVudWVzIG9yIG9wZW4gcXVlc3Rpb25zIHRoYXQgZW1lcmdlZCBmcm9tIHRoZSByZXNlYXJjaC4gSWYgcHJldmlvdXMgbGluZSBzZWdtZW50cyBhcmUgYW55dGhpbmcgdG8gZ28gYnksIEkgc2hvdWxkIGJlIGFibGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZnVuY3Rpb24gb3IgcHVycG9zZSBvZiB0aGlzIHNlZ21lbnQgYW5kIGFkanVzdCBteSBwZXJzcGVjdGl2ZSBhY2NvcmRpbmdseS4gSXQncyBsaWtlbHkgdGhhdCBpdCB3aWxsIGJlIG11Y2ggZWFzaWVyIHRvIGFzc2VzcyB0aGlzIHNlZ21lbnQsIG5vdyB0aGF0IEkgaGF2ZSB0aGUgY29udGV4dCBvZiB0aGUgcHJldmlvdXMgZmluZGluZ3MuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDIyOjA3OjA2Ljc3ODg2MDY1NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2hpZC9oaWQtcm9jY2F0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAxOlxcdFxcbiA0MDI6XFx0XFx0a3JlZl9wdXQoXFx1MDAyNmRldmljZS1cXHUwMDNla3JlZiwgcm9jY2F0X2ZyZWVfZGV2aWNlKTtcXG4gNDAzOlxcdH1cXG4gNDA0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKHJvY2NhdF9kaXNjb25uZWN0KTtcXG4gNDA1OlxcdFxcbiA0MDY6XFx0c3RhdGljIGxvbmcgcm9jY2F0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4gNDA3OlxcdHtcXG4gNDA4OlxcdFxcdHN0cnVjdCByb2NjYXRfcmVhZGVyICpyZWFkZXIgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDQwOTpcXHRcXHRzdHJ1Y3Qgcm9jY2F0X2RldmljZSAqZGV2aWNlID0gcmVhZGVyLVxcdTAwM2VkZXZpY2U7XFxuIDQxMDpcXHRcXHRsb25nIHJldHZhbCA9IDA7XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdHN3aXRjaCAoY21kKSB7XFxuIDQxMzpcXHRcXHRjYXNlIFJPQ0NBVElPQ0dSRVBTSVpFOlxcbiA0MTQ6XFx0XFx0XFx0aWYgKHB1dF91c2VyKGRldmljZS1cXHUwMDNlcmVwb3J0X3NpemUsIChpbnQgX191c2VyICopYXJnKSlcXG4gNDE1OlxcdFxcdFxcdFxcdHJldHZhbCA9IC1FRkFVTFQ7XFxuIDQxNjpcXHRcXHRcXHRicmVhaztcXG4gNDE3OlxcdFxcdGRlZmF1bHQ6XFxuIDQxODpcXHRcXHRcXHRyZXR2YWwgPSAtRU5PVFRZO1xcbiA0MTk6XFx0XFx0fVxcbiA0MjA6XFx0XFxuIDQyMTpcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiA0MjI6XFx0fVxcbiA0MjM6XFx0XFxuIDQyNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByb2NjYXRfb3BzID0ge1xcbiA0MjU6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuIDQyNjpcXHRcXHQucmVhZCA9IHJvY2NhdF9yZWFkLFxcbiA0Mjc6XFx0XFx0LnBvbGwgPSByb2NjYXRfcG9sbCxcXG4gNDI4OlxcdFxcdC5vcGVuID0gcm9jY2F0X29wZW4sXFxuIDQyOTpcXHRcXHQucmVsZWFzZSA9IHJvY2NhdF9yZWxlYXNlLFxcbiA0MzA6XFx0XFx0Lmxsc2VlayA9IG5vb3BfbGxzZWVrLFxcbiA0MzE6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gcm9jY2F0X2lvY3RsLFxcbiA0MzI6XFx0fTtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0c3RhdGljIGludCBfX2luaXQgcm9jY2F0X2luaXQodm9pZClcXG4gNDM1OlxcdHtcXG4gNDM2OlxcdFxcdGludCByZXR2YWw7XFxuIDQzNzpcXHRcXHRkZXZfdCBkZXZfaWQ7XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdHJldHZhbCA9IGFsbG9jX2NocmRldl9yZWdpb24oXFx1MDAyNmRldl9pZCwgUk9DQ0FUX0ZJUlNUX01JTk9SLFxcbiA0NDA6XFx0XFx0XFx0XFx0Uk9DQ0FUX01BWF9ERVZJQ0VTLCBcXFwicm9jY2F0XFxcIik7XFxuIDQ0MTpcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMCkge1xcbiA0NDI6XFx0XFx0XFx0cHJfd2FybihcXFwiY2FuJ3QgZ2V0IG1ham9yIG51bWJlclxcXFxuXFxcIik7XFxuIDQ0MzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NDQ6XFx0XFx0fVxcbiA0NDU6XFx0XFxuIDQ0NjpcXHRcXHRyb2NjYXRfbWFqb3IgPSBNQUpPUihkZXZfaWQpO1xcbiA0NDc6XFx0XFxuIDQ0ODpcXHRcXHRjZGV2X2luaXQoXFx1MDAyNnJvY2NhdF9jZGV2LCBcXHUwMDI2cm9jY2F0X29wcyk7XFxuIDQ0OTpcXHRcXHRyZXR2YWwgPSBjZGV2X2FkZChcXHUwMDI2cm9jY2F0X2NkZXYsIGRldl9pZCwgUk9DQ0FUX01BWF9ERVZJQ0VTKTtcXG4gNDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNzowNi43Nzg5NTA1ODRaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc0NDY5MjcxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUm9jY2F0IEhJRCBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgY29tbWl0LiBUaGUgY29yZSBvZiBpdCBpcyBhIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIGluIGBoaWQtcm9jY2F0LmNgIHRvIGFkZHJlc3Mgc29tZSBwcmV0dHkgbmFzdHkgYnVnczogdXNlLWFmdGVyLWZyZWUgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy4gVGhlIHNvbHV0aW9uPyBSZWZlcmVuY2UgY291bnRpbmcgZm9yIHRoZSBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIHVzaW5nIGBzdHJ1Y3Qga3JlZmAuIFRoaXMgZW5zdXJlcyB0aGF0IGV2ZW4gaWYgYSBkZXZpY2UgZGlzY29ubmVjdHMgd2hpbGUgYSBmaWxlIGlzIHN0aWxsIG9wZW4sIHRoZSBgcm9jY2F0X2RldmljZWAgc3RydWN0IHN0aWNrcyBhcm91bmQgdW50aWwgYWxsIGZpbGUgcmVsZWFzZSBoYW5kbGVycyAoYHJvY2NhdF9yZWxlYXNlYCkgaGF2ZSBkcm9wcGVkIHRoZWlyIHJlZmVyZW5jZXMuIEJleW9uZCB0aGF0LCB0aGVyZSBhcmUgc29tZSBtaW5vciBmaXhlcyBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgbnVsbCBkZXJlZmVyZW5jZXMsIGFuZCBhIGNyaXRpY2FsIGluaXRpYWxpemF0aW9uIG9yZGVyaW5nIGlzc3VlOiB0aGUgYGRldmljZWAgdmFyaWFibGUgbmVlZHMgdG8gYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIG90aGVyIHRocmVhZHMgY2FuIGFjY2VzcyBpdC5cblxuTm93LCBsZXQncyBldmFsdWF0ZSBLQVNBTiB2ZXJzdXMgS01TQU4gZm9yIHRoaXMuIEZyb20gbXkgZXhwZXJ0IHBlcnNwZWN0aXZlLCBoZXJlJ3Mgd2hhdCBzdGFuZHMgb3V0OlxuXG4qICAgKipCdWdzIEZpeGVkOioqIFdlJ3JlIHRhbGtpbmcgdXNlLWFmdGVyLWZyZWUgcmVsYXRlZCB0byB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIChLQVNBTiB3aWxsIG5haWwgdGhpcyksIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzIHJlbGF0ZWQgdG8gYXJyYXkgaW5kZXhpbmcgd2l0aCBgbWlub3JgIChLQVNBTiBpcyBrZXkgaGVyZSksIGFuZCByYWNlIGNvbmRpdGlvbnMgaW4gaG93IGRpc2Nvbm5lY3RzIGludGVyYWN0IHdpdGggb3Blbi9yZWxlYXNlL2lvY3RsIGNhbGxzLlxuKiAgICoqVW5pbml0aWFsaXplZCBNZW1vcnk6KiogSSd2ZSBjYXJlZnVsbHkgcmV2aWV3ZWQgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gb2NjdXJzLiBUaGUgcGF0Y2ggdXNlcyBga3phbGxvY19vYmpgIGZvciBib3RoIGBzdHJ1Y3Qgcm9jY2F0X2RldmljZWAgYW5kIGBzdHJ1Y3Qgcm9jY2F0X3JlYWRlcmAsIHdoaWNoIGlzIGV4Y2VsbGVudCBiZWNhdXNlIGl0IGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gQW55IHJlcG9ydCB2YWx1ZXMgYXJlIGFsbG9jYXRlZCB2aWEgYGttZW1kdXBgLiBGdXJ0aGVyLCBpbiBgcm9jY2F0X2lvY3RsYCB3ZSBhcmUgcHV0dGluZyBhbiBpbnQgYHJlcG9ydF9zaXplYCAoc2V0IGJ5IGByb2NjYXRfY29ubmVjdGApIHRvIHVzZXIgc3BhY2UuIEluIGByb2NjYXRfcmVhZGAgd2UgYXJlIHJlYWRpbmcgZnJvbSBgZGV2aWNlLVx1MDAzZWNidWZbcmVhZGVyLVx1MDAzZWNidWZfc3RhcnRdLnZhbHVlYCB3aGljaCB3YXMgcG9wdWxhdGVkIGJ5IGBrbWVtZHVwYCBpbiBgcm9jY2F0X3JlcG9ydF9ldmVudGAuIFRoZXJlIGFyZSBubyBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgYWxzbyBubyBjaGFuZ2VzIHRvIHVzZXItc3BhY2UgY29weSBsb2dpYyBvciBsZW5ndGggY2FsY3VsYXRpb24gdGhhdCB3b3VsZCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuXG5UaGVyZWZvcmUsIGFuZCBJIGZlZWwgY29uZmlkZW50IGhlcmUsIEtBU0FOIGNvdmVycyB0aGUgY3J1Y2lhbCBtZW1vcnkgc2FmZXR5IGNvbmNlcm5zIGluIHRoaXMgcGF0Y2guIFNwZWNpZmljYWxseSwgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMsIGFuZCBkb3VibGUtZnJlZSBpc3N1ZXMuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZSBiZWNhdXNlIHRoZSBjb2RlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4gQWxsIHN0cnVjdHVyZXMgYXJlIHplcm8taW5pdGlhbGl6ZWQgYW5kIGNvcGllZCB1c2luZyBga21lbWR1cGAuIEknZCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5JbiBzdW1tYXJ5LCBJJ2xsIGV4cGxhaW4gdGhpcyBsaWtlIHRoaXM6IFRoZSBwYXRjaCBpbXBsZW1lbnRzIHJlZmVyZW5jZSBjb3VudGluZyB2aWEgYGtyZWZgIGZvciBgc3RydWN0IHJvY2NhdF9kZXZpY2VgIHRvIHByZXZlbnQgdXNlLWFmdGVyLWZyZWUsIGZpeGVzIHNvbWUgYm91bmRzIGNoZWNrcywgYW5kIGdldHMgaW5pdGlhbGl6YXRpb24gb3JkZXJpbmcgY29ycmVjdC4gS0FTQU4gaXMgdGhlIHJpZ2h0IHRvb2wgYmVjYXVzZSBpdCB0YXJnZXRzIHRoZSBtYWluIGZhaWx1cmUgbW9kZXMgb2YgdGhpcyBkZXZpY2UgbGlmZWN5Y2xlIHJlZmFjdG9yaW5nLiBLTVNBTiwgaG93ZXZlciwgaXMgbm90IG5lZWRlZCBiZWNhdXNlIGFsbCBzdHJ1Y3R1cmVzIGFyZSB6ZXJvLWluaXRpYWxpemVkLCByZXBvcnQgYnVmZmVycyBhcmUgZHVwbGljYXRlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIG9yIGJyYW5jaGVzIGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUwNiwiT3V0cHV0VG9rZW5zIjoyNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQyMjowNzoxNS41MjM2NDU3NTJaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cXG5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwcmltYXJ5IGJ1Z3MgYWRkcmVzc2VkIGFuZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGhlcmUgYXJlIHVzZS1hZnRlci1mcmVlLCBwcmVtYXR1cmUgZGVhbGxvY2F0aW9uLCBhbmQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiB0aGUgZGV2aWNlcyBhcnJheS4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXFxuXFxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgY29uY3VycmVuY3kgaXNzdWVzIGluIGRyaXZlcnMvaGlkL2hpZC1yb2NjYXQuYyBieSBpbnRyb2R1Y2luZyBrcmVmLWJhc2VkIHJlZmVyZW5jZSBjb3VudGluZyBmb3Igc3RydWN0IHJvY2NhdF9kZXZpY2UsIHByb3Blcmx5IGJvdW5kcy1jaGVja2luZyBtaW5vciBkZXZpY2UgaW5kZXhlcywgYW5kIGVuc3VyaW5nIHN0cnVjdCBmaWVsZHMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBleHBvc2luZyB0aGUgZGV2aWNlIGluIHRoZSBnbG9iYWwgZGV2aWNlcyBhcnJheS5cXG5cXG4tIEtBU0FOIGFwcGxpY2FiaWxpdHk6IFRoZSBwcmltYXJ5IGJ1Z3MgYWRkcmVzc2VkIGFuZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2VkIGhlcmUgYXJlIHVzZS1hZnRlci1mcmVlLCBwcmVtYXR1cmUgZGVhbGxvY2F0aW9uLCBhbmQgb3V0LW9mLWJvdW5kcyBpbmRleGluZyBpbiB0aGUgZGV2aWNlcyBhcnJheS4gVGhlc2UgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgYXJlIGRpcmVjdGx5IGRldGVjdGVkIGJ5IEtBU0FOLlxcbi0gS01TQU4gYXBwbGljYWJpbGl0eTogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3RydWN0dXJlcyAoc3RydWN0IHJvY2NhdF9kZXZpY2UsIHN0cnVjdCByb2NjYXRfcmVhZGVyKSBhcmUgYWxsb2NhdGVkIHdpdGgga3phbGxvY19vYmooKSwgcmVwb3J0IGRhdGEgaXMgYWxsb2NhdGVkIGFuZCBjb3BpZWQgd2l0aCBrbWVtZHVwKCksIGFuZCBhbGwgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciBpbiByb2NjYXRfcmVhZCBvciBwdXRfdXNlciBpbiByb2NjYXRfaW9jdGwpIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXFxuXFxuVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[1] Phase: Succeeded StartedAt: 2026-09-02 22:07:27 +0000 UTC FinishedAt: 2026-09-02 22:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 22:07:27 +0000 UTC FinishedAt: 2026-09-02 22:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2] Phase: Succeeded StartedAt: 2026-09-02 22:07:27 +0000 UTC FinishedAt: 2026-09-03 01:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:07:27 +0000 UTC FinishedAt: 2026-09-03 01:46:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:07:27 +0000 UTC FinishedAt: 2026-09-02 22:07:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:07:27 +0000 UTC FinishedAt: 2026-09-02 22:07:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-workflowjkvkb/series-workflowjkvkb-convert-artifact-2177687426/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:07:37 +0000 UTC FinishedAt: 2026-09-02 22:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:07:37 +0000 UTC FinishedAt: 2026-09-02 22:23:30 +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:*b500ded5-e4da-4990-b615-1c93003f3a19,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-workflowjkvkb/series-workflowjkvkb-convert-artifact-2177687426/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": "8a412a81-5e06-48ca-8dd1-aeb076754ffd", "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-workflowjkvkb/series-workflowjkvkb-build-action-3853282880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:07:37 +0000 UTC FinishedAt: 2026-09-02 22:23:20 +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:*b500ded5-e4da-4990-b615-1c93003f3a19,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-workflowjkvkb/series-workflowjkvkb-convert-artifact-2177687426/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": "8a412a81-5e06-48ca-8dd1-aeb076754ffd", "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-workflowjkvkb/series-workflowjkvkb-build-action-3853282880/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:23:30 +0000 UTC FinishedAt: 2026-09-02 22:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:23:30 +0000 UTC FinishedAt: 2026-09-02 22:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:23:30 +0000 UTC FinishedAt: 2026-09-02 22:23:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:23:30 +0000 UTC FinishedAt: 2026-09-02 22:23:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-workflowjkvkb/series-workflowjkvkb-convert-artifact-1304552157/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:23:40 +0000 UTC FinishedAt: 2026-09-02 22:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:23:40 +0000 UTC FinishedAt: 2026-09-02 22:25:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a412a81-5e06-48ca-8dd1-aeb076754ffd,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-workflowjkvkb/series-workflowjkvkb-build-action-3853282880/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-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:25:44 +0000 UTC FinishedAt: 2026-09-02 22:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:25:44 +0000 UTC FinishedAt: 2026-09-02 22:25:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:25:44 +0000 UTC FinishedAt: 2026-09-02 22:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:25:44 +0000 UTC FinishedAt: 2026-09-02 22:41:42 +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:*b500ded5-e4da-4990-b615-1c93003f3a19,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-workflowjkvkb/series-workflowjkvkb-convert-artifact-1304552157/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": "51c67534-b467-4d62-a5c6-6eba3abdb1eb", "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-workflowjkvkb/series-workflowjkvkb-build-action-2031559609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:25:44 +0000 UTC FinishedAt: 2026-09-02 22:41:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*b500ded5-e4da-4990-b615-1c93003f3a19,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-workflowjkvkb/series-workflowjkvkb-convert-artifact-1304552157/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": "51c67534-b467-4d62-a5c6-6eba3abdb1eb", "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-workflowjkvkb/series-workflowjkvkb-build-action-2031559609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:41:42 +0000 UTC FinishedAt: 2026-09-02 22:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:41:42 +0000 UTC FinishedAt: 2026-09-02 22:41:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:41:42 +0000 UTC FinishedAt: 2026-09-02 22:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:41:42 +0000 UTC FinishedAt: 2026-09-02 22:43:37 +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:*51c67534-b467-4d62-a5c6-6eba3abdb1eb,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-workflowjkvkb/series-workflowjkvkb-build-action-2031559609/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-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:46 +0000 UTC FinishedAt: 2026-09-03 01:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:46 +0000 UTC FinishedAt: 2026-09-03 01:46:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"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:*8a412a81-5e06-48ca-8dd1-aeb076754ffd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*51c67534-b467-4d62-a5c6-6eba3abdb1eb,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-workflowjkvkb/series-workflowjkvkb-build-action-3853282880/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-workflowjkvkb/series-workflowjkvkb-build-action-2031559609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:46 +0000 UTC FinishedAt: 2026-09-02 22:43:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:46 +0000 UTC FinishedAt: 2026-09-02 22:43:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"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-workflowjkvkb/series-workflowjkvkb-convert-artifact-3766097506/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:46 +0000 UTC FinishedAt: 2026-09-02 22:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:46 +0000 UTC FinishedAt: 2026-09-02 22:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:46 +0000 UTC FinishedAt: 2026-09-02 22:43:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:56 +0000 UTC FinishedAt: 2026-09-03 01:46:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjkvkb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["roccat_connect","roccat_disconnect","roccat_report_event","roccat_open","roccat_release","roccat_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HID_ROCCAT","USB_HID","HID"],"series_id":"f5ba8a12-a0e7-4e56-94c2-7d6099096c6c","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-09-02 22:43:56 +0000 UTC FinishedAt: 2026-09-03 01:46:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8a412a81-5e06-48ca-8dd1-aeb076754ffd,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*51c67534-b467-4d62-a5c6-6eba3abdb1eb,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-workflowjkvkb/series-workflowjkvkb-build-action-3853282880/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-workflowjkvkb/series-workflowjkvkb-build-action-2031559609/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-workflowjkvkb/series-workflowjkvkb-convert-artifact-3766097506/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,}