Name: series-workflowrtqbg Phase: Succeeded StartedAt: 2026-09-09 13:08:23 +0000 UTC FinishedAt: 2026-09-09 17:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[0] Phase: Succeeded StartedAt: 2026-09-09 13:08:23 +0000 UTC FinishedAt: 2026-09-09 13:57:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 13:08:23 +0000 UTC FinishedAt: 2026-09-09 13:57:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRT_WIFI", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRT_WIFI", "CFG80211" ], "series_id": "cf613bab-b2e8-4ca3-bc60-b976c01c4aea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virt_wifi_newlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRfV0lGSSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRfd2lmaV9uZXdsaW5rJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNjZGUxNjEzMzUwMjUyMGY5NDMzNzY1YmI5NTViNmZjNGNjYTU2NDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjU2OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXG5pbmRleCBiNjlhNDY1MGZiYTg1Li40OGFmYzI0MzJmOTNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuQEAgLTU1OCw3ICYjNDM7NTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuLVx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbiBcbiBcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcbkBAIC01ODQsNiAmIzQzOzU4Myw4IEBAIHN0YXRpYyBpbnQgdmlydF93aWZpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcbiBcdH1cbiBcbiYjNDM7XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpO1xuJiM0MztcbiBcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSB2aXJ0X3dpZmlfbmV0X2RldmljZV9kZXN0cnVjdG9yO1xuIFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XG4gXHRwcml2LVx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRfV0lGSSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRfd2lmaV9uZXdsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aXJ0dWFsIHdpZmkgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gYHZpcnRfd2lmaV9uZXdsaW5rYCBieSBkZWZlcnJpbmcgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCB1bnRpbCBhZnRlciB0aGUgbmV0ZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYW5kIHVwcGVyIGRldmljZSBsaW5rIGVzdGFibGlzaGVkLiBUaGUgdmlydF93aWZpIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRsaW5rIG1lc3NhZ2VzIChSVE1fTkVXTElOSyksIG1ha2luZyB0aGlzIG1vZGlmaWVkIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYwppbmRleCBiNjlhNDY1MGZiYTg1Li40OGFmYzI0MzJmOTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMKQEAgLTU1OCw3ICYjNDM7NTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCWV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBwcml2LSZndDtsb3dlcmRldik7Ci0JbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi0mZ3Q7bG93ZXJkZXYsIGRldik7CiAKIAlkZXYtJmd0O2llZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LSZndDtpZWVlODAyMTFfcHRyKTsKIApAQCAtNTg0LDYgJiM0Mzs1ODMsOCBAQCBzdGF0aWMgaW50IHZpcnRfd2lmaV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7CiAJfQogCiYjNDM7CW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYpOwomIzQzOwogCWRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjsKIAlwcml2LSZndDtiZWluZ19kZWxldGVkID0gZmFsc2U7CiAJcHJpdi0mZ3Q7aXNfY29ubmVjdGVkID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODUKCQkJCQkJCW91dHB1dDogNzQKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0X1dpZmkgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBkaWZmIGFuZCBwaW5wb2ludGluZyB0aGUgbW9kaWZpZWQgZmlsZXMuIEFoYSwgaXQmIzM5O3MgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIG5lZWQgdG8gZm9jdXMuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSBrbm93IHRoYXQgZnVuY3Rpb247IGl0JiMzOTtzIGNlbnRyYWwgdG8gaG93IHRoaXMgdmlydHVhbCBXaUZpIGludGVyZmFjZSBnZXRzIGluc3RhbnRpYXRlZC4KCk5vdywgSSYjMzk7bGwgcHVsbCB1cCBgdmlydF93aWZpLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGFyb3VuZCBsaW5lIDU1OC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHZpcnRfd2lmaWAgKmlzKiwgYW5kIGhvdyBpdOKAmXMgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYWdhaW5zdCB0aGUgS2NvbmZpZyB0byB1bmRlcnN0YW5kIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgc28gSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgpJ4oCZbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFuZCB0aGVuIGBncmVwcGVyYCB0byBmaW5kIHNwZWNpZmljIHRoaW5ncy4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZ2F0aGVyIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGdldCB0byB0aGUgcm9vdCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdFx0aWYgKCFwcml2LVx1MDAzZWxvd2VyZGV2KVxuIDU0NjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA1NDc6XHRcdGlmICghdGJbSUZMQV9NVFVdKVxuIDU0ODpcdFx0XHRkZXYtXHUwMDNlbXR1ID0gcHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VtdHU7XG4gNTQ5Olx0XHRlbHNlIGlmIChkZXYtXHUwMDNlbXR1IFx1MDAzZSBwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZW10dSlcbiA1NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTUxOlx0XG4gNTUyOlx0XHRlcnIgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3Rlcihwcml2LVx1MDAzZWxvd2VyZGV2LCB2aXJ0X3dpZmlfcnhfaGFuZGxlcixcbiA1NTM6XHRcdFx0XHRcdFx0IHByaXYpO1xuIDU1NDpcdFx0aWYgKGVycikge1xuIDU1NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlZGV2LFxuIDU1NjpcdFx0XHRcdFwmIzM0O2NhbiYjMzk7dCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXG5cJiMzNDssIGVycik7XG4gNTU3Olx0XHRcdHJldHVybiBlcnI7XG4gNTU4Olx0XHR9XG4gNTU5Olx0XG4gNTYwOlx0XHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNTYxOlx0XG4gNTYyOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IGt6YWxsb2Nfb2JqKCpkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gNTYzOlx0XG4gNTY0Olx0XHRpZiAoIWRldi1cdTAwM2VpZWVlODAyMTFfcHRyKSB7XG4gNTY1Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gNTY2Olx0XHRcdGdvdG8gcmVtb3ZlX2hhbmRsZXI7XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OO1xuIDU3MDpcdFx0ZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkgPSBjb21tb25fd2lwaHk7XG4gNTcxOlx0XG4gNTcyOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiA1NzM6XHRcdGlmIChlcnIpIHtcbiA1NzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2FuJiMzOTt0IHJlZ2lzdGVyX25ldGRldmljZTogJWRcXG5cJiMzNDssXG4gNTc1Olx0XHRcdFx0ZXJyKTtcbiA1NzY6XHRcdFx0Z290byBmcmVlX3dpcmVsZXNzX2RldjtcbiA1Nzc6XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYsIGV4dGFjayk7XG4gNTgwOlx0XHRpZiAoZXJyKSB7XG4gNTgxOlx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VkZXYsIFwmIzM0O2NhbiYjMzk7dCBuZXRkZXZfdXBwZXJfZGV2X2xpbms6ICVkXFxuXCYjMzQ7LFxuIDU4MjpcdFx0XHRcdGVycik7XG4gNTgzOlx0XHRcdGdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7XG4gNTg0Olx0XHR9XG4gNTg1Olx0XG4gNTg2Olx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpO1xuIDU4NzpcdFxuIDU4ODpcdFx0ZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHZpcnRfd2lmaV9uZXRfZGV2aWNlX2Rlc3RydWN0b3I7XG4gNTg5Olx0XHRwcml2LVx1MDAzZWJlaW5nX2RlbGV0ZWQgPSBmYWxzZTtcbiA1OTA6XHRcdHByaXYtXHUwMDNlaXNfY29ubmVjdGVkID0gZmFsc2U7XG4gNTkxOlx0XHRwcml2LVx1MDAzZWlzX3VwID0gZmFsc2U7XG4gNTkyOlx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcml2LVx1MDAzZWNvbm5lY3QsIHZpcnRfd2lmaV9jb25uZWN0X2NvbXBsZXRlKTtcbiA1OTM6XHRcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4gNTk0Olx0XG4gNTk1Olx0XHRyZXR1cm4gMDtcbiA1OTY6XHR1bnJlZ2lzdGVyX25ldGRldjpcbiA1OTc6XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4gNTk4Olx0ZnJlZV93aXJlbGVzc19kZXY6XG4gNTk5Olx0XHRrZnJlZShkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gNjAwOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IE5VTEw7XG4gNjAxOlx0cmVtb3ZlX2hhbmRsZXI6XG4gNjAyOlx0XHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuIDYwMzpcdFxuIDYwNDpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUX1dJRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MT1jb25maWcgTUFDODAyMTFfSFdTSU1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTQ6Y29uZmlnIFZJUlRfV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7V2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZT0zPW1hYzgwMjExX2h3c2ltLW9ianNcdFx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltX25hbi5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRfV0lGSSlcdCYjNDM7PSB2aXJ0X3dpZmkub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM9MTM3PXN0YXRpYyB1OCBmYWtlX3JvdXRlcl9ic3NpZFtFVEhfQUxFTl0gX19yb19hZnRlcl9pbml0ID0ge307XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTEzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTM5OiNkZWZpbmUgVklSVF9XSUZJX1NTSUQgXCYjMzQ7VmlydFdpZmlcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTQwOiNkZWZpbmUgVklSVF9XSUZJX1NTSURfTEVOIDhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMtMTQxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0xNDI9c3RhdGljIHZvaWQgdmlydF93aWZpX2luZm9ybV9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTE1MS1cdFx0LnRhZyA9IFdMQU5fRUlEX1NTSUQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jOjE1MjpcdFx0LmxlbiA9IFZJUlRfV0lGSV9TU0lEX0xFTixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTUzOlx0XHQuc3NpZCA9IFZJUlRfV0lGSV9TU0lELFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0xNTQtXHR9O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM9MjYwPXN0YXRpYyB2b2lkIHZpcnRfd2lmaV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTI2NS1cdGJvb2wgcmlnaHRfYWRkciA9IGV0aGVyX2FkZHJfZXF1YWwocmVxdWVzdGVkX2JzcywgZmFrZV9yb3V0ZXJfYnNzaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoyNjY6XHRib29sIHJpZ2h0X3NzaWQgPSBwcml2LVx1MDAzZWNvbm5lY3RfcmVxdWVzdGVkX3NzaWRfbGVuID09IFZJUlRfV0lGSV9TU0lEX0xFTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MjY3Olx0XHRcdCAgIW1lbWNtcChwcml2LVx1MDAzZWNvbm5lY3RfcmVxdWVzdGVkX3NzaWQsIFZJUlRfV0lGSV9TU0lELFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0yNjgtXHRcdFx0XHQgIHByaXYtXHUwMDNlY29ubmVjdF9yZXF1ZXN0ZWRfc3NpZF9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFZpcnR1YWwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyB2aXJ0dWFsIGRyaXZlci4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIEkgcmVjYWxsLCBpcyBwcm9iYWJseSB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IHNwZWNpZmljIGRyaXZlci4gTGV0JiMzOTtzIGRpdmUgaW50byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSwgZXZlcnl0aGluZyBmcm9tIHRoZSBzaW1wbGUgYm9vbGVhbiBvcHRpb25zIHRvIGFueSBjb21wbGV4IHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhlc2UgdmlydHVhbCBkcml2ZXJzIGFyZSBkZXNpZ25lZCBhbmQgY29uZmlndXJlZC4gVGhpcyBzaG91bGQgbGF5IHRoZSBncm91bmR3b3JrIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBpbm5lciB3b3JraW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1ODYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IFBhdGNoIGluIHRoZSBWaXJ0dWFsIFdpRmkgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYFZJUlRfV0lGSWAgZHJpdmVyLCB3aGljaCBmcm9tIHRoZSBjb250ZXh0IGlzIGEgdmlydHVhbCBXaUZpIGRyaXZlciBpbXBsZW1lbnRlZCB1c2luZyBydG5ldGxpbmsmIzM5O3MgYHJ0bmxfbGlua19vcHNgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7SG93IGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnZva2VkPyYjMzQ7IEkgc2VlIHRoYXQgYHZpcnRfd2lmaV9uZXdsaW5rYCBpcyB0aGUgY3JpdGljYWwgcGllY2UsIHNwZWNpZmljYWxseSB0aGUgYG5ld2xpbmtgIGNhbGxiYWNrIHdpdGhpbiBgcnRubF9saW5rX29wc2AgZm9yIHRoZSBgdmlydF93aWZpYCBkZXZpY2UgdHlwZS4gVGhlIHByb2Nlc3Mgc3RhcnRzIGluIHVzZXJzcGFjZSwgd2hpY2ggY3JlYXRlcyBhIGB2aXJ0X3dpZmlgIGRldmljZSB1c2luZyBydG5ldGxpbmsgYnkgc2VuZGluZyBhbiBgUlRNX05FV0xJTktgIG1lc3NhZ2Ugd2l0aCB0aGUga2luZCBzZXQgdG8gJiMzNDt2aXJ0X3dpZmkuJiMzNDsgVGhpcyBpcyBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBkZXZpY2UsIHBlcmZlY3QgZm9yIHRlc3RpbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciB3aXRoIHN5emthbGxlciwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBjYWxscyB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gUHJldmlvdXNseSwgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYpO2Agd2FzIGNhbGxlZCAqYmVmb3JlKiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGFuZCBgbmV0ZGV2X3VwcGVyX2Rldl9saW5rKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYsIGV4dGFjaylgLiBUaGUgcGF0Y2ggbW92ZXMgdGhpcyBjYWxsIHRvICphZnRlciogdGhlIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmtgIGNhbGwuIFRoaXMgc3VidGxlIHNoaWZ0IGluIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgdmlhIHRoZSBydG5ldGxpbmsgbmV0bGluayBpbnRlcmZhY2UgaXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCBjYWxsaW5nIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgb24gYW4gdW5yZWdpc3RlcmVkIG5ldGRldmljZSB2cy4gb25lIHRoYXQgaXMgcmVnaXN0ZXJlZCBhbmQgbGlua2VkIHRvIHVwcGVyL2xvd2VyIGRldmljZXMgbWlnaHQgdW5jb3ZlciBhIGJ1ZyBvciBjaGFuZ2UgaG93IHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBpcyBoYW5kbGVkIGR1cmluZyBsaW5rIGNyZWF0aW9uLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyBiZWhhdmlvdXIuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUgZHJpdmVyIGxvZ2ljIGZvciB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHRoZSBydG5ldGxpbmsgdmlydHVhbCBkZXZpY2UgJiMzNDt2aXJ0X3dpZmkmIzM0Oy4gSXQmIzM5O3MgcmVhY2hhYmxlIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rJiMzOTtzIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgd2l0aGluIGEgcmVhY2hhYmxlIGRyaXZlciBhbmQgbmV0d29ya2luZyBwYXRoLiBJIHNlZSB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBWSVJUX1dJRklgIGFuZCBgQ0ZHODAyMTFgLCB3aGljaCBvYnZpb3VzbHkgZGVwZW5kcyBvbiBgTkVUYC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgdmlydF93aWZpX25ld2xpbmtgLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpbnNwZWN0IHRoZSByZXN0IG9mIGB2aXJ0X3dpZmkuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHQqcHNrYiA9IHNrYjtcbiA1MjE6XHRcdHNrYi1cdTAwM2VkZXYgPSBwcml2LVx1MDAzZXVwcGVyZGV2O1xuIDUyMjpcdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG4gNTIzOlx0XHRyZXR1cm4gUlhfSEFORExFUl9BTk9USEVSO1xuIDUyNDpcdH1cbiA1MjU6XHRcbiA1MjY6XHQvKiBDYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi9cbiA1Mjc6XHRzdGF0aWMgaW50IHZpcnRfd2lmaV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNTI4Olx0XHRcdFx0ICAgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIDUyOTpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDUzMDpcdHtcbiA1MzE6XHRcdHN0cnVjdCB2aXJ0X3dpZmlfbmV0ZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDUzMjpcdFx0c3RydWN0IG5ldCAqbGlua19uZXQgPSBydG5sX25ld2xpbmtfbGlua19uZXQocGFyYW1zKTtcbiA1MzM6XHRcdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cdTAwM2V0YjtcbiA1MzQ6XHRcdGludCBlcnI7XG4gNTM1Olx0XG4gNTM2Olx0XHRpZiAoIXRiW0lGTEFfTElOS10pXG4gNTM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUzODpcdFxuIDUzOTpcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcbiA1NDA6XHRcbiA1NDE6XHRcdHByaXYtXHUwMDNldXBwZXJkZXYgPSBkZXY7XG4gNTQyOlx0XHRwcml2LVx1MDAzZWxvd2VyZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGxpbmtfbmV0LFxuIDU0MzpcdFx0XHRcdFx0XHQgICAgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xuIDU0NDpcdFxuIDU0NTpcdFx0aWYgKCFwcml2LVx1MDAzZWxvd2VyZGV2KVxuIDU0NjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA1NDc6XHRcdGlmICghdGJbSUZMQV9NVFVdKVxuIDU0ODpcdFx0XHRkZXYtXHUwMDNlbXR1ID0gcHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VtdHU7XG4gNTQ5Olx0XHRlbHNlIGlmIChkZXYtXHUwMDNlbXR1IFx1MDAzZSBwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZW10dSlcbiA1NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTUxOlx0XG4gNTUyOlx0XHRlcnIgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3Rlcihwcml2LVx1MDAzZWxvd2VyZGV2LCB2aXJ0X3dpZmlfcnhfaGFuZGxlcixcbiA1NTM6XHRcdFx0XHRcdFx0IHByaXYpO1xuIDU1NDpcdFx0aWYgKGVycikge1xuIDU1NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlZGV2LFxuIDU1NjpcdFx0XHRcdFwmIzM0O2NhbiYjMzk7dCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXG5cJiMzNDssIGVycik7XG4gNTU3Olx0XHRcdHJldHVybiBlcnI7XG4gNTU4Olx0XHR9XG4gNTU5Olx0XG4gNTYwOlx0XHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNTYxOlx0XG4gNTYyOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IGt6YWxsb2Nfb2JqKCpkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gNTYzOlx0XG4gNTY0Olx0XHRpZiAoIWRldi1cdTAwM2VpZWVlODAyMTFfcHRyKSB7XG4gNTY1Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gNTY2Olx0XHRcdGdvdG8gcmVtb3ZlX2hhbmRsZXI7XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OO1xuIDU3MDpcdFx0ZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkgPSBjb21tb25fd2lwaHk7XG4gNTcxOlx0XG4gNTcyOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiA1NzM6XHRcdGlmIChlcnIpIHtcbiA1NzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2FuJiMzOTt0IHJlZ2lzdGVyX25ldGRldmljZTogJWRcXG5cJiMzNDssXG4gNTc1Olx0XHRcdFx0ZXJyKTtcbiA1NzY6XHRcdFx0Z290byBmcmVlX3dpcmVsZXNzX2RldjtcbiA1Nzc6XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYsIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBXaUZpIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHZpcnR1YWwgV2lGaSBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGxpbmsgb3BlcmF0aW9ucy4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHJ0bmxfbGlua19vcHNgIHdpbGwgYmUgYSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwbGFjZSBmb3IgYSB2aXJ0dWFsIGludGVyZmFjZSB0byBkZWZpbmUgaXRzIGJlaGF2aW9yIHdoZW4gaXQgY29tZXMgdG8gdGhpbmdzIGxpa2UgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cC9kb3duLCBzZXR0aW5nIGl0cyBhdHRyaWJ1dGVzLCBldGMuIFNvLCBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byBgdmlydF93aWZpLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfbGlua19vcHNgIChvciBhdCBsZWFzdCwgaXRzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSkgdGhlcmUsIHNvIEkgY2FuIHNlZSBob3cgdGhlIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbCBhbmQgd2hhdCBjYWxsYmFja3MgaXQgcHJvdmlkZXMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRvd24gdGhlIGNhbGxzIGFuZCBnYWluIGEgYmV0dGVyIGdyYXNwIG9uIGhvdyB0aGUgdmlydHVhbCBkZXZpY2Ugb3BlcmF0ZXMgYXQgYSBsb3cgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IE5VTEw7XG4gNjAxOlx0cmVtb3ZlX2hhbmRsZXI6XG4gNjAyOlx0XHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuIDYwMzpcdFxuIDYwNDpcdFx0cmV0dXJuIGVycjtcbiA2MDU6XHR9XG4gNjA2Olx0XG4gNjA3Olx0LyogQ2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovXG4gNjA4Olx0c3RhdGljIHZvaWQgdmlydF93aWZpX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA2MDk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIDYxMDpcdHtcbiA2MTE6XHRcdHN0cnVjdCB2aXJ0X3dpZmlfbmV0ZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDYxMjpcdFxuIDYxMzpcdFx0aWYgKGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKVxuIDYxNDpcdFx0XHR2aXJ0X3dpZmlfY2FuY2VsX3NjYW4oZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpO1xuIDYxNTpcdFxuIDYxNjpcdFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gdHJ1ZTtcbiA2MTc6XHRcdHZpcnRfd2lmaV9jYW5jZWxfY29ubmVjdChkZXYpO1xuIDYxODpcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcbiA2MTk6XHRcbiA2MjA6XHRcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIocHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNjIxOlx0XHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpO1xuIDYyMjpcdFxuIDYyMzpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbiA2MjQ6XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIDYyNTpcdFxuIDYyNjpcdFx0LyogRGVsZXRpbmcgdGhlIHdpcGh5IGlzIGhhbmRsZWQgaW4gdGhlIG1vZHVsZSBkZXN0cnVjdG9yLiAqL1xuIDYyNzpcdH1cbiA2Mjg6XHRcbiA2Mjk6XHRzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdmlydF93aWZpX2xpbmtfb3BzID0ge1xuIDYzMDpcdFx0LmtpbmRcdFx0PSBcJiMzNDt2aXJ0X3dpZmlcJiMzNDssXG4gNjMxOlx0XHQuc2V0dXBcdFx0PSB2aXJ0X3dpZmlfc2V0dXAsXG4gNjMyOlx0XHQubmV3bGlua1x0PSB2aXJ0X3dpZmlfbmV3bGluayxcbiA2MzM6XHRcdC5kZWxsaW5rXHQ9IHZpcnRfd2lmaV9kZWxsaW5rLFxuIDYzNDpcdFx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHZpcnRfd2lmaV9uZXRkZXZfcHJpdiksXG4gNjM1Olx0fTtcbiA2MzY6XHRcbiA2Mzc6XHRzdGF0aWMgYm9vbCBuZXRpZl9pc192aXJ0X3dpZmlfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNjM4Olx0e1xuIDYzOTpcdFx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gdmlydF93aWZpX3J4X2hhbmRsZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgZ2l2ZW4gdGhlIGV2b2x1dGlvbiBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMqKjogSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGBDRkc4MDIxMWAuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGRyaXZlcnMsIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZSB0b2dnbGVzPwoqICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB2YXJpb3VzIHdpcmVsZXNzIG1vZHVsZXMgKGUuZy4sIHNwZWNpZmljIHJhZGlvIGZpcm13YXJlIHN1cHBvcnQpIHJlbHkgb24gdGhpcyBmb3VuZGF0aW9uYWwgbGF5ZXIuIEEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBlc3NlbnRpYWwuCiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBob3cgdGhlc2UgZGVwZW5kZW5jaWVzIGFmZmVjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZnJvbSBjb21waWxhdGlvbiB0aW1lIHRvIGltYWdlIHNpemUuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS4KKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIQoKVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDRkc4MDIxMSBEZXBlbmRlbmN5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBDRkc4MDIxMWAgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgd2lyZWxlc3MgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBwcmVyZXF1aXNpdGVzIOKAkyB3aGljaCBmZWF0dXJlcyBvciBzdWJzeXN0ZW1zICptdXN0KiBiZSBlbmFibGVkIGJlZm9yZSBgQ0ZHODAyMTFgIGNhbiBldmVuIGJlIGNvbnNpZGVyZWQuIFRvIGRvIHRoaXMsIEkmIzM5O20gZ29pbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogbGluZSAxNyBvZiBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYENGRzgwMjExYCBzaG91bGQgZGVjbGFyZSBpdHMgZGVwZW5kZW5jeSBjbGF1c2VzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29yZSBidWlsZGluZyBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE3Olx0Y29uZmlnIENGRzgwMjExXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gIDIwOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjI6XHRcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxuICAyMzpcdFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJiMzOTt0XG4gIDI0Olx0XHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cbiAgMjg6XHRcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDMxOlx0XG4gIDMyOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxuICAzMzpcdFxuICAzNDpcdFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxuICAzNTpcdFxuICAzNjpcdGlmIENGRzgwMjExXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7bmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIFRoZSBubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmQgaGVscHMgaW1wbGVtZW50aW5nIHRoaW5ncyBsaWtlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDMyCgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVklSVF9XSUZJIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0byBlbmFibGUgYFZJUlRfV0lGSWAsIEkgbmVlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBWSVJUX1dJRklgLCBgQ0ZHODAyMTFgLCBhbmQsIGFzIGV4cGVjdGVkLCB0aGUgc3RhbmRhcmQgYE5FVGAgY29uZmlndXJhdGlvbi4gVGhlIGtleSBmb2N1cyBzeW1ib2wgaGVyZSBpcyBgdmlydF93aWZpX25ld2xpbmtgLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emluZyBkZXRhaWxzLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCBhcyBgWyYjMzQ7VklSVF9XSUZJJiMzNDssICYjMzQ7Q0ZHODAyMTEmIzM0O11gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9uOiBgWyYjMzQ7dmlydF93aWZpX25ld2xpbmsmIzM0O11gLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgY2xhcmlmaWVzIHRoZSBzdHJhdGVneTogdGhlIHBhdGNoIGluIHF1ZXN0aW9uIG1vZGlmaWVzIHRoZSBsaW5rIGNyZWF0aW9uIGxvZ2ljIHdpdGhpbiBgdmlydF93aWZpX25ld2xpbmtgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBvcmRlciBvZiBmdW5jdGlvbiBjYWxsczogYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKClgIGlzIGJlaW5nIG1vdmVkIHJlbGF0aXZlIHRvIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAgYW5kIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBgdmlydF93aWZpYCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBydG5ldGxpbmtgIGFuZCBgUlRNX05FV0xJTktgIGNhbGxzLiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBjYW4gZWFzaWx5IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBsZWFkIHRvIHN0YXRlIGhhbmRsaW5nIGJ1Z3MsIHdoaWNoIG1ha2VzIGZ1enppbmcgYWJzb2x1dGVseSBjcnVjaWFsLiBUaGlzIGFsbCBtYWtlcyBzZW5zZS4KCkFscmlnaHQsIHdpdGggYWxsIHRoYXQgdmFsaWRhdGVkLCBpdCYjMzk7cyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVF9XSUZJJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydF93aWZpX25ld2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZpcnR1YWwgd2lmaSBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBgdmlydF93aWZpX25ld2xpbmtgIGJ5IGRlZmVycmluZyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIHVudGlsIGFmdGVyIHRoZSBuZXRkZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdXBwZXIgZGV2aWNlIGxpbmsgZXN0YWJsaXNoZWQuIFRoZSB2aXJ0X3dpZmkgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGxpbmsgbWVzc2FnZXMgKFJUTV9ORVdMSU5LKSwgbWFraW5nIHRoaXMgbW9kaWZpZWQgY29kZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRfV0lGSSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRfd2lmaV9uZXdsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aXJ0dWFsIHdpZmkgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gYHZpcnRfd2lmaV9uZXdsaW5rYCBieSBkZWZlcnJpbmcgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCB1bnRpbCBhZnRlciB0aGUgbmV0ZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYW5kIHVwcGVyIGRldmljZSBsaW5rIGVzdGFibGlzaGVkLiBUaGUgdmlydF93aWZpIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRsaW5rIG1lc3NhZ2VzIChSVE1fTkVXTElOSyksIG1ha2luZyB0aGlzIG1vZGlmaWVkIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYwppbmRleCBiNjlhNDY1MGZiYTg1Li40OGFmYzI0MzJmOTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMKQEAgLTU1OCw3ICYjNDM7NTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCWV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBwcml2LSZndDtsb3dlcmRldik7Ci0JbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi0mZ3Q7bG93ZXJkZXYsIGRldik7CiAKIAlkZXYtJmd0O2llZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LSZndDtpZWVlODAyMTFfcHRyKTsKIApAQCAtNTg0LDYgJiM0Mzs1ODMsOCBAQCBzdGF0aWMgaW50IHZpcnRfd2lmaV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7CiAJfQogCiYjNDM7CW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYpOwomIzQzOwogCWRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjsKIAlwcml2LSZndDtiZWluZ19kZWxldGVkID0gZmFsc2U7CiAJcHJpdi0mZ3Q7aXNfY29ubmVjdGVkID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGB2aXJ0X3dpZmlgIFBhdGNoKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBteSBmYXZvcml0ZSBkaWZmIHRvb2wgdG8gdmlzdWFsaXplIHRoZSBjaGFuZ2VzLCBoaWdobGlnaHRpbmcgdGhlIGFkZGVkLCByZW1vdmVkLCBhbmQgbW9kaWZpZWQgbGluZXMuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjb21taXQgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaC4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIHR3ZWFrZWQgYW5kIHdoeS4gR2l2ZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBjaGFuZ2UsIEkgd2lsbCBiZSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgYWZmZWN0cyBhbnkgZXhpc3RpbmcgZmVhdHVyZXMgb3IgaWYgdGhpcyBhZGRzIHNvbWV0aGluZyBuZXcuCgpOb3csIGxldCYjMzk7cyB6b29tIGluLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lcyA1NTggdG8gNTk1IHdpdGhpbiB0aGUgYHZpcnRfd2lmaV9uZXdsaW5rYCBmdW5jdGlvbi4gSSYjMzk7bGwgcmVhZCB0aHJvdWdoIHRoYXQgc2VjdGlvbiBjYXJlZnVsbHksIHBheWluZyBhdHRlbnRpb24gdG8gdmFyaWFibGUgZGVjbGFyYXRpb25zLCBjb250cm9sIGZsb3csIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgZXJyb3JzLCB1bnVzdWFsIGJlaGF2aW9yLCBvciBhcmVhcyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBpbXByb3ZlbWVudC4gV2l0aCBgdmlydF93aWZpX25ld2xpbmtgIGJlaW5nIHRoZSBmdW5jdGlvbiwgSSB3aWxsIGJlIHRoaW5raW5nIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBuZXR3b3JrIGxpbmsgc2V0dXAgb3IgdGVhciBkb3duLiBJIHdpbGwgYWxzbyBiZSB0aGlua2luZyBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGF0IGZ1bmN0aW9uLiBNeSBiYWNrZ3JvdW5kIGFuZCBleHBlcmllbmNlIHRlbGwgbWUgdG8gYmUgYWxlcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQ1Olx0XHRpZiAoIXByaXYtXHUwMDNlbG93ZXJkZXYpXG4gNTQ2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDU0NzpcdFx0aWYgKCF0YltJRkxBX01UVV0pXG4gNTQ4Olx0XHRcdGRldi1cdTAwM2VtdHUgPSBwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZW10dTtcbiA1NDk6XHRcdGVsc2UgaWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIHByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlbXR1KVxuIDU1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NTE6XHRcbiA1NTI6XHRcdGVyciA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKHByaXYtXHUwMDNlbG93ZXJkZXYsIHZpcnRfd2lmaV9yeF9oYW5kbGVyLFxuIDU1MzpcdFx0XHRcdFx0XHQgcHJpdik7XG4gNTU0Olx0XHRpZiAoZXJyKSB7XG4gNTU1Olx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VkZXYsXG4gNTU2Olx0XHRcdFx0XCYjMzQ7Y2FuJiMzOTt0IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyOiAlZFxcblwmIzM0OywgZXJyKTtcbiA1NTc6XHRcdFx0cmV0dXJuIGVycjtcbiA1NTg6XHRcdH1cbiA1NTk6XHRcbiA1NjA6XHRcdGV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBwcml2LVx1MDAzZWxvd2VyZGV2KTtcbiA1NjE6XHRcbiA1NjI6XHRcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiA1NjM6XHRcbiA1NjQ6XHRcdGlmICghZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIpIHtcbiA1NjU6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA1NjY6XHRcdFx0Z290byByZW1vdmVfaGFuZGxlcjtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyLVx1MDAzZWlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047XG4gNTcwOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2V3aXBoeSA9IGNvbW1vbl93aXBoeTtcbiA1NzE6XHRcbiA1NzI6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIDU3MzpcdFx0aWYgKGVycikge1xuIDU3NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlZGV2LCBcJiMzNDtjYW4mIzM5O3QgcmVnaXN0ZXJfbmV0ZGV2aWNlOiAlZFxcblwmIzM0OyxcbiA1NzU6XHRcdFx0XHRlcnIpO1xuIDU3NjpcdFx0XHRnb3RvIGZyZWVfd2lyZWxlc3NfZGV2O1xuIDU3NzpcdFx0fVxuIDU3ODpcdFxuIDU3OTpcdFx0ZXJyID0gbmV0ZGV2X3VwcGVyX2Rldl9saW5rKHByaXYtXHUwMDNlbG93ZXJkZXYsIGRldiwgZXh0YWNrKTtcbiA1ODA6XHRcdGlmIChlcnIpIHtcbiA1ODE6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2FuJiMzOTt0IG5ldGRldl91cHBlcl9kZXZfbGluazogJWRcXG5cJiMzNDssXG4gNTgyOlx0XHRcdFx0ZXJyKTtcbiA1ODM6XHRcdFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcbiA1ODQ6XHRcdH1cbiA1ODU6XHRcbiA1ODY6XHRcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXHUwMDNlbG93ZXJkZXYsIGRldik7XG4gNTg3Olx0XG4gNTg4Olx0XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjtcbiA1ODk6XHRcdHByaXYtXHUwMDNlYmVpbmdfZGVsZXRlZCA9IGZhbHNlO1xuIDU5MDpcdFx0cHJpdi1cdTAwM2Vpc19jb25uZWN0ZWQgPSBmYWxzZTtcbiA1OTE6XHRcdHByaXYtXHUwMDNlaXNfdXAgPSBmYWxzZTtcbiA1OTI6XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlY29ubmVjdCwgdmlydF93aWZpX2Nvbm5lY3RfY29tcGxldGUpO1xuIDU5MzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA1OTQ6XHRcbiA1OTU6XHRcdHJldHVybiAwO1xuIDU5NjpcdHVucmVnaXN0ZXJfbmV0ZGV2OlxuIDU5NzpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiA1OTg6XHRmcmVlX3dpcmVsZXNzX2RldjpcbiA1OTk6XHRcdGtmcmVlKGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiA2MDA6XHRcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0gTlVMTDtcbiA2MDE6XHRyZW1vdmVfaGFuZGxlcjpcbiA2MDI6XHRcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIocHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNjAzOlx0XG4gNjA0Olx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTYxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgc3RhY2tlZCBuZXR3b3JrIGludGVyZmFjZSBjb250ZXh0LiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIG9wZXJhdGlvbmFsIHN0YXRlLCBwcm9iYWJseSBoYW5kbGluZyB0cmFuc2l0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gYWNyb3NzIG11bHRpcGxlIGxheWVycy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHdoZXRoZXIgaXQmIzM5O3MgYW4gQVBJIGNhbGwsIGludGVybmFsIGZ1bmN0aW9uIG9yIHN0YXRlIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXQgY29udHJvbHMgdGhlIHdob2xlIHByb2Nlc3MsIG9yIHBhcnRzIG9mIGl0LCBiZWNhdXNlIHRoZSBuYW1lIG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGZvY3VzZWQgb24gdGhlICYjMzk7dHJhbnNmZXImIzM5OyBvZiBvcGVyYXRpb25hbCBzdGF0ZSAtIG1lYW5pbmcgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTU0OTM9dm9pZCBuZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1cGRhdGVfaGVhZGVyKTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTQ5NC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTQ5NTp2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01NDk2LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTE4ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9jaGFuZ2VfZmVhdHVyZXMpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTExMTk0LSAqL1xubmV0L2NvcmUvZGV2LmM6MTExOTU6dm9pZCBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbm5ldC9jb3JlL2Rldi5jLTExMTk2LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIGZ1bmN0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBpbiBgbmV0L2NvcmUvZGV2LmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGhlYWQuIEdpdmVuIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHJlbGF0ZWQgdG8gb3BlcmF0aW9uYWwgc3RhdGUgdHJhbnNpdGlvbnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc3RhY2tlZCBuZXR3b3JrIGRldmljZXMgb3IgdmlydHVhbCBpbnRlcmZhY2VzLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBjb29yZGluYXRpbmcgb3BlcmF0aW9uYWwgc3RhdGUgY2hhbmdlcyAoZS5nLiwgVVAvRE9XTiwgQUNUSVZFL0lOQUNUSVZFKSBiZXR3ZWVuIGEgcGFyZW50IGFuZCBjaGlsZCBuZXR3b3JrIGludGVyZmFjZSAob3IgYWNyb3NzIHN0YWNrZWQgbGF5ZXJzKS4gSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIGxvY2tpbmcsIHN0YXRlIHVwZGF0ZXMsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyBvcGVyYXRpb25hbCBzdGF0ZSBjaGFuZ2VzLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBkZXZpY2UgbW9kZWwsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSByZWdpc3RyYXRpb24gb3IgdW5yZWdpc3RyYXRpb24gb2YgbmV0ZGV2cy4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBjZW50cmFsIHRvIGhvdyB0aGUga2VybmVsIHByb3BhZ2F0ZXMgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcyBpbiBhIGxheWVyZWQgbmV0d29ya2luZyBlbnZpcm9ubWVudCwgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgaW5jb25zaXN0ZW50IHN0YXRlcyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExOTU6XHR2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxuMTExOTY6XHRcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjExMTk3Olx0e1xuMTExOTg6XHRcdGlmIChyb290ZGV2LVx1MDAzZW9wZXJzdGF0ZSA9PSBJRl9PUEVSX0RPUk1BTlQpXG4xMTE5OTpcdFx0XHRuZXRpZl9kb3JtYW50X29uKGRldik7XG4xMTIwMDpcdFx0ZWxzZVxuMTEyMDE6XHRcdFx0bmV0aWZfZG9ybWFudF9vZmYoZGV2KTtcbjExMjAyOlx0XG4xMTIwMzpcdFx0aWYgKHJvb3RkZXYtXHUwMDNlb3BlcnN0YXRlID09IElGX09QRVJfVEVTVElORylcbjExMjA0Olx0XHRcdG5ldGlmX3Rlc3Rpbmdfb24oZGV2KTtcbjExMjA1Olx0XHRlbHNlXG4xMTIwNjpcdFx0XHRuZXRpZl90ZXN0aW5nX29mZihkZXYpO1xuMTEyMDc6XHRcbjExMjA4Olx0XHRpZiAobmV0aWZfY2Fycmllcl9vayhyb290ZGV2KSlcbjExMjA5Olx0XHRcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbjExMjEwOlx0XHRlbHNlXG4xMTIxMTpcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuMTEyMTI6XHR9XG4xMTIxMzpcdEVYUE9SVF9TWU1CT0wobmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUpO1xuMTEyMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYxNAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgTW92ZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIG1vdmluZyBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSo/IEkga25vdyB0aGF0IGJlZm9yZSBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIG9yIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmtgLCBjYWxsaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZXRpZl9jYXJyaWVyX29uL29mZmAgb3IgYG5ldGlmX2Rvcm1hbnRfb24vb2ZmYCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIGRldmljZSBpc24mIzM5O3QgZnVsbHkgc2V0IHVwIHlldC4gYG5ldGlmX2NhcnJpZXJfb25gLCBmb3IgaW5zdGFuY2UsIG1pZ2h0IHRyaWdnZXIgYSBsaW5rd2F0Y2ggZXZlbnQgdGhhdCBleHBlY3RzIGEgcmVnaXN0ZXJlZCBuZXRkZXZpY2UuIFNvLCB0aGUgdGhpbmtpbmcgaGVyZSBpcyB0aGF0IG1vdmluZyB0aGlzIGNhbGwgKmFmdGVyKiByZWdpc3RyYXRpb24gYW5kIGxpbmtpbmcgc2hvdWxkIHJlc29sdmUgc29tZSBvcmRlcmluZyBpc3N1ZXMsIHJpZ2h0PyBJdCYjMzk7cyBhIGZhaXJseSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBmaXhpbmcgdGhlc2Uga2luZHMgb2YgbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbi9zdGF0ZSB0cmFuc2ZlciBpc3N1ZXMuCgpOb3csIGEgdmVyeSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucy4gVGhlcmUgYXJlIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBDcnVjaWFsbHksIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGNoYW5nZXMgdG8gcGFkZGluZywgc3RydWN0IGRlZmluaXRpb25zLCBidWZmZXIgYm91bmRzLCBvciBpbmZvIGxlYWtzLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbG9jYXRpbmcgdGhhdCBvbmUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbC4KCkJhc2VkIG9uIHRoYXQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBoZXJlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGlmIHRoZXJlICp3ZXJlKiBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBidWdzLCBidXQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIGxldCYjMzk7cyB2ZXJpZnk6CgpgTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZToKCiogICBUaGUgcGF0Y2ggKm9ubHkqIG1vdmVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZSgpYC4KKiAgIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBoYW5kbGluZywgb3IgdXNlciBjb3BpZXMuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHNvbGlkLiBUaW1lIHRvIGdvIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoxMy4wMTUyNzE3NzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ0MzI3ODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUX1dJRklcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydF93aWZpX25ld2xpbmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbG9jYXRlcyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldilgIGluIGB2aXJ0X3dpZmlfbmV3bGluaygpYCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGFmdGVyIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB2aWEgYHJlZ2lzdGVyX25ldGRldmljZSgpYCBhbmQgbGlua2VkIHdpdGggYG5ldGRldl91cHBlcl9kZXZfbGluaygpYC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIHNlcXVlbmNpbmcgb2YgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbGVuZ3RoL2JvdW5kcyByZWNhbGN1bGF0aW9ucywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MTMuMDE1Mjc2NDg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5OTUzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjU2OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXFxuaW5kZXggYjY5YTQ2NTBmYmE4NS4uNDhhZmMyNDMyZjkzYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xcbkBAIC01NTgsNyArNTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbi1cXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2KTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciA9IGt6YWxsb2Nfb2JqKCpkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpO1xcbiBcXG5AQCAtNTg0LDYgKzU4Myw4IEBAIHN0YXRpYyBpbnQgdmlydF93aWZpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcXG4gXFx0fVxcbiBcXG4rXFx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldik7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHZpcnRfd2lmaV9uZXRfZGV2aWNlX2Rlc3RydWN0b3I7XFxuIFxcdHByaXYtXFx1MDAzZWJlaW5nX2RlbGV0ZWQgPSBmYWxzZTtcXG4gXFx0cHJpdi1cXHUwMDNlaXNfY29ubmVjdGVkID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjE0LjM3NTkyNDYxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjU5MTc3MDc1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVF9XSUZJXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRfd2lmaV9uZXdsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZpcnR1YWwgd2lmaSBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBgdmlydF93aWZpX25ld2xpbmtgIGJ5IGRlZmVycmluZyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIHVudGlsIGFmdGVyIHRoZSBuZXRkZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdXBwZXIgZGV2aWNlIGxpbmsgZXN0YWJsaXNoZWQuIFRoZSB2aXJ0X3dpZmkgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGxpbmsgbWVzc2FnZXMgKFJUTV9ORVdMSU5LKSwgbWFraW5nIHRoaXMgbW9kaWZpZWQgY29kZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuaW5kZXggYjY5YTQ2NTBmYmE4NS4uNDhhZmMyNDMyZjkzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbkBAIC01NTgsNyArNTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuLVx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbiBcbiBcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcbkBAIC01ODQsNiArNTgzLDggQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRnb3RvIHVucmVnaXN0ZXJfbmV0ZGV2O1xuIFx0fVxuIFxuK1x0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbitcbiBcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSB2aXJ0X3dpZmlfbmV0X2RldmljZV9kZXN0cnVjdG9yO1xuIFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XG4gXHRwcml2LVx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MTQuMzc1OTI1Nzc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAyMzc1Mjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnRfV2lmaSBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGRpZmYgYW5kIHBpbnBvaW50aW5nIHRoZSBtb2RpZmllZCBmaWxlcy4gQWhhLCBpdCdzIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jYC4gVGhhdCdzIHdoZXJlIHdlIG5lZWQgdG8gZm9jdXMuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSBrbm93IHRoYXQgZnVuY3Rpb247IGl0J3MgY2VudHJhbCB0byBob3cgdGhpcyB2aXJ0dWFsIFdpRmkgaW50ZXJmYWNlIGdldHMgaW5zdGFudGlhdGVkLlxuXG5Ob3csIEknbGwgcHVsbCB1cCBgdmlydF93aWZpLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGFyb3VuZCBsaW5lIDU1OC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHZpcnRfd2lmaWAgKmlzKiwgYW5kIGhvdyBpdOKAmXMgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhZ2FpbnN0IHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIHNvIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5J4oCZbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFuZCB0aGVuIGBncmVwcGVyYCB0byBmaW5kIHNwZWNpZmljIHRoaW5ncy4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBnYXRoZXIgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBhbmQgZ2V0IHRvIHRoZSByb290IG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MjAuMzk5NjgwNjk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vsb3dlcmRldilcXG4gNTQ2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA1NDc6XFx0XFx0aWYgKCF0YltJRkxBX01UVV0pXFxuIDU0ODpcXHRcXHRcXHRkZXYtXFx1MDAzZW10dSA9IHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHU7XFxuIDU0OTpcXHRcXHRlbHNlIGlmIChkZXYtXFx1MDAzZW10dSBcXHUwMDNlIHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHUpXFxuIDU1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0ZXJyID0gbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbG93ZXJkZXYsIHZpcnRfd2lmaV9yeF9oYW5kbGVyLFxcbiA1NTM6XFx0XFx0XFx0XFx0XFx0XFx0IHByaXYpO1xcbiA1NTQ6XFx0XFx0aWYgKGVycikge1xcbiA1NTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbG93ZXJkZXYtXFx1MDAzZWRldixcXG4gNTU2OlxcdFxcdFxcdFxcdFxcXCJjYW4ndCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXFxcblxcXCIsIGVycik7XFxuIDU1NzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTg6XFx0XFx0fVxcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpIHtcXG4gNTY1OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDU2NjpcXHRcXHRcXHRnb3RvIHJlbW92ZV9oYW5kbGVyO1xcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047XFxuIDU3MDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5ID0gY29tbW9uX3dpcGh5O1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gNTczOlxcdFxcdGlmIChlcnIpIHtcXG4gNTc0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsIFxcXCJjYW4ndCByZWdpc3Rlcl9uZXRkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiA1NzU6XFx0XFx0XFx0XFx0ZXJyKTtcXG4gNTc2OlxcdFxcdFxcdGdvdG8gZnJlZV93aXJlbGVzc19kZXY7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2LCBleHRhY2spO1xcbiA1ODA6XFx0XFx0aWYgKGVycikge1xcbiA1ODE6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbG93ZXJkZXYtXFx1MDAzZWRldiwgXFxcImNhbid0IG5ldGRldl91cHBlcl9kZXZfbGluazogJWRcXFxcblxcXCIsXFxuIDU4MjpcXHRcXHRcXHRcXHRlcnIpO1xcbiA1ODM6XFx0XFx0XFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcXG4gNTg0OlxcdFxcdH1cXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldik7XFxuIDU4NzpcXHRcXG4gNTg4OlxcdFxcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjtcXG4gNTg5OlxcdFxcdHByaXYtXFx1MDAzZWJlaW5nX2RlbGV0ZWQgPSBmYWxzZTtcXG4gNTkwOlxcdFxcdHByaXYtXFx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xcbiA1OTE6XFx0XFx0cHJpdi1cXHUwMDNlaXNfdXAgPSBmYWxzZTtcXG4gNTkyOlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2Vjb25uZWN0LCB2aXJ0X3dpZmlfY29ubmVjdF9jb21wbGV0ZSk7XFxuIDU5MzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRyZXR1cm4gMDtcXG4gNTk2OlxcdHVucmVnaXN0ZXJfbmV0ZGV2OlxcbiA1OTc6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gNTk4OlxcdGZyZWVfd2lyZWxlc3NfZGV2OlxcbiA1OTk6XFx0XFx0a2ZyZWUoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKTtcXG4gNjAwOlxcdFxcdGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciA9IE5VTEw7XFxuIDYwMTpcXHRyZW1vdmVfaGFuZGxlcjpcXG4gNjAyOlxcdFxcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIocHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbiA2MDM6XFx0XFxuIDYwNDpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyMC4zOTk3Nzc5NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0Mjg5MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRfV0lGSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MT1jb25maWcgTUFDODAyMTFfSFdTSU1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTQ6Y29uZmlnIFZJUlRfV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZT0zPW1hYzgwMjExX2h3c2ltLW9ianNcXHRcXHQrPSBtYWM4MDIxMV9od3NpbV9uYW4ub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRfV0lGSSlcXHQrPSB2aXJ0X3dpZmkub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0xMzc9c3RhdGljIHU4IGZha2Vfcm91dGVyX2Jzc2lkW0VUSF9BTEVOXSBfX3JvX2FmdGVyX2luaXQgPSB7fTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTEzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jOjEzOTojZGVmaW5lIFZJUlRfV0lGSV9TU0lEIFxcXCJWaXJ0V2lmaVxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jOjE0MDojZGVmaW5lIFZJUlRfV0lGSV9TU0lEX0xFTiA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0xNDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0xNDI9c3RhdGljIHZvaWQgdmlydF93aWZpX2luZm9ybV9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMtMTUxLVxcdFxcdC50YWcgPSBXTEFOX0VJRF9TU0lELFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTUyOlxcdFxcdC5sZW4gPSBWSVJUX1dJRklfU1NJRF9MRU4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoxNTM6XFx0XFx0LnNzaWQgPSBWSVJUX1dJRklfU1NJRCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTE1NC1cXHR9O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0yNjA9c3RhdGljIHZvaWQgdmlydF93aWZpX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0yNjUtXFx0Ym9vbCByaWdodF9hZGRyID0gZXRoZXJfYWRkcl9lcXVhbChyZXF1ZXN0ZWRfYnNzLCBmYWtlX3JvdXRlcl9ic3NpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoyNjY6XFx0Ym9vbCByaWdodF9zc2lkID0gcHJpdi1cXHUwMDNlY29ubmVjdF9yZXF1ZXN0ZWRfc3NpZF9sZW4gPT0gVklSVF9XSUZJX1NTSURfTEVOIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoyNjc6XFx0XFx0XFx0ICAhbWVtY21wKHByaXYtXFx1MDAzZWNvbm5lY3RfcmVxdWVzdGVkX3NzaWQsIFZJUlRfV0lGSV9TU0lELFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMtMjY4LVxcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNlY29ubmVjdF9yZXF1ZXN0ZWRfc3NpZF9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyMC41MTQwNzI5MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDg2NzQ4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFZpcnR1YWwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIHdpcmVsZXNzIHZpcnR1YWwgZHJpdmVyLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgSSByZWNhbGwsIGlzIHByb2JhYmx5IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgZHJpdmVyLiBMZXQncyBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc2ltcGxlIGJvb2xlYW4gb3B0aW9ucyB0byBhbnkgY29tcGxleCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhlc2UgdmlydHVhbCBkcml2ZXJzIGFyZSBkZXNpZ25lZCBhbmQgY29uZmlndXJlZC4gVGhpcyBzaG91bGQgbGF5IHRoZSBncm91bmR3b3JrIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBpbm5lciB3b3JraW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjIzLjAwMDgyMzI0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyMy4wMDA4ODE2OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDY0ODczOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCBpbiB0aGUgVmlydHVhbCBXaUZpIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBWSVJUX1dJRklgIGRyaXZlciwgd2hpY2ggZnJvbSB0aGUgY29udGV4dCBpcyBhIHZpcnR1YWwgV2lGaSBkcml2ZXIgaW1wbGVtZW50ZWQgdXNpbmcgcnRuZXRsaW5rJ3MgYHJ0bmxfbGlua19vcHNgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsIFwiSG93IGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnZva2VkP1wiIEkgc2VlIHRoYXQgYHZpcnRfd2lmaV9uZXdsaW5rYCBpcyB0aGUgY3JpdGljYWwgcGllY2UsIHNwZWNpZmljYWxseSB0aGUgYG5ld2xpbmtgIGNhbGxiYWNrIHdpdGhpbiBgcnRubF9saW5rX29wc2AgZm9yIHRoZSBgdmlydF93aWZpYCBkZXZpY2UgdHlwZS4gVGhlIHByb2Nlc3Mgc3RhcnRzIGluIHVzZXJzcGFjZSwgd2hpY2ggY3JlYXRlcyBhIGB2aXJ0X3dpZmlgIGRldmljZSB1c2luZyBydG5ldGxpbmsgYnkgc2VuZGluZyBhbiBgUlRNX05FV0xJTktgIG1lc3NhZ2Ugd2l0aCB0aGUga2luZCBzZXQgdG8gXCJ2aXJ0X3dpZmkuXCIgVGhpcyBpcyBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBkZXZpY2UsIHBlcmZlY3QgZm9yIHRlc3RpbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciB3aXRoIHN5emthbGxlciwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBwYXRjaCBJJ20gZXhhbWluaW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBjYWxscyB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gUHJldmlvdXNseSwgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXHUwMDNlbG93ZXJkZXYsIGRldik7YCB3YXMgY2FsbGVkICpiZWZvcmUqIGByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KWAgYW5kIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2LCBleHRhY2spYC4gVGhlIHBhdGNoIG1vdmVzIHRoaXMgY2FsbCB0byAqYWZ0ZXIqIHRoZSBgbmV0ZGV2X3VwcGVyX2Rldl9saW5rYCBjYWxsLiBUaGlzIHN1YnRsZSBzaGlmdCBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlIHZpYSB0aGUgcnRuZXRsaW5rIG5ldGxpbmsgaW50ZXJmYWNlIGlzIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBUaGUgY29yZSBpZGVhIGlzIHRoYXQgY2FsbGluZyBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIG9uIGFuIHVucmVnaXN0ZXJlZCBuZXRkZXZpY2UgdnMuIG9uZSB0aGF0IGlzIHJlZ2lzdGVyZWQgYW5kIGxpbmtlZCB0byB1cHBlci9sb3dlciBkZXZpY2VzIG1pZ2h0IHVuY292ZXIgYSBidWcgb3IgY2hhbmdlIGhvdyB0aGUgb3BlcmF0aW9uYWwgc3RhdGUgaXMgaGFuZGxlZCBkdXJpbmcgbGluayBjcmVhdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyBiZWhhdmlvdXIuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBkcml2ZXIgbG9naWMgZm9yIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgdGhlIHJ0bmV0bGluayB2aXJ0dWFsIGRldmljZSBcInZpcnRfd2lmaVwiLiBJdCdzIHJlYWNoYWJsZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaydzIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgd2l0aGluIGEgcmVhY2hhYmxlIGRyaXZlciBhbmQgbmV0d29ya2luZyBwYXRoLiBJIHNlZSB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBWSVJUX1dJRklgIGFuZCBgQ0ZHODAyMTFgLCB3aGljaCBvYnZpb3VzbHkgZGVwZW5kcyBvbiBgTkVUYC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgdmlydF93aWZpX25ld2xpbmtgLlxuXG5UbyBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgaW5zcGVjdCB0aGUgcmVzdCBvZiBgdmlydF93aWZpLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucyB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU4NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjI4LjA2NTc1NzU5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXHQqcHNrYiA9IHNrYjtcXG4gNTIxOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gcHJpdi1cXHUwMDNldXBwZXJkZXY7XFxuIDUyMjpcXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XFxuIDUyMzpcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9BTk9USEVSO1xcbiA1MjQ6XFx0fVxcbiA1MjU6XFx0XFxuIDUyNjpcXHQvKiBDYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi9cXG4gNTI3OlxcdHN0YXRpYyBpbnQgdmlydF93aWZpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNTI4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gNTI5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1MzA6XFx0e1xcbiA1MzE6XFx0XFx0c3RydWN0IHZpcnRfd2lmaV9uZXRkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuIDUzMjpcXHRcXHRzdHJ1Y3QgbmV0ICpsaW5rX25ldCA9IHJ0bmxfbmV3bGlua19saW5rX25ldChwYXJhbXMpO1xcbiA1MzM6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG4gNTM0OlxcdFxcdGludCBlcnI7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdGlmICghdGJbSUZMQV9MSU5LXSlcXG4gNTM3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRwcml2LVxcdTAwM2V1cHBlcmRldiA9IGRldjtcXG4gNTQyOlxcdFxcdHByaXYtXFx1MDAzZWxvd2VyZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGxpbmtfbmV0LFxcbiA1NDM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTtcXG4gNTQ0OlxcdFxcbiA1NDU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vsb3dlcmRldilcXG4gNTQ2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA1NDc6XFx0XFx0aWYgKCF0YltJRkxBX01UVV0pXFxuIDU0ODpcXHRcXHRcXHRkZXYtXFx1MDAzZW10dSA9IHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHU7XFxuIDU0OTpcXHRcXHRlbHNlIGlmIChkZXYtXFx1MDAzZW10dSBcXHUwMDNlIHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHUpXFxuIDU1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0ZXJyID0gbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbG93ZXJkZXYsIHZpcnRfd2lmaV9yeF9oYW5kbGVyLFxcbiA1NTM6XFx0XFx0XFx0XFx0XFx0XFx0IHByaXYpO1xcbiA1NTQ6XFx0XFx0aWYgKGVycikge1xcbiA1NTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbG93ZXJkZXYtXFx1MDAzZWRldixcXG4gNTU2OlxcdFxcdFxcdFxcdFxcXCJjYW4ndCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXFxcblxcXCIsIGVycik7XFxuIDU1NzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTg6XFx0XFx0fVxcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpIHtcXG4gNTY1OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDU2NjpcXHRcXHRcXHRnb3RvIHJlbW92ZV9oYW5kbGVyO1xcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047XFxuIDU3MDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5ID0gY29tbW9uX3dpcGh5O1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gNTczOlxcdFxcdGlmIChlcnIpIHtcXG4gNTc0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsIFxcXCJjYW4ndCByZWdpc3Rlcl9uZXRkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiA1NzU6XFx0XFx0XFx0XFx0ZXJyKTtcXG4gNTc2OlxcdFxcdFxcdGdvdG8gZnJlZV93aXJlbGVzc19kZXY7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2LCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyOC4wNjU5MzM4MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5MTkzNzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZpcnR1YWwgV2lGaSBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHZpcnR1YWwgV2lGaSBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGxpbmsgb3BlcmF0aW9ucy4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHJ0bmxfbGlua19vcHNgIHdpbGwgYmUgYSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMuIEl0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciBhIHZpcnR1YWwgaW50ZXJmYWNlIHRvIGRlZmluZSBpdHMgYmVoYXZpb3Igd2hlbiBpdCBjb21lcyB0byB0aGluZ3MgbGlrZSBicmluZ2luZyB0aGUgaW50ZXJmYWNlIHVwL2Rvd24sIHNldHRpbmcgaXRzIGF0dHJpYnV0ZXMsIGV0Yy4gU28sIGxldCdzIGhlYWQgc3RyYWlnaHQgdG8gYHZpcnRfd2lmaS5jYCBhbmQgemVybyBpbiBvbiB0aGF0IHNlY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfbGlua19vcHNgIChvciBhdCBsZWFzdCwgaXRzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSkgdGhlcmUsIHNvIEkgY2FuIHNlZSBob3cgdGhlIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbCBhbmQgd2hhdCBjYWxsYmFja3MgaXQgcHJvdmlkZXMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRvd24gdGhlIGNhbGxzIGFuZCBnYWluIGEgYmV0dGVyIGdyYXNwIG9uIGhvdyB0aGUgdmlydHVhbCBkZXZpY2Ugb3BlcmF0ZXMgYXQgYSBsb3cgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjMwLjQ1Nzg3NDIwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBOVUxMO1xcbiA2MDE6XFx0cmVtb3ZlX2hhbmRsZXI6XFxuIDYwMjpcXHRcXHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXFx1MDAzZWxvd2VyZGV2KTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0cmV0dXJuIGVycjtcXG4gNjA1OlxcdH1cXG4gNjA2OlxcdFxcbiA2MDc6XFx0LyogQ2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovXFxuIDYwODpcXHRzdGF0aWMgdm9pZCB2aXJ0X3dpZmlfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA2MDk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gNjEwOlxcdHtcXG4gNjExOlxcdFxcdHN0cnVjdCB2aXJ0X3dpZmlfbmV0ZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRpZiAoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKVxcbiA2MTQ6XFx0XFx0XFx0dmlydF93aWZpX2NhbmNlbF9zY2FuKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ci1cXHUwMDNld2lwaHkpO1xcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHRwcml2LVxcdTAwM2ViZWluZ19kZWxldGVkID0gdHJ1ZTtcXG4gNjE3OlxcdFxcdHZpcnRfd2lmaV9jYW5jZWxfY29ubmVjdChkZXYpO1xcbiA2MTg6XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2Vsb3dlcmRldik7XFxuIDYyMTpcXHRcXHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2KTtcXG4gNjIyOlxcdFxcbiA2MjM6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcXG4gNjI0OlxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbiA2MjU6XFx0XFxuIDYyNjpcXHRcXHQvKiBEZWxldGluZyB0aGUgd2lwaHkgaXMgaGFuZGxlZCBpbiB0aGUgbW9kdWxlIGRlc3RydWN0b3IuICovXFxuIDYyNzpcXHR9XFxuIDYyODpcXHRcXG4gNjI5OlxcdHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB2aXJ0X3dpZmlfbGlua19vcHMgPSB7XFxuIDYzMDpcXHRcXHQua2luZFxcdFxcdD0gXFxcInZpcnRfd2lmaVxcXCIsXFxuIDYzMTpcXHRcXHQuc2V0dXBcXHRcXHQ9IHZpcnRfd2lmaV9zZXR1cCxcXG4gNjMyOlxcdFxcdC5uZXdsaW5rXFx0PSB2aXJ0X3dpZmlfbmV3bGluayxcXG4gNjMzOlxcdFxcdC5kZWxsaW5rXFx0PSB2aXJ0X3dpZmlfZGVsbGluayxcXG4gNjM0OlxcdFxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdmlydF93aWZpX25ldGRldl9wcml2KSxcXG4gNjM1OlxcdH07XFxuIDYzNjpcXHRcXG4gNjM3OlxcdHN0YXRpYyBib29sIG5ldGlmX2lzX3ZpcnRfd2lmaV9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNjM4OlxcdHtcXG4gNjM5OlxcdFxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSB2aXJ0X3dpZmlfcnhfaGFuZGxlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MzAuNDU3OTUzMTk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjYwOTA4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFgIERlcGVuZGVuY3kgVHJlZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBoZXJlLCBnaXZlbiB0aGUgZXZvbHV0aW9uIG9mIHRoZSB3aXJlbGVzcyBzdGFjay4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyoqOiBJdOKAmXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbmNsdXNpb24gb2YgYENGRzgwMjExYC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgZHJpdmVycywgb3IgZ2VuZXJhbCB3aXJlbGVzcyBmZWF0dXJlIHRvZ2dsZXM/XG4qICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHZhcmlvdXMgd2lyZWxlc3MgbW9kdWxlcyAoZS5nLiwgc3BlY2lmaWMgcmFkaW8gZmlybXdhcmUgc3VwcG9ydCkgcmVseSBvbiB0aGlzIGZvdW5kYXRpb25hbCBsYXllci4gQSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzIGVzc2VudGlhbC5cbiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEknbGwgYWxzbyBiZSBtaW5kZnVsIG9mIGhvdyB0aGVzZSBkZXBlbmRlbmNpZXMgYWZmZWN0IHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBmcm9tIGNvbXBpbGF0aW9uIHRpbWUgdG8gaW1hZ2Ugc2l6ZS5cbiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS5cbiogICAqKkRvY3VtZW50YXRpb24gYW5kIGNvbW1lbnRhcnkqKjogSSBrbm93IGhvdyBoZWxwZnVsIGNvbW1lbnRzIGNhbiBiZSwgYW5kIGhvdyB3ZWxsLW1haW50YWluZWQgS2NvbmZpZyBmaWxlcyBjYW4gbWFrZSB0aGUgZGlmZmVyZW5jZSFcblxuVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgYXNzdW1wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjMzLjgyNDA0NjQ3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxOTI5MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjozNC4zNTU5ODE5MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2ODAwMDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDRkc4MDIxMSBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHRoZSBkZXBlbmRlbmN5IGNoYWluIGZvciBgQ0ZHODAyMTFgIHdpdGhpbiB0aGUga2VybmVsJ3Mgd2lyZWxlc3MgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBwcmVyZXF1aXNpdGVzIOKAkyB3aGljaCBmZWF0dXJlcyBvciBzdWJzeXN0ZW1zICptdXN0KiBiZSBlbmFibGVkIGJlZm9yZSBgQ0ZHODAyMTFgIGNhbiBldmVuIGJlIGNvbnNpZGVyZWQuIFRvIGRvIHRoaXMsIEknbSBnb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBsaW5lIDE3IG9mIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIEtjb25maWcgZW50cnkgZm9yIGBDRkc4MDIxMWAgc2hvdWxkIGRlY2xhcmUgaXRzIGRlcGVuZGVuY3kgY2xhdXNlcy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb3JlIGJ1aWxkaW5nIGJsb2Nrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjM2LjYyMzk5MjMwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNyxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRpZiBDRkc4MDIxMVxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwibmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGUgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIGhlbHBzIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjozNi42MjQwNTY1MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4NjMyMjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVklSVF9XSUZJIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRvIGVuYWJsZSBgVklSVF9XSUZJYCwgSSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uczogYFZJUlRfV0lGSWAsIGBDRkc4MDIxMWAsIGFuZCwgYXMgZXhwZWN0ZWQsIHRoZSBzdGFuZGFyZCBgTkVUYCBjb25maWd1cmF0aW9uLiBUaGUga2V5IGZvY3VzIHN5bWJvbCBoZXJlIGlzIGB2aXJ0X3dpZmlfbmV3bGlua2AuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZnV6emluZyBkZXRhaWxzLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCBhcyBgW1wiVklSVF9XSUZJXCIsIFwiQ0ZHODAyMTFcIl1gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9uOiBgW1widmlydF93aWZpX25ld2xpbmtcIl1gLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5UaGUgcmVhc29uaW5nIHByb3ZpZGVkIGNsYXJpZmllcyB0aGUgc3RyYXRlZ3k6IHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBtb2RpZmllcyB0aGUgbGluayBjcmVhdGlvbiBsb2dpYyB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IHRoZSBvcmRlciBvZiBmdW5jdGlvbiBjYWxsczogYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKClgIGlzIGJlaW5nIG1vdmVkIHJlbGF0aXZlIHRvIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAgYW5kIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBgdmlydF93aWZpYCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBydG5ldGxpbmtgIGFuZCBgUlRNX05FV0xJTktgIGNhbGxzLiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBjYW4gZWFzaWx5IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBsZWFkIHRvIHN0YXRlIGhhbmRsaW5nIGJ1Z3MsIHdoaWNoIG1ha2VzIGZ1enppbmcgYWJzb2x1dGVseSBjcnVjaWFsLiBUaGlzIGFsbCBtYWtlcyBzZW5zZS5cblxuQWxyaWdodCwgd2l0aCBhbGwgdGhhdCB2YWxpZGF0ZWQsIGl0J3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzMiwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1Njo0MC4yMTAzODA5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjQ3Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUX1dJRklcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydF93aWZpX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUX1dJRklcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydF93aWZpX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NDAuMjkzNjM2ODg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE2NDkwNDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjQwLjI5NDI3NDE5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2MTY0MjYyMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWxvY2F0ZXMgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXFx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBzZXF1ZW5jaW5nIG9mIGRldmljZSByZWdpc3RyYXRpb24gYW5kIG9wZXJhdGlvbmFsIHN0YXRlIHVwZGF0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIGxlbmd0aC9ib3VuZHMgcmVjYWxjdWxhdGlvbnMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuaW5kZXggYjY5YTQ2NTBmYmE4NS4uNDhhZmMyNDMyZjkzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbkBAIC01NTgsNyArNTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuLVx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbiBcbiBcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcbkBAIC01ODQsNiArNTgzLDggQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRnb3RvIHVucmVnaXN0ZXJfbmV0ZGV2O1xuIFx0fVxuIFxuK1x0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbitcbiBcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSB2aXJ0X3dpZmlfbmV0X2RldmljZV9kZXN0cnVjdG9yO1xuIFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XG4gXHRwcml2LVx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NDAuMjk0Mjc1MTM3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDE4ODU2NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHZpcnRfd2lmaWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZSBjb250ZXh0LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBhdGNoIGl0c2VsZi4gSSdsbCBwcm9iYWJseSB1c2UgbXkgZmF2b3JpdGUgZGlmZiB0b29sIHRvIHZpc3VhbGl6ZSB0aGUgY2hhbmdlcywgaGlnaGxpZ2h0aW5nIHRoZSBhZGRlZCwgcmVtb3ZlZCwgYW5kIG1vZGlmaWVkIGxpbmVzLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY29tbWl0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2guXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gdHdlYWtlZCBhbmQgd2h5LiBHaXZlbiB0aGUgbG9jYXRpb24gb2YgdGhlIGNoYW5nZSwgSSB3aWxsIGJlIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgdGhpcyBhZmZlY3RzIGFueSBleGlzdGluZyBmZWF0dXJlcyBvciBpZiB0aGlzIGFkZHMgc29tZXRoaW5nIG5ldy5cblxuTm93LCBsZXQncyB6b29tIGluLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lcyA1NTggdG8gNTk1IHdpdGhpbiB0aGUgYHZpcnRfd2lmaV9uZXdsaW5rYCBmdW5jdGlvbi4gSSdsbCByZWFkIHRocm91Z2ggdGhhdCBzZWN0aW9uIGNhcmVmdWxseSwgcGF5aW5nIGF0dGVudGlvbiB0byB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGNvbnRyb2wgZmxvdywgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBlcnJvcnMsIHVudXN1YWwgYmVoYXZpb3IsIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGltcHJvdmVtZW50LiBXaXRoIGB2aXJ0X3dpZmlfbmV3bGlua2AgYmVpbmcgdGhlIGZ1bmN0aW9uLCBJIHdpbGwgYmUgdGhpbmtpbmcgaWYgdGhpcyBpcyByZWxhdGVkIHRvIG5ldHdvcmsgbGluayBzZXR1cCBvciB0ZWFyIGRvd24uIEkgd2lsbCBhbHNvIGJlIHRoaW5raW5nIG9mIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoYXQgZnVuY3Rpb24uIE15IGJhY2tncm91bmQgYW5kIGV4cGVyaWVuY2UgdGVsbCBtZSB0byBiZSBhbGVydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NTMuNzEzMTM1NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlbG93ZXJkZXYpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTQ3OlxcdFxcdGlmICghdGJbSUZMQV9NVFVdKVxcbiA1NDg6XFx0XFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBwcml2LVxcdTAwM2Vsb3dlcmRldi1cXHUwMDNlbXR1O1xcbiA1NDk6XFx0XFx0ZWxzZSBpZiAoZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBwcml2LVxcdTAwM2Vsb3dlcmRldi1cXHUwMDNlbXR1KVxcbiA1NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1MTpcXHRcXG4gNTUyOlxcdFxcdGVyciA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKHByaXYtXFx1MDAzZWxvd2VyZGV2LCB2aXJ0X3dpZmlfcnhfaGFuZGxlcixcXG4gNTUzOlxcdFxcdFxcdFxcdFxcdFxcdCBwcml2KTtcXG4gNTU0OlxcdFxcdGlmIChlcnIpIHtcXG4gNTU1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsXFxuIDU1NjpcXHRcXHRcXHRcXHRcXFwiY2FuJ3QgbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXI6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiA1NTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTU4OlxcdFxcdH1cXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXFx1MDAzZWxvd2VyZGV2KTtcXG4gNTYxOlxcdFxcbiA1NjI6XFx0XFx0ZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cXHUwMDNlaWVlZTgwMjExX3B0cik7XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdGlmICghZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKSB7XFxuIDU2NTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA1NjY6XFx0XFx0XFx0Z290byByZW1vdmVfaGFuZGxlcjtcXG4gNTY3OlxcdFxcdH1cXG4gNTY4OlxcdFxcbiA1Njk6XFx0XFx0ZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OO1xcbiA1NzA6XFx0XFx0ZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSA9IGNvbW1vbl93aXBoeTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XFxuIDU3MzpcXHRcXHRpZiAoZXJyKSB7XFxuIDU3NDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2Vsb3dlcmRldi1cXHUwMDNlZGV2LCBcXFwiY2FuJ3QgcmVnaXN0ZXJfbmV0ZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gNTc1OlxcdFxcdFxcdFxcdGVycik7XFxuIDU3NjpcXHRcXHRcXHRnb3RvIGZyZWVfd2lyZWxlc3NfZGV2O1xcbiA1Nzc6XFx0XFx0fVxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRlcnIgPSBuZXRkZXZfdXBwZXJfZGV2X2xpbmsocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldiwgZXh0YWNrKTtcXG4gNTgwOlxcdFxcdGlmIChlcnIpIHtcXG4gNTgxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsIFxcXCJjYW4ndCBuZXRkZXZfdXBwZXJfZGV2X2xpbms6ICVkXFxcXG5cXFwiLFxcbiA1ODI6XFx0XFx0XFx0XFx0ZXJyKTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7XFxuIDU4NDpcXHRcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXFx1MDAzZWxvd2VyZGV2LCBkZXYpO1xcbiA1ODc6XFx0XFxuIDU4ODpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHZpcnRfd2lmaV9uZXRfZGV2aWNlX2Rlc3RydWN0b3I7XFxuIDU4OTpcXHRcXHRwcml2LVxcdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XFxuIDU5MDpcXHRcXHRwcml2LVxcdTAwM2Vpc19jb25uZWN0ZWQgPSBmYWxzZTtcXG4gNTkxOlxcdFxcdHByaXYtXFx1MDAzZWlzX3VwID0gZmFsc2U7XFxuIDU5MjpcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlY29ubmVjdCwgdmlydF93aWZpX2Nvbm5lY3RfY29tcGxldGUpO1xcbiA1OTM6XFx0XFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4gNTk0OlxcdFxcbiA1OTU6XFx0XFx0cmV0dXJuIDA7XFxuIDU5NjpcXHR1bnJlZ2lzdGVyX25ldGRldjpcXG4gNTk3OlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XFxuIDU5ODpcXHRmcmVlX3dpcmVsZXNzX2RldjpcXG4gNTk5OlxcdFxcdGtmcmVlKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cik7XFxuIDYwMDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBOVUxMO1xcbiA2MDE6XFx0cmVtb3ZlX2hhbmRsZXI6XFxuIDYwMjpcXHRcXHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXFx1MDAzZWxvd2VyZGV2KTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NTMuNzEzMjQ1NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYzMjgxODYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgZnVuY3Rpb24uIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgc3RhY2tlZCBuZXR3b3JrIGludGVyZmFjZSBjb250ZXh0LiBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSwgcHJvYmFibHkgaGFuZGxpbmcgdHJhbnNpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGFjcm9zcyBtdWx0aXBsZSBsYXllcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGV0aGVyIGl0J3MgYW4gQVBJIGNhbGwsIGludGVybmFsIGZ1bmN0aW9uIG9yIHN0YXRlIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXQgY29udHJvbHMgdGhlIHdob2xlIHByb2Nlc3MsIG9yIHBhcnRzIG9mIGl0LCBiZWNhdXNlIHRoZSBuYW1lIG1ha2VzIG1lIHRoaW5rIGl0J3MgZm9jdXNlZCBvbiB0aGUgJ3RyYW5zZmVyJyBvZiBvcGVyYXRpb25hbCBzdGF0ZSAtIG1lYW5pbmcgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NTUuMzQ2MDcyOTIxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4ODMxNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01NDkzPXZvaWQgbmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdXBkYXRlX2hlYWRlcik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01NDk0LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTQ5NTp2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTQ5Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMTg0PUVYUE9SVF9TWU1CT0wobmV0ZGV2X2NoYW5nZV9mZWF0dXJlcyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTE5NC0gKi9cXG5uZXQvY29yZS9kZXYuYzoxMTE5NTp2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbm5ldC9jb3JlL2Rldi5jLTExMTk2LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjU3LjYwNDkxMTAxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTEyNzI2MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCBmdW5jdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgaW4gYG5ldC9jb3JlL2Rldi5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgaGVhZC4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHJlbGF0ZWQgdG8gb3BlcmF0aW9uYWwgc3RhdGUgdHJhbnNpdGlvbnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc3RhY2tlZCBuZXR3b3JrIGRldmljZXMgb3IgdmlydHVhbCBpbnRlcmZhY2VzLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBjb29yZGluYXRpbmcgb3BlcmF0aW9uYWwgc3RhdGUgY2hhbmdlcyAoZS5nLiwgVVAvRE9XTiwgQUNUSVZFL0lOQUNUSVZFKSBiZXR3ZWVuIGEgcGFyZW50IGFuZCBjaGlsZCBuZXR3b3JrIGludGVyZmFjZSAob3IgYWNyb3NzIHN0YWNrZWQgbGF5ZXJzKS4gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgc3RhdGUgdXBkYXRlcywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIG9wZXJhdGlvbmFsIHN0YXRlIGNoYW5nZXMuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgZGV2aWNlIG1vZGVsLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIG9mIG5ldGRldnMuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBjZW50cmFsIHRvIGhvdyB0aGUga2VybmVsIHByb3BhZ2F0ZXMgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcyBpbiBhIGxheWVyZWQgbmV0d29ya2luZyBlbnZpcm9ubWVudCwgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgaW5jb25zaXN0ZW50IHN0YXRlcyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTc6MDEuMTE3NjQwNTk2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTExOTU6XFx0dm9pZCBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4xMTE5NjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjExMTk3OlxcdHtcXG4xMTE5ODpcXHRcXHRpZiAocm9vdGRldi1cXHUwMDNlb3BlcnN0YXRlID09IElGX09QRVJfRE9STUFOVClcXG4xMTE5OTpcXHRcXHRcXHRuZXRpZl9kb3JtYW50X29uKGRldik7XFxuMTEyMDA6XFx0XFx0ZWxzZVxcbjExMjAxOlxcdFxcdFxcdG5ldGlmX2Rvcm1hbnRfb2ZmKGRldik7XFxuMTEyMDI6XFx0XFxuMTEyMDM6XFx0XFx0aWYgKHJvb3RkZXYtXFx1MDAzZW9wZXJzdGF0ZSA9PSBJRl9PUEVSX1RFU1RJTkcpXFxuMTEyMDQ6XFx0XFx0XFx0bmV0aWZfdGVzdGluZ19vbihkZXYpO1xcbjExMjA1OlxcdFxcdGVsc2VcXG4xMTIwNjpcXHRcXHRcXHRuZXRpZl90ZXN0aW5nX29mZihkZXYpO1xcbjExMjA3OlxcdFxcbjExMjA4OlxcdFxcdGlmIChuZXRpZl9jYXJyaWVyX29rKHJvb3RkZXYpKVxcbjExMjA5OlxcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcXG4xMTIxMDpcXHRcXHRlbHNlXFxuMTEyMTE6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcXG4xMTIxMjpcXHR9XFxuMTEyMTM6XFx0RVhQT1JUX1NZTUJPTChuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZSk7XFxuMTEyMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU3OjAxLjExODA0OTkxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzQwNDY0MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIE1vdmUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIG1vdmluZyBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSo/IEkga25vdyB0aGF0IGJlZm9yZSBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIG9yIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmtgLCBjYWxsaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZXRpZl9jYXJyaWVyX29uL29mZmAgb3IgYG5ldGlmX2Rvcm1hbnRfb24vb2ZmYCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIGRldmljZSBpc24ndCBmdWxseSBzZXQgdXAgeWV0LiBgbmV0aWZfY2Fycmllcl9vbmAsIGZvciBpbnN0YW5jZSwgbWlnaHQgdHJpZ2dlciBhIGxpbmt3YXRjaCBldmVudCB0aGF0IGV4cGVjdHMgYSByZWdpc3RlcmVkIG5ldGRldmljZS4gU28sIHRoZSB0aGlua2luZyBoZXJlIGlzIHRoYXQgbW92aW5nIHRoaXMgY2FsbCAqYWZ0ZXIqIHJlZ2lzdHJhdGlvbiBhbmQgbGlua2luZyBzaG91bGQgcmVzb2x2ZSBzb21lIG9yZGVyaW5nIGlzc3VlcywgcmlnaHQ/IEl0J3MgYSBmYWlybHkgc3RhbmRhcmQgcGF0dGVybiBmb3IgZml4aW5nIHRoZXNlIGtpbmRzIG9mIG5ldGRldmljZSByZWdpc3RyYXRpb24vc3RhdGUgdHJhbnNmZXIgaXNzdWVzLlxuXG5Ob3csIGEgdmVyeSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucz8gTGV0J3MgYnJlYWsgaXQgZG93bi4gVGhlcmUgYXJlbid0IGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGRlYWxsb2NhdGlvbnMuIFRoZXJlIGFyZSBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQ3J1Y2lhbGx5LCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmVuJ3QgYW55IGNoYW5nZXMgdG8gcGFkZGluZywgc3RydWN0IGRlZmluaXRpb25zLCBidWZmZXIgYm91bmRzLCBvciBpbmZvIGxlYWtzLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbG9jYXRpbmcgdGhhdCBvbmUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbC5cblxuQmFzZWQgb24gdGhhdCwgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGlmIHRoZXJlICp3ZXJlKiBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBidWdzLCBidXQgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgbGV0J3MgdmVyaWZ5OlxuXG5gTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZTpcblxuKiAgIFRoZSBwYXRjaCAqb25seSogbW92ZXMgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKClgLlxuKiAgIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGhhbmRsaW5nLCBvciB1c2VyIGNvcGllcy5cblxuQWxyaWdodCwgdGhhdCdzIHNvbGlkLiBUaW1lIHRvIGdvIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NzowNi40NTg1MTY2MjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbG9jYXRlcyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldilgIGluIGB2aXJ0X3dpZmlfbmV3bGluaygpYCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGFmdGVyIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB2aWEgYHJlZ2lzdGVyX25ldGRldmljZSgpYCBhbmQgbGlua2VkIHdpdGggYG5ldGRldl91cHBlcl9kZXZfbGluaygpYC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIHNlcXVlbmNpbmcgb2YgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbGVuZ3RoL2JvdW5kcyByZWNhbGN1bGF0aW9ucywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWxvY2F0ZXMgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXFx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBzZXF1ZW5jaW5nIG9mIGRldmljZSByZWdpc3RyYXRpb24gYW5kIG9wZXJhdGlvbmFsIHN0YXRlIHVwZGF0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIGxlbmd0aC9ib3VuZHMgcmVjYWxjdWxhdGlvbnMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 13:08:23 +0000 UTC FinishedAt: 2026-09-09 13:57:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRT_WIFI", "CFG80211" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "a9d7ced84989ec05be09b4b8428759ef60450a0f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRT_WIFI", "CFG80211" ], "series_id": "cf613bab-b2e8-4ca3-bc60-b976c01c4aea" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virt_wifi_newlink" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRfV0lGSSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRfd2lmaV9uZXdsaW5rJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNjZGUxNjEzMzUwMjUyMGY5NDMzNzY1YmI5NTViNmZjNGNjYTU2NDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjU2OjExIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXG5pbmRleCBiNjlhNDY1MGZiYTg1Li40OGFmYzI0MzJmOTNhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuQEAgLTU1OCw3ICYjNDM7NTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuLVx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbiBcbiBcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcbkBAIC01ODQsNiAmIzQzOzU4Myw4IEBAIHN0YXRpYyBpbnQgdmlydF93aWZpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcbiBcdH1cbiBcbiYjNDM7XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpO1xuJiM0MztcbiBcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSB2aXJ0X3dpZmlfbmV0X2RldmljZV9kZXN0cnVjdG9yO1xuIFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XG4gXHRwcml2LVx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRfV0lGSSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRfd2lmaV9uZXdsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aXJ0dWFsIHdpZmkgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gYHZpcnRfd2lmaV9uZXdsaW5rYCBieSBkZWZlcnJpbmcgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCB1bnRpbCBhZnRlciB0aGUgbmV0ZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYW5kIHVwcGVyIGRldmljZSBsaW5rIGVzdGFibGlzaGVkLiBUaGUgdmlydF93aWZpIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRsaW5rIG1lc3NhZ2VzIChSVE1fTkVXTElOSyksIG1ha2luZyB0aGlzIG1vZGlmaWVkIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYwppbmRleCBiNjlhNDY1MGZiYTg1Li40OGFmYzI0MzJmOTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMKQEAgLTU1OCw3ICYjNDM7NTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCWV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBwcml2LSZndDtsb3dlcmRldik7Ci0JbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi0mZ3Q7bG93ZXJkZXYsIGRldik7CiAKIAlkZXYtJmd0O2llZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LSZndDtpZWVlODAyMTFfcHRyKTsKIApAQCAtNTg0LDYgJiM0Mzs1ODMsOCBAQCBzdGF0aWMgaW50IHZpcnRfd2lmaV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7CiAJfQogCiYjNDM7CW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYpOwomIzQzOwogCWRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjsKIAlwcml2LSZndDtiZWluZ19kZWxldGVkID0gZmFsc2U7CiAJcHJpdi0mZ3Q7aXNfY29ubmVjdGVkID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODUKCQkJCQkJCW91dHB1dDogNzQKCQkJCQkJCXRob3VnaHRzOiAxMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWaXJ0X1dpZmkgRHJpdmVyIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBkaWZmIGFuZCBwaW5wb2ludGluZyB0aGUgbW9kaWZpZWQgZmlsZXMuIEFoYSwgaXQmIzM5O3MgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIG5lZWQgdG8gZm9jdXMuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSBrbm93IHRoYXQgZnVuY3Rpb247IGl0JiMzOTtzIGNlbnRyYWwgdG8gaG93IHRoaXMgdmlydHVhbCBXaUZpIGludGVyZmFjZSBnZXRzIGluc3RhbnRpYXRlZC4KCk5vdywgSSYjMzk7bGwgcHVsbCB1cCBgdmlydF93aWZpLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGFyb3VuZCBsaW5lIDU1OC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHZpcnRfd2lmaWAgKmlzKiwgYW5kIGhvdyBpdOKAmXMgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYWdhaW5zdCB0aGUgS2NvbmZpZyB0byB1bmRlcnN0YW5kIGFueSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGFueSBkZXBlbmRlbmNpZXMgc28gSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuCgpJ4oCZbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFuZCB0aGVuIGBncmVwcGVyYCB0byBmaW5kIHNwZWNpZmljIHRoaW5ncy4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZ2F0aGVyIGFsbCB0aGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGdldCB0byB0aGUgcm9vdCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdFx0aWYgKCFwcml2LVx1MDAzZWxvd2VyZGV2KVxuIDU0NjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA1NDc6XHRcdGlmICghdGJbSUZMQV9NVFVdKVxuIDU0ODpcdFx0XHRkZXYtXHUwMDNlbXR1ID0gcHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VtdHU7XG4gNTQ5Olx0XHRlbHNlIGlmIChkZXYtXHUwMDNlbXR1IFx1MDAzZSBwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZW10dSlcbiA1NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTUxOlx0XG4gNTUyOlx0XHRlcnIgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3Rlcihwcml2LVx1MDAzZWxvd2VyZGV2LCB2aXJ0X3dpZmlfcnhfaGFuZGxlcixcbiA1NTM6XHRcdFx0XHRcdFx0IHByaXYpO1xuIDU1NDpcdFx0aWYgKGVycikge1xuIDU1NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlZGV2LFxuIDU1NjpcdFx0XHRcdFwmIzM0O2NhbiYjMzk7dCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXG5cJiMzNDssIGVycik7XG4gNTU3Olx0XHRcdHJldHVybiBlcnI7XG4gNTU4Olx0XHR9XG4gNTU5Olx0XG4gNTYwOlx0XHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNTYxOlx0XG4gNTYyOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IGt6YWxsb2Nfb2JqKCpkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gNTYzOlx0XG4gNTY0Olx0XHRpZiAoIWRldi1cdTAwM2VpZWVlODAyMTFfcHRyKSB7XG4gNTY1Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gNTY2Olx0XHRcdGdvdG8gcmVtb3ZlX2hhbmRsZXI7XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OO1xuIDU3MDpcdFx0ZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkgPSBjb21tb25fd2lwaHk7XG4gNTcxOlx0XG4gNTcyOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiA1NzM6XHRcdGlmIChlcnIpIHtcbiA1NzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2FuJiMzOTt0IHJlZ2lzdGVyX25ldGRldmljZTogJWRcXG5cJiMzNDssXG4gNTc1Olx0XHRcdFx0ZXJyKTtcbiA1NzY6XHRcdFx0Z290byBmcmVlX3dpcmVsZXNzX2RldjtcbiA1Nzc6XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYsIGV4dGFjayk7XG4gNTgwOlx0XHRpZiAoZXJyKSB7XG4gNTgxOlx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VkZXYsIFwmIzM0O2NhbiYjMzk7dCBuZXRkZXZfdXBwZXJfZGV2X2xpbms6ICVkXFxuXCYjMzQ7LFxuIDU4MjpcdFx0XHRcdGVycik7XG4gNTgzOlx0XHRcdGdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7XG4gNTg0Olx0XHR9XG4gNTg1Olx0XG4gNTg2Olx0XHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpO1xuIDU4NzpcdFxuIDU4ODpcdFx0ZGV2LVx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHZpcnRfd2lmaV9uZXRfZGV2aWNlX2Rlc3RydWN0b3I7XG4gNTg5Olx0XHRwcml2LVx1MDAzZWJlaW5nX2RlbGV0ZWQgPSBmYWxzZTtcbiA1OTA6XHRcdHByaXYtXHUwMDNlaXNfY29ubmVjdGVkID0gZmFsc2U7XG4gNTkxOlx0XHRwcml2LVx1MDAzZWlzX3VwID0gZmFsc2U7XG4gNTkyOlx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcml2LVx1MDAzZWNvbm5lY3QsIHZpcnRfd2lmaV9jb25uZWN0X2NvbXBsZXRlKTtcbiA1OTM6XHRcdF9fbW9kdWxlX2dldChUSElTX01PRFVMRSk7XG4gNTk0Olx0XG4gNTk1Olx0XHRyZXR1cm4gMDtcbiA1OTY6XHR1bnJlZ2lzdGVyX25ldGRldjpcbiA1OTc6XHRcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4gNTk4Olx0ZnJlZV93aXJlbGVzc19kZXY6XG4gNTk5Olx0XHRrZnJlZShkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gNjAwOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IE5VTEw7XG4gNjAxOlx0cmVtb3ZlX2hhbmRsZXI6XG4gNjAyOlx0XHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuIDYwMzpcdFxuIDYwNDpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtWSVJUX1dJRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MT1jb25maWcgTUFDODAyMTFfSFdTSU1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTQ6Y29uZmlnIFZJUlRfV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnLTE1LVx0dHJpc3RhdGUgXCYjMzQ7V2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZT0zPW1hYzgwMjExX2h3c2ltLW9ianNcdFx0JiM0Mzs9IG1hYzgwMjExX2h3c2ltX25hbi5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRfV0lGSSlcdCYjNDM7PSB2aXJ0X3dpZmkub1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM9MTM3PXN0YXRpYyB1OCBmYWtlX3JvdXRlcl9ic3NpZFtFVEhfQUxFTl0gX19yb19hZnRlcl9pbml0ID0ge307XG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTEzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTM5OiNkZWZpbmUgVklSVF9XSUZJX1NTSUQgXCYjMzQ7VmlydFdpZmlcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTQwOiNkZWZpbmUgVklSVF9XSUZJX1NTSURfTEVOIDhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMtMTQxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0xNDI9c3RhdGljIHZvaWQgdmlydF93aWZpX2luZm9ybV9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTE1MS1cdFx0LnRhZyA9IFdMQU5fRUlEX1NTSUQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jOjE1MjpcdFx0LmxlbiA9IFZJUlRfV0lGSV9TU0lEX0xFTixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTUzOlx0XHQuc3NpZCA9IFZJUlRfV0lGSV9TU0lELFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0xNTQtXHR9O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM9MjYwPXN0YXRpYyB2b2lkIHZpcnRfd2lmaV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTI2NS1cdGJvb2wgcmlnaHRfYWRkciA9IGV0aGVyX2FkZHJfZXF1YWwocmVxdWVzdGVkX2JzcywgZmFrZV9yb3V0ZXJfYnNzaWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoyNjY6XHRib29sIHJpZ2h0X3NzaWQgPSBwcml2LVx1MDAzZWNvbm5lY3RfcmVxdWVzdGVkX3NzaWRfbGVuID09IFZJUlRfV0lGSV9TU0lEX0xFTiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MjY3Olx0XHRcdCAgIW1lbWNtcChwcml2LVx1MDAzZWNvbm5lY3RfcmVxdWVzdGVkX3NzaWQsIFZJUlRfV0lGSV9TU0lELFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0yNjgtXHRcdFx0XHQgIHByaXYtXHUwMDNlY29ubmVjdF9yZXF1ZXN0ZWRfc3NpZF9sZW4pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFZpcnR1YWwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSB3aXJlbGVzcyB2aXJ0dWFsIGRyaXZlci4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIEkgcmVjYWxsLCBpcyBwcm9iYWJseSB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGF0IHNwZWNpZmljIGRyaXZlci4gTGV0JiMzOTtzIGRpdmUgaW50byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSwgZXZlcnl0aGluZyBmcm9tIHRoZSBzaW1wbGUgYm9vbGVhbiBvcHRpb25zIHRvIGFueSBjb21wbGV4IHJlbGF0aW9uc2hpcHMgd2l0aCBvdGhlciBmZWF0dXJlcyBvciBoYXJkd2FyZS4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhlc2UgdmlydHVhbCBkcml2ZXJzIGFyZSBkZXNpZ25lZCBhbmQgY29uZmlndXJlZC4gVGhpcyBzaG91bGQgbGF5IHRoZSBncm91bmR3b3JrIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBpbm5lciB3b3JraW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxuICAgMjpcdFx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIHJhZGlvIHRlc3RpbmcgdG9vbCBmb3IgbWFjODAyMTFcJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gTUFDODAyMTFcbiAgIDQ6XHRcdGhlbHBcbiAgIDU6XHRcdCAgVGhpcyBkcml2ZXIgaXMgYSBkZXZlbG9wZXIgdGVzdGluZyB0b29sIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdFxuICAgNjpcdFx0ICBJRUVFIDgwMi4xMSBuZXR3b3JraW5nIHN0YWNrIChtYWM4MDIxMSkgZnVuY3Rpb25hbGl0eS4gVGhpcyBpcyBub3RcbiAgIDc6XHRcdCAgbmVlZGVkIGZvciBub3JtYWwgd2lyZWxlc3MgTEFOIHVzYWdlIGFuZCBpcyBvbmx5IGZvciB0ZXN0aW5nLiBTZWVcbiAgIDg6XHRcdCAgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL21hYzgwMjExX2h3c2ltIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvd1xuICAgOTpcdFx0ICB0byB1c2UgdGhpcyB0b29sLlxuICAxMDpcdFxuICAxMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcbiAgMTI6XHRcdCAgY2FsbGVkIG1hYzgwMjExX2h3c2ltLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgVklSVF9XSUZJXG4gIDE1Olx0XHR0cmlzdGF0ZSBcJiMzNDtXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gQ0ZHODAyMTFcbiAgMTc6XHRcdGhlbHBcbiAgMTg6XHRcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBldGhlcm5ldCBjb25uZWN0aW9ucyB0byBhcHBlYXIgYXMgaWYgdGhleVxuICAxOTpcdFx0ICBhcmUgd2lmaSBjb25uZWN0aW9ucyB0aHJvdWdoIGEgc3BlY2lhbCBydG5ldGxpbmsgZGV2aWNlLlxuICAyMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1ODYKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IFBhdGNoIGluIHRoZSBWaXJ0dWFsIFdpRmkgRHJpdmVyKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYFZJUlRfV0lGSWAgZHJpdmVyLCB3aGljaCBmcm9tIHRoZSBjb250ZXh0IGlzIGEgdmlydHVhbCBXaUZpIGRyaXZlciBpbXBsZW1lbnRlZCB1c2luZyBydG5ldGxpbmsmIzM5O3MgYHJ0bmxfbGlua19vcHNgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsICYjMzQ7SG93IGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnZva2VkPyYjMzQ7IEkgc2VlIHRoYXQgYHZpcnRfd2lmaV9uZXdsaW5rYCBpcyB0aGUgY3JpdGljYWwgcGllY2UsIHNwZWNpZmljYWxseSB0aGUgYG5ld2xpbmtgIGNhbGxiYWNrIHdpdGhpbiBgcnRubF9saW5rX29wc2AgZm9yIHRoZSBgdmlydF93aWZpYCBkZXZpY2UgdHlwZS4gVGhlIHByb2Nlc3Mgc3RhcnRzIGluIHVzZXJzcGFjZSwgd2hpY2ggY3JlYXRlcyBhIGB2aXJ0X3dpZmlgIGRldmljZSB1c2luZyBydG5ldGxpbmsgYnkgc2VuZGluZyBhbiBgUlRNX05FV0xJTktgIG1lc3NhZ2Ugd2l0aCB0aGUga2luZCBzZXQgdG8gJiMzNDt2aXJ0X3dpZmkuJiMzNDsgVGhpcyBpcyBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBkZXZpY2UsIHBlcmZlY3QgZm9yIHRlc3RpbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciB3aXRoIHN5emthbGxlciwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIHBhdGNoIEkmIzM5O20gZXhhbWluaW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBjYWxscyB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gUHJldmlvdXNseSwgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYpO2Agd2FzIGNhbGxlZCAqYmVmb3JlKiBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIGFuZCBgbmV0ZGV2X3VwcGVyX2Rldl9saW5rKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYsIGV4dGFjaylgLiBUaGUgcGF0Y2ggbW92ZXMgdGhpcyBjYWxsIHRvICphZnRlciogdGhlIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmtgIGNhbGwuIFRoaXMgc3VidGxlIHNoaWZ0IGluIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2UgdmlhIHRoZSBydG5ldGxpbmsgbmV0bGluayBpbnRlcmZhY2UgaXMgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQuIFRoZSBjb3JlIGlkZWEgaXMgdGhhdCBjYWxsaW5nIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgb24gYW4gdW5yZWdpc3RlcmVkIG5ldGRldmljZSB2cy4gb25lIHRoYXQgaXMgcmVnaXN0ZXJlZCBhbmQgbGlua2VkIHRvIHVwcGVyL2xvd2VyIGRldmljZXMgbWlnaHQgdW5jb3ZlciBhIGJ1ZyBvciBjaGFuZ2UgaG93IHRoZSBvcGVyYXRpb25hbCBzdGF0ZSBpcyBoYW5kbGVkIGR1cmluZyBsaW5rIGNyZWF0aW9uLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyBiZWhhdmlvdXIuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGNoYW5nZSB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUgZHJpdmVyIGxvZ2ljIGZvciB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlcywgc3BlY2lmaWNhbGx5IHRoZSBydG5ldGxpbmsgdmlydHVhbCBkZXZpY2UgJiMzNDt2aXJ0X3dpZmkmIzM0Oy4gSXQmIzM5O3MgcmVhY2hhYmxlIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rJiMzOTtzIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgd2l0aGluIGEgcmVhY2hhYmxlIGRyaXZlciBhbmQgbmV0d29ya2luZyBwYXRoLiBJIHNlZSB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBWSVJUX1dJRklgIGFuZCBgQ0ZHODAyMTFgLCB3aGljaCBvYnZpb3VzbHkgZGVwZW5kcyBvbiBgTkVUYC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgdmlydF93aWZpX25ld2xpbmtgLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBpbnNwZWN0IHRoZSByZXN0IG9mIGB2aXJ0X3dpZmkuY2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgaW50ZXJlc3RpbmcgZnVuY3Rpb25zIHRvIGNvbnNpZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XHQqcHNrYiA9IHNrYjtcbiA1MjE6XHRcdHNrYi1cdTAwM2VkZXYgPSBwcml2LVx1MDAzZXVwcGVyZGV2O1xuIDUyMjpcdFx0c2tiLVx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XG4gNTIzOlx0XHRyZXR1cm4gUlhfSEFORExFUl9BTk9USEVSO1xuIDUyNDpcdH1cbiA1MjU6XHRcbiA1MjY6XHQvKiBDYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi9cbiA1Mjc6XHRzdGF0aWMgaW50IHZpcnRfd2lmaV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gNTI4Olx0XHRcdFx0ICAgICBzdHJ1Y3QgcnRubF9uZXdsaW5rX3BhcmFtcyAqcGFyYW1zLFxuIDUyOTpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDUzMDpcdHtcbiA1MzE6XHRcdHN0cnVjdCB2aXJ0X3dpZmlfbmV0ZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDUzMjpcdFx0c3RydWN0IG5ldCAqbGlua19uZXQgPSBydG5sX25ld2xpbmtfbGlua19uZXQocGFyYW1zKTtcbiA1MzM6XHRcdHN0cnVjdCBubGF0dHIgKip0YiA9IHBhcmFtcy1cdTAwM2V0YjtcbiA1MzQ6XHRcdGludCBlcnI7XG4gNTM1Olx0XG4gNTM2Olx0XHRpZiAoIXRiW0lGTEFfTElOS10pXG4gNTM3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUzODpcdFxuIDUzOTpcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcbiA1NDA6XHRcbiA1NDE6XHRcdHByaXYtXHUwMDNldXBwZXJkZXYgPSBkZXY7XG4gNTQyOlx0XHRwcml2LVx1MDAzZWxvd2VyZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGxpbmtfbmV0LFxuIDU0MzpcdFx0XHRcdFx0XHQgICAgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpO1xuIDU0NDpcdFxuIDU0NTpcdFx0aWYgKCFwcml2LVx1MDAzZWxvd2VyZGV2KVxuIDU0NjpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiA1NDc6XHRcdGlmICghdGJbSUZMQV9NVFVdKVxuIDU0ODpcdFx0XHRkZXYtXHUwMDNlbXR1ID0gcHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VtdHU7XG4gNTQ5Olx0XHRlbHNlIGlmIChkZXYtXHUwMDNlbXR1IFx1MDAzZSBwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZW10dSlcbiA1NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTUxOlx0XG4gNTUyOlx0XHRlcnIgPSBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3Rlcihwcml2LVx1MDAzZWxvd2VyZGV2LCB2aXJ0X3dpZmlfcnhfaGFuZGxlcixcbiA1NTM6XHRcdFx0XHRcdFx0IHByaXYpO1xuIDU1NDpcdFx0aWYgKGVycikge1xuIDU1NTpcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlZGV2LFxuIDU1NjpcdFx0XHRcdFwmIzM0O2NhbiYjMzk7dCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXG5cJiMzNDssIGVycik7XG4gNTU3Olx0XHRcdHJldHVybiBlcnI7XG4gNTU4Olx0XHR9XG4gNTU5Olx0XG4gNTYwOlx0XHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNTYxOlx0XG4gNTYyOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IGt6YWxsb2Nfb2JqKCpkZXYtXHUwMDNlaWVlZTgwMjExX3B0cik7XG4gNTYzOlx0XG4gNTY0Olx0XHRpZiAoIWRldi1cdTAwM2VpZWVlODAyMTFfcHRyKSB7XG4gNTY1Olx0XHRcdGVyciA9IC1FTk9NRU07XG4gNTY2Olx0XHRcdGdvdG8gcmVtb3ZlX2hhbmRsZXI7XG4gNTY3Olx0XHR9XG4gNTY4Olx0XG4gNTY5Olx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2VpZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OO1xuIDU3MDpcdFx0ZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkgPSBjb21tb25fd2lwaHk7XG4gNTcxOlx0XG4gNTcyOlx0XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiA1NzM6XHRcdGlmIChlcnIpIHtcbiA1NzQ6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2FuJiMzOTt0IHJlZ2lzdGVyX25ldGRldmljZTogJWRcXG5cJiMzNDssXG4gNTc1Olx0XHRcdFx0ZXJyKTtcbiA1NzY6XHRcdFx0Z290byBmcmVlX3dpcmVsZXNzX2RldjtcbiA1Nzc6XHRcdH1cbiA1Nzg6XHRcbiA1Nzk6XHRcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYsIGV4dGFjayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgVmlydHVhbCBXaUZpIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHZpcnR1YWwgV2lGaSBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGxpbmsgb3BlcmF0aW9ucy4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHJ0bmxfbGlua19vcHNgIHdpbGwgYmUgYSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMuIEl0JiMzOTtzIHRoZSBzdGFuZGFyZCBwbGFjZSBmb3IgYSB2aXJ0dWFsIGludGVyZmFjZSB0byBkZWZpbmUgaXRzIGJlaGF2aW9yIHdoZW4gaXQgY29tZXMgdG8gdGhpbmdzIGxpa2UgYnJpbmdpbmcgdGhlIGludGVyZmFjZSB1cC9kb3duLCBzZXR0aW5nIGl0cyBhdHRyaWJ1dGVzLCBldGMuIFNvLCBsZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byBgdmlydF93aWZpLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfbGlua19vcHNgIChvciBhdCBsZWFzdCwgaXRzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSkgdGhlcmUsIHNvIEkgY2FuIHNlZSBob3cgdGhlIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbCBhbmQgd2hhdCBjYWxsYmFja3MgaXQgcHJvdmlkZXMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRvd24gdGhlIGNhbGxzIGFuZCBnYWluIGEgYmV0dGVyIGdyYXNwIG9uIGhvdyB0aGUgdmlydHVhbCBkZXZpY2Ugb3BlcmF0ZXMgYXQgYSBsb3cgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjAwOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ciA9IE5VTEw7XG4gNjAxOlx0cmVtb3ZlX2hhbmRsZXI6XG4gNjAyOlx0XHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuIDYwMzpcdFxuIDYwNDpcdFx0cmV0dXJuIGVycjtcbiA2MDU6XHR9XG4gNjA2Olx0XG4gNjA3Olx0LyogQ2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovXG4gNjA4Olx0c3RhdGljIHZvaWQgdmlydF93aWZpX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiA2MDk6XHRcdFx0XHQgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxuIDYxMDpcdHtcbiA2MTE6XHRcdHN0cnVjdCB2aXJ0X3dpZmlfbmV0ZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xuIDYxMjpcdFxuIDYxMzpcdFx0aWYgKGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKVxuIDYxNDpcdFx0XHR2aXJ0X3dpZmlfY2FuY2VsX3NjYW4oZGV2LVx1MDAzZWllZWU4MDIxMV9wdHItXHUwMDNld2lwaHkpO1xuIDYxNTpcdFxuIDYxNjpcdFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gdHJ1ZTtcbiA2MTc6XHRcdHZpcnRfd2lmaV9jYW5jZWxfY29ubmVjdChkZXYpO1xuIDYxODpcdFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcbiA2MTk6XHRcbiA2MjA6XHRcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIocHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNjIxOlx0XHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpO1xuIDYyMjpcdFxuIDYyMzpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcbiA2MjQ6XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuIDYyNTpcdFxuIDYyNjpcdFx0LyogRGVsZXRpbmcgdGhlIHdpcGh5IGlzIGhhbmRsZWQgaW4gdGhlIG1vZHVsZSBkZXN0cnVjdG9yLiAqL1xuIDYyNzpcdH1cbiA2Mjg6XHRcbiA2Mjk6XHRzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdmlydF93aWZpX2xpbmtfb3BzID0ge1xuIDYzMDpcdFx0LmtpbmRcdFx0PSBcJiMzNDt2aXJ0X3dpZmlcJiMzNDssXG4gNjMxOlx0XHQuc2V0dXBcdFx0PSB2aXJ0X3dpZmlfc2V0dXAsXG4gNjMyOlx0XHQubmV3bGlua1x0PSB2aXJ0X3dpZmlfbmV3bGluayxcbiA2MzM6XHRcdC5kZWxsaW5rXHQ9IHZpcnRfd2lmaV9kZWxsaW5rLFxuIDYzNDpcdFx0LnByaXZfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHZpcnRfd2lmaV9uZXRkZXZfcHJpdiksXG4gNjM1Olx0fTtcbiA2MzY6XHRcbiA2Mzc6XHRzdGF0aWMgYm9vbCBuZXRpZl9pc192aXJ0X3dpZmlfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNjM4Olx0e1xuIDYzOTpcdFx0cmV0dXJuIHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtXHUwMDNlcnhfaGFuZGxlcikgPT0gdmlydF93aWZpX3J4X2hhbmRsZXI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgYENGRzgwMjExYCBEZXBlbmRlbmN5IFRyZWUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgaGVyZSwgZ2l2ZW4gdGhlIGV2b2x1dGlvbiBvZiB0aGUgd2lyZWxlc3Mgc3RhY2suIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25kaXRpb25hbCBkZXBlbmRlbmNpZXMqKjogSXTigJlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucyBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGBDRkc4MDIxMWAuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHNwZWNpZmljIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMsIGRyaXZlcnMsIG9yIGdlbmVyYWwgd2lyZWxlc3MgZmVhdHVyZSB0b2dnbGVzPwoqICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGhvdyB2YXJpb3VzIHdpcmVsZXNzIG1vZHVsZXMgKGUuZy4sIHNwZWNpZmljIHJhZGlvIGZpcm13YXJlIHN1cHBvcnQpIHJlbHkgb24gdGhpcyBmb3VuZGF0aW9uYWwgbGF5ZXIuIEEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZGVwZW5kZW5jeSBncmFwaCBpcyBlc3NlbnRpYWwuCiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEkmIzM5O2xsIGFsc28gYmUgbWluZGZ1bCBvZiBob3cgdGhlc2UgZGVwZW5kZW5jaWVzIGFmZmVjdCB0aGUgb3ZlcmFsbCBrZXJuZWwgYnVpbGQgcHJvY2VzcywgZnJvbSBjb21waWxhdGlvbiB0aW1lIHRvIGltYWdlIHNpemUuCiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS4KKiAgICoqRG9jdW1lbnRhdGlvbiBhbmQgY29tbWVudGFyeSoqOiBJIGtub3cgaG93IGhlbHBmdWwgY29tbWVudHMgY2FuIGJlLCBhbmQgaG93IHdlbGwtbWFpbnRhaW5lZCBLY29uZmlnIGZpbGVzIGNhbiBtYWtlIHRoZSBkaWZmZXJlbmNlIQoKVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGFzc3VtcHRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0ZHODAyMTEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvd2lyZWxlc3MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNi1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxubmV0L3dpcmVsZXNzL0tjb25maWctMTgtXHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01MS1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1Ncbm5ldC93aXJlbGVzcy9LY29uZmlnLTUzLVx0Ym9vbCBcJiMzNDtlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo2ODpjb25maWcgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgY2VydGlmaWNhdGlvbiBvbnVzXCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctODgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzo4OTpjb25maWcgQ0ZHODAyMTFfUkVRVUlSRV9TSUdORURfUkVHREJcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDtyZXF1aXJlIHJlZ2RiIHNpZ25hdHVyZVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy05OC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTEwMC1cdGJvb2wgXCYjMzQ7YWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMTE6Y29uZmlnIENGRzgwMjExX0VYVFJBX1JFR0RCX0tFWURJUlxubmV0L3dpcmVsZXNzL0tjb25maWctMTEyLVx0c3RyaW5nIFwmIzM0O2FkZGl0aW9uYWwgcmVnZGIga2V5IGRpcmVjdG9yeVwmIzM0OyBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMjEtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxMjI6Y29uZmlnIENGRzgwMjExX1JFR19DRUxMVUxBUl9ISU5UU1xubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVx0Ym9vbCBcJiMzNDtjZmc4MDIxMSByZWd1bGF0b3J5IHN1cHBvcnQgZm9yIGNlbGx1bGFyIGJhc2Ugc3RhdGlvbiBoaW50c1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTEzNC1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O2NmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cJiMzNDtcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNTk6Y29uZmlnIENGRzgwMjExX0RFRkFVTFRfUFNcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2MC1cdGJvb2wgXCYjMzQ7ZW5hYmxlIHBvd2Vyc2F2ZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTY4LVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTY5OmNvbmZpZyBDRkc4MDIxMV9ERUJVR0ZTXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXHRib29sIFwmIzM0O2NmZzgwMjExIERlYnVnRlMgZW50cmllc1wmIzM0O1xuLS1cbm5ldC93aXJlbGVzcy9LY29uZmlnLTE3Ni1cbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O3N1cHBvcnQgQ1JEQVwmIzM0OyBpZiBFWFBFUlRcbi0tXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxODc6Y29uZmlnIENGRzgwMjExX1dFWFRcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4OC1cdGJvb2wgXCYjMzQ7Y2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5XCYjMzQ7XG4tLVxubmV0L3dpcmVsZXNzL0tjb25maWctMTkzLVxubmV0L3dpcmVsZXNzL0tjb25maWc6MTk0OmNvbmZpZyBDRkc4MDIxMV9LVU5JVF9URVNUXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgY2ZnODAyMTFcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzYzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDRkc4MDIxMSBEZXBlbmRlbmN5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGluIG15IG1pbmQgaXMgdGhlIGRlcGVuZGVuY3kgY2hhaW4gZm9yIGBDRkc4MDIxMWAgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3Mgd2lyZWxlc3MgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBwcmVyZXF1aXNpdGVzIOKAkyB3aGljaCBmZWF0dXJlcyBvciBzdWJzeXN0ZW1zICptdXN0KiBiZSBlbmFibGVkIGJlZm9yZSBgQ0ZHODAyMTFgIGNhbiBldmVuIGJlIGNvbnNpZGVyZWQuIFRvIGRvIHRoaXMsIEkmIzM5O20gZ29pbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZTogbGluZSAxNyBvZiBgbmV0L3dpcmVsZXNzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUgS2NvbmZpZyBlbnRyeSBmb3IgYENGRzgwMjExYCBzaG91bGQgZGVjbGFyZSBpdHMgZGVwZW5kZW5jeSBjbGF1c2VzLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgcmVsZXZhbnQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgYXJlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiBpdHMgY29yZSBidWlsZGluZyBibG9ja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDE3Olx0Y29uZmlnIENGRzgwMjExXG4gIDE4Olx0XHR0cmlzdGF0ZSBcJiMzNDtjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFJGS0lMTCB8fCAhUkZLSUxMXG4gIDIwOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIxOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMjI6XHRcdCMgbWF5IG5lZWQgdG8gdXBkYXRlIHRoaXMgd2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIGNoYW5nZWQgYW5kIGFyZVxuICAyMzpcdFx0IyB1c2luZyBhIGRpZmZlcmVudCBhbGdvcml0aG0sIHRob3VnaCByaWdodCBub3cgdGhleSBzaG91bGRuJiMzOTt0XG4gIDI0Olx0XHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXG4gIDI1Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcbiAgMjY6XHRcdGhlbHBcbiAgMjc6XHRcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cbiAgMjg6XHRcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHJlZmVyIHRvIGRvY3VtZW50YXRpb24gb24gdGhlIHdpcmVsZXNzIHdpa2k6XG4gIDMxOlx0XG4gIDMyOlx0XHQgIGh0dHBzOi8vd2lyZWxlc3Mud2lraS5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvRG9jdW1lbnRhdGlvbi9jZmc4MDIxMVxuICAzMzpcdFxuICAzNDpcdFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxuICAzNTpcdFxuICAzNjpcdGlmIENGRzgwMjExXG4gIDM3Olx0XG4gIDM4Olx0Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7bmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXCYjMzQ7XG4gIDQwOlx0XHRoZWxwXG4gIDQxOlx0XHQgIFRoZSBubDgwMjExIHRlc3Rtb2RlIGNvbW1hbmQgaGVscHMgaW1wbGVtZW50aW5nIHRoaW5ncyBsaWtlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDMyCgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVklSVF9XSUZJIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0byBlbmFibGUgYFZJUlRfV0lGSWAsIEkgbmVlZCB0byBzZXQgdGhlIGZvbGxvd2luZyBrZXJuZWwgY29uZmlndXJhdGlvbnM6IGBWSVJUX1dJRklgLCBgQ0ZHODAyMTFgLCBhbmQsIGFzIGV4cGVjdGVkLCB0aGUgc3RhbmRhcmQgYE5FVGAgY29uZmlndXJhdGlvbi4gVGhlIGtleSBmb2N1cyBzeW1ib2wgaGVyZSBpcyBgdmlydF93aWZpX25ld2xpbmtgLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZnV6emluZyBkZXRhaWxzLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCBhcyBgWyYjMzQ7VklSVF9XSUZJJiMzNDssICYjMzQ7Q0ZHODAyMTEmIzM0O11gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9uOiBgWyYjMzQ7dmlydF93aWZpX25ld2xpbmsmIzM0O11gLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydC4KClRoZSByZWFzb25pbmcgcHJvdmlkZWQgY2xhcmlmaWVzIHRoZSBzdHJhdGVneTogdGhlIHBhdGNoIGluIHF1ZXN0aW9uIG1vZGlmaWVzIHRoZSBsaW5rIGNyZWF0aW9uIGxvZ2ljIHdpdGhpbiBgdmlydF93aWZpX25ld2xpbmtgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSBvcmRlciBvZiBmdW5jdGlvbiBjYWxsczogYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKClgIGlzIGJlaW5nIG1vdmVkIHJlbGF0aXZlIHRvIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAgYW5kIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBgdmlydF93aWZpYCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBydG5ldGxpbmtgIGFuZCBgUlRNX05FV0xJTktgIGNhbGxzLiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBjYW4gZWFzaWx5IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBsZWFkIHRvIHN0YXRlIGhhbmRsaW5nIGJ1Z3MsIHdoaWNoIG1ha2VzIGZ1enppbmcgYWJzb2x1dGVseSBjcnVjaWFsLiBUaGlzIGFsbCBtYWtlcyBzZW5zZS4KCkFscmlnaHQsIHdpdGggYWxsIHRoYXQgdmFsaWRhdGVkLCBpdCYjMzk7cyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVF9XSUZJJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydF93aWZpX25ld2xpbmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZpcnR1YWwgd2lmaSBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBgdmlydF93aWZpX25ld2xpbmtgIGJ5IGRlZmVycmluZyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIHVudGlsIGFmdGVyIHRoZSBuZXRkZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdXBwZXIgZGV2aWNlIGxpbmsgZXN0YWJsaXNoZWQuIFRoZSB2aXJ0X3dpZmkgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGxpbmsgbWVzc2FnZXMgKFJUTV9ORVdMSU5LKSwgbWFraW5nIHRoaXMgbW9kaWZpZWQgY29kZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRfV0lGSSYjMzQ7LAogICAgJiMzNDtDRkc4MDIxMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRfd2lmaV9uZXdsaW5rJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2aXJ0dWFsIHdpZmkgbmV0d29yayBkZXZpY2UgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gYHZpcnRfd2lmaV9uZXdsaW5rYCBieSBkZWZlcnJpbmcgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCB1bnRpbCBhZnRlciB0aGUgbmV0ZGV2aWNlIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYW5kIHVwcGVyIGRldmljZSBsaW5rIGVzdGFibGlzaGVkLiBUaGUgdmlydF93aWZpIGRyaXZlciBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHJ0bmV0bGluayBuZXRsaW5rIG1lc3NhZ2VzIChSVE1fTkVXTElOSyksIG1ha2luZyB0aGlzIG1vZGlmaWVkIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYwppbmRleCBiNjlhNDY1MGZiYTg1Li40OGFmYzI0MzJmOTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMKQEAgLTU1OCw3ICYjNDM7NTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCX0KIAogCWV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBwcml2LSZndDtsb3dlcmRldik7Ci0JbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi0mZ3Q7bG93ZXJkZXYsIGRldik7CiAKIAlkZXYtJmd0O2llZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LSZndDtpZWVlODAyMTFfcHRyKTsKIApAQCAtNTg0LDYgJiM0Mzs1ODMsOCBAQCBzdGF0aWMgaW50IHZpcnRfd2lmaV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7CiAJfQogCiYjNDM7CW5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtJmd0O2xvd2VyZGV2LCBkZXYpOwomIzQzOwogCWRldi0mZ3Q7cHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjsKIAlwcml2LSZndDtiZWluZ19kZWxldGVkID0gZmFsc2U7CiAJcHJpdi0mZ3Q7aXNfY29ubmVjdGVkID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGB2aXJ0X3dpZmlgIFBhdGNoKioKCk9rYXksIHNvIHdlIGhhdmUgYSBwYXRjaCB0aGF0JiMzOTtzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwYXRjaCBpdHNlbGYuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBteSBmYXZvcml0ZSBkaWZmIHRvb2wgdG8gdmlzdWFsaXplIHRoZSBjaGFuZ2VzLCBoaWdobGlnaHRpbmcgdGhlIGFkZGVkLCByZW1vdmVkLCBhbmQgbW9kaWZpZWQgbGluZXMuIEkgd2lsbCBhbHNvIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjb21taXQgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXRjaC4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIHR3ZWFrZWQgYW5kIHdoeS4gR2l2ZW4gdGhlIGxvY2F0aW9uIG9mIHRoZSBjaGFuZ2UsIEkgd2lsbCBiZSB0aGlua2luZyBhYm91dCB3aGV0aGVyIHRoaXMgYWZmZWN0cyBhbnkgZXhpc3RpbmcgZmVhdHVyZXMgb3IgaWYgdGhpcyBhZGRzIHNvbWV0aGluZyBuZXcuCgpOb3csIGxldCYjMzk7cyB6b29tIGluLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lcyA1NTggdG8gNTk1IHdpdGhpbiB0aGUgYHZpcnRfd2lmaV9uZXdsaW5rYCBmdW5jdGlvbi4gSSYjMzk7bGwgcmVhZCB0aHJvdWdoIHRoYXQgc2VjdGlvbiBjYXJlZnVsbHksIHBheWluZyBhdHRlbnRpb24gdG8gdmFyaWFibGUgZGVjbGFyYXRpb25zLCBjb250cm9sIGZsb3csIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBkcml2ZXIuIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgZXJyb3JzLCB1bnVzdWFsIGJlaGF2aW9yLCBvciBhcmVhcyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBpbXByb3ZlbWVudC4gV2l0aCBgdmlydF93aWZpX25ld2xpbmtgIGJlaW5nIHRoZSBmdW5jdGlvbiwgSSB3aWxsIGJlIHRoaW5raW5nIGlmIHRoaXMgaXMgcmVsYXRlZCB0byBuZXR3b3JrIGxpbmsgc2V0dXAgb3IgdGVhciBkb3duLiBJIHdpbGwgYWxzbyBiZSB0aGlua2luZyBvZiBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIHJhY2UgY29uZGl0aW9ucywgb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBpbiB0aGF0IGZ1bmN0aW9uLiBNeSBiYWNrZ3JvdW5kIGFuZCBleHBlcmllbmNlIHRlbGwgbWUgdG8gYmUgYWxlcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDEzOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTQ1Olx0XHRpZiAoIXByaXYtXHUwMDNlbG93ZXJkZXYpXG4gNTQ2Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDU0NzpcdFx0aWYgKCF0YltJRkxBX01UVV0pXG4gNTQ4Olx0XHRcdGRldi1cdTAwM2VtdHUgPSBwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZW10dTtcbiA1NDk6XHRcdGVsc2UgaWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIHByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlbXR1KVxuIDU1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1NTE6XHRcbiA1NTI6XHRcdGVyciA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKHByaXYtXHUwMDNlbG93ZXJkZXYsIHZpcnRfd2lmaV9yeF9oYW5kbGVyLFxuIDU1MzpcdFx0XHRcdFx0XHQgcHJpdik7XG4gNTU0Olx0XHRpZiAoZXJyKSB7XG4gNTU1Olx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2Vsb3dlcmRldi1cdTAwM2VkZXYsXG4gNTU2Olx0XHRcdFx0XCYjMzQ7Y2FuJiMzOTt0IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyOiAlZFxcblwmIzM0OywgZXJyKTtcbiA1NTc6XHRcdFx0cmV0dXJuIGVycjtcbiA1NTg6XHRcdH1cbiA1NTk6XHRcbiA1NjA6XHRcdGV0aF9od19hZGRyX2luaGVyaXQoZGV2LCBwcml2LVx1MDAzZWxvd2VyZGV2KTtcbiA1NjE6XHRcbiA1NjI6XHRcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiA1NjM6XHRcbiA1NjQ6XHRcdGlmICghZGV2LVx1MDAzZWllZWU4MDIxMV9wdHIpIHtcbiA1NjU6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA1NjY6XHRcdFx0Z290byByZW1vdmVfaGFuZGxlcjtcbiA1Njc6XHRcdH1cbiA1Njg6XHRcbiA1Njk6XHRcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyLVx1MDAzZWlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047XG4gNTcwOlx0XHRkZXYtXHUwMDNlaWVlZTgwMjExX3B0ci1cdTAwM2V3aXBoeSA9IGNvbW1vbl93aXBoeTtcbiA1NzE6XHRcbiA1NzI6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIDU3MzpcdFx0aWYgKGVycikge1xuIDU3NDpcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbG93ZXJkZXYtXHUwMDNlZGV2LCBcJiMzNDtjYW4mIzM5O3QgcmVnaXN0ZXJfbmV0ZGV2aWNlOiAlZFxcblwmIzM0OyxcbiA1NzU6XHRcdFx0XHRlcnIpO1xuIDU3NjpcdFx0XHRnb3RvIGZyZWVfd2lyZWxlc3NfZGV2O1xuIDU3NzpcdFx0fVxuIDU3ODpcdFxuIDU3OTpcdFx0ZXJyID0gbmV0ZGV2X3VwcGVyX2Rldl9saW5rKHByaXYtXHUwMDNlbG93ZXJkZXYsIGRldiwgZXh0YWNrKTtcbiA1ODA6XHRcdGlmIChlcnIpIHtcbiA1ODE6XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZWxvd2VyZGV2LVx1MDAzZWRldiwgXCYjMzQ7Y2FuJiMzOTt0IG5ldGRldl91cHBlcl9kZXZfbGluazogJWRcXG5cJiMzNDssXG4gNTgyOlx0XHRcdFx0ZXJyKTtcbiA1ODM6XHRcdFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcbiA1ODQ6XHRcdH1cbiA1ODU6XHRcbiA1ODY6XHRcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXHUwMDNlbG93ZXJkZXYsIGRldik7XG4gNTg3Olx0XG4gNTg4Olx0XHRkZXYtXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjtcbiA1ODk6XHRcdHByaXYtXHUwMDNlYmVpbmdfZGVsZXRlZCA9IGZhbHNlO1xuIDU5MDpcdFx0cHJpdi1cdTAwM2Vpc19jb25uZWN0ZWQgPSBmYWxzZTtcbiA1OTE6XHRcdHByaXYtXHUwMDNlaXNfdXAgPSBmYWxzZTtcbiA1OTI6XHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlY29ubmVjdCwgdmlydF93aWZpX2Nvbm5lY3RfY29tcGxldGUpO1xuIDU5MzpcdFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcbiA1OTQ6XHRcbiA1OTU6XHRcdHJldHVybiAwO1xuIDU5NjpcdHVucmVnaXN0ZXJfbmV0ZGV2OlxuIDU5NzpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiA1OTg6XHRmcmVlX3dpcmVsZXNzX2RldjpcbiA1OTk6XHRcdGtmcmVlKGRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiA2MDA6XHRcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0gTlVMTDtcbiA2MDE6XHRyZW1vdmVfaGFuZGxlcjpcbiA2MDI6XHRcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIocHJpdi1cdTAwM2Vsb3dlcmRldik7XG4gNjAzOlx0XG4gNjA0Olx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTYxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCBmdW5jdGlvbi4gSSYjMzk7bSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgc3RhY2tlZCBuZXR3b3JrIGludGVyZmFjZSBjb250ZXh0LiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIG9wZXJhdGlvbmFsIHN0YXRlLCBwcm9iYWJseSBoYW5kbGluZyB0cmFuc2l0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gYWNyb3NzIG11bHRpcGxlIGxheWVycy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHdoZXRoZXIgaXQmIzM5O3MgYW4gQVBJIGNhbGwsIGludGVybmFsIGZ1bmN0aW9uIG9yIHN0YXRlIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXQgY29udHJvbHMgdGhlIHdob2xlIHByb2Nlc3MsIG9yIHBhcnRzIG9mIGl0LCBiZWNhdXNlIHRoZSBuYW1lIG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGZvY3VzZWQgb24gdGhlICYjMzk7dHJhbnNmZXImIzM5OyBvZiBvcGVyYXRpb25hbCBzdGF0ZSAtIG1lYW5pbmcgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm9pZCBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTU0OTM9dm9pZCBuZXRkZXZfY29tcHV0ZV9tYXN0ZXJfdXBwZXJfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCB1cGRhdGVfaGVhZGVyKTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTQ5NC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTQ5NTp2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01NDk2LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMTE4ND1FWFBPUlRfU1lNQk9MKG5ldGRldl9jaGFuZ2VfZmVhdHVyZXMpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTExMTk0LSAqL1xubmV0L2NvcmUvZGV2LmM6MTExOTU6dm9pZCBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcbm5ldC9jb3JlL2Rldi5jLTExMTk2LVx0XHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTg4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIGZ1bmN0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBpbiBgbmV0L2NvcmUvZGV2LmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGhlYWQuIEdpdmVuIHRoZSBmdW5jdGlvbiYjMzk7cyBuYW1lLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHJlbGF0ZWQgdG8gb3BlcmF0aW9uYWwgc3RhdGUgdHJhbnNpdGlvbnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc3RhY2tlZCBuZXR3b3JrIGRldmljZXMgb3IgdmlydHVhbCBpbnRlcmZhY2VzLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBjb29yZGluYXRpbmcgb3BlcmF0aW9uYWwgc3RhdGUgY2hhbmdlcyAoZS5nLiwgVVAvRE9XTiwgQUNUSVZFL0lOQUNUSVZFKSBiZXR3ZWVuIGEgcGFyZW50IGFuZCBjaGlsZCBuZXR3b3JrIGludGVyZmFjZSAob3IgYWNyb3NzIHN0YWNrZWQgbGF5ZXJzKS4gSSYjMzk7bGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIGxvY2tpbmcsIHN0YXRlIHVwZGF0ZXMsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyBvcGVyYXRpb25hbCBzdGF0ZSBjaGFuZ2VzLiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgbmV0d29yayBkZXZpY2UgbW9kZWwsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZSByZWdpc3RyYXRpb24gb3IgdW5yZWdpc3RyYXRpb24gb2YgbmV0ZGV2cy4gVWx0aW1hdGVseSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBjZW50cmFsIHRvIGhvdyB0aGUga2VybmVsIHByb3BhZ2F0ZXMgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcyBpbiBhIGxheWVyZWQgbmV0d29ya2luZyBlbnZpcm9ubWVudCwgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgaW5jb25zaXN0ZW50IHN0YXRlcyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMzo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTExOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTExOTU6XHR2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxuMTExOTY6XHRcdFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcbjExMTk3Olx0e1xuMTExOTg6XHRcdGlmIChyb290ZGV2LVx1MDAzZW9wZXJzdGF0ZSA9PSBJRl9PUEVSX0RPUk1BTlQpXG4xMTE5OTpcdFx0XHRuZXRpZl9kb3JtYW50X29uKGRldik7XG4xMTIwMDpcdFx0ZWxzZVxuMTEyMDE6XHRcdFx0bmV0aWZfZG9ybWFudF9vZmYoZGV2KTtcbjExMjAyOlx0XG4xMTIwMzpcdFx0aWYgKHJvb3RkZXYtXHUwMDNlb3BlcnN0YXRlID09IElGX09QRVJfVEVTVElORylcbjExMjA0Olx0XHRcdG5ldGlmX3Rlc3Rpbmdfb24oZGV2KTtcbjExMjA1Olx0XHRlbHNlXG4xMTIwNjpcdFx0XHRuZXRpZl90ZXN0aW5nX29mZihkZXYpO1xuMTEyMDc6XHRcbjExMjA4Olx0XHRpZiAobmV0aWZfY2Fycmllcl9vayhyb290ZGV2KSlcbjExMjA5Olx0XHRcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcbjExMjEwOlx0XHRlbHNlXG4xMTIxMTpcdFx0XHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xuMTEyMTI6XHR9XG4xMTIxMzpcdEVYUE9SVF9TWU1CT0wobmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUpO1xuMTEyMTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYxNAoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAzNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgTW92ZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIG1vdmluZyBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSo/IEkga25vdyB0aGF0IGJlZm9yZSBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIG9yIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmtgLCBjYWxsaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZXRpZl9jYXJyaWVyX29uL29mZmAgb3IgYG5ldGlmX2Rvcm1hbnRfb24vb2ZmYCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIGRldmljZSBpc24mIzM5O3QgZnVsbHkgc2V0IHVwIHlldC4gYG5ldGlmX2NhcnJpZXJfb25gLCBmb3IgaW5zdGFuY2UsIG1pZ2h0IHRyaWdnZXIgYSBsaW5rd2F0Y2ggZXZlbnQgdGhhdCBleHBlY3RzIGEgcmVnaXN0ZXJlZCBuZXRkZXZpY2UuIFNvLCB0aGUgdGhpbmtpbmcgaGVyZSBpcyB0aGF0IG1vdmluZyB0aGlzIGNhbGwgKmFmdGVyKiByZWdpc3RyYXRpb24gYW5kIGxpbmtpbmcgc2hvdWxkIHJlc29sdmUgc29tZSBvcmRlcmluZyBpc3N1ZXMsIHJpZ2h0PyBJdCYjMzk7cyBhIGZhaXJseSBzdGFuZGFyZCBwYXR0ZXJuIGZvciBmaXhpbmcgdGhlc2Uga2luZHMgb2YgbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbi9zdGF0ZSB0cmFuc2ZlciBpc3N1ZXMuCgpOb3csIGEgdmVyeSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucz8gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgZGVhbGxvY2F0aW9ucy4gVGhlcmUgYXJlIG5vIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBDcnVjaWFsbHksIG5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSB0aGF0IGNvdWxkIGJlIHVuaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZW4mIzM5O3QgYW55IGNoYW5nZXMgdG8gcGFkZGluZywgc3RydWN0IGRlZmluaXRpb25zLCBidWZmZXIgYm91bmRzLCBvciBpbmZvIGxlYWtzLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbG9jYXRpbmcgdGhhdCBvbmUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbC4KCkJhc2VkIG9uIHRoYXQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lY2Vzc2FyeSBoZXJlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGlmIHRoZXJlICp3ZXJlKiBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBidWdzLCBidXQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MuIFRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIGxldCYjMzk7cyB2ZXJpZnk6CgpgTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZToKCiogICBUaGUgcGF0Y2ggKm9ubHkqIG1vdmVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZSgpYC4KKiAgIFRoZXJlJiMzOTtzIG5vIGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1ZmZlciBoYW5kbGluZywgb3IgdXNlciBjb3BpZXMuCgpBbHJpZ2h0LCB0aGF0JiMzOTtzIHNvbGlkLiBUaW1lIHRvIGdvIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTM6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVsb2NhdGVzIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgc2VxdWVuY2luZyBvZiBkZXZpY2UgcmVnaXN0cmF0aW9uIGFuZCBvcGVyYXRpb25hbCBzdGF0ZSB1cGRhdGVzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgZmllbGRzLCBsZW5ndGgvYm91bmRzIHJlY2FsY3VsYXRpb25zLCBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHJlcXVpcmUgS01TQU4uIFN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgYnVpbGRzIGFyZSBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoxMy4wMTUyNzE3NzhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzQ0MzI3ODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUX1dJRklcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydF93aWZpX25ld2xpbmtcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbG9jYXRlcyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldilgIGluIGB2aXJ0X3dpZmlfbmV3bGluaygpYCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGFmdGVyIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB2aWEgYHJlZ2lzdGVyX25ldGRldmljZSgpYCBhbmQgbGlua2VkIHdpdGggYG5ldGRldl91cHBlcl9kZXZfbGluaygpYC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIHNlcXVlbmNpbmcgb2YgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbGVuZ3RoL2JvdW5kcyByZWNhbGN1bGF0aW9ucywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MTMuMDE1Mjc2NDg3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU5OTUzNDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIFNlcCA5IDEzOjU2OjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXFxuaW5kZXggYjY5YTQ2NTBmYmE4NS4uNDhhZmMyNDMyZjkzYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xcbkBAIC01NTgsNyArNTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHR9XFxuIFxcbiBcXHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbi1cXHRuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2KTtcXG4gXFxuIFxcdGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciA9IGt6YWxsb2Nfb2JqKCpkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpO1xcbiBcXG5AQCAtNTg0LDYgKzU4Myw4IEBAIHN0YXRpYyBpbnQgdmlydF93aWZpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcXG4gXFx0fVxcbiBcXG4rXFx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldik7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHZpcnRfd2lmaV9uZXRfZGV2aWNlX2Rlc3RydWN0b3I7XFxuIFxcdHByaXYtXFx1MDAzZWJlaW5nX2RlbGV0ZWQgPSBmYWxzZTtcXG4gXFx0cHJpdi1cXHUwMDNlaXNfY29ubmVjdGVkID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjE0LjM3NTkyNDYxOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjU5MTc3MDc1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVF9XSUZJXCIsXG4gICAgXCJDRkc4MDIxMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRfd2lmaV9uZXdsaW5rXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZpcnR1YWwgd2lmaSBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBgdmlydF93aWZpX25ld2xpbmtgIGJ5IGRlZmVycmluZyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIHVudGlsIGFmdGVyIHRoZSBuZXRkZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdXBwZXIgZGV2aWNlIGxpbmsgZXN0YWJsaXNoZWQuIFRoZSB2aXJ0X3dpZmkgZHJpdmVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgcnRuZXRsaW5rIG5ldGxpbmsgbWVzc2FnZXMgKFJUTV9ORVdMSU5LKSwgbWFraW5nIHRoaXMgbW9kaWZpZWQgY29kZSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuaW5kZXggYjY5YTQ2NTBmYmE4NS4uNDhhZmMyNDMyZjkzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbkBAIC01NTgsNyArNTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuLVx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbiBcbiBcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcbkBAIC01ODQsNiArNTgzLDggQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRnb3RvIHVucmVnaXN0ZXJfbmV0ZGV2O1xuIFx0fVxuIFxuK1x0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbitcbiBcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSB2aXJ0X3dpZmlfbmV0X2RldmljZV9kZXN0cnVjdG9yO1xuIFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XG4gXHRwcml2LVx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MTQuMzc1OTI1Nzc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjAyMzc1Mjc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZpcnRfV2lmaSBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgc28gSSdsbCBzdGFydCBieSBleGFtaW5pbmcgdGhlIGRpZmYgYW5kIHBpbnBvaW50aW5nIHRoZSBtb2RpZmllZCBmaWxlcy4gQWhhLCBpdCdzIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jYC4gVGhhdCdzIHdoZXJlIHdlIG5lZWQgdG8gZm9jdXMuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSBrbm93IHRoYXQgZnVuY3Rpb247IGl0J3MgY2VudHJhbCB0byBob3cgdGhpcyB2aXJ0dWFsIFdpRmkgaW50ZXJmYWNlIGdldHMgaW5zdGFudGlhdGVkLlxuXG5Ob3csIEknbGwgcHVsbCB1cCBgdmlydF93aWZpLmNgIGFuZCB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlIGFyb3VuZCBsaW5lIDU1OC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHZpcnRfd2lmaWAgKmlzKiwgYW5kIGhvdyBpdOKAmXMgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYHZpcnRfd2lmaV9uZXdsaW5rYC4gSSdsbCBjcm9zcy1yZWZlcmVuY2UgdGhpcyBhZ2FpbnN0IHRoZSBLY29uZmlnIHRvIHVuZGVyc3RhbmQgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzIHNvIEkgaGF2ZSB0aGUgZnVsbCBwaWN0dXJlLlxuXG5J4oCZbSBnb2luZyB0byB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIGFuZCB0aGVuIGBncmVwcGVyYCB0byBmaW5kIHNwZWNpZmljIHRoaW5ncy4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBnYXRoZXIgYWxsIHRoZSByZWxldmFudCBpbmZvcm1hdGlvbiBhbmQgZ2V0IHRvIHRoZSByb290IG9mIHRoZSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MjAuMzk5NjgwNjk0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vsb3dlcmRldilcXG4gNTQ2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA1NDc6XFx0XFx0aWYgKCF0YltJRkxBX01UVV0pXFxuIDU0ODpcXHRcXHRcXHRkZXYtXFx1MDAzZW10dSA9IHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHU7XFxuIDU0OTpcXHRcXHRlbHNlIGlmIChkZXYtXFx1MDAzZW10dSBcXHUwMDNlIHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHUpXFxuIDU1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0ZXJyID0gbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbG93ZXJkZXYsIHZpcnRfd2lmaV9yeF9oYW5kbGVyLFxcbiA1NTM6XFx0XFx0XFx0XFx0XFx0XFx0IHByaXYpO1xcbiA1NTQ6XFx0XFx0aWYgKGVycikge1xcbiA1NTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbG93ZXJkZXYtXFx1MDAzZWRldixcXG4gNTU2OlxcdFxcdFxcdFxcdFxcXCJjYW4ndCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXFxcblxcXCIsIGVycik7XFxuIDU1NzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTg6XFx0XFx0fVxcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpIHtcXG4gNTY1OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDU2NjpcXHRcXHRcXHRnb3RvIHJlbW92ZV9oYW5kbGVyO1xcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047XFxuIDU3MDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5ID0gY29tbW9uX3dpcGh5O1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gNTczOlxcdFxcdGlmIChlcnIpIHtcXG4gNTc0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsIFxcXCJjYW4ndCByZWdpc3Rlcl9uZXRkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiA1NzU6XFx0XFx0XFx0XFx0ZXJyKTtcXG4gNTc2OlxcdFxcdFxcdGdvdG8gZnJlZV93aXJlbGVzc19kZXY7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2LCBleHRhY2spO1xcbiA1ODA6XFx0XFx0aWYgKGVycikge1xcbiA1ODE6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbG93ZXJkZXYtXFx1MDAzZWRldiwgXFxcImNhbid0IG5ldGRldl91cHBlcl9kZXZfbGluazogJWRcXFxcblxcXCIsXFxuIDU4MjpcXHRcXHRcXHRcXHRlcnIpO1xcbiA1ODM6XFx0XFx0XFx0Z290byB1bnJlZ2lzdGVyX25ldGRldjtcXG4gNTg0OlxcdFxcdH1cXG4gNTg1OlxcdFxcbiA1ODY6XFx0XFx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldik7XFxuIDU4NzpcXHRcXG4gNTg4OlxcdFxcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gdmlydF93aWZpX25ldF9kZXZpY2VfZGVzdHJ1Y3RvcjtcXG4gNTg5OlxcdFxcdHByaXYtXFx1MDAzZWJlaW5nX2RlbGV0ZWQgPSBmYWxzZTtcXG4gNTkwOlxcdFxcdHByaXYtXFx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xcbiA1OTE6XFx0XFx0cHJpdi1cXHUwMDNlaXNfdXAgPSBmYWxzZTtcXG4gNTkyOlxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2Vjb25uZWN0LCB2aXJ0X3dpZmlfY29ubmVjdF9jb21wbGV0ZSk7XFxuIDU5MzpcXHRcXHRfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpO1xcbiA1OTQ6XFx0XFxuIDU5NTpcXHRcXHRyZXR1cm4gMDtcXG4gNTk2OlxcdHVucmVnaXN0ZXJfbmV0ZGV2OlxcbiA1OTc6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gNTk4OlxcdGZyZWVfd2lyZWxlc3NfZGV2OlxcbiA1OTk6XFx0XFx0a2ZyZWUoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKTtcXG4gNjAwOlxcdFxcdGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ciA9IE5VTEw7XFxuIDYwMTpcXHRyZW1vdmVfaGFuZGxlcjpcXG4gNjAyOlxcdFxcdG5ldGRldl9yeF9oYW5kbGVyX3VucmVnaXN0ZXIocHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbiA2MDM6XFx0XFxuIDYwNDpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyMC4zOTk3Nzc5NDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0Mjg5MDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlZJUlRfV0lGSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc9MT1jb25maWcgTUFDODAyMTFfSFdTSU1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL0tjb25maWc6MTQ6Y29uZmlnIFZJUlRfV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZy0xNS1cXHR0cmlzdGF0ZSBcXFwiV2lmaSB3cmFwcGVyIGZvciBldGhlcm5ldCBkcml2ZXJzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9NYWtlZmlsZT0zPW1hYzgwMjExX2h3c2ltLW9ianNcXHRcXHQrPSBtYWM4MDIxMV9od3NpbV9uYW4ub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX1ZJUlRfV0lGSSlcXHQrPSB2aXJ0X3dpZmkub1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0xMzc9c3RhdGljIHU4IGZha2Vfcm91dGVyX2Jzc2lkW0VUSF9BTEVOXSBfX3JvX2FmdGVyX2luaXQgPSB7fTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTEzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jOjEzOTojZGVmaW5lIFZJUlRfV0lGSV9TU0lEIFxcXCJWaXJ0V2lmaVxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jOjE0MDojZGVmaW5lIFZJUlRfV0lGSV9TU0lEX0xFTiA4XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0xNDEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0xNDI9c3RhdGljIHZvaWQgdmlydF93aWZpX2luZm9ybV9ic3Moc3RydWN0IHdpcGh5ICp3aXBoeSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMtMTUxLVxcdFxcdC50YWcgPSBXTEFOX0VJRF9TU0lELFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmM6MTUyOlxcdFxcdC5sZW4gPSBWSVJUX1dJRklfU1NJRF9MRU4sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoxNTM6XFx0XFx0LnNzaWQgPSBWSVJUX1dJRklfU1NJRCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jLTE1NC1cXHR9O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYz0yNjA9c3RhdGljIHZvaWQgdmlydF93aWZpX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYy0yNjUtXFx0Ym9vbCByaWdodF9hZGRyID0gZXRoZXJfYWRkcl9lcXVhbChyZXF1ZXN0ZWRfYnNzLCBmYWtlX3JvdXRlcl9ic3NpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoyNjY6XFx0Ym9vbCByaWdodF9zc2lkID0gcHJpdi1cXHUwMDNlY29ubmVjdF9yZXF1ZXN0ZWRfc3NpZF9sZW4gPT0gVklSVF9XSUZJX1NTSURfTEVOIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuYzoyNjc6XFx0XFx0XFx0ICAhbWVtY21wKHByaXYtXFx1MDAzZWNvbm5lY3RfcmVxdWVzdGVkX3NzaWQsIFZJUlRfV0lGSV9TU0lELFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmMtMjY4LVxcdFxcdFxcdFxcdCAgcHJpdi1cXHUwMDNlY29ubmVjdF9yZXF1ZXN0ZWRfc3NpZF9sZW4pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyMC41MTQwNzI5MzZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDg2NzQ4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipFeGFtaW5pbmcgdGhlIFdpcmVsZXNzIFZpcnR1YWwgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGNvbXByZWhlbnNpdmUgdmlldyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBhbnkgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIHdpcmVsZXNzIHZpcnR1YWwgZHJpdmVyLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgSSByZWNhbGwsIGlzIHByb2JhYmx5IHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgZHJpdmVyLiBMZXQncyBkaXZlIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbXBsZXRlIHBpY3R1cmUsIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc2ltcGxlIGJvb2xlYW4gb3B0aW9ucyB0byBhbnkgY29tcGxleCByZWxhdGlvbnNoaXBzIHdpdGggb3RoZXIgZmVhdHVyZXMgb3IgaGFyZHdhcmUuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiBob3cgdGhlc2UgdmlydHVhbCBkcml2ZXJzIGFyZSBkZXNpZ25lZCBhbmQgY29uZmlndXJlZC4gVGhpcyBzaG91bGQgbGF5IHRoZSBncm91bmR3b3JrIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIGl0cyBpbm5lciB3b3JraW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1OCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjIzLjAwMDgyMzI0NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBNQUM4MDIxMV9IV1NJTVxcbiAgIDI6XFx0XFx0dHJpc3RhdGUgXFxcIlNpbXVsYXRlZCByYWRpbyB0ZXN0aW5nIHRvb2wgZm9yIG1hYzgwMjExXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbiAgIDQ6XFx0XFx0aGVscFxcbiAgIDU6XFx0XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0XFxuICAgNjpcXHRcXHQgIElFRUUgODAyLjExIG5ldHdvcmtpbmcgc3RhY2sgKG1hYzgwMjExKSBmdW5jdGlvbmFsaXR5LiBUaGlzIGlzIG5vdFxcbiAgIDc6XFx0XFx0ICBuZWVkZWQgZm9yIG5vcm1hbCB3aXJlbGVzcyBMQU4gdXNhZ2UgYW5kIGlzIG9ubHkgZm9yIHRlc3RpbmcuIFNlZVxcbiAgIDg6XFx0XFx0ICBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbWFjODAyMTFfaHdzaW0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93XFxuICAgOTpcXHRcXHQgIHRvIHVzZSB0aGlzIHRvb2wuXFxuICAxMDpcXHRcXG4gIDExOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICAxMjpcXHRcXHQgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBWSVJUX1dJRklcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJXaWZpIHdyYXBwZXIgZm9yIGV0aGVybmV0IGRyaXZlcnNcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIENGRzgwMjExXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgZXRoZXJuZXQgY29ubmVjdGlvbnMgdG8gYXBwZWFyIGFzIGlmIHRoZXlcXG4gIDE5OlxcdFxcdCAgYXJlIHdpZmkgY29ubmVjdGlvbnMgdGhyb3VnaCBhIHNwZWNpYWwgcnRuZXRsaW5rIGRldmljZS5cXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyMy4wMDA4ODE2OTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDY0ODczOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBQYXRjaCBpbiB0aGUgVmlydHVhbCBXaUZpIERyaXZlcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgdGhlIGBWSVJUX1dJRklgIGRyaXZlciwgd2hpY2ggZnJvbSB0aGUgY29udGV4dCBpcyBhIHZpcnR1YWwgV2lGaSBkcml2ZXIgaW1wbGVtZW50ZWQgdXNpbmcgcnRuZXRsaW5rJ3MgYHJ0bmxfbGlua19vcHNgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMsIFwiSG93IGlzIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnZva2VkP1wiIEkgc2VlIHRoYXQgYHZpcnRfd2lmaV9uZXdsaW5rYCBpcyB0aGUgY3JpdGljYWwgcGllY2UsIHNwZWNpZmljYWxseSB0aGUgYG5ld2xpbmtgIGNhbGxiYWNrIHdpdGhpbiBgcnRubF9saW5rX29wc2AgZm9yIHRoZSBgdmlydF93aWZpYCBkZXZpY2UgdHlwZS4gVGhlIHByb2Nlc3Mgc3RhcnRzIGluIHVzZXJzcGFjZSwgd2hpY2ggY3JlYXRlcyBhIGB2aXJ0X3dpZmlgIGRldmljZSB1c2luZyBydG5ldGxpbmsgYnkgc2VuZGluZyBhbiBgUlRNX05FV0xJTktgIG1lc3NhZ2Ugd2l0aCB0aGUga2luZCBzZXQgdG8gXCJ2aXJ0X3dpZmkuXCIgVGhpcyBpcyBhIHB1cmVseSBzb2Z0d2FyZS1iYXNlZCBkZXZpY2UsIHBlcmZlY3QgZm9yIHRlc3RpbmcgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciB3aXRoIHN5emthbGxlciwgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBwaHlzaWNhbCBoYXJkd2FyZS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSBzcGVjaWZpYyBwYXRjaCBJJ20gZXhhbWluaW5nLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVvcmRlcmluZyBvZiBjYWxscyB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gUHJldmlvdXNseSwgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXHUwMDNlbG93ZXJkZXYsIGRldik7YCB3YXMgY2FsbGVkICpiZWZvcmUqIGByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KWAgYW5kIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2LCBleHRhY2spYC4gVGhlIHBhdGNoIG1vdmVzIHRoaXMgY2FsbCB0byAqYWZ0ZXIqIHRoZSBgbmV0ZGV2X3VwcGVyX2Rldl9saW5rYCBjYWxsLiBUaGlzIHN1YnRsZSBzaGlmdCBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB2aXJ0dWFsIG5ldHdvcmsgaW50ZXJmYWNlIHZpYSB0aGUgcnRuZXRsaW5rIG5ldGxpbmsgaW50ZXJmYWNlIGlzIHBvdGVudGlhbGx5IHNpZ25pZmljYW50LiBUaGUgY29yZSBpZGVhIGlzIHRoYXQgY2FsbGluZyBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIG9uIGFuIHVucmVnaXN0ZXJlZCBuZXRkZXZpY2UgdnMuIG9uZSB0aGF0IGlzIHJlZ2lzdGVyZWQgYW5kIGxpbmtlZCB0byB1cHBlci9sb3dlciBkZXZpY2VzIG1pZ2h0IHVuY292ZXIgYSBidWcgb3IgY2hhbmdlIGhvdyB0aGUgb3BlcmF0aW9uYWwgc3RhdGUgaXMgaGFuZGxlZCBkdXJpbmcgbGluayBjcmVhdGlvbi4gVGhhdCdzIGEgY2xhc3NpYyByYWNlIGNvbmRpdGlvbiBhbmQgY291bGQgbGVhZCB0byBpbnRlcmVzdGluZyBiZWhhdmlvdXIuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb246IGlzIHRoaXMgY2hhbmdlIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBkcml2ZXIgbG9naWMgZm9yIHZpcnR1YWwgbmV0d29yayBpbnRlcmZhY2VzLCBzcGVjaWZpY2FsbHkgdGhlIHJ0bmV0bGluayB2aXJ0dWFsIGRldmljZSBcInZpcnRfd2lmaVwiLiBJdCdzIHJlYWNoYWJsZSBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaydzIGBSVE1fTkVXTElOS2AgbWVzc2FnZS4gVGhpcyBjb2RlIGlzIGV4ZWN1dGFibGUga2VybmVsIGNvZGUgd2l0aGluIGEgcmVhY2hhYmxlIGRyaXZlciBhbmQgbmV0d29ya2luZyBwYXRoLiBJIHNlZSB0aGF0IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBWSVJUX1dJRklgIGFuZCBgQ0ZHODAyMTFgLCB3aGljaCBvYnZpb3VzbHkgZGVwZW5kcyBvbiBgTkVUYC4gVGhlIHNwZWNpZmljIGZ1bmN0aW9uIEkgbmVlZCB0byBmb2N1cyBvbiBpcyBgdmlydF93aWZpX25ld2xpbmtgLlxuXG5UbyBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgaW5zcGVjdCB0aGUgcmVzdCBvZiBgdmlydF93aWZpLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGludGVyZXN0aW5nIGZ1bmN0aW9ucyB0byBjb25zaWRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU4NiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjI4LjA2NTc1NzU5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUyMDpcXHRcXHQqcHNrYiA9IHNrYjtcXG4gNTIxOlxcdFxcdHNrYi1cXHUwMDNlZGV2ID0gcHJpdi1cXHUwMDNldXBwZXJkZXY7XFxuIDUyMjpcXHRcXHRza2ItXFx1MDAzZXBrdF90eXBlID0gUEFDS0VUX0hPU1Q7XFxuIDUyMzpcXHRcXHRyZXR1cm4gUlhfSEFORExFUl9BTk9USEVSO1xcbiA1MjQ6XFx0fVxcbiA1MjU6XFx0XFxuIDUyNjpcXHQvKiBDYWxsZWQgd2l0aCBydG5sIGxvY2sgaGVsZC4gKi9cXG4gNTI3OlxcdHN0YXRpYyBpbnQgdmlydF93aWZpX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gNTI4OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHJ0bmxfbmV3bGlua19wYXJhbXMgKnBhcmFtcyxcXG4gNTI5OlxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA1MzA6XFx0e1xcbiA1MzE6XFx0XFx0c3RydWN0IHZpcnRfd2lmaV9uZXRkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7XFxuIDUzMjpcXHRcXHRzdHJ1Y3QgbmV0ICpsaW5rX25ldCA9IHJ0bmxfbmV3bGlua19saW5rX25ldChwYXJhbXMpO1xcbiA1MzM6XFx0XFx0c3RydWN0IG5sYXR0ciAqKnRiID0gcGFyYW1zLVxcdTAwM2V0YjtcXG4gNTM0OlxcdFxcdGludCBlcnI7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdGlmICghdGJbSUZMQV9MSU5LXSlcXG4gNTM3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1Mzg6XFx0XFxuIDUzOTpcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihkZXYpO1xcbiA1NDA6XFx0XFxuIDU0MTpcXHRcXHRwcml2LVxcdTAwM2V1cHBlcmRldiA9IGRldjtcXG4gNTQyOlxcdFxcdHByaXYtXFx1MDAzZWxvd2VyZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KGxpbmtfbmV0LFxcbiA1NDM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG5sYV9nZXRfdTMyKHRiW0lGTEFfTElOS10pKTtcXG4gNTQ0OlxcdFxcbiA1NDU6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vsb3dlcmRldilcXG4gNTQ2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA1NDc6XFx0XFx0aWYgKCF0YltJRkxBX01UVV0pXFxuIDU0ODpcXHRcXHRcXHRkZXYtXFx1MDAzZW10dSA9IHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHU7XFxuIDU0OTpcXHRcXHRlbHNlIGlmIChkZXYtXFx1MDAzZW10dSBcXHUwMDNlIHByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VtdHUpXFxuIDU1MDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTUxOlxcdFxcbiA1NTI6XFx0XFx0ZXJyID0gbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbG93ZXJkZXYsIHZpcnRfd2lmaV9yeF9oYW5kbGVyLFxcbiA1NTM6XFx0XFx0XFx0XFx0XFx0XFx0IHByaXYpO1xcbiA1NTQ6XFx0XFx0aWYgKGVycikge1xcbiA1NTU6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbG93ZXJkZXYtXFx1MDAzZWRldixcXG4gNTU2OlxcdFxcdFxcdFxcdFxcXCJjYW4ndCBuZXRkZXZfcnhfaGFuZGxlcl9yZWdpc3RlcjogJWRcXFxcblxcXCIsIGVycik7XFxuIDU1NzpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1NTg6XFx0XFx0fVxcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHRldGhfaHdfYWRkcl9pbmhlcml0KGRldiwgcHJpdi1cXHUwMDNlbG93ZXJkZXYpO1xcbiA1NjE6XFx0XFxuIDU2MjpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBremFsbG9jX29iaigqZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKTtcXG4gNTYzOlxcdFxcbiA1NjQ6XFx0XFx0aWYgKCFkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIpIHtcXG4gNTY1OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDU2NjpcXHRcXHRcXHRnb3RvIHJlbW92ZV9oYW5kbGVyO1xcbiA1Njc6XFx0XFx0fVxcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZWlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047XFxuIDU3MDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHItXFx1MDAzZXdpcGh5ID0gY29tbW9uX3dpcGh5O1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gNTczOlxcdFxcdGlmIChlcnIpIHtcXG4gNTc0OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsIFxcXCJjYW4ndCByZWdpc3Rlcl9uZXRkZXZpY2U6ICVkXFxcXG5cXFwiLFxcbiA1NzU6XFx0XFx0XFx0XFx0ZXJyKTtcXG4gNTc2OlxcdFxcdFxcdGdvdG8gZnJlZV93aXJlbGVzc19kZXY7XFxuIDU3NzpcXHRcXHR9XFxuIDU3ODpcXHRcXG4gNTc5OlxcdFxcdGVyciA9IG5ldGRldl91cHBlcl9kZXZfbGluayhwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2LCBleHRhY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjoyOC4wNjU5MzM4MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5MTkzNzAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZpcnR1YWwgV2lGaSBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHZpcnR1YWwgV2lGaSBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIG5ldHdvcmsgc3RhY2ssIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGxpbmsgb3BlcmF0aW9ucy4gTXkgZ3V0IHRlbGxzIG1lIHRoYXQgYHJ0bmxfbGlua19vcHNgIHdpbGwgYmUgYSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMuIEl0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciBhIHZpcnR1YWwgaW50ZXJmYWNlIHRvIGRlZmluZSBpdHMgYmVoYXZpb3Igd2hlbiBpdCBjb21lcyB0byB0aGluZ3MgbGlrZSBicmluZ2luZyB0aGUgaW50ZXJmYWNlIHVwL2Rvd24sIHNldHRpbmcgaXRzIGF0dHJpYnV0ZXMsIGV0Yy4gU28sIGxldCdzIGhlYWQgc3RyYWlnaHQgdG8gYHZpcnRfd2lmaS5jYCBhbmQgemVybyBpbiBvbiB0aGF0IHNlY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHJ0bmxfbGlua19vcHNgIChvciBhdCBsZWFzdCwgaXRzIGRlY2xhcmF0aW9uIGFuZCB1c2FnZSkgdGhlcmUsIHNvIEkgY2FuIHNlZSBob3cgdGhlIGludGVyZmFjZSBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbCBhbmQgd2hhdCBjYWxsYmFja3MgaXQgcHJvdmlkZXMuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGRvd24gdGhlIGNhbGxzIGFuZCBnYWluIGEgYmV0dGVyIGdyYXNwIG9uIGhvdyB0aGUgdmlydHVhbCBkZXZpY2Ugb3BlcmF0ZXMgYXQgYSBsb3cgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjMwLjQ1Nzg3NDIwOFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwMDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBOVUxMO1xcbiA2MDE6XFx0cmVtb3ZlX2hhbmRsZXI6XFxuIDYwMjpcXHRcXHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXFx1MDAzZWxvd2VyZGV2KTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0cmV0dXJuIGVycjtcXG4gNjA1OlxcdH1cXG4gNjA2OlxcdFxcbiA2MDc6XFx0LyogQ2FsbGVkIHdpdGggcnRubCBsb2NrIGhlbGQuICovXFxuIDYwODpcXHRzdGF0aWMgdm9pZCB2aXJ0X3dpZmlfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiA2MDk6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcXG4gNjEwOlxcdHtcXG4gNjExOlxcdFxcdHN0cnVjdCB2aXJ0X3dpZmlfbmV0ZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiA2MTI6XFx0XFxuIDYxMzpcXHRcXHRpZiAoZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKVxcbiA2MTQ6XFx0XFx0XFx0dmlydF93aWZpX2NhbmNlbF9zY2FuKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0ci1cXHUwMDNld2lwaHkpO1xcbiA2MTU6XFx0XFxuIDYxNjpcXHRcXHRwcml2LVxcdTAwM2ViZWluZ19kZWxldGVkID0gdHJ1ZTtcXG4gNjE3OlxcdFxcdHZpcnRfd2lmaV9jYW5jZWxfY29ubmVjdChkZXYpO1xcbiA2MTg6XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcXG4gNjE5OlxcdFxcbiA2MjA6XFx0XFx0bmV0ZGV2X3J4X2hhbmRsZXJfdW5yZWdpc3Rlcihwcml2LVxcdTAwM2Vsb3dlcmRldik7XFxuIDYyMTpcXHRcXHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhwcml2LVxcdTAwM2Vsb3dlcmRldiwgZGV2KTtcXG4gNjIyOlxcdFxcbiA2MjM6XFx0XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2VfcXVldWUoZGV2LCBoZWFkKTtcXG4gNjI0OlxcdFxcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xcbiA2MjU6XFx0XFxuIDYyNjpcXHRcXHQvKiBEZWxldGluZyB0aGUgd2lwaHkgaXMgaGFuZGxlZCBpbiB0aGUgbW9kdWxlIGRlc3RydWN0b3IuICovXFxuIDYyNzpcXHR9XFxuIDYyODpcXHRcXG4gNjI5OlxcdHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB2aXJ0X3dpZmlfbGlua19vcHMgPSB7XFxuIDYzMDpcXHRcXHQua2luZFxcdFxcdD0gXFxcInZpcnRfd2lmaVxcXCIsXFxuIDYzMTpcXHRcXHQuc2V0dXBcXHRcXHQ9IHZpcnRfd2lmaV9zZXR1cCxcXG4gNjMyOlxcdFxcdC5uZXdsaW5rXFx0PSB2aXJ0X3dpZmlfbmV3bGluayxcXG4gNjMzOlxcdFxcdC5kZWxsaW5rXFx0PSB2aXJ0X3dpZmlfZGVsbGluayxcXG4gNjM0OlxcdFxcdC5wcml2X3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgdmlydF93aWZpX25ldGRldl9wcml2KSxcXG4gNjM1OlxcdH07XFxuIDYzNjpcXHRcXG4gNjM3OlxcdHN0YXRpYyBib29sIG5ldGlmX2lzX3ZpcnRfd2lmaV9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNjM4OlxcdHtcXG4gNjM5OlxcdFxcdHJldHVybiByY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VyeF9oYW5kbGVyKSA9PSB2aXJ0X3dpZmlfcnhfaGFuZGxlcjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6MzAuNDU3OTUzMTk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNjYwOTA4MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgQ0ZHODAyMTFgIERlcGVuZGVuY3kgVHJlZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgbmV0L3dpcmVsZXNzL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIG1ldGljdWxvdXNseSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYENGRzgwMjExYC4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgcG90ZW50aWFsIGNvbXBsZXhpdGllcyBoZXJlLCBnaXZlbiB0aGUgZXZvbHV0aW9uIG9mIHRoZSB3aXJlbGVzcyBzdGFjay4gSSdtIHRoaW5raW5nIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyoqOiBJdOKAmXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbmZpZ3VyYXRpb25zIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbmNsdXNpb24gb2YgYENGRzgwMjExYC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgc3BlY2lmaWMgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgZHJpdmVycywgb3IgZ2VuZXJhbCB3aXJlbGVzcyBmZWF0dXJlIHRvZ2dsZXM/XG4qICAgKipNb2R1bGUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzKio6IEknbSBhbHNvIGludGVyZXN0ZWQgaW4gaG93IHZhcmlvdXMgd2lyZWxlc3MgbW9kdWxlcyAoZS5nLiwgc3BlY2lmaWMgcmFkaW8gZmlybXdhcmUgc3VwcG9ydCkgcmVseSBvbiB0aGlzIGZvdW5kYXRpb25hbCBsYXllci4gQSBjbGVhciBwaWN0dXJlIG9mIHRoZSBkZXBlbmRlbmN5IGdyYXBoIGlzIGVzc2VudGlhbC5cbiogICAqKkJ1aWxkLXRpbWUgaW1wbGljYXRpb25zKio6IEknbGwgYWxzbyBiZSBtaW5kZnVsIG9mIGhvdyB0aGVzZSBkZXBlbmRlbmNpZXMgYWZmZWN0IHRoZSBvdmVyYWxsIGtlcm5lbCBidWlsZCBwcm9jZXNzLCBmcm9tIGNvbXBpbGF0aW9uIHRpbWUgdG8gaW1hZ2Ugc2l6ZS5cbiogICAqKlBvdGVudGlhbCBjb25mbGljdHMqKjogSSB3YW50IHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIGJldHdlZW4gYENGRzgwMjExYCBhbmQgb3RoZXIgd2lyZWxlc3Mgc3Vic3lzdGVtcyAoZS5nLiwgZGVwcmVjYXRlZCBvciBsZWdhY3kgd2lyZWxlc3Mgc3RhY2tzKS5cbiogICAqKkRvY3VtZW50YXRpb24gYW5kIGNvbW1lbnRhcnkqKjogSSBrbm93IGhvdyBoZWxwZnVsIGNvbW1lbnRzIGNhbiBiZSwgYW5kIGhvdyB3ZWxsLW1haW50YWluZWQgS2NvbmZpZyBmaWxlcyBjYW4gbWFrZSB0aGUgZGlmZmVyZW5jZSFcblxuVGhpcyBkZWVwIGRpdmUgaXMganVzdCBhbm90aGVyIGRheSBhdCB0aGUgb2ZmaWNlIHRvIGVuc3VyZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIGNvcmUgY29tcG9uZW50IGlzIHVzZWQsIGFuZCB0byBmb3Jlc2VlIGFueSBmdXR1cmUgaW50ZWdyYXRpb24gY2hhbGxlbmdlcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBhbnkgYXNzdW1wdGlvbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjMzLjgyNDA0NjQ3NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxOTI5MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDRkc4MDIxMVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvd2lyZWxlc3MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC93aXJlbGVzcy9LY29uZmlnPTE0PWNvbmZpZyBXRVhUX1BSSVZcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3OmNvbmZpZyBDRkc4MDIxMVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWc9Mzg9Y29uZmlnIE5MODAyMTFfVEVTVE1PREVcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTUxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjUyOmNvbmZpZyBDRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1NcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy01My1cXHRib29sIFxcXCJlbmFibGUgZGV2ZWxvcGVyIHdhcm5pbmdzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctNjctXFxubmV0L3dpcmVsZXNzL0tjb25maWc6Njg6Y29uZmlnIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbm5ldC93aXJlbGVzcy9LY29uZmlnLTY5LVxcdGJvb2wgXFxcImNmZzgwMjExIGNlcnRpZmljYXRpb24gb251c1xcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTg4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjg5OmNvbmZpZyBDRkc4MDIxMV9SRVFVSVJFX1NJR05FRF9SRUdEQlxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTkwLVxcdGJvb2wgXFxcInJlcXVpcmUgcmVnZGIgc2lnbmF0dXJlXFxcIiBpZiBDRkc4MDIxMV9DRVJUSUZJQ0FUSU9OX09OVVNcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTk4LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjk5OmNvbmZpZyBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMDAtXFx0Ym9vbCBcXFwiYWxsb3cgcmVnZGIga2V5cyBzaGlwcGVkIHdpdGggdGhlIGtlcm5lbFxcXCIgaWYgQ0ZHODAyMTFfQ0VSVElGSUNBVElPTl9PTlVTXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTAtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTExOmNvbmZpZyBDRkc4MDIxMV9FWFRSQV9SRUdEQl9LRVlESVJcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xMTItXFx0c3RyaW5nIFxcXCJhZGRpdGlvbmFsIHJlZ2RiIGtleSBkaXJlY3RvcnlcXFwiIGlmIENGRzgwMjExX0NFUlRJRklDQVRJT05fT05VU1xcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIxLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEyMjpjb25maWcgQ0ZHODAyMTFfUkVHX0NFTExVTEFSX0hJTlRTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTIzLVxcdGJvb2wgXFxcImNmZzgwMjExIHJlZ3VsYXRvcnkgc3VwcG9ydCBmb3IgY2VsbHVsYXIgYmFzZSBzdGF0aW9uIGhpbnRzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM0LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjEzNTpjb25maWcgQ0ZHODAyMTFfUkVHX1JFTEFYX05PX0lSXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTM2LVxcdGJvb2wgXFxcImNmZzgwMjExIHN1cHBvcnQgZm9yIE5PX0lSIHJlbGF4YXRpb25cXFwiXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNTgtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTU5OmNvbmZpZyBDRkc4MDIxMV9ERUZBVUxUX1BTXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTYwLVxcdGJvb2wgXFxcImVuYWJsZSBwb3dlcnNhdmUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE2OC1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxNjk6Y29uZmlnIENGRzgwMjExX0RFQlVHRlNcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xNzAtXFx0Ym9vbCBcXFwiY2ZnODAyMTEgRGVidWdGUyBlbnRyaWVzXFxcIlxcbi0tXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc2LVxcbm5ldC93aXJlbGVzcy9LY29uZmlnOjE3Nzpjb25maWcgQ0ZHODAyMTFfQ1JEQV9TVVBQT1JUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTc4LVxcdGJvb2wgXFxcInN1cHBvcnQgQ1JEQVxcXCIgaWYgRVhQRVJUXFxuLS1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xODYtXFxubmV0L3dpcmVsZXNzL0tjb25maWc6MTg3OmNvbmZpZyBDRkc4MDIxMV9XRVhUXFxubmV0L3dpcmVsZXNzL0tjb25maWctMTg4LVxcdGJvb2wgXFxcImNmZzgwMjExIHdpcmVsZXNzIGV4dGVuc2lvbnMgY29tcGF0aWJpbGl0eVxcXCJcXG4tLVxcbm5ldC93aXJlbGVzcy9LY29uZmlnLTE5My1cXG5uZXQvd2lyZWxlc3MvS2NvbmZpZzoxOTQ6Y29uZmlnIENGRzgwMjExX0tVTklUX1RFU1RcXG5uZXQvd2lyZWxlc3MvS2NvbmZpZy0xOTUtXFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBjZmc4MDIxMVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjozNC4zNTU5ODE5MzRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2ODAwMDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDRkc4MDIxMSBEZXBlbmRlbmN5KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSByaWdodCBpbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpbiBteSBtaW5kIGlzIHRoZSBkZXBlbmRlbmN5IGNoYWluIGZvciBgQ0ZHODAyMTFgIHdpdGhpbiB0aGUga2VybmVsJ3Mgd2lyZWxlc3MgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBwcmVyZXF1aXNpdGVzIOKAkyB3aGljaCBmZWF0dXJlcyBvciBzdWJzeXN0ZW1zICptdXN0KiBiZSBlbmFibGVkIGJlZm9yZSBgQ0ZHODAyMTFgIGNhbiBldmVuIGJlIGNvbnNpZGVyZWQuIFRvIGRvIHRoaXMsIEknbSBnb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlOiBsaW5lIDE3IG9mIGBuZXQvd2lyZWxlc3MvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgdGhlIEtjb25maWcgZW50cnkgZm9yIGBDRkc4MDIxMWAgc2hvdWxkIGRlY2xhcmUgaXRzIGRlcGVuZGVuY3kgY2xhdXNlcy4gRnJvbSB0aGVyZSwgSSdsbCBiZSBhYmxlIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgYnVpbGQgcmVxdWlyZW1lbnRzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSByZWxldmFudCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBhcmUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb3JlIGJ1aWxkaW5nIGJsb2Nrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2MywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjM2LjYyMzk5MjMwN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjU1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvd2lyZWxlc3MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNyxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxNzpcXHRjb25maWcgQ0ZHODAyMTFcXG4gIDE4OlxcdFxcdHRyaXN0YXRlIFxcXCJjZmc4MDIxMSAtIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gQVBJXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBSRktJTEwgfHwgIVJGS0lMTFxcbiAgMjA6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAgMjE6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAyMjpcXHRcXHQjIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGlzIHdoZW4gY2VydGlmaWNhdGVzIGFyZSBjaGFuZ2VkIGFuZCBhcmVcXG4gIDIzOlxcdFxcdCMgdXNpbmcgYSBkaWZmZXJlbnQgYWxnb3JpdGhtLCB0aG91Z2ggcmlnaHQgbm93IHRoZXkgc2hvdWxkbid0XFxuICAyNDpcXHRcXHQjICh0aGlzIGlzIGhlcmUgcmF0aGVyIHRoYW4gYmVsb3cgdG8gYWxsb3cgaXQgdG8gYmUgYSBtb2R1bGUpXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTI1NiBpZiBDRkc4MDIxMV9VU0VfS0VSTkVMX1JFR0RCX0tFWVNcXG4gIDI2OlxcdFxcdGhlbHBcXG4gIDI3OlxcdFxcdCAgY2ZnODAyMTEgaXMgdGhlIExpbnV4IHdpcmVsZXNzIExBTiAoODAyLjExKSBjb25maWd1cmF0aW9uIEFQSS5cXG4gIDI4OlxcdFxcdCAgRW5hYmxlIHRoaXMgaWYgeW91IGhhdmUgYSB3aXJlbGVzcyBkZXZpY2UuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gZG9jdW1lbnRhdGlvbiBvbiB0aGUgd2lyZWxlc3Mgd2lraTpcXG4gIDMxOlxcdFxcbiAgMzI6XFx0XFx0ICBodHRwczovL3dpcmVsZXNzLndpa2kua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL0RvY3VtZW50YXRpb24vY2ZnODAyMTFcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0ICBXaGVuIGJ1aWx0IGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIGNmZzgwMjExLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRpZiBDRkc4MDIxMVxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkw4MDIxMV9URVNUTU9ERVxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwibmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kXFxcIlxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGUgbmw4MDIxMSB0ZXN0bW9kZSBjb21tYW5kIGhlbHBzIGltcGxlbWVudGluZyB0aGluZ3MgbGlrZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NjozNi42MjQwNTY1MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4NjMyMjI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVklSVF9XSUZJIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRvIGVuYWJsZSBgVklSVF9XSUZJYCwgSSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uczogYFZJUlRfV0lGSWAsIGBDRkc4MDIxMWAsIGFuZCwgYXMgZXhwZWN0ZWQsIHRoZSBzdGFuZGFyZCBgTkVUYCBjb25maWd1cmF0aW9uLiBUaGUga2V5IGZvY3VzIHN5bWJvbCBoZXJlIGlzIGB2aXJ0X3dpZmlfbmV3bGlua2AuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZnV6emluZyBkZXRhaWxzLiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgZ29vZC4gVGhlIGBFbmFibGVDb25maWdzYCBhcmUgY29ycmVjdGx5IHNldCBhcyBgW1wiVklSVF9XSUZJXCIsIFwiQ0ZHODAyMTFcIl1gLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFsaWducyB3aXRoIG15IGV4cGVjdGF0aW9uOiBgW1widmlydF93aWZpX25ld2xpbmtcIl1gLiBUaGF0J3MgYSBnb29kIHN0YXJ0LlxuXG5UaGUgcmVhc29uaW5nIHByb3ZpZGVkIGNsYXJpZmllcyB0aGUgc3RyYXRlZ3k6IHRoZSBwYXRjaCBpbiBxdWVzdGlvbiBtb2RpZmllcyB0aGUgbGluayBjcmVhdGlvbiBsb2dpYyB3aXRoaW4gYHZpcnRfd2lmaV9uZXdsaW5rYC4gU3BlY2lmaWNhbGx5LCBpdCdzIGFib3V0IHRoZSBvcmRlciBvZiBmdW5jdGlvbiBjYWxsczogYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKClgIGlzIGJlaW5nIG1vdmVkIHJlbGF0aXZlIHRvIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAgYW5kIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSBgdmlydF93aWZpYCBpcyBhIHZpcnR1YWwgbmV0d29yayBkZXZpY2UsIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBydG5ldGxpbmtgIGFuZCBgUlRNX05FV0xJTktgIGNhbGxzLiBBbnkgY2hhbmdlIGluIHRoaXMgYXJlYSBjYW4gZWFzaWx5IGludHJvZHVjZSByZWdyZXNzaW9ucyBvciBsZWFkIHRvIHN0YXRlIGhhbmRsaW5nIGJ1Z3MsIHdoaWNoIG1ha2VzIGZ1enppbmcgYWJzb2x1dGVseSBjcnVjaWFsLiBUaGlzIGFsbCBtYWtlcyBzZW5zZS5cblxuQWxyaWdodCwgd2l0aCBhbGwgdGhhdCB2YWxpZGF0ZWQsIGl0J3MgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIEknbSBjb25maWRlbnQgaW4gdGhlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzMiwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1Njo0MC4yMTAzODA5MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMjQ3Mzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUX1dJRklcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydF93aWZpX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWSVJUX1dJRklcIixcbiAgICBcIkNGRzgwMjExXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydF93aWZpX25ld2xpbmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmlydHVhbCB3aWZpIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIGB2aXJ0X3dpZmlfbmV3bGlua2AgYnkgZGVmZXJyaW5nIHRoZSBjYWxsIHRvIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgdW50aWwgYWZ0ZXIgdGhlIG5ldGRldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkIGFuZCB1cHBlciBkZXZpY2UgbGluayBlc3RhYmxpc2hlZC4gVGhlIHZpcnRfd2lmaSBkcml2ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBydG5ldGxpbmsgbmV0bGluayBtZXNzYWdlcyAoUlRNX05FV0xJTkspLCBtYWtpbmcgdGhpcyBtb2RpZmllZCBjb2RlIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NDAuMjkzNjM2ODg4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjE2NDkwNDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjQwLjI5NDI3NDE5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2MTY0MjYyMDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWxvY2F0ZXMgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXFx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBzZXF1ZW5jaW5nIG9mIGRldmljZSByZWdpc3RyYXRpb24gYW5kIG9wZXJhdGlvbmFsIHN0YXRlIHVwZGF0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIGxlbmd0aC9ib3VuZHMgcmVjYWxjdWxhdGlvbnMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgM2NkZTE2MTMzNTAyNTIwZjk0MzM3NjViYjk1NWI2ZmM0Y2NhNTY0NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTM6NTY6MTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC92aXJ0X3dpZmkuY1xuaW5kZXggYjY5YTQ2NTBmYmE4NS4uNDhhZmMyNDMyZjkzYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcbkBAIC01NTgsNyArNTU4LDYgQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXHUwMDNlbG93ZXJkZXYpO1xuLVx0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbiBcbiBcdGRldi1cdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cdTAwM2VpZWVlODAyMTFfcHRyKTtcbiBcbkBAIC01ODQsNiArNTgzLDggQEAgc3RhdGljIGludCB2aXJ0X3dpZmlfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRnb3RvIHVucmVnaXN0ZXJfbmV0ZGV2O1xuIFx0fVxuIFxuK1x0bmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cdTAwM2Vsb3dlcmRldiwgZGV2KTtcbitcbiBcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSB2aXJ0X3dpZmlfbmV0X2RldmljZV9kZXN0cnVjdG9yO1xuIFx0cHJpdi1cdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XG4gXHRwcml2LVx1MDAzZWlzX2Nvbm5lY3RlZCA9IGZhbHNlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NDAuMjk0Mjc1MTM3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDE4ODU2NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYHZpcnRfd2lmaWAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL3ZpcnRfd2lmaS5jYC4gTmF0dXJhbGx5LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGNoYW5nZXMgYW5kIHRoZSBjb250ZXh0LiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZ2V0dGluZyBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBhdGNoIGl0c2VsZi4gSSdsbCBwcm9iYWJseSB1c2UgbXkgZmF2b3JpdGUgZGlmZiB0b29sIHRvIHZpc3VhbGl6ZSB0aGUgY2hhbmdlcywgaGlnaGxpZ2h0aW5nIHRoZSBhZGRlZCwgcmVtb3ZlZCwgYW5kIG1vZGlmaWVkIGxpbmVzLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY29tbWl0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGF0Y2guXG5cblNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gdHdlYWtlZCBhbmQgd2h5LiBHaXZlbiB0aGUgbG9jYXRpb24gb2YgdGhlIGNoYW5nZSwgSSB3aWxsIGJlIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgdGhpcyBhZmZlY3RzIGFueSBleGlzdGluZyBmZWF0dXJlcyBvciBpZiB0aGlzIGFkZHMgc29tZXRoaW5nIG5ldy5cblxuTm93LCBsZXQncyB6b29tIGluLiBJdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb2RlIGlzIGFyb3VuZCBsaW5lcyA1NTggdG8gNTk1IHdpdGhpbiB0aGUgYHZpcnRfd2lmaV9uZXdsaW5rYCBmdW5jdGlvbi4gSSdsbCByZWFkIHRocm91Z2ggdGhhdCBzZWN0aW9uIGNhcmVmdWxseSwgcGF5aW5nIGF0dGVudGlvbiB0byB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIGNvbnRyb2wgZmxvdywgYW5kIGFueSBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGRyaXZlci4gSSB3aWxsIGJlIGxvb2tpbmcgZm9yIGFueSBzaWducyBvZiBlcnJvcnMsIHVudXN1YWwgYmVoYXZpb3IsIG9yIGFyZWFzIHRoYXQgY291bGQgYmVuZWZpdCBmcm9tIGltcHJvdmVtZW50LiBXaXRoIGB2aXJ0X3dpZmlfbmV3bGlua2AgYmVpbmcgdGhlIGZ1bmN0aW9uLCBJIHdpbGwgYmUgdGhpbmtpbmcgaWYgdGhpcyBpcyByZWxhdGVkIHRvIG5ldHdvcmsgbGluayBzZXR1cCBvciB0ZWFyIGRvd24uIEkgd2lsbCBhbHNvIGJlIHRoaW5raW5nIG9mIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtaWdodCBiZSBwcmVzZW50IGluIHRoYXQgZnVuY3Rpb24uIE15IGJhY2tncm91bmQgYW5kIGV4cGVyaWVuY2UgdGVsbCBtZSB0byBiZSBhbGVydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE5NywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NTMuNzEzMTM1NzhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvdmlydF93aWZpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTQ1OlxcdFxcdGlmICghcHJpdi1cXHUwMDNlbG93ZXJkZXYpXFxuIDU0NjpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gNTQ3OlxcdFxcdGlmICghdGJbSUZMQV9NVFVdKVxcbiA1NDg6XFx0XFx0XFx0ZGV2LVxcdTAwM2VtdHUgPSBwcml2LVxcdTAwM2Vsb3dlcmRldi1cXHUwMDNlbXR1O1xcbiA1NDk6XFx0XFx0ZWxzZSBpZiAoZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBwcml2LVxcdTAwM2Vsb3dlcmRldi1cXHUwMDNlbXR1KVxcbiA1NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDU1MTpcXHRcXG4gNTUyOlxcdFxcdGVyciA9IG5ldGRldl9yeF9oYW5kbGVyX3JlZ2lzdGVyKHByaXYtXFx1MDAzZWxvd2VyZGV2LCB2aXJ0X3dpZmlfcnhfaGFuZGxlcixcXG4gNTUzOlxcdFxcdFxcdFxcdFxcdFxcdCBwcml2KTtcXG4gNTU0OlxcdFxcdGlmIChlcnIpIHtcXG4gNTU1OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsXFxuIDU1NjpcXHRcXHRcXHRcXHRcXFwiY2FuJ3QgbmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXI6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiA1NTc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTU4OlxcdFxcdH1cXG4gNTU5OlxcdFxcbiA1NjA6XFx0XFx0ZXRoX2h3X2FkZHJfaW5oZXJpdChkZXYsIHByaXYtXFx1MDAzZWxvd2VyZGV2KTtcXG4gNTYxOlxcdFxcbiA1NjI6XFx0XFx0ZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyID0ga3phbGxvY19vYmooKmRldi1cXHUwMDNlaWVlZTgwMjExX3B0cik7XFxuIDU2MzpcXHRcXG4gNTY0OlxcdFxcdGlmICghZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyKSB7XFxuIDU2NTpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA1NjY6XFx0XFx0XFx0Z290byByZW1vdmVfaGFuZGxlcjtcXG4gNTY3OlxcdFxcdH1cXG4gNTY4OlxcdFxcbiA1Njk6XFx0XFx0ZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2VpZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OO1xcbiA1NzA6XFx0XFx0ZGV2LVxcdTAwM2VpZWVlODAyMTFfcHRyLVxcdTAwM2V3aXBoeSA9IGNvbW1vbl93aXBoeTtcXG4gNTcxOlxcdFxcbiA1NzI6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XFxuIDU3MzpcXHRcXHRpZiAoZXJyKSB7XFxuIDU3NDpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2Vsb3dlcmRldi1cXHUwMDNlZGV2LCBcXFwiY2FuJ3QgcmVnaXN0ZXJfbmV0ZGV2aWNlOiAlZFxcXFxuXFxcIixcXG4gNTc1OlxcdFxcdFxcdFxcdGVycik7XFxuIDU3NjpcXHRcXHRcXHRnb3RvIGZyZWVfd2lyZWxlc3NfZGV2O1xcbiA1Nzc6XFx0XFx0fVxcbiA1Nzg6XFx0XFxuIDU3OTpcXHRcXHRlcnIgPSBuZXRkZXZfdXBwZXJfZGV2X2xpbmsocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldiwgZXh0YWNrKTtcXG4gNTgwOlxcdFxcdGlmIChlcnIpIHtcXG4gNTgxOlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZWxvd2VyZGV2LVxcdTAwM2VkZXYsIFxcXCJjYW4ndCBuZXRkZXZfdXBwZXJfZGV2X2xpbms6ICVkXFxcXG5cXFwiLFxcbiA1ODI6XFx0XFx0XFx0XFx0ZXJyKTtcXG4gNTgzOlxcdFxcdFxcdGdvdG8gdW5yZWdpc3Rlcl9uZXRkZXY7XFxuIDU4NDpcXHRcXHR9XFxuIDU4NTpcXHRcXG4gNTg2OlxcdFxcdG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXFx1MDAzZWxvd2VyZGV2LCBkZXYpO1xcbiA1ODc6XFx0XFxuIDU4ODpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZGVzdHJ1Y3RvciA9IHZpcnRfd2lmaV9uZXRfZGV2aWNlX2Rlc3RydWN0b3I7XFxuIDU4OTpcXHRcXHRwcml2LVxcdTAwM2ViZWluZ19kZWxldGVkID0gZmFsc2U7XFxuIDU5MDpcXHRcXHRwcml2LVxcdTAwM2Vpc19jb25uZWN0ZWQgPSBmYWxzZTtcXG4gNTkxOlxcdFxcdHByaXYtXFx1MDAzZWlzX3VwID0gZmFsc2U7XFxuIDU5MjpcXHRcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlY29ubmVjdCwgdmlydF93aWZpX2Nvbm5lY3RfY29tcGxldGUpO1xcbiA1OTM6XFx0XFx0X19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTtcXG4gNTk0OlxcdFxcbiA1OTU6XFx0XFx0cmV0dXJuIDA7XFxuIDU5NjpcXHR1bnJlZ2lzdGVyX25ldGRldjpcXG4gNTk3OlxcdFxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XFxuIDU5ODpcXHRmcmVlX3dpcmVsZXNzX2RldjpcXG4gNTk5OlxcdFxcdGtmcmVlKGRldi1cXHUwMDNlaWVlZTgwMjExX3B0cik7XFxuIDYwMDpcXHRcXHRkZXYtXFx1MDAzZWllZWU4MDIxMV9wdHIgPSBOVUxMO1xcbiA2MDE6XFx0cmVtb3ZlX2hhbmRsZXI6XFxuIDYwMjpcXHRcXHRuZXRkZXZfcnhfaGFuZGxlcl91bnJlZ2lzdGVyKHByaXYtXFx1MDAzZWxvd2VyZGV2KTtcXG4gNjAzOlxcdFxcbiA2MDQ6XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NTMuNzEzMjQ1NDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYzMjgxODYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZWAgZnVuY3Rpb24uIEknbSBpbW1lZGlhdGVseSBjdXJpb3VzIGFib3V0IGl0cyByb2xlLCBwYXJ0aWN1bGFybHkgd2l0aGluIGEgc3RhY2tlZCBuZXR3b3JrIGludGVyZmFjZSBjb250ZXh0LiBJJ20gZ3Vlc3NpbmcgaXQncyByZWxhdGVkIHRvIHRoZSBvcGVyYXRpb25hbCBzdGF0ZSwgcHJvYmFibHkgaGFuZGxpbmcgdHJhbnNpdGlvbnMgb3Igc3luY2hyb25pemF0aW9uIGFjcm9zcyBtdWx0aXBsZSBsYXllcnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB3aGV0aGVyIGl0J3MgYW4gQVBJIGNhbGwsIGludGVybmFsIGZ1bmN0aW9uIG9yIHN0YXRlIG1hY2hpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgaXQgY29udHJvbHMgdGhlIHdob2xlIHByb2Nlc3MsIG9yIHBhcnRzIG9mIGl0LCBiZWNhdXNlIHRoZSBuYW1lIG1ha2VzIG1lIHRoaW5rIGl0J3MgZm9jdXNlZCBvbiB0aGUgJ3RyYW5zZmVyJyBvZiBvcGVyYXRpb25hbCBzdGF0ZSAtIG1lYW5pbmcgdGhlcmUgbWlnaHQgYmUgbW9yZSB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2MSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTY6NTUuMzQ2MDcyOTIxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjU4ODMxNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01NDkzPXZvaWQgbmV0ZGV2X2NvbXB1dGVfbWFzdGVyX3VwcGVyX2ZlYXR1cmVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgdXBkYXRlX2hlYWRlcik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01NDk0LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTQ5NTp2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTQ5Ni1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTExMTg0PUVYUE9SVF9TWU1CT0wobmV0ZGV2X2NoYW5nZV9mZWF0dXJlcyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMTE5NC0gKi9cXG5uZXQvY29yZS9kZXYuYzoxMTE5NTp2b2lkIG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpyb290ZGV2LFxcbm5ldC9jb3JlL2Rldi5jLTExMTk2LVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU2OjU3LjYwNDkxMTAxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTEyNzI2MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlYCBmdW5jdGlvbi4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgaXMgaW4gYG5ldC9jb3JlL2Rldi5jYCwgc28gdGhhdCdzIHdoZXJlIEknbGwgaGVhZC4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHJlbGF0ZWQgdG8gb3BlcmF0aW9uYWwgc3RhdGUgdHJhbnNpdGlvbnMsIGxpa2VseSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygc3RhY2tlZCBuZXR3b3JrIGRldmljZXMgb3IgdmlydHVhbCBpbnRlcmZhY2VzLiBJIGFudGljaXBhdGUgdGhpcyBmdW5jdGlvbiBwbGF5cyBhIGNydWNpYWwgcm9sZSBpbiBjb29yZGluYXRpbmcgb3BlcmF0aW9uYWwgc3RhdGUgY2hhbmdlcyAoZS5nLiwgVVAvRE9XTiwgQUNUSVZFL0lOQUNUSVZFKSBiZXR3ZWVuIGEgcGFyZW50IGFuZCBjaGlsZCBuZXR3b3JrIGludGVyZmFjZSAob3IgYWNyb3NzIHN0YWNrZWQgbGF5ZXJzKS4gSSdsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgaG93IGl0IGhhbmRsZXMgbG9ja2luZywgc3RhdGUgdXBkYXRlcywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYXJpc2UgZHVyaW5nIG9wZXJhdGlvbmFsIHN0YXRlIGNoYW5nZXMuIEknbSBhbHNvIGN1cmlvdXMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIG5ldHdvcmsgZGV2aWNlIG1vZGVsLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGUgcmVnaXN0cmF0aW9uIG9yIHVucmVnaXN0cmF0aW9uIG9mIG5ldGRldnMuIFVsdGltYXRlbHksIEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBjZW50cmFsIHRvIGhvdyB0aGUga2VybmVsIHByb3BhZ2F0ZXMgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcyBpbiBhIGxheWVyZWQgbmV0d29ya2luZyBlbnZpcm9ubWVudCwgZW5zdXJpbmcgY29uc2lzdGVuY3kgYW5kIHByZXZlbnRpbmcgaW5jb25zaXN0ZW50IHN0YXRlcyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTM6NTc6MDEuMTE3NjQwNTk2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTE5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTExOTU6XFx0dm9pZCBuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqcm9vdGRldixcXG4xMTE5NjpcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbjExMTk3OlxcdHtcXG4xMTE5ODpcXHRcXHRpZiAocm9vdGRldi1cXHUwMDNlb3BlcnN0YXRlID09IElGX09QRVJfRE9STUFOVClcXG4xMTE5OTpcXHRcXHRcXHRuZXRpZl9kb3JtYW50X29uKGRldik7XFxuMTEyMDA6XFx0XFx0ZWxzZVxcbjExMjAxOlxcdFxcdFxcdG5ldGlmX2Rvcm1hbnRfb2ZmKGRldik7XFxuMTEyMDI6XFx0XFxuMTEyMDM6XFx0XFx0aWYgKHJvb3RkZXYtXFx1MDAzZW9wZXJzdGF0ZSA9PSBJRl9PUEVSX1RFU1RJTkcpXFxuMTEyMDQ6XFx0XFx0XFx0bmV0aWZfdGVzdGluZ19vbihkZXYpO1xcbjExMjA1OlxcdFxcdGVsc2VcXG4xMTIwNjpcXHRcXHRcXHRuZXRpZl90ZXN0aW5nX29mZihkZXYpO1xcbjExMjA3OlxcdFxcbjExMjA4OlxcdFxcdGlmIChuZXRpZl9jYXJyaWVyX29rKHJvb3RkZXYpKVxcbjExMjA5OlxcdFxcdFxcdG5ldGlmX2NhcnJpZXJfb24oZGV2KTtcXG4xMTIxMDpcXHRcXHRlbHNlXFxuMTEyMTE6XFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYoZGV2KTtcXG4xMTIxMjpcXHR9XFxuMTEyMTM6XFx0RVhQT1JUX1NZTUJPTChuZXRpZl9zdGFja2VkX3RyYW5zZmVyX29wZXJzdGF0ZSk7XFxuMTEyMTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDEzOjU3OjAxLjExODA0OTkxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MzQwNDY0MzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgIE1vdmUqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGlzIHBhdGNoIG1vdmluZyBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGVgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgKndoeSo/IEkga25vdyB0aGF0IGJlZm9yZSBgcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldilgIG9yIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmtgLCBjYWxsaW5nIGZ1bmN0aW9ucyBsaWtlIGBuZXRpZl9jYXJyaWVyX29uL29mZmAgb3IgYG5ldGlmX2Rvcm1hbnRfb24vb2ZmYCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlIGRldmljZSBpc24ndCBmdWxseSBzZXQgdXAgeWV0LiBgbmV0aWZfY2Fycmllcl9vbmAsIGZvciBpbnN0YW5jZSwgbWlnaHQgdHJpZ2dlciBhIGxpbmt3YXRjaCBldmVudCB0aGF0IGV4cGVjdHMgYSByZWdpc3RlcmVkIG5ldGRldmljZS4gU28sIHRoZSB0aGlua2luZyBoZXJlIGlzIHRoYXQgbW92aW5nIHRoaXMgY2FsbCAqYWZ0ZXIqIHJlZ2lzdHJhdGlvbiBhbmQgbGlua2luZyBzaG91bGQgcmVzb2x2ZSBzb21lIG9yZGVyaW5nIGlzc3VlcywgcmlnaHQ/IEl0J3MgYSBmYWlybHkgc3RhbmRhcmQgcGF0dGVybiBmb3IgZml4aW5nIHRoZXNlIGtpbmRzIG9mIG5ldGRldmljZSByZWdpc3RyYXRpb24vc3RhdGUgdHJhbnNmZXIgaXNzdWVzLlxuXG5Ob3csIGEgdmVyeSBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbjogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbWVtb3J5IHNhZmV0eSBjb25jZXJucz8gTGV0J3MgYnJlYWsgaXQgZG93bi4gVGhlcmUgYXJlbid0IGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGRlYWxsb2NhdGlvbnMuIFRoZXJlIGFyZSBubyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQ3J1Y2lhbGx5LCBub3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgdGhhdCBjb3VsZCBiZSB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmVuJ3QgYW55IGNoYW5nZXMgdG8gcGFkZGluZywgc3RydWN0IGRlZmluaXRpb25zLCBidWZmZXIgYm91bmRzLCBvciBpbmZvIGxlYWtzLCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IHJlbG9jYXRpbmcgdGhhdCBvbmUgc3BlY2lmaWMgZnVuY3Rpb24gY2FsbC5cblxuQmFzZWQgb24gdGhhdCwgSSdtIGNvbmZpZGVudCB0aGF0IEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGlmIHRoZXJlICp3ZXJlKiBhbnkgbWVtb3J5IHNhZmV0eSBvciBzdGF0ZSBidWdzLCBidXQgSSdtIG5vdCBzZWVpbmcgYW55IHJlZCBmbGFncy4gVG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgbGV0J3MgdmVyaWZ5OlxuXG5gTmVlZHNLTVNBTj1mYWxzZWAgYmVjYXVzZTpcblxuKiAgIFRoZSBwYXRjaCAqb25seSogbW92ZXMgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKClgLlxuKiAgIFRoZXJlJ3Mgbm8gaW50cm9kdWN0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgYnVmZmVyIGhhbmRsaW5nLCBvciB1c2VyIGNvcGllcy5cblxuQWxyaWdodCwgdGhhdCdzIHNvbGlkLiBUaW1lIHRvIGdvIHdpdGggYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYxNCwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMzo1NzowNi40NTg1MTY2MjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbG9jYXRlcyB0aGUgY2FsbCB0byBgbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUocHJpdi1cXHUwMDNlbG93ZXJkZXYsIGRldilgIGluIGB2aXJ0X3dpZmlfbmV3bGluaygpYCBzbyB0aGF0IGl0IGV4ZWN1dGVzIGFmdGVyIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB2aWEgYHJlZ2lzdGVyX25ldGRldmljZSgpYCBhbmQgbGlua2VkIHdpdGggYG5ldGRldl91cHBlcl9kZXZfbGluaygpYC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgdGhlIHNlcXVlbmNpbmcgb2YgZGV2aWNlIHJlZ2lzdHJhdGlvbiBhbmQgb3BlcmF0aW9uYWwgc3RhdGUgdXBkYXRlcy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgbGVuZ3RoL2JvdW5kcyByZWNhbGN1bGF0aW9ucywgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCByZXF1aXJlIEtNU0FOLiBTdGFuZGFyZCBLQVNBTi9MT0NLREVQIGJ1aWxkcyBhcmUgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWxvY2F0ZXMgdGhlIGNhbGwgdG8gYG5ldGlmX3N0YWNrZWRfdHJhbnNmZXJfb3BlcnN0YXRlKHByaXYtXFx1MDAzZWxvd2VyZGV2LCBkZXYpYCBpbiBgdmlydF93aWZpX25ld2xpbmsoKWAgc28gdGhhdCBpdCBleGVjdXRlcyBhZnRlciB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgdmlhIGByZWdpc3Rlcl9uZXRkZXZpY2UoKWAgYW5kIGxpbmtlZCB3aXRoIGBuZXRkZXZfdXBwZXJfZGV2X2xpbmsoKWAuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBzZXF1ZW5jaW5nIG9mIGRldmljZSByZWdpc3RyYXRpb24gYW5kIG9wZXJhdGlvbmFsIHN0YXRlIHVwZGF0ZXMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIGxlbmd0aC9ib3VuZHMgcmVjYWxjdWxhdGlvbnMsIG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgcmVxdWlyZSBLTVNBTi4gU3RhbmRhcmQgS0FTQU4vTE9DS0RFUCBidWlsZHMgYXJlIHN1ZmZpY2llbnQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[1] Phase: Succeeded StartedAt: 2026-09-09 13:57:18 +0000 UTC FinishedAt: 2026-09-09 13:57:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 13:57:18 +0000 UTC FinishedAt: 2026-09-09 13:57:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2] Phase: Succeeded StartedAt: 2026-09-09 13:57:18 +0000 UTC FinishedAt: 2026-09-09 17:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 13:57:18 +0000 UTC FinishedAt: 2026-09-09 17:41:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 13:57:18 +0000 UTC FinishedAt: 2026-09-09 13:57:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 13:57:18 +0000 UTC FinishedAt: 2026-09-09 13:57:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowrtqbg/series-workflowrtqbg-convert-artifact-1610901476/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 13:57:28 +0000 UTC FinishedAt: 2026-09-09 14:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 13:57:28 +0000 UTC FinishedAt: 2026-09-09 14:14:08 +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:*3c51cf06-c675-486c-9ee0-a9e7f78be49e,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-workflowrtqbg/series-workflowrtqbg-convert-artifact-1610901476/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": "d3f78c8a-1ece-4606-a54c-ba82b9410e06", "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-workflowrtqbg/series-workflowrtqbg-build-action-2335180834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 13:57:28 +0000 UTC FinishedAt: 2026-09-09 14:13:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3c51cf06-c675-486c-9ee0-a9e7f78be49e,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-workflowrtqbg/series-workflowrtqbg-convert-artifact-1610901476/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": "d3f78c8a-1ece-4606-a54c-ba82b9410e06", "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-workflowrtqbg/series-workflowrtqbg-build-action-2335180834/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 14:14:08 +0000 UTC FinishedAt: 2026-09-09 14:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 14:14:08 +0000 UTC FinishedAt: 2026-09-09 14:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 14:14:08 +0000 UTC FinishedAt: 2026-09-09 14:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 14:14:08 +0000 UTC FinishedAt: 2026-09-09 14:14:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowrtqbg/series-workflowrtqbg-convert-artifact-3244588003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 14:14:19 +0000 UTC FinishedAt: 2026-09-09 14:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 14:14:19 +0000 UTC FinishedAt: 2026-09-09 14:15:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d3f78c8a-1ece-4606-a54c-ba82b9410e06,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-workflowrtqbg/series-workflowrtqbg-build-action-2335180834/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-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 14:16:00 +0000 UTC FinishedAt: 2026-09-09 14:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 14:16:00 +0000 UTC FinishedAt: 2026-09-09 14:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 14:16:00 +0000 UTC FinishedAt: 2026-09-09 14:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 14:16:00 +0000 UTC FinishedAt: 2026-09-09 14:33:02 +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:*3c51cf06-c675-486c-9ee0-a9e7f78be49e,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-workflowrtqbg/series-workflowrtqbg-convert-artifact-3244588003/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": "b2994f04-126b-480e-8681-dc75dac8b73a", "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-workflowrtqbg/series-workflowrtqbg-build-action-1333381271/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 14:16:00 +0000 UTC FinishedAt: 2026-09-09 14:32:52 +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:*3c51cf06-c675-486c-9ee0-a9e7f78be49e,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-workflowrtqbg/series-workflowrtqbg-convert-artifact-3244588003/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": "b2994f04-126b-480e-8681-dc75dac8b73a", "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-workflowrtqbg/series-workflowrtqbg-build-action-1333381271/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 14:33:02 +0000 UTC FinishedAt: 2026-09-09 14:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 14:33:02 +0000 UTC FinishedAt: 2026-09-09 14:33:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 14:33:02 +0000 UTC FinishedAt: 2026-09-09 14:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 14:33:02 +0000 UTC FinishedAt: 2026-09-09 14:36:15 +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:*b2994f04-126b-480e-8681-dc75dac8b73a,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-workflowrtqbg/series-workflowrtqbg-build-action-1333381271/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-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 14:36:25 +0000 UTC FinishedAt: 2026-09-09 17:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 14:36:25 +0000 UTC FinishedAt: 2026-09-09 17:41:56 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"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:*d3f78c8a-1ece-4606-a54c-ba82b9410e06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2994f04-126b-480e-8681-dc75dac8b73a,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-workflowrtqbg/series-workflowrtqbg-build-action-2335180834/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-workflowrtqbg/series-workflowrtqbg-build-action-1333381271/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 14:36:25 +0000 UTC FinishedAt: 2026-09-09 14:36:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 14:36:25 +0000 UTC FinishedAt: 2026-09-09 14:36:29 +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","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"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-workflowrtqbg/series-workflowrtqbg-convert-artifact-3548165116/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 14:36:25 +0000 UTC FinishedAt: 2026-09-09 14:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 14:36:25 +0000 UTC FinishedAt: 2026-09-09 14:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 14:36:25 +0000 UTC FinishedAt: 2026-09-09 14:36:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 14:36:35 +0000 UTC FinishedAt: 2026-09-09 17:41:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrtqbg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virt_wifi_newlink"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a9d7ced84989ec05be09b4b8428759ef60450a0f","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRT_WIFI","CFG80211"],"series_id":"cf613bab-b2e8-4ca3-bc60-b976c01c4aea","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 14:36:35 +0000 UTC FinishedAt: 2026-09-09 17:41:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d3f78c8a-1ece-4606-a54c-ba82b9410e06,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b2994f04-126b-480e-8681-dc75dac8b73a,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-workflowrtqbg/series-workflowrtqbg-build-action-2335180834/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-workflowrtqbg/series-workflowrtqbg-build-action-1333381271/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-workflowrtqbg/series-workflowrtqbg-convert-artifact-3548165116/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,}