Name: series-workflowc8lz8 Phase: Succeeded StartedAt: 2026-07-01 09:38:26 +0000 UTC FinishedAt: 2026-07-01 10:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[0] Phase: Succeeded StartedAt: 2026-07-01 09:38:26 +0000 UTC FinishedAt: 2026-07-01 09:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 09:38:26 +0000 UTC FinishedAt: 2026-07-01 09:54:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIQUIDIO", "PCI_IOV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIQUIDIO", "PCI_IOV" ], "series_id": "7ede627b-e242-4e9e-a3f9-7be7a3bb7f80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "octeon_enable_sriov", "lio_pci_sriov_disable", "lio_vf_pci_dev_by_qno", "octeon_mbox_process_cmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJUVVJRElPJiMzNDssCiAgICAmIzM0O1BDSV9JT1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY3Rlb25fZW5hYmxlX3NyaW92JiMzNDssCiAgICAmIzM0O2xpb19wY2lfc3Jpb3ZfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtsaW9fdmZfcGNpX2Rldl9ieV9xbm8mIzM0OywKICAgICYjMzQ7b2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpY2ggY2FuIGVtdWxhdGUgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBtYWlsYm94IGNvbW1hbmRzLCBhcyB3ZWxsIGFzIHZpYSBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBkeW5hbWljIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWQ3MjliNDE3NDBjYTliYmQyZDJmYjI5YjI4YmI0YzA5MjhjYTI0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDk6NTI6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uY1xuaW5kZXggMGRiMDhhYzNkMDk4ZmIuLmUzMDM5NTZiNGJmMTJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXG5AQCAtMzc3OSw5ICYjNDM7Mzc3OSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmljX2RldmljZXMoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdGVvbl9kZXYpXG4gc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4ge1xuIFx0dW5zaWduZWQgaW50IG51bV92ZnNfYWxsb2NlZCA9IG9jdC1cdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZDtcbi1cdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcbiBcdGludCBlcnI7XG4tXHR1MzIgdTtcbiBcbiBcdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdCkgXHUwMDI2XHUwMDI2IG51bV92ZnNfYWxsb2NlZCkge1xuIFx0XHRlcnIgPSBwY2lfZW5hYmxlX3NyaW92KG9jdC1cdTAwM2VwY2lfZGV2LFxuQEAgLTM3OTQsMjMgJiM0MzszNzkyLDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTtcbi1cbi1cdFx0LyogaW5pdCBsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2XG4tXHRcdCAqIHN0cnVjdCBwb2ludGVyXG4tXHRcdCAqL1xuLVx0XHR1ID0gMDtcbi1cdFx0dmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbi1cdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7XG4tXHRcdHdoaWxlICh2ZmRldikge1xuLVx0XHRcdGlmICh2ZmRldi1cdTAwM2Vpc192aXJ0Zm4gXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICh2ZmRldi1cdTAwM2VwaHlzZm4gPT0gb2N0LVx1MDAzZXBjaV9kZXYpKSB7XG4tXHRcdFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9XG4tXHRcdFx0XHRcdHZmZGV2O1xuLVx0XHRcdFx0dSAmIzQzOz0gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuLVx0XHRcdH1cbi1cdFx0XHR2ZmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuLVx0XHRcdFx0XHQgICAgICAgT0NURU9OX0NOMjNYWF9WRl9WSUQsIHZmZGV2KTtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIG51bV92ZnNfYWxsb2NlZDtcbkBAIC0zODE4LDggJiM0MzszNzk5LDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXG4gc3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbiB7XG4tXHRpbnQgdTtcbi1cbiBcdGlmIChwY2lfdmZzX2Fzc2lnbmVkKG9jdC1cdTAwM2VwY2lfZGV2KSkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkZzIGFyZSBzdGlsbCBhc3NpZ25lZCB0byBWTXMuXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbkBAIC0zODI3LDEyICYjNDM7MzgwNiw2IEBAIHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXG4gXHRwY2lfZGlzYWJsZV9zcmlvdihvY3QtXHUwMDNlcGNpX2Rldik7XG4gXG4tXHR1ID0gMDtcbi1cdHdoaWxlICh1IFx1MDAzYyBNQVhfUE9TU0lCTEVfVkZTKSB7XG4tXHRcdG9jdC1cdTAwM2Vzcmlvdl9pbmZvLmRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0W3VdID0gTlVMTDtcbi1cdFx0dSAmIzQzOz0gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuLVx0fVxuLVxuIFx0b2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkID0gMDtcbiBcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7b2N0LVx1MDAzZXBmX251bTolZCBkaXNhYmxlZCBWRnNcXG5cJiMzNDssXG4gXHRcdCBvY3QtXHUwMDNlcGZfbnVtKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX2RldmljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxuaW5kZXggMTkzNDRiMjFmOGZiOTQuLjg1OGEwZmZmMmNjMGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxuQEAgLTM5MCw5ICYjNDM7MzkwLDYgQEAgc3RydWN0IG9jdGVvbl9zcmlvdl9pbmZvIHtcbiBcbiBcdHN0cnVjdCBsaW9fdHJ1c3RlZF92Zlx0dHJ1c3RlZF92ZjtcbiBcbi1cdC8qbG9va3VwIHRhYmxlIHRoYXQgbWFwcyBEUEkgcmluZyBudW1iZXIgdG8gVkYgcGNpX2RldiBzdHJ1Y3QgcG9pbnRlciovXG4tXHRzdHJ1Y3QgcGNpX2RldiAqZHBpcmluZ190b192ZnBjaWRldl9sdXRbTUFYX1BPU1NJQkxFX1ZGU107XG4tXG4gXHR1NjRcdHZmX21hY2FkZHJbTUFYX1BPU1NJQkxFX1ZGU107XG4gXG4gXHR1MTZcdHZmX3ZsYW50Y2lbTUFYX1BPU1NJQkxFX1ZGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guY1xuaW5kZXggYWQ2ODVmNWQwYTEzNjMuLjY5N2ZjZGM0MWUzY2Q3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jXG5AQCAtMjYsNiAmIzQzOzI2LDMxIEBAXG4gI2luY2x1ZGUgXCYjMzQ7b2N0ZW9uX21haWxib3guaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NuMjN4eF9wZl9kZXZpY2UuaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldiA9IE5VTEw7XG4mIzQzO1x0aW50IHZmaWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9jdC1cdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAocV9ubyAlIG9jdC1cdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHR2ZmlkeCA9IHFfbm8gLyBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmY7XG4mIzQzO1x0aWYgKHZmaWR4IFx1MDAzZT0gb2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgodmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbiYjNDM7XHRcdFx0XHQgICAgICAgT0NURU9OX0NOMjNYWF9WRl9WSUQsIHZmZGV2KSkpIHtcbiYjNDM7XHRcdGlmIChwY2lfcGh5c2ZuKHZmZGV2KSBcdTAwMjZcdTAwMjYgcGNpX3BoeXNmbih2ZmRldikgPT0gb2N0LVx1MDAzZXBjaV9kZXYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcGNpX2lvdl92Zl9pZCh2ZmRldikgPT0gdmZpZHgpXG4mIzQzO1x0XHRcdHJldHVybiB2ZmRldjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG9jdGVvbl9tYm94X3JlYWQ6XG4gICogQG1ib3g6IFBvaW50ZXIgbWFpbGJveFxuQEAgLTIzNyw2ICYjNDM7MjYyLDcgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZClcbiB7XG4gXHRzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ID0gbWJveC1cdTAwM2VvY3RfZGV2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcbiBcbiBcdHN3aXRjaCAobWJveF9jbWQtXHUwMDNlbXNnLnMuY21kKSB7XG4gXHRjYXNlIE9DVEVPTl9WRl9BQ1RJVkU6XG5AQCAtMjYwLDcgJiM0MzsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG4gXHRcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldixcbiBcdFx0XHQgXCYjMzQ7Z290IGEgcmVxdWVzdCBmb3IgRkxSIGZyb20gVkYgdGhhdCBvd25zIERQSSByaW5nICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCBtYm94LVx1MDAzZXFfbm8pO1xuLVx0XHRwY2llX2ZscihvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFttYm94LVx1MDAzZXFfbm9dKTtcbiYjNDM7XHRcdHZmZGV2ID0gbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKG9jdCwgbWJveC1cdTAwM2VxX25vKTtcbiYjNDM7XHRcdGlmICghdmZkZXYpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHBjaWVfZmxyKHZmZGV2KTtcbiYjNDM7XHRcdHBjaV9kZXZfcHV0KHZmZGV2KTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE9DVEVPTl9QRl9DSEFOR0VEX1ZGX01BQ0FERFI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElRVUlESU8mIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jdGVvbl9lbmFibGVfc3Jpb3YmIzM0OywKICAgICYjMzQ7bGlvX3BjaV9zcmlvdl9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2xpb192Zl9wY2lfZGV2X2J5X3FubyYjMzQ7LAogICAgJiMzNDtvY3Rlb25fbWJveF9wcm9jZXNzX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1ItSU9WIGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZyBsb2dpYyBpbiB0aGUgQ2F2aXVtIExpcXVpZElPIGRyaXZlci4gSXQgcmVwbGFjZXMgYSBzdGF0aWMgbG9va3VwIHRhYmxlIHdpdGggYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIGZvciBWRnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlIGFuZCB0cmlnZ2VyIG1haWxib3ggY29tbWFuZHMsIGFzIHdlbGwgYXMgdmlhIHN5c2ZzIGZvciBTUi1JT1YgY29uZmlndXJhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIGR5bmFtaWMgbG9va3VwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkNzI5YjQxNzQwY2E5YmJkMmQyZmIyOWIyOGJiNGMwOTI4Y2EyNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA5OjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYwppbmRleCAwZGIwOGFjM2QwOThmYi4uZTMwMzk1NmI0YmYxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jCkBAIC0zNzc5LDkgJiM0MzszNzc5LDcgQEAgc3RhdGljIGludCBzZXR1cF9uaWNfZGV2aWNlcyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ZW9uX2RldikKIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KQogewogCXVuc2lnbmVkIGludCBudW1fdmZzX2FsbG9jZWQgPSBvY3QtJmd0O3NyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkOwotCXN0cnVjdCBwY2lfZGV2ICp2ZmRldjsKIAlpbnQgZXJyOwotCXUzMiB1OwogCiAJaWYgKE9DVEVPTl9DTjIzWFhfUEYob2N0KSAmYW1wOyZhbXA7IG51bV92ZnNfYWxsb2NlZCkgewogCQllcnIgPSBwY2lfZW5hYmxlX3NyaW92KG9jdC0mZ3Q7cGNpX2RldiwKQEAgLTM3OTQsMjMgJiM0MzszNzkyLDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpCiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCW9jdC0mZ3Q7c3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTsKLQotCQkvKiBpbml0IGxvb2t1cCB0YWJsZSB0aGF0IG1hcHMgRFBJIHJpbmcgbnVtYmVyIHRvIFZGIHBjaV9kZXYKLQkJICogc3RydWN0IHBvaW50ZXIKLQkJICovCi0JCXUgPSAwOwotCQl2ZmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLAotCQkJCSAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7Ci0JCXdoaWxlICh2ZmRldikgewotCQkJaWYgKHZmZGV2LSZndDtpc192aXJ0Zm4gJmFtcDsmYW1wOwotCQkJICAgICh2ZmRldi0mZ3Q7cGh5c2ZuID09IG9jdC0mZ3Q7cGNpX2RldikpIHsKLQkJCQlvY3QtJmd0O3NyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbdV0gPQotCQkJCQl2ZmRldjsKLQkJCQl1ICYjNDM7PSBvY3QtJmd0O3NyaW92X2luZm8ucmluZ3NfcGVyX3ZmOwotCQkJfQotCQkJdmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwKLQkJCQkJICAgICAgIE9DVEVPTl9DTjIzWFhfVkZfVklELCB2ZmRldik7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gbnVtX3Zmc19hbGxvY2VkOwpAQCAtMzgxOCw4ICYjNDM7Mzc5OSw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KQogCiBzdGF0aWMgaW50IGxpb19wY2lfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KQogewotCWludCB1OwotCiAJaWYgKHBjaV92ZnNfYXNzaWduZWQob2N0LSZndDtwY2lfZGV2KSkgewogCQlkZXZfZXJyKCZhbXA7b2N0LSZndDtwY2lfZGV2LSZndDtkZXYsICYjMzQ7VkZzIGFyZSBzdGlsbCBhc3NpZ25lZCB0byBWTXMuXG4mIzM0Oyk7CiAJCXJldHVybiAtRVBFUk07CkBAIC0zODI3LDEyICYjNDM7MzgwNiw2IEBAIHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpCiAKIAlwY2lfZGlzYWJsZV9zcmlvdihvY3QtJmd0O3BjaV9kZXYpOwogCi0JdSA9IDA7Ci0Jd2hpbGUgKHUgJmx0OyBNQVhfUE9TU0lCTEVfVkZTKSB7Ci0JCW9jdC0mZ3Q7c3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9IE5VTEw7Ci0JCXUgJiM0Mzs9IG9jdC0mZ3Q7c3Jpb3ZfaW5mby5yaW5nc19wZXJfdmY7Ci0JfQotCiAJb2N0LSZndDtzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IDA7CiAJZGV2X2luZm8oJmFtcDtvY3QtJmd0O3BjaV9kZXYtJmd0O2RldiwgJiMzNDtvY3QtJmd0O3BmX251bTolZCBkaXNhYmxlZCBWRnNcbiYjMzQ7LAogCQkgb2N0LSZndDtwZl9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgKaW5kZXggMTkzNDRiMjFmOGZiOTQuLjg1OGEwZmZmMmNjMGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX2RldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgKQEAgLTM5MCw5ICYjNDM7MzkwLDYgQEAgc3RydWN0IG9jdGVvbl9zcmlvdl9pbmZvIHsKIAogCXN0cnVjdCBsaW9fdHJ1c3RlZF92Zgl0cnVzdGVkX3ZmOwogCi0JLypsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2IHN0cnVjdCBwb2ludGVyKi8KLQlzdHJ1Y3QgcGNpX2RldiAqZHBpcmluZ190b192ZnBjaWRldl9sdXRbTUFYX1BPU1NJQkxFX1ZGU107Ci0KIAl1NjQJdmZfbWFjYWRkcltNQVhfUE9TU0lCTEVfVkZTXTsKIAogCXUxNgl2Zl92bGFudGNpW01BWF9QT1NTSUJMRV9WRlNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYwppbmRleCBhZDY4NWY1ZDBhMTM2My4uNjk3ZmNkYzQxZTNjZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jCkBAIC0yNiw2ICYjNDM7MjYsMzEgQEAKICNpbmNsdWRlICYjMzQ7b2N0ZW9uX21haWxib3guaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2NuMjN4eF9wZl9kZXZpY2UuaCYjMzQ7CiAKJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICp2ZmRldiA9IE5VTEw7CiYjNDM7CWludCB2ZmlkeDsKJiM0MzsKJiM0MzsJaWYgKCFvY3QtJmd0O3NyaW92X2luZm8ucmluZ3NfcGVyX3ZmKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmIChxX25vICUgb2N0LSZndDtzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl2ZmlkeCA9IHFfbm8gLyBvY3QtJmd0O3NyaW92X2luZm8ucmluZ3NfcGVyX3ZmOwomIzQzOwlpZiAodmZpZHggJmd0Oz0gb2N0LSZndDtzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAoKHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sCiYjNDM7CQkJCSAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpKSkgewomIzQzOwkJaWYgKHBjaV9waHlzZm4odmZkZXYpICZhbXA7JmFtcDsgcGNpX3BoeXNmbih2ZmRldikgPT0gb2N0LSZndDtwY2lfZGV2ICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwY2lfaW92X3ZmX2lkKHZmZGV2KSA9PSB2ZmlkeCkKJiM0MzsJCQlyZXR1cm4gdmZkZXY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBvY3Rlb25fbWJveF9yZWFkOgogICogQG1ib3g6IFBvaW50ZXIgbWFpbGJveApAQCAtMjM3LDYgJiM0MzsyNjIsNyBAQCBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCwKIAkJCQkgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZCkKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ID0gbWJveC0mZ3Q7b2N0X2RldjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnZmZGV2OwogCiAJc3dpdGNoIChtYm94X2NtZC0mZ3Q7bXNnLnMuY21kKSB7CiAJY2FzZSBPQ1RFT05fVkZfQUNUSVZFOgpAQCAtMjYwLDcgJiM0MzsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsCiAJCWRldl9pbmZvKCZhbXA7b2N0LSZndDtwY2lfZGV2LSZndDtkZXYsCiAJCQkgJiMzNDtnb3QgYSByZXF1ZXN0IGZvciBGTFIgZnJvbSBWRiB0aGF0IG93bnMgRFBJIHJpbmcgJXVcbiYjMzQ7LAogCQkJIG1ib3gtJmd0O3Ffbm8pOwotCQlwY2llX2ZscihvY3QtJmd0O3NyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbbWJveC0mZ3Q7cV9ub10pOwomIzQzOwkJdmZkZXYgPSBsaW9fdmZfcGNpX2Rldl9ieV9xbm8ob2N0LCBtYm94LSZndDtxX25vKTsKJiM0MzsJCWlmICghdmZkZXYpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlwY2llX2Zscih2ZmRldik7CiYjNDM7CQlwY2lfZGV2X3B1dCh2ZmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBPQ1RFT05fUEZfQ0hBTkdFRF9WRl9NQUNBRERSOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIENhdml1bSBMaXF1aWRJTyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyIChgbGlvX21haW4uY2AsIGBvY3Rlb25fZGV2aWNlLmhgLCBgb2N0ZW9uX21haWxib3guY2ApLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBsb29rdXAgdGFibGUgYGRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0YCBhbmQgYXJlIG5vdyBkb2luZyBhIGR5bmFtaWMgUENJIGRldmljZSBsb29rdXAgdXNpbmcgYHBjaV9nZXRfZGV2aWNlYCBhbmQgYHBjaV9pb3ZfdmZfaWRgIHdoZW4gaGFuZGxpbmcgdGhlIGBPQ1RFT05fVkZfRkxSX1JFUVVFU1RgIG1haWxib3ggY29tbWFuZCB3aXRoaW4gYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqZnV6emFibGUqPwoKVGhlIGRyaXZlciBpcyBgbGlxdWlkaW9gLCB3aGljaCBpcyBhIENhdml1bSBMaXF1aWRJTyBJbnRlbGxpZ2VudCBTZXJ2ZXIgQWRhcHRlciBkcml2ZXIg4oCTIHNvIEV0aGVybmV0LiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtzcGVjaWZpYyBoYXJkd2FyZSYjMzQ7IHRvIG1lLiBDYW4gSSBldmVuIGV4ZXJjaXNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gR2VuZXJhbGx5LCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGFyZSB0b3VnaCB0byBoaXQgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGVtdWxhdGlvbiBsYXllciBsaWtlIGUxMDAwZSBvciB2aXJ0aW8sIG9yIGlmIHlvdSYjMzk7cmUgdXNpbmcgc29tZXRoaW5nIGxpa2UgdmhjaS9kdW1teSBkZXZpY2VzLgoKV2FpdCBhIHNlY29uZOKApnN5emthbGxlciEgSXQgY2FuIGZ1enogUENJIGRldmljZXMgdXNpbmcgdGhlIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGwsIHJpZ2h0PyBJdCBpbmplY3RzIFBDSSBkZXZpY2VzIGlmIHRoZSBrZXJuZWwgaGFzIHN1cHBvcnQg4oCTIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYENPTkZJR19QQ0lfREVCVUdgIG9yIHN5emthbGxlciYjMzk7cyBvd24gUENJIGZ1enplci4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBhdmVudWUhIFRob3VnaCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGUgUENJIGZ1enplciBpcyBvbmx5IHRhcmdldGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zLgoKU28sIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIGl0IHNlZW1zIHByZXR0eSBjbGVhci4gQnV0LCBnaXZlbiBzeXprYWxsZXImIzM5O3MgY2FwYWJpbGl0aWVzLCAqY2FuKiB3ZSBmdXp6IGl0PyBJZiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyBlbmFibGVkLCBpdCBzaG91bGQgYmUgYWJsZSB0by4gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBvciBkZXBlbmRlbmNpZXMgSSBjYW4gdXNlIHRvIGZpZ3VyZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXF1aWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTY4PWNvbmZpZyBMSVFVSURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTgxLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo4MjpcdCAgd2lsbCBiZSBjYWxsZWQgbGlxdWlkaW8uICBUaGlzIGlzIHJlY29tbWVuZGVkLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctODMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9OTU9Y29uZmlnIExJUVVJRElPX1ZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTA0LVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiBUaGUgbW9kdWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzoxMDU6XHQgIHdpbGwgYmUgY2FsbGVkIGxpcXVpZGlvX3ZmLiBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTA2LVx0ICBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzczCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgdGhlIGBMSVFVSURJT2AgQ29uZmlndXJhdGlvbiBhbmQgTWFpbGJveCBDb21tYW5kIFByb2Nlc3NpbmcqKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzIGBMSVFVSURJT2AuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaGFuZGxpbmcgbWFpbGJveCBjb21tYW5kcy4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gYXNzdW1pbmcgdGhlc2UgY29tbWFuZHMgYXJlIGVpdGhlciBjb21pbmcgZnJvbSB0aGUgaGFyZHdhcmUgaXRzZWxmIG9yIHBvc3NpYmx5IGJlaW5nIGlzc3VlZCBieSBhIFZpcnR1YWwgRnVuY3Rpb24gKFZGKS4gU28sIHRoZXkgcmVwcmVzZW50IHNvbWUgZm9ybSBvZiBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBtZWNoYW5pc20gd2l0aGluIHRoZSBzeXN0ZW0sIGxpa2VseSB0aWVkIHRvIHRoZSBPY3Rlb24gcGxhdGZvcm0uCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgKndoZXJlKiB0aGlzIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgZnVuY3Rpb24gaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCYjMzk7cyBpbnZva2VkIGFuZCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGVzZSBtYWlsYm94IGNvbW1hbmRzIGFyZSBpbml0aWF0ZWQgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgZmxvdyBvZiB0aGVzZSBjb21tYW5kcy4gSSBuZWVkIHRvIHNlZSB0aGUgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jdGVvbl9tYm94X3Byb2Nlc3NfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYz0yMzQ9c3RhdGljIHZvaWQgZ2V0X3ZmX3N0YXRzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjU0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM6MjU1OiAqIG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjU2LSAqIEBtYm94OiBQb2ludGVyIG1haWxib3hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0yNjAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzoyNjE6c3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0yNjItXHRcdFx0XHQgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYz0zMjQ9aW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzc1LVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1ib3gtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM6Mzc2Olx0XHRvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChtYm94LCBcdTAwMjZtYm94X2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0zNzctXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgTWVzc2FnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCBjYWxscyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBhIGxheWVyZWQgYXBwcm9hY2guIEl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUgbWVzc2FnZSBwcmVwcm9jZXNzaW5nIG9yIGRpc3BhdGNoIGhhcHBlbmluZyBpbiB0aGUgYF9tZXNzYWdlYCBmdW5jdGlvbiwgYW5kIHRoZW4gdGhlIGFjdHVhbCBjb21tYW5kIGV4ZWN1dGlvbiByZXNpZGVzIGluIHRoZSBgX2NtZGAgZnVuY3Rpb24uIE1ha2VzIHNlbnNlIGZyb20gYW4gb3JnYW5pemF0aW9uIHBlcnNwZWN0aXZlLCBsaWtlbHkgYSBkaXNwYXRjaGVyIHBhdHRlcm4uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsICp3aGVyZSogaXMgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAgYmVpbmcgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBrZXkuIElzIGl0IGFuIGludGVycnVwdCBoYW5kbGVyLCBhIHNjaGVkdWxlZCB0YXNrLCBvciBzb21ldGhpbmcgdHJpZ2dlcmVkIGJ5IGFub3RoZXIgcHJvY2Vzcz8gS25vd2luZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IGFib3V0IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBpdCBvcGVyYXRlcywgdGhlIHBvdGVudGlhbCBzb3VyY2VzIG9mIHRoZSBtZXNzYWdlcywgYW5kIGxpa2VseSwgdGhlIHVyZ2VuY3kgb2YgbWVzc2FnZSBwcm9jZXNzaW5nIGFuZCBhbnkgdGhyZWFkIHNhZmV0eSByZXF1aXJlbWVudHMgSSBuZWVkIHRvIGNvbnNpZGVyLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSBjYWxsZXJzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jPTUwOT1zdGF0aWMgdm9pZCBjbjIzeHhfcGZfbWJveF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTI4LVx0XHRcdFx0aWYgKG9jdGVvbl9tYm94X3JlYWQob2N0LVx1MDAzZW1ib3hbcV9ub10pKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1Mjk6XHRcdFx0XHRcdG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTMwLVx0XHRcdFx0XHQgICAgb2N0LVx1MDAzZW1ib3hbcV9ub10pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTM1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTM2Olx0XHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UobWJveCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUzNy1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jPTI2Mz1zdGF0aWMgdm9pZCBjbjIzeHhfdmZfbWJveF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtMjY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYzoyNjg6XHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UobWJveCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTI2OS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM9MjYxPXN0YXRpYyBpbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMxOC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjMxOTogKiBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyMC0gKiBAbWJveDogbWFpbGJveFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjMyNDppbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94Lmg9MTIwPWludCBvY3Rlb25fbWJveF93cml0ZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmgtMTIxLVx0XHQgICAgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaDoxMjI6aW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmgtMTIzLWludCBvY3Rlb25fbWJveF9jYW5jZWwoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCwgaW50IHFfbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGRlY2lkZSBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBhIGBjbjIzeHhgIGRldmljZSAobGlrZWx5IENhdml1bS9NYXJ2ZWxsIGhhcmR3YXJlKSwgYW5kIGl0IHRvdWNoZXMgbWFpbGJveCBjb21tYW5kcy4gVGhlIGNvZGUgaXMgY2FsbGVkIGZyb20gYGNuMjN4eF9wZl9tYm94X3RocmVhZGAgYW5kIGBjbjIzeHhfdmZfbWJveF90aHJlYWRgIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYSBtZXNzYWdlIHBhc3NpbmcgbWVjaGFuaXNtIHdpdGggdGhlIGhhcmR3YXJlLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIHJlYWNoIHRoaXM/IFdlICpkbyogaGF2ZSBhIFBDSSBmdXp6ZXIsIGJ1dCBpdCYjMzk7cyBnZW5lcmFsbHkgcHJldHR5IGJhc2ljLiBJdCYjMzk7cyBnb29kIGZvciBwcm9iaW5nIGFuZCBiYXNpYyBNTUlPL0RNQSwgYnV0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGFjdHVhbGx5ICp0cmlnZ2VyKiBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLCB0aGUgZnVuY3Rpb24gdGhhdCBzZWVtcyBjZW50cmFsIGhlcmUuIFRoYXQgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHJlYWRpbmcgZnJvbSBhIG1haWxib3gsIHdoaWNoIHN1Z2dlc3RzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgaGFyZHdhcmUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZml4ZXMgYW4gU1ItSU9WIChgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgKSBidWcgaW4gdGhlIGBsaXF1aWRpb2AgZHJpdmVyLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgc3dhcHBpbmcgb3V0IGBkcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dGAgZm9yIGEgZHluYW1pYyBsb29rdXAgdGFibGUgKGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gKS4gVGhpcyBzZWVtcyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKmdldCogdG8gdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuLi4KClRoZSBwcm9tcHQgaXMgc3BlY2lmaWMuIEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQmIzM5O3MgKmltcG9zc2libGUqIHRvIHJlYWNoIHRoZSBjb2RlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGtleS4gSXMgdGhlIENhdml1bSBMaXF1aWRJTyBkZXZpY2UgZW11bGF0ZWQgaW4gUUVNVT8gTm8uIEJ1dCwgd2hhdCBhYm91dCB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXI/CgpTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciB3b3JrcyBieSB1c2luZyBhIHBzZXVkby1zeXNjYWxsIGBzeXpfcGNpX2RldmljZWAgdG8gaW5qZWN0IGEgKmZha2UqIFBDSSBkZXZpY2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGludGVyY2VwdGluZyBNTUlPIHJlYWRzL3dyaXRlcy4gU28sIGRvZXMgKnRoYXQqIGNvdW50IGFzIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBhcyB0aGUgcHJvbXB0IHNheXM/IFllcywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGZvcm0gb2Ygc29mdHdhcmUgZW11bGF0aW9uLiBTbywgaXMgdGhlIHF1ZXN0aW9uIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQ/CgpUaGUgcmVhbCBxdWVzdGlvbiBpcyAqaG93KiBsaW1pdGVkIGlzIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyPyBJdCBjYW4gdHJpZ2dlciBwcm9iZXMgYW5kIG1heWJlIGJhc2ljIGludGVycnVwdHMgb3Igd29ya3F1ZXVlcyBpZiB0aGV5IGdldCBzY2hlZHVsZWQgZHVyaW5nIHRoZSBwcm9iZS4gTm93IEkgbmVlZCB0byBjaGVjayBpZiBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgY2FuIHNpbXVsYXRlIHRoZSBuZWNlc3NhcnkgY29uZGl0aW9ucyB0byB0cmlnZ2VyIHRoZSBjaGFuZ2VkIGNvZGUgcGF0aCBpbiB0aGUgcGF0Y2guIFNpbmNlIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gY29uc2lkZXIgZXZlbiBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSwgaXQmIzM5O3Mgbm90IGxvb2tpbmcgZ29vZCwgYnV0IGxldCYjMzk7cyBjaGVjayB3aGF0JiMzOTtzIHJlYWNoYWJsZSBkdXJpbmcgdGhlIHByb2JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY3Rlb25fZW5hYmxlX3NyaW92JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz0zMzIyPXN0YXRpYyBpbnQgc2V0dXBfbmljX2RldmljZXMoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdGVvbl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzc3OC0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jOjM3Nzk6c3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zNzgwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz0zODE2PXN0YXRpYyBpbnQgbGlxdWlkaW9fZW5hYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM4MzctXHRcdG9jdC1cdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IG51bV92ZnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzozODM4Olx0XHRyZXQgPSBvY3Rlb25fZW5hYmxlX3NyaW92KG9jdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zODM5LVx0XHRkZXZfaW5mbyhcdTAwMjZvY3QtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsIFwmIzM0O29jdC1cdTAwM2VwZl9udW06JWQgbnVtX3ZmczolZFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbmV0d29ya2luZyBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKlRyYWNpbmcgdGhlIFNSSU9WIEVuYWJsZW1lbnQgUGF0aCoqCgpBbHJpZ2h0LCBzbyBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBTUi1JT1YgKFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbikgZW5hYmxlbWVudCBmb3IgdGhpcyBPY3Rlb24tYmFzZWQgbmV0d29yayBkZXZpY2UuICBUaGUgY29kZSB0ZWxscyBtZSB0aGF0IGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgIGlzIHRoZSBvbmUgY2FsbGluZyBpdC4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgZG9lcyAqdGhpcyogZnVuY3Rpb24sIGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgLCBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiB0byB0cnVseSBncmFzcCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgY29uZmlndXJhdGlvbi4gS25vd2luZyB3aGVyZSBgbGlxdWlkaW9fZW5hYmxlX3NyaW92YCBpcyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBTUi1JT1YgaXMgYmVpbmcgZW5hYmxlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXF1aWRpb19lbmFibGVfc3Jpb3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTEyNz1zdHJ1Y3QgaGFuZHNoYWtlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0xMzUtI2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzoxMzY6c3RhdGljIGludCBsaXF1aWRpb19lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMTM3LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTQyMT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbGlxdWlkaW9fcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy00MjgtI2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo0Mjk6XHQuc3Jpb3ZfY29uZmlndXJlID0gbGlxdWlkaW9fZW5hYmxlX3NyaW92LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtNDMwLSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTM4MDA9c3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zODE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM6MzgxNjpzdGF0aWMgaW50IGxpcXVpZGlvX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM4MTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDk2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNyaW92X2NvbmZpZ3VyZWAgQ2FsbGJhY2sgYW5kIE1haWxib3ggVGhyZWFkKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYC5zcmlvdl9jb25maWd1cmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHN0cnVjdCBwY2lfZHJpdmVyYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnRyaWdnZXIqIHRoaXM/IEFuZCB0aGUgYW5zd2VyLCBpdCBzZWVtcywgaXMgYSBjbGVhciB5ZXMg4oCTIGJ5IG1lc3Npbmcgd2l0aCBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3NyaW92X251bXZmc2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIHRoZSByZWFsIG1lYXQgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgd3JhcHBlZCB1cCB3aXRoaW4gdGhlIGBjbjIzeHhfcGZfbWJveF90aHJlYWRgLCByaWdodD8gVGhpcyBpcyB0aGUgd29ya3F1ZXVlIHRoYXQgcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBtYWlsYm94IHByb2Nlc3MgY29tbWFuZCwgd2hpY2ggaXMgdGhlIGJpdCBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgKndoZW4qIHRoaXMgd29ya3F1ZXVlIGdldHMgc2NoZWR1bGVkLiBTbywgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBlaXRoZXIgaW50ZXJydXB0LWRyaXZlbiBvciBwb2xsZWQuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3Qgc2NoZWR1bGluZyBtZWNoYW5pc20gZm9yIHRoYXQgYGNuMjN4eF9wZl9tYm94X3RocmVhZGAuIFdoZXJlIGlzIGl0IGJlaW5nIHNjaGVkdWxlZCBmcm9tIGV4YWN0bHk/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbjIzeHhfcGZfbWJveF90aHJlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NDU5PXN0YXRpYyB2b2lkIGNuMjN4eF9zZXR1cF9vcV9yZWdzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBvcV9ubylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUwOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTA5OnN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUxMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz01NDA9c3RhdGljIGludCBjbjIzeHhfc2V0dXBfcGZfbWJveChzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTc4LVx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtYm94LVx1MDAzZW1ib3hfcG9sbF93ay53b3JrLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1Nzk6XHRcdFx0XHQgIGNuMjN4eF9wZl9tYm94X3RocmVhZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTU4MC1cdFx0bWJveC1cdTAwM2VtYm94X3BvbGxfd2suY3R4cHRyID0gKHZvaWQgKiltYm94O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHRhaWxvcmVkIGFzIGlmIEksIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBhbSBjb25zaWRlcmluZyB0aGVtOgoKKipEZWJ1Z2dpbmcgdGhlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBjbjIzeHhfc2V0dXBfcGZfbWJveGAgZnVuY3Rpb24gYW5kIHNvbWV0aGluZyYjMzk7cyBjbGVhcmx5IG5vdCBoYXBwZW5pbmcgd2hlbiBJIGV4cGVjdCBpdCB0by4gVGhlIGNvbW1lbnQgc3RhdGVzIHRoZSBpbml0aWFsaXphdGlvbiBJJiMzOTttIGNoYXNpbmcgaXMgKmRlbGF5ZWQqIGFuZCBoYXBwZW5zIGluIHRoYXQgZnVuY3Rpb24uIE15IHByaW1hcnkgcXVlc3Rpb24gbm93IGlzOiBXaGVyZSB0aGUgaGVsbCBpcyBgY24yM3h4X3NldHVwX3BmX21ib3hgIGdldHRpbmcgY2FsbGVkIGZyb20/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRpbmcgcG9pbnQgb2YgdGhpcyBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgZHVyaW5nIGRyaXZlciBwcm9iZT8gSXMgdGhlcmUgc29tZSBzcGVjaWZpYyBldmVudCB0cmlnZ2VyPyBLbm93aW5nIHRoZSBjYWxsIHBhdGggd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBjb25zdHJhaW50cyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgYSBkZWxheSBpbiBteSBleHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIHRoaXMgdml0YWwgZnVuY3Rpb24gZml0cyB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y24yM3h4X3NldHVwX3BmX21ib3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jOjU0MDpzdGF0aWMgaW50IGNuMjN4eF9zZXR1cF9wZl9tYm94KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTU0MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz0xMTM4PWludCBzZXR1cF9jbjIzeHhfb2N0ZW9uX3BmX2RldmljZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4Mi1cdG9jdC1cdTAwM2Vmbl9saXN0LnNldHVwX29xX3JlZ3MgPSBjbjIzeHhfc2V0dXBfb3FfcmVncztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6MTE4MzpcdG9jdC1cdTAwM2Vmbl9saXN0LnNldHVwX21ib3ggPSBjbjIzeHhfc2V0dXBfcGZfbWJveDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4NC1cdG9jdC1cdTAwM2Vmbl9saXN0LmZyZWVfbWJveCA9IGNuMjN4eF9mcmVlX3BmX21ib3g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ2FsbGJhY2sgYW5kIENhbGwgU3RhY2sgRXhwbG9yYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBjYWxsYmFjayBoZXJlIOKAkyBzcGVjaWZpY2FsbHksIGBzZXR1cF9tYm94YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgaW4gdGhlIGNvZGViYXNlIGlzIHRoaXMgYHNldHVwX21ib3hgIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nIGludm9rZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHRoZSBvcmlnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldHVwX21ib3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9MTEzOD1pbnQgc2V0dXBfY24yM3h4X29jdGVvbl9wZl9kZXZpY2Uoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTExODItXHRvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9vcV9yZWdzID0gY24yM3h4X3NldHVwX29xX3JlZ3M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jOjExODM6XHRvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3BmX21ib3g7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTExODQtXHRvY3QtXHUwMDNlZm5fbGlzdC5mcmVlX21ib3ggPSBjbjIzeHhfZnJlZV9wZl9tYm94O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM9NjE2PWludCBjbjIzeHhfc2V0dXBfb2N0ZW9uX3ZmX2RldmljZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNjY2LVx0b2N0LVx1MDAzZWZuX2xpc3Quc2V0dXBfb3FfcmVncyA9IGNuMjN4eF9zZXR1cF92Zl9vcV9yZWdzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYzo2Njc6XHRvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3ZmX21ib3g7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTY2OC1cdG9jdC1cdTAwM2Vmbl9saXN0LmZyZWVfbWJveCA9IGNuMjN4eF9mcmVlX3ZmX21ib3g7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19ldGh0b29sLmM9MTA4NT1zdGF0aWMgaW50IGxpb19yZXNldF9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgbnVtX3FzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fZXRodG9vbC5jLTExOTYtXHRcdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdCkgXHUwMDI2XHUwMDI2ICFvY3QtXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX2V0aHRvb2wuYzoxMTk3Olx0XHRcdGlmIChvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94KG9jdCkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fZXRodG9vbC5jLTExOTgtXHRcdFx0XHRkZXZfZXJyKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7TWFpbGJveCBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTQwMDc9c3RhdGljIGludCBvY3Rlb25fZGV2aWNlX2luaXQoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdGVvbl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtNDE0My1cdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdGVvbl9kZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo0MTQ0Olx0XHRpZiAob2N0ZW9uX2Rldi1cdTAwM2Vmbl9saXN0LnNldHVwX21ib3gob2N0ZW9uX2RldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTQxNDUtXHRcdFx0ZGV2X2VycihcdTAwMjZvY3Rlb25fZGV2LVx1MDAzZXBjaV9kZXYtXHUwMDNlZGV2LCBcJiMzNDtPQ1RFT046IE1haWxib3ggc2V0dXAgZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYz0yMjY4PXN0YXRpYyBpbnQgb2N0ZW9uX2RldmljZV9pbml0KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb192Zl9tYWluLmMtMjMzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fdmZfbWFpbi5jOjIzNDA6XHRpZiAob2N0LVx1MDAzZWZuX2xpc3Quc2V0dXBfbWJveChvY3QpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYy0yMzQxLVx0XHRkZXZfZXJyKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7TWFpbGJveCBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmg9MjMyPXN0cnVjdCBvY3Rlb25fZm5fbGlzdCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaC0yMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX2RldmljZS5oOjIzOTpcdGludCAoKnNldHVwX21ib3gpKHN0cnVjdCBvY3Rlb25fZGV2aWNlICopO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaC0yNDAtXHRpbnQgKCpmcmVlX21ib3gpKHN0cnVjdCBvY3Rlb25fZGV2aWNlICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9jdGVvbiBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgb2N0ZW9uX2RldmljZV9pbml0YCBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyB0aGUgUENJIHByb2JlIHNlcXVlbmNlLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgbWFpbGJveCB0aHJlYWQgZ2V0cyBpbml0aWFsaXplZCBhbmQgc2NoZWR1bGVkLCB3aGljaCBoYXBwZW5zIGR1cmluZyB0aGUgUENJIHByb2JlIHBoYXNlLiBUaGUgbWFpbGJveCB0aHJlYWQmIzM5O3Mgam9iIGlzIHRvIGNvbnRpbnVhbGx5IHBvbGwgdGhvc2UgbWFpbGJveCByZWdpc3RlcnMuIE5vdywgdGhlIGtleSBoZXJlIGlzIHRoYXQgaWYgU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgaW5qZWN0cyBhIGZha2UgTGlxdWlkSU8gZGV2aWNlLCB0aGUgZHJpdmVyIHdpbGwgZ28gdGhyb3VnaCB0aGUgbW90aW9ucyBvZiBwcm9iaW5nIGl0LiBJdCYjMzk7bGwgc2V0IHVwIHRoZSBtYWlsYm94LCBhbmQgdGhlIHBvbGxpbmcgc3RhcnRzLgoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgUENJIGZ1enplciBjYW4gZmVlZCB0aGUgZHJpdmVyIGZha2UgdmFsdWVzIHdoZW4gaXQgcmVhZHMgdGhvc2UgbWFpbGJveCByZWdpc3RlcnMuIFRoYXQgbWVhbnMgd2UgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBhbmQgZXhlY3V0ZSBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIHdpdGggZGF0YSBmdWxseSBjb250cm9sbGVkIGJ5IHRoZSBmdXp6ZXIuIEhvbGQgb24sIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gaWYgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWxpc3RpYyBzY2VuYXJpby4KClNvLCB0aGUgUENJIGZ1enplciBzZXRzIHVwIHRoaXMgZmFrZSBQQ0kgZGV2aWNlLCBhbmQgdGhlIGRyaXZlciBnb2VzIGFib3V0IG1hcHBpbmcgdGhlIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMgKEJBUnMpIGFuZCByZWFkaW5nIGZyb20gdGhlbS4gV2hlbiBgb2N0ZW9uX21ib3hfcmVhZGAgaXMgY2FsbGVkLCBpdCYjMzk7cyBlc3NlbnRpYWxseSByZWFkaW5nIGZyb20gb25lIG9mIHRob3NlIEJBUnMuIFJpZ2h0LCBzbyBub3cgSSBuZWVkIHRvIGNoZWNrIGhvdyBgb2N0ZW9uX21ib3hfcmVhZGAgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jdGVvbl9tYm94X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MjctXHRcdFx0aWYgKHZhbDY0IFx1MDAyNlx1MDAyNiAodmFsNjQgIT0gT0NURU9OX1BGVkZBQ0spKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jOjUyODpcdFx0XHRcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cdTAwM2VtYm94W3Ffbm9dKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTI5LVx0XHRcdFx0XHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UoXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz04MTM9c3RhdGljIHZvaWQgY24yM3h4X2hhbmRsZV9wZl9tYm94X2ludHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTgyNi1cdFx0XHQgICAgICAgb2N0LVx1MDAzZW1ib3hbMF0tXHUwMDNlbWJveF9pbnRfcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6ODI3Olx0XHRcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cdTAwM2VtYm94W3Ffbm9dKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy04MjgtXHRcdFx0XHR3b3JrID0gXHUwMDI2b2N0LVx1MDAzZW1ib3hbcV9ub10tXHUwMDNlbWJveF9wb2xsX3drLndvcms7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYz00NzI9c3RhdGljIHZvaWQgY24yM3h4X2hhbmRsZV92Zl9tYm94X2ludHIoc3RydWN0IG9jdGVvbl9pb3FfdmVjdG9yICppb3FfdmVjdG9yKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgwLVx0XHR3cml0ZXEobWJveF9pbnRfdmFsLCBvY3QtXHUwMDNlbWJveFswXS1cdTAwM2VtYm94X2ludF9yZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYzo0ODE6XHRcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cdTAwM2VtYm94WzBdKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgyLVx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZvY3QtXHUwMDNlbWJveFswXS1cdTAwM2VtYm94X3BvbGxfd2sud29yayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYz0yOT1zdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy01NC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjU1OiAqIG9jdGVvbl9tYm94X3JlYWQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy01Ni0gKiBAbWJveDogUG9pbnRlciBtYWlsYm94XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtNjAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzo2MTppbnQgb2N0ZW9uX21ib3hfcmVhZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy02Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94Lmg9MTE0PXN0cnVjdCBvY3RfdmZfc3RhdHNfY3R4IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaC0xMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaDoxMTk6aW50IG9jdGVvbl9tYm94X3JlYWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oLTEyMC1pbnQgb2N0ZW9uX21ib3hfd3JpdGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGFuZCBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gYG9jdGVvbl9tYm94X3JlYWRgIGlzIGhvdyB3ZSBnZXQgZGF0YSBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVycy4gSWYgdGhlIFBDSSBmdXp6ZXIgaW4gc3l6a2FsbGVyIGNhbiBwcm92aWRlIHRoZSAqcmlnaHQqIHZhbHVlcywgdGhhdCBzaG91bGQgdHJpZ2dlciBgb2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlYCBhbmQgdWx0aW1hdGVseSBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBBbmQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIHRvIGhhbmRsZSBgT0NURU9OX1ZGX0ZMUl9SRVFVRVNUYC4gVGhpcyB0aGVuIGNhbGxzIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gLgoKTm93LCB0aGF0IGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggUENJIGRldmljZXMgdXNpbmcgYHBjaV9nZXRfZGV2aWNlYCB3aXRoIENhdml1bSYjMzk7cyB2ZW5kb3IgSUQuIEl0IGNoZWNrcyB0aGUgUGh5c2ljYWwgRnVuY3Rpb24gKFBGKSBvZiB0aGUgZGV2aWNlIGFuZCB0aGUgVmlydHVhbCBGdW5jdGlvbiBJRCAoVkZJRCkuIENvdWxkIHN5emthbGxlciBhY3R1YWxseSAqdHJpZ2dlciogdGhpcz8gSSB0aGluayBzby4gSWYgdGhlIFBDSSBmdXp6ZXIgY2FuIGluamVjdCBhICpmYWtlKiBQRiBkZXZpY2UsIGl0IG1pZ2h0IG5lZWQgdG8gaW5qZWN0IGZha2UgVkZzIGFzIHdlbGwgdG8gbWFrZSB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSBkbyBzb21ldGhpbmcuIEJ1dCBldmVuIGlmIGl0ICpkb2VzbiYjMzk7dCogZmluZCBhIFZGLCB0aGUgZnVuY3Rpb24gd2lsbCBzdGlsbCBleGVjdXRlIGFuZCByZXR1cm4gTlVMTCwgd2hpY2ggaXMgc3RpbGwgcmVhY2hhYmxlIGNvZGUhCgpIb2xkIG9uLCB0aGUgcGF0Y2ggKmFsc28qIG1lc3NlcyB3aXRoIGBvY3Rlb25fZW5hYmxlX3NyaW92YCBhbmQgYGxpb19wY2lfc3Jpb3ZfZGlzYWJsZWAuIFRob3NlIGFyZSBsaW5rZWQgdG8gU1ItSU9WIGJlaW5nIGVuYWJsZWQvZGlzYWJsZWQgdGhyb3VnaCBzeXNmcywgcmlnaHQ/IEFuZCBzeXprYWxsZXIgKmNhbiogd3JpdGUgdG8gc3lzZnMgZmlsZXMuIFNvLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIGBvY3Rlb25fZW5hYmxlX3NyaW92YCEKCklzIHRoaXMgZXZlbiAqd29ydGgqIGZ1enppbmc/IFdlbGwsIHRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aXRoIHRoZSBvbGQgYGRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0YCBhcHByb2FjaC4gSXQgc291bmRzIGxpa2UgdGhlcmUgY291bGQgaGF2ZSBiZWVuIGlzc3VlcyB0aGVyZSwgbGlrZSB1c2UtYWZ0ZXItZnJlZSBpZiBWRnMgd2VyZSByZW1vdmVkLCBvciBqdXN0IHdyb25nIG1hcHBpbmdzLiBUaGUgbmV3IGNvZGUgZHluYW1pY2FsbHkgZmluZHMgdGhlIFZGLiBUaGlzIHNlZW1zIGxpa2UgZnVuY3Rpb25hbCBjb2RlIGluIGEgaGFyZHdhcmUgZHJpdmVyLiBBbmQgaXQgc291bmRzIGxpa2UgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIFBDSSBmdXp6ZXIgKmFuZCogc3lzZnMgd3JpdGVzLCByaWdodD8KCldhaXQgYSBzZWNvbmQuIElzIGBMSVFVSURJT2AgZXZlbiAqZW5hYmxlZCogaW4gc3l6a2FsbGVyJiMzOTtzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIHRoZXJlIG9yIGlmIHdlIG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGl0LiBZZWFoLCB3ZSYjMzk7bGwgbmVlZCB0byBzcGVjaWZ5IGBMSVFVSURJT2AgaW4gYEVuYWJsZUNvbmZpZ3NgLiBHb3R0YSBjaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgaXQgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMSVFVSURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2NTpjb25maWcgTElRVUlESU9fQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjYtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2ODpjb25maWcgTElRVUlESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIExpcXVpZElPIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz04ND1jb25maWcgT0NURU9OX01HTVRfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjk1OmNvbmZpZyBMSVFVSURJT19WRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtDYXZpdW0gTGlxdWlkSU8gVkYgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTElRVUlESU8gQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgYW5kIGl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdHdvIGtleSBjb25maWd1cmF0aW9uczogYExJUVVJRElPYCBhbmQgYExJUVVJRElPX1ZGYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3ZlIGdvdCBhIHNldHVwIHdpdGggYSBwaHlzaWNhbCBmdW5jdGlvbiBhbmQgdmlydHVhbCBmdW5jdGlvbnMsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFzIGEgcmVzdWx0LgoKVGhlIGNvcmUgZmlsZXMgYWZmZWN0ZWQgYXJlIGBsaW9fbWFpbi5jYCAobGlrZWx5IHRoZSBtYWluIGRyaXZlciBlbnRyeSBwb2ludCBmb3IgdGhlIGBMSVFVSURJT2AgcGF0aCksIHdoaWNoIHNlZW1zIHByZXR0eSBleHBlY3RlZCBnaXZlbiB0aGUgY29uZmlnIG5hbWUsIGFuZCBgb2N0ZW9uX21haWxib3guY2AuIE5vdywgYG9jdGVvbl9tYWlsYm94LmNgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCYjMzk7cyBwcm9iYWJseSBwYXJ0IG9mIHRoZSBgTElRVUlESU9fQ09SRWAsIGFuZCBzdWdnZXN0cyBjb21tdW5pY2F0aW9uIGlzIGxpa2VseSBiZWluZyBzaGFyZWQgYmV0d2VlbiBQRiBhbmQgVkYuIEl0JiMzOTtzIG9mdGVuIHNoYXJlZCwgYmVjYXVzZSB0aGUgbWFpbGJveCBpcyB0eXBpY2FsbHkgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbi4gU2hhcmVkIGNvZGUgYWNyb3NzIHRoZSBQRiBhbmQgVkZzIGlzIGFsc28gZXhwZWN0ZWQsIHRoaXMgaXMgdHlwaWNhbCBpbiBtb3N0IGRyaXZlcnMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIHdpcmVkIHVwLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBkZXBlbmRlbmNpZXMsIGJ1aWxkIGZsYWdzLCBhbmQgc2VlIHdoZXJlIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAgYXJlIGJlaW5nIHVzZWQgdG8gaW5jbHVkZSBjb2RlLiBBIG1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBjb250ZXh0IGZvciB0aGUgaW5jbHVzaW9uIG9mIGFsbCB0aGlzIGxvZ2ljIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBkcml2ZXIgd2lsbCBiZSBicm91Z2h0IGluIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgQ2F2aXVtIExpcXVpZGlvIGV0aGVybmV0IGRldmljZSBkcml2ZXJcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0xJUVVJRElPX0NPUkUpICYjNDM7PSBsaXF1aWRpby1jb3JlLm9cbiAgIDc6XHRsaXF1aWRpby1jb3JlLXkgOj0gXFxcbiAgIDg6XHRcdFx0bGlvX2V0aHRvb2wub1x0XHRcXFxuICAgOTpcdFx0XHRsaW9fY29yZS5vXHRcdFxcXG4gIDEwOlx0XHRcdHJlcXVlc3RfbWFuYWdlci5vXHRcXFxuICAxMTpcdFx0XHRyZXNwb25zZV9tYW5hZ2VyLm9cdFxcXG4gIDEyOlx0XHRcdG9jdGVvbl9kZXZpY2Uub1x0XHRcXFxuICAxMzpcdFx0XHRjbjY2eHhfZGV2aWNlLm9cdFx0XFxcbiAgMTQ6XHRcdFx0Y242OHh4X2RldmljZS5vXHRcdFxcXG4gIDE1Olx0XHRcdGNuMjN4eF9wZl9kZXZpY2Uub1x0XFxcbiAgMTY6XHRcdFx0Y24yM3h4X3ZmX2RldmljZS5vXHRcXFxuICAxNzpcdFx0XHRvY3Rlb25fbWFpbGJveC5vXHRcXFxuICAxODpcdFx0XHRvY3Rlb25fbWVtX29wcy5vXHRcXFxuICAxOTpcdFx0XHRvY3Rlb25fZHJvcS5vXHRcdFxcXG4gIDIwOlx0XHRcdG9jdGVvbl9uaWMub1xuICAyMTpcdFxuICAyMjpcdG9iai0kKENPTkZJR19MSVFVSURJTykgJiM0Mzs9IGxpcXVpZGlvLm9cbiAgMjM6XHRsaXF1aWRpby15IDo9IGxpb19tYWluLm8gb2N0ZW9uX2NvbnNvbGUubyBsaW9fdmZfcmVwLm9cbiAgMjQ6XHRcbiAgMjU6XHRvYmotJChDT05GSUdfTElRVUlESU9fVkYpICYjNDM7PSBsaXF1aWRpb192Zi5vXG4gIDI2Olx0bGlxdWlkaW9fdmYteSA6PSBsaW9fdmZfbWFpbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTGlxdWlkSU8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBMaXF1aWRJTyBkcml2ZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIFNSLUlPViBmdW5jdGlvbmFsaXR5IGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgY29uZmlncyB0byBjb25zaWRlciBhcmUgYExJUVVJRElPYCBhbmQgYExJUVVJRElPX1ZGYCwgYXMgdGhlIHBhdGNoIHRvdWNoZXMgYGxpb19tYWluLmNgIChwYXJ0IG9mIGBsaXF1aWRpby5vYCkgYW5kIGBvY3Rlb25fbWFpbGJveC5jYCAocGFydCBvZiBgbGlxdWlkaW8tY29yZS5vYCkuIFNpbmNlIGBMSVFVSURJT19DT1JFYCBpcyBzZWxlY3RlZCBieSBib3RoIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAsIGVuYWJsaW5nIGp1c3QgYExJUVVJRElPYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCBjYWxsZWQgYnkgYExJUVVJRElPX0NPUkVgLiBJJiMzOTtsbCBhbHNvIGFkZCBgUENJX0lPVmAganVzdCB0byBiZSBzYWZlLCBiZWNhdXNlIGBvY3Rlb25fZW5hYmxlX3NyaW92YCB1c2VzIGl0LCBhbmQgaXQmIzM5O3MgYSBnZW5lcmFsbHkgc2FmZSBjb25maWcgdG8gZW5hYmxlIGluIHN5emthbGxlci4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFdlIGhhdmU6CgoqICAgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgCiogICBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYAoqICAgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgKGEgbmV3IGZ1bmN0aW9uKQoqICAgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYAoKQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbiB0aGUgY3JpdGljYWwgcGF0aD8gYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgcmVsYXRlZCB0byBTUi1JT1YgZW5hYmxpbmcvZGlzYWJsaW5nLCB3aGljaCBJJiMzOTtkIGNsYXNzaWZ5IGFzIHNsb3ctcGF0aCBvcGVyYXRpb25zLiBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGhhbmRsaW5nIG1haWxib3ggY29tbWFuZHMuIE5vdCBhIHBhY2tldCBwcm9jZXNzaW5nIGhvdCBwYXRoLCBidXQgYSBjb250cm9sIHBhdGguIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gIGlzIGNhbGxlZCB3aXRoaW4gYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCB0byBoYW5kbGUgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAuIFNvLCBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIGFsb25nIHdpdGggYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgYXJlIGRlZmluaXRlbHkgZ29vZCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzLiBDaGVja2luZyB0aGUgY29kZSwgdGhleSBhcmUuIFNwZWNpZmljYWxseSwgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgc3RhdGljIGluIGBsaW9fbWFpbi5jYCwgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgYW5kIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgYXJlIHN0YXRpYyBpbiBgb2N0ZW9uX21haWxib3guY2AuCgpBIGtleSBjb25zaWRlcmF0aW9uIGhlcmUgaXMgd2hldGhlciB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IHNwZWNpZmllcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlLCBzbyBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwuIENvbnNpZGVyaW5nIHRoZSBMaXF1aWRJTyBkcml2ZXIsIGNhbiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciByZWFjaCBpdD8gVGhlIGFuc3dlciBpcyB5ZXMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGRvZXNuJiMzOTt0IGZ1bGx5IGVtdWxhdGUgdGhlIExpcXVpZElPIGhhcmR3YXJlLCBpdCAqZG9lcyogcHJvdmlkZSBhIGR1bW15IFBDSSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSB2ZW5kb3IvZGV2aWNlIElELiBUaGlzIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBkcml2ZXIgdG8gcHJvYmUsIG1hcCBCQVJzLCBhbmQgcG90ZW50aWFsbHkgcmVhZCBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVycy4gUmVhZGluZyBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVyIGNvdWxkIHRyaWdnZXIgZXhlY3V0aW9uIG9mIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAuCgpHaXZlbiB0aGlzLCBJIGNvbmNsdWRlIHRoYXQgdGhlIHBhdGNoIGlzLCBpbiBmYWN0LCByZWFjaGFibGUuIEFuZCwgZ2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBkcml2ZXIsIGZ1enppbmcgaXQgaXMgd29ydGh3aGlsZSwgZW5zdXJpbmcgdGhlIGZpeCBpcyBjb3JyZWN0LCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgaXM6CgoqICAgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgCiogICBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYAoqICAgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AKKiAgIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAKCkFuZCB0aGUgbmVjZXNzYXJ5IGBDb25maWdzYCBhcmU6CgoqICAgYExJUVVJRElPYAoqICAgYFBDSV9JT1ZgCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBwcmVjaXNlbHkgZnJvbSB0aGUgY29kZToKCiogICBgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpYAoqICAgYHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpYAoqICAgYHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBxX25vKWAKKiAgIGBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCwgc3RydWN0IG9jdGVvbl9tYm94X2NtZCAqbWJveF9jbWQpYAoKVGhleSBhcmUgY29ycmVjdC4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMSVFVSURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2NTpjb25maWcgTElRVUlESU9fQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjYtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2ODpjb25maWcgTElRVUlESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIExpcXVpZElPIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz04ND1jb25maWcgT0NURU9OX01HTVRfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjk1OmNvbmZpZyBMSVFVSURJT19WRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtDYXZpdW0gTGlxdWlkSU8gVkYgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlVuZGVyc3RhbmRpbmcgTElRVUlESU8mIzM5O3MgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBMSVFVSURJT2AuIEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ganVzdCBzZWUgdGhlbTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbS4gVGhpbmtpbmcgbGlrZSBhbiBleHBlcnQgaW4gW2Fzc3VtZWQgZmllbGQgYmFzZWQgb24gTElRVUlESU8gLSBlLmcuLCBkaXN0cmlidXRlZCBzeXN0ZW1zLCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmUsIGNsb3VkIGluZnJhc3RydWN0dXJlLCBldGMuXSwgSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggYSB2ZXJ5IHNwZWNpZmljIGZyYW1ld29yay4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBhIHNpbXBsZSBsaXN0LiBJJiMzOTttIGdvaW5nIHRvIGJlIGFzc2Vzc2luZzoKCiogICAqKkRlcGVuZGVuY3kgdHlwZXM6KiogQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGRlcGVuZGVuY2llcywgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMsIGJ1aWxkIGRlcGVuZGVuY2llcywgcnVudGltZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGV5IGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBleGlzdCwgb3IgYXJlIHRoZXJlIHNvZnQgZGVwZW5kZW5jaWVzLCBsaWtlIG9wdGlvbmFsIGZlYXR1cmVzPwoqICAgKipEZXBlbmRlbmN5IHZlcnNpb25zOioqIFZlcnNpb24gbnVtYmVycyB3aWxsIGJlIGtleS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmFuZ2Ugb2YgYWNjZXB0YWJsZSB2ZXJzaW9ucywgYW55IHZlcnNpb24gY29uc3RyYWludHMsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZlcnNpb24gY29uZmxpY3RzIHRoYXQgY291bGQgY2F1c2UgcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3Igb3V0ZGF0ZWQgb3IgdW5zdXBwb3J0ZWQgdmVyc2lvbnMuCiogICAqKkRlcGVuZGVuY3kgcHVycG9zZToqKiBXaGF0IGRvZXMgZWFjaCBkZXBlbmRlbmN5IGNvbnRyaWJ1dGUgdG8gYExJUVVJRElPYD8gSXMgaXQgY29yZSBmdW5jdGlvbmFsaXR5LCBhIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50LCBhIHNlY3VyaXR5IG1lYXN1cmUsIGEgbG9nZ2luZyBmcmFtZXdvcmssIG9yIHNvbWV0aGluZyBlbHNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgZWFjaCBkZXBlbmRlbmN5LgoqICAgKipEZXBlbmRlbmN5IGhlYWx0aDoqKiBXaGF0JiMzOTtzIHRoZSBtYWludGVuYW5jZSBzdGF0dXMgb2YgZWFjaCBkZXBlbmRlbmN5PyBJcyBpdCBhY3RpdmVseSBkZXZlbG9wZWQgYW5kIHN1cHBvcnRlZCwgb3IgaXMgaXQgYWJhbmRvbmVkIG9yIGF0IHJpc2sgb2YgYmVpbmcgZGVwcmVjYXRlZD8gVGhpcyBpbXBhY3RzIHRoZSBsb25nLXRlcm0gdmlhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkgb2YgYExJUVVJRElPYC4KKiAgICoqUG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczoqKiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMgaW5oZXJlbnQgaW4gdGhlc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGlmIGFueSBvZiB0aGVzZSBhcmUgY29tbW9ubHkga25vd24gdmVjdG9ycyBmb3IgYXR0YWNrIGFuZCBhc3Nlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBkZXBlbmRlbmN5LgoKU28sIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBjdXJzb3J5IGdsYW5jZS4gSSYjMzk7bSByZWFkeSB0byBnZXQgYSBkZXRhaWxlZCB2aWV3IG9mIGBMSVFVSURJT2AmIzM5O3MgZm91bmRhdGlvbiBhbmQgaXRzIHBvdGVudGlhbCByaXNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTE2PWNvbmZpZyBUSFVOREVSX05JQ19QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtUaHVuZGVyIFBoeXNpY2FsIGZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6MTg6XHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTE5LVx0c2VsZWN0IFRIVU5ERVJfTklDX0JHWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTI4PWNvbmZpZyBUSFVOREVSX05JQ19WRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTMwLVx0aW1wbHkgQ0FWSVVNX1BUUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTM1PWNvbmZpZ1x0VEhVTkRFUl9OSUNfQkdYXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy0zNi1cdHRyaXN0YXRlIFwmIzM0O1RodW5kZXIgTUFDIGludGVyZmFjZSBkcml2ZXIgKEJHWClcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy0zOC1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz00NT1jb25maWdcdFRIVU5ERVJfTklDX1JHWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtUaHVuZGVyIE1BQyBpbnRlcmZhY2UgZHJpdmVyIChSR1gpXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo0NzpcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNDgtXHRzZWxlY3QgUEhZTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9NTQ9Y29uZmlnIENBVklVTV9QVFBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIFBUUCBjb3Byb2Nlc3NvciBhcyBQVFAgY2xvY2tcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjU2Olx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo1NzpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTU4LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTY4PWNvbmZpZyBMSVFVSURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjktXHR0cmlzdGF0ZSBcJiMzNDtDYXZpdW0gTGlxdWlkSU8gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjcxOlx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjcyOlx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzMtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz04ND1jb25maWcgT0NURU9OX01HTVRfRVRIRVJORVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTg1LVx0dHJpc3RhdGUgXCYjMzQ7T2N0ZW9uIE1hbmFnZW1lbnQgcG9ydCBldGhlcm5ldCBkcml2ZXIgKENONVhYWCwgQ042WFhYKVwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6ODY6XHRkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU09DXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy04Ny1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz05NT1jb25maWcgTElRVUlESU9fVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTk2LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIExpcXVpZElPIFZGIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjk3Olx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJX01TSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6OTg6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05OS1cdHNlbGVjdCBMSVFVSURJT19DT1JFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDQyCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDM3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ2F2aXVtIExpcXVpZElPIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggZm9yIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyIGhpbmdlcyBvbiBhIGZldyBzdGFuZGFyZCBjb25maWd1cmF0aW9uczogYDY0QklUYCwgYFBDSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBXZSYjMzk7cmUgZm9jdXNpbmcgb24gdGhlIGBMSVFVSURJT2AgYW5kIGBQQ0lfSU9WYCBhc3BlY3RzIGhlcmUsIHdoaWNoIGlzIHN0YW5kYXJkLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIGEgZmV3IGtleSBmdW5jdGlvbnMuIFRoZSBtYWluIG9uZSBJJiMzOTttIHRyYWNraW5nIGlzIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiB0aGUgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcsIGFuZCBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQuIFRoZXJlJiMzOTtzIGFsc28gYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AsIGEgbmV3IGZ1bmN0aW9uLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgLiBUaGVzZSBmb3VyIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwsIGFuZCBwZXJmZWN0IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZm9jdXMgc3ltYm9scyBvbiB0aG9zZS4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBsb2dpYy4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgdGhlIHZpcnR1YWwgZnVuY3Rpb25zIChWRnMpLiBUaGUgZnV6emVyIC0gc3l6a2FsbGVyIC0gY2FuIHJlYWNoIHRoaXMgY29kZSB2aWEgUENJIGVtdWxhdGlvbiBmb3IgbWFpbGJveCBjb21tYW5kcyBhbmQgc3lzZnMgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgY3JpdGljYWwgaGVyZSB0byB2YWxpZGF0ZSB0aGlzIG5ldyBkeW5hbWljIGxvb2t1cCBhbmQgZW5zdXJlIGNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLgoKSG9sZCBvbiwgSSBzZWUgYSBzaWduaWZpY2FudCBhZGRpdGlvbjogYHBjaWVfZmxyKHZmZGV2KTsgcGNpX2Rldl9wdXQodmZkZXYpO2AuIFRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGxvZ2ljLCBhbmQgaXQgbmVlZHMgYSBkZWVwIGRpdmUuCgpPbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBMSVFVSURJT19WRmAgaXMgbm90IG5lZWRlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYG9jdGVvbl9tYWlsYm94LmNgLCBidXQgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAgaXMgaGFuZGxlZCBieSB0aGUgUEYgKHNpbmNlIGl0IGlzIGEgcmVxdWVzdCBfZnJvbV8gdGhlIFZGIF90b18gdGhlIFBGKS4gQW5kIHRoZSBQRiBkcml2ZXIgaXMgYExJUVVJRElPYC4gU28sIHllcywgYExJUVVJRElPYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGUgZHJpdmVyLgoKT2theSwgSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoaXMuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJUVVJRElPJiMzNDssCiAgICAmIzM0O1BDSV9JT1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY3Rlb25fZW5hYmxlX3NyaW92JiMzNDssCiAgICAmIzM0O2xpb19wY2lfc3Jpb3ZfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtsaW9fdmZfcGNpX2Rldl9ieV9xbm8mIzM0OywKICAgICYjMzQ7b2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpY2ggY2FuIGVtdWxhdGUgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBtYWlsYm94IGNvbW1hbmRzLCBhcyB3ZWxsIGFzIHZpYSBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBkeW5hbWljIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMSVFVSURJTyYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2N0ZW9uX2VuYWJsZV9zcmlvdiYjMzQ7LAogICAgJiMzNDtsaW9fcGNpX3NyaW92X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7bGlvX3ZmX3BjaV9kZXZfYnlfcW5vJiMzNDssCiAgICAmIzM0O29jdGVvbl9tYm94X3Byb2Nlc3NfY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUi1JT1YgYW5kIG1haWxib3ggY29tbWFuZCBwcm9jZXNzaW5nIGxvZ2ljIGluIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyLiBJdCByZXBsYWNlcyBhIHN0YXRpYyBsb29rdXAgdGFibGUgd2l0aCBhIGR5bmFtaWMgUENJIGRldmljZSBsb29rdXAgZm9yIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIsIHdoaWNoIGNhbiBlbXVsYXRlIHRoZSBkZXZpY2UgYW5kIHRyaWdnZXIgbWFpbGJveCBjb21tYW5kcywgYXMgd2VsbCBhcyB2aWEgc3lzZnMgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgZHluYW1pYyBsb29rdXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUyOjUyLjc0MjUxMzc0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI3NjM4OTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSVFVSURJT1wiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jdGVvbl9lbmFibGVfc3Jpb3ZcIixcbiAgICBcImxpb19wY2lfc3Jpb3ZfZGlzYWJsZVwiLFxuICAgIFwibGlvX3ZmX3BjaV9kZXZfYnlfcW5vXCIsXG4gICAgXCJvY3Rlb25fbWJveF9wcm9jZXNzX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUi1JT1YgYW5kIG1haWxib3ggY29tbWFuZCBwcm9jZXNzaW5nIGxvZ2ljIGluIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyLiBJdCByZXBsYWNlcyBhIHN0YXRpYyBsb29rdXAgdGFibGUgd2l0aCBhIGR5bmFtaWMgUENJIGRldmljZSBsb29rdXAgZm9yIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyJ3MgUENJIGZ1enplciwgd2hpY2ggY2FuIGVtdWxhdGUgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBtYWlsYm94IGNvbW1hbmRzLCBhcyB3ZWxsIGFzIHZpYSBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBkeW5hbWljIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1Mjo1Mi43NDI1MjM5OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzYxMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkNzI5YjQxNzQwY2E5YmJkMmQyZmIyOWIyOGJiNGMwOTI4Y2EyNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTo1Mjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXFxuaW5kZXggMGRiMDhhYzNkMDk4ZmIuLmUzMDM5NTZiNGJmMTJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmNcXG5AQCAtMzc3OSw5ICszNzc5LDcgQEAgc3RhdGljIGludCBzZXR1cF9uaWNfZGV2aWNlcyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ZW9uX2RldilcXG4gc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IG51bV92ZnNfYWxsb2NlZCA9IG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5udW1fdmZzX2FsbG9jZWQ7XFxuLVxcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcXG4gXFx0aW50IGVycjtcXG4tXFx0dTMyIHU7XFxuIFxcbiBcXHRpZiAoT0NURU9OX0NOMjNYWF9QRihvY3QpIFxcdTAwMjZcXHUwMDI2IG51bV92ZnNfYWxsb2NlZCkge1xcbiBcXHRcXHRlcnIgPSBwY2lfZW5hYmxlX3NyaW92KG9jdC1cXHUwMDNlcGNpX2RldixcXG5AQCAtMzc5NCwyMyArMzc5Miw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTtcXG4tXFxuLVxcdFxcdC8qIGluaXQgbG9va3VwIHRhYmxlIHRoYXQgbWFwcyBEUEkgcmluZyBudW1iZXIgdG8gVkYgcGNpX2Rldlxcbi1cXHRcXHQgKiBzdHJ1Y3QgcG9pbnRlclxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0dSA9IDA7XFxuLVxcdFxcdHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuLVxcdFxcdFxcdFxcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7XFxuLVxcdFxcdHdoaWxlICh2ZmRldikge1xcbi1cXHRcXHRcXHRpZiAodmZkZXYtXFx1MDAzZWlzX3ZpcnRmbiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKHZmZGV2LVxcdTAwM2VwaHlzZm4gPT0gb2N0LVxcdTAwM2VwY2lfZGV2KSkge1xcbi1cXHRcXHRcXHRcXHRvY3QtXFx1MDAzZXNyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbdV0gPVxcbi1cXHRcXHRcXHRcXHRcXHR2ZmRldjtcXG4tXFx0XFx0XFx0XFx0dSArPSBvY3QtXFx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBudW1fdmZzX2FsbG9jZWQ7XFxuQEAgLTM4MTgsOCArMzc5OSw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbiBcXG4gc3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4ge1xcbi1cXHRpbnQgdTtcXG4tXFxuIFxcdGlmIChwY2lfdmZzX2Fzc2lnbmVkKG9jdC1cXHUwMDNlcGNpX2RldikpIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2b2N0LVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsIFxcXCJWRnMgYXJlIHN0aWxsIGFzc2lnbmVkIHRvIFZNcy5cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbkBAIC0zODI3LDEyICszODA2LDYgQEAgc3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4gXFxuIFxcdHBjaV9kaXNhYmxlX3NyaW92KG9jdC1cXHUwMDNlcGNpX2Rldik7XFxuIFxcbi1cXHR1ID0gMDtcXG4tXFx0d2hpbGUgKHUgXFx1MDAzYyBNQVhfUE9TU0lCTEVfVkZTKSB7XFxuLVxcdFxcdG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9IE5VTEw7XFxuLVxcdFxcdHUgKz0gb2N0LVxcdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZjtcXG4tXFx0fVxcbi1cXG4gXFx0b2N0LVxcdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IDA7XFxuIFxcdGRldl9pbmZvKFxcdTAwMjZvY3QtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZWRldiwgXFxcIm9jdC1cXHUwMDNlcGZfbnVtOiVkIGRpc2FibGVkIFZGc1xcXFxuXFxcIixcXG4gXFx0XFx0IG9jdC1cXHUwMDNlcGZfbnVtKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcXG5pbmRleCAxOTM0NGIyMWY4ZmI5NC4uODU4YTBmZmYyY2MwYjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcXG5AQCAtMzkwLDkgKzM5MCw2IEBAIHN0cnVjdCBvY3Rlb25fc3Jpb3ZfaW5mbyB7XFxuIFxcbiBcXHRzdHJ1Y3QgbGlvX3RydXN0ZWRfdmZcXHR0cnVzdGVkX3ZmO1xcbiBcXG4tXFx0Lypsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2IHN0cnVjdCBwb2ludGVyKi9cXG4tXFx0c3RydWN0IHBjaV9kZXYgKmRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0W01BWF9QT1NTSUJMRV9WRlNdO1xcbi1cXG4gXFx0dTY0XFx0dmZfbWFjYWRkcltNQVhfUE9TU0lCTEVfVkZTXTtcXG4gXFxuIFxcdHUxNlxcdHZmX3ZsYW50Y2lbTUFYX1BPU1NJQkxFX1ZGU107XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcXG5pbmRleCBhZDY4NWY1ZDBhMTM2My4uNjk3ZmNkYzQxZTNjZDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guY1xcbkBAIC0yNiw2ICsyNiwzMSBAQFxcbiAjaW5jbHVkZSBcXFwib2N0ZW9uX21haWxib3guaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNuMjN4eF9wZl9kZXZpY2UuaFxcXCJcXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBxX25vKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldiA9IE5VTEw7XFxuK1xcdGludCB2ZmlkeDtcXG4rXFxuK1xcdGlmICghb2N0LVxcdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAocV9ubyAlIG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmYpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dmZpZHggPSBxX25vIC8gb2N0LVxcdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZjtcXG4rXFx0aWYgKHZmaWR4IFxcdTAwM2U9IG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5udW1fdmZzX2FsbG9jZWQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0d2hpbGUgKCh2ZmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbitcXHRcXHRcXHRcXHQgICAgICAgT0NURU9OX0NOMjNYWF9WRl9WSUQsIHZmZGV2KSkpIHtcXG4rXFx0XFx0aWYgKHBjaV9waHlzZm4odmZkZXYpIFxcdTAwMjZcXHUwMDI2IHBjaV9waHlzZm4odmZkZXYpID09IG9jdC1cXHUwMDNlcGNpX2RldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcGNpX2lvdl92Zl9pZCh2ZmRldikgPT0gdmZpZHgpXFxuK1xcdFxcdFxcdHJldHVybiB2ZmRldjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBvY3Rlb25fbWJveF9yZWFkOlxcbiAgKiBAbWJveDogUG9pbnRlciBtYWlsYm94XFxuQEAgLTIzNyw2ICsyNjIsNyBAQCBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG9jdGVvbl9tYm94X2NtZCAqbWJveF9jbWQpXFxuIHtcXG4gXFx0c3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCA9IG1ib3gtXFx1MDAzZW9jdF9kZXY7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcXG4gXFxuIFxcdHN3aXRjaCAobWJveF9jbWQtXFx1MDAzZW1zZy5zLmNtZCkge1xcbiBcXHRjYXNlIE9DVEVPTl9WRl9BQ1RJVkU6XFxuQEAgLTI2MCw3ICsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXFxuIFxcdFxcdGRldl9pbmZvKFxcdTAwMjZvY3QtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0IFxcXCJnb3QgYSByZXF1ZXN0IGZvciBGTFIgZnJvbSBWRiB0aGF0IG93bnMgRFBJIHJpbmcgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBtYm94LVxcdTAwM2VxX25vKTtcXG4tXFx0XFx0cGNpZV9mbHIob2N0LVxcdTAwM2Vzcmlvdl9pbmZvLmRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0W21ib3gtXFx1MDAzZXFfbm9dKTtcXG4rXFx0XFx0dmZkZXYgPSBsaW9fdmZfcGNpX2Rldl9ieV9xbm8ob2N0LCBtYm94LVxcdTAwM2VxX25vKTtcXG4rXFx0XFx0aWYgKCF2ZmRldilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRwY2llX2Zscih2ZmRldik7XFxuK1xcdFxcdHBjaV9kZXZfcHV0KHZmZGV2KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE9DVEVPTl9QRl9DSEFOR0VEX1ZGX01BQ0FERFI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUyOjUzLjM2NzI0MDMyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NjUxNjQ0NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJUVVJRElPXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2N0ZW9uX2VuYWJsZV9zcmlvdlwiLFxuICAgIFwibGlvX3BjaV9zcmlvdl9kaXNhYmxlXCIsXG4gICAgXCJsaW9fdmZfcGNpX2Rldl9ieV9xbm9cIixcbiAgICBcIm9jdGVvbl9tYm94X3Byb2Nlc3NfY21kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlIGFuZCB0cmlnZ2VyIG1haWxib3ggY29tbWFuZHMsIGFzIHdlbGwgYXMgdmlhIHN5c2ZzIGZvciBTUi1JT1YgY29uZmlndXJhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIGR5bmFtaWMgbG9va3VwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQ3MjliNDE3NDBjYTliYmQyZDJmYjI5YjI4YmI0YzA5MjhjYTI0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDk6NTI6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXG5pbmRleCAwZGIwOGFjM2QwOThmYi4uZTMwMzk1NmI0YmYxMmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmNcbkBAIC0zNzc5LDkgKzM3NzksNyBAQCBzdGF0aWMgaW50IHNldHVwX25pY19kZXZpY2VzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3Rlb25fZGV2KVxuIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuIHtcbiBcdHVuc2lnbmVkIGludCBudW1fdmZzX2FsbG9jZWQgPSBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5udW1fdmZzX2FsbG9jZWQ7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqdmZkZXY7XG4gXHRpbnQgZXJyO1xuLVx0dTMyIHU7XG4gXG4gXHRpZiAoT0NURU9OX0NOMjNYWF9QRihvY3QpIFx1MDAyNlx1MDAyNiBudW1fdmZzX2FsbG9jZWQpIHtcbiBcdFx0ZXJyID0gcGNpX2VuYWJsZV9zcmlvdihvY3QtXHUwMDNlcGNpX2RldixcbkBAIC0zNzk0LDIzICszNzkyLDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTtcbi1cbi1cdFx0LyogaW5pdCBsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2XG4tXHRcdCAqIHN0cnVjdCBwb2ludGVyXG4tXHRcdCAqL1xuLVx0XHR1ID0gMDtcbi1cdFx0dmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbi1cdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7XG4tXHRcdHdoaWxlICh2ZmRldikge1xuLVx0XHRcdGlmICh2ZmRldi1cdTAwM2Vpc192aXJ0Zm4gXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICh2ZmRldi1cdTAwM2VwaHlzZm4gPT0gb2N0LVx1MDAzZXBjaV9kZXYpKSB7XG4tXHRcdFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9XG4tXHRcdFx0XHRcdHZmZGV2O1xuLVx0XHRcdFx0dSArPSBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmY7XG4tXHRcdFx0fVxuLVx0XHRcdHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tXHRcdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpO1xuLVx0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gbnVtX3Zmc19hbGxvY2VkO1xuQEAgLTM4MTgsOCArMzc5OSw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuIFxuIHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4ge1xuLVx0aW50IHU7XG4tXG4gXHRpZiAocGNpX3Zmc19hc3NpZ25lZChvY3QtXHUwMDNlcGNpX2RldikpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZvY3QtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsIFwiVkZzIGFyZSBzdGlsbCBhc3NpZ25lZCB0byBWTXMuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuQEAgLTM4MjcsMTIgKzM4MDYsNiBAQCBzdGF0aWMgaW50IGxpb19wY2lfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuIFxuIFx0cGNpX2Rpc2FibGVfc3Jpb3Yob2N0LVx1MDAzZXBjaV9kZXYpO1xuIFxuLVx0dSA9IDA7XG4tXHR3aGlsZSAodSBcdTAwM2MgTUFYX1BPU1NJQkxFX1ZGUykge1xuLVx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9IE5VTEw7XG4tXHRcdHUgKz0gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuLVx0fVxuLVxuIFx0b2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkID0gMDtcbiBcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCJvY3QtXHUwMDNlcGZfbnVtOiVkIGRpc2FibGVkIFZGc1xcblwiLFxuIFx0XHQgb2N0LVx1MDAzZXBmX251bSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcbmluZGV4IDE5MzQ0YjIxZjhmYjk0Li44NThhMGZmZjJjYzBiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcbkBAIC0zOTAsOSArMzkwLDYgQEAgc3RydWN0IG9jdGVvbl9zcmlvdl9pbmZvIHtcbiBcbiBcdHN0cnVjdCBsaW9fdHJ1c3RlZF92Zlx0dHJ1c3RlZF92ZjtcbiBcbi1cdC8qbG9va3VwIHRhYmxlIHRoYXQgbWFwcyBEUEkgcmluZyBudW1iZXIgdG8gVkYgcGNpX2RldiBzdHJ1Y3QgcG9pbnRlciovXG4tXHRzdHJ1Y3QgcGNpX2RldiAqZHBpcmluZ190b192ZnBjaWRldl9sdXRbTUFYX1BPU1NJQkxFX1ZGU107XG4tXG4gXHR1NjRcdHZmX21hY2FkZHJbTUFYX1BPU1NJQkxFX1ZGU107XG4gXG4gXHR1MTZcdHZmX3ZsYW50Y2lbTUFYX1BPU1NJQkxFX1ZGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guY1xuaW5kZXggYWQ2ODVmNWQwYTEzNjMuLjY5N2ZjZGM0MWUzY2Q3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jXG5AQCAtMjYsNiArMjYsMzEgQEBcbiAjaW5jbHVkZSBcIm9jdGVvbl9tYWlsYm94LmhcIlxuICNpbmNsdWRlIFwiY24yM3h4X3BmX2RldmljZS5oXCJcbiBcbitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqdmZkZXYgPSBOVUxMO1xuK1x0aW50IHZmaWR4O1xuK1xuK1x0aWYgKCFvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aWYgKHFfbm8gJSBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dmZpZHggPSBxX25vIC8gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuK1x0aWYgKHZmaWR4IFx1MDAzZT0gb2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHdoaWxlICgodmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbitcdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpKSkge1xuK1x0XHRpZiAocGNpX3BoeXNmbih2ZmRldikgXHUwMDI2XHUwMDI2IHBjaV9waHlzZm4odmZkZXYpID09IG9jdC1cdTAwM2VwY2lfZGV2IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcGNpX2lvdl92Zl9pZCh2ZmRldikgPT0gdmZpZHgpXG4rXHRcdFx0cmV0dXJuIHZmZGV2O1xuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIC8qKlxuICAqIG9jdGVvbl9tYm94X3JlYWQ6XG4gICogQG1ib3g6IFBvaW50ZXIgbWFpbGJveFxuQEAgLTIzNyw2ICsyNjIsNyBAQCBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBvY3Rlb25fbWJveF9jbWQgKm1ib3hfY21kKVxuIHtcbiBcdHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QgPSBtYm94LVx1MDAzZW9jdF9kZXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqdmZkZXY7XG4gXG4gXHRzd2l0Y2ggKG1ib3hfY21kLVx1MDAzZW1zZy5zLmNtZCkge1xuIFx0Y2FzZSBPQ1RFT05fVkZfQUNUSVZFOlxuQEAgLTI2MCw3ICsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG4gXHRcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldixcbiBcdFx0XHQgXCJnb3QgYSByZXF1ZXN0IGZvciBGTFIgZnJvbSBWRiB0aGF0IG93bnMgRFBJIHJpbmcgJXVcXG5cIixcbiBcdFx0XHQgbWJveC1cdTAwM2VxX25vKTtcbi1cdFx0cGNpZV9mbHIob2N0LVx1MDAzZXNyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbbWJveC1cdTAwM2VxX25vXSk7XG4rXHRcdHZmZGV2ID0gbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKG9jdCwgbWJveC1cdTAwM2VxX25vKTtcbitcdFx0aWYgKCF2ZmRldilcbitcdFx0XHRicmVhaztcbitcbitcdFx0cGNpZV9mbHIodmZkZXYpO1xuK1x0XHRwY2lfZGV2X3B1dCh2ZmRldik7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBPQ1RFT05fUEZfQ0hBTkdFRF9WRl9NQUNBRERSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTI6NTMuMzY3MjQzNzk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIwMTk2MDQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBDYXZpdW0gTGlxdWlkSU8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIgKGBsaW9fbWFpbi5jYCwgYG9jdGVvbl9kZXZpY2UuaGAsIGBvY3Rlb25fbWFpbGJveC5jYCkuIEl0IHNlZW1zIHRoZXkndmUgcmVtb3ZlZCB0aGUgbG9va3VwIHRhYmxlIGBkcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dGAgYW5kIGFyZSBub3cgZG9pbmcgYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIHVzaW5nIGBwY2lfZ2V0X2RldmljZWAgYW5kIGBwY2lfaW92X3ZmX2lkYCB3aGVuIGhhbmRsaW5nIHRoZSBgT0NURU9OX1ZGX0ZMUl9SRVFVRVNUYCBtYWlsYm94IGNvbW1hbmQgd2l0aGluIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmZ1enphYmxlKj9cblxuVGhlIGRyaXZlciBpcyBgbGlxdWlkaW9gLCB3aGljaCBpcyBhIENhdml1bSBMaXF1aWRJTyBJbnRlbGxpZ2VudCBTZXJ2ZXIgQWRhcHRlciBkcml2ZXIg4oCTIHNvIEV0aGVybmV0LiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJzcGVjaWZpYyBoYXJkd2FyZVwiIHRvIG1lLiBDYW4gSSBldmVuIGV4ZXJjaXNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gR2VuZXJhbGx5LCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGFyZSB0b3VnaCB0byBoaXQgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0aW9uIGxheWVyIGxpa2UgZTEwMDBlIG9yIHZpcnRpbywgb3IgaWYgeW91J3JlIHVzaW5nIHNvbWV0aGluZyBsaWtlIHZoY2kvZHVtbXkgZGV2aWNlcy5cblxuV2FpdCBhIHNlY29uZOKApnN5emthbGxlciEgSXQgY2FuIGZ1enogUENJIGRldmljZXMgdXNpbmcgdGhlIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGwsIHJpZ2h0PyBJdCBpbmplY3RzIFBDSSBkZXZpY2VzIGlmIHRoZSBrZXJuZWwgaGFzIHN1cHBvcnQg4oCTIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYENPTkZJR19QQ0lfREVCVUdgIG9yIHN5emthbGxlcidzIG93biBQQ0kgZnV6emVyLiBUaGF0J3MgYSBwb3RlbnRpYWwgYXZlbnVlISBUaG91Z2ggSSdtIHdvbmRlcmluZyBpZiB0aGUgUENJIGZ1enplciBpcyBvbmx5IHRhcmdldGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zLlxuXG5TbywgdGhpcyBpcyBhIGhhcmR3YXJlIGRyaXZlciwgaXQgc2VlbXMgcHJldHR5IGNsZWFyLiBCdXQsIGdpdmVuIHN5emthbGxlcidzIGNhcGFiaWxpdGllcywgKmNhbiogd2UgZnV6eiBpdD8gSWYgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyBlbmFibGVkLCBpdCBzaG91bGQgYmUgYWJsZSB0by4gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBvciBkZXBlbmRlbmNpZXMgSSBjYW4gdXNlIHRvIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjAxLjU2OTIwODIxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQyMjkwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlxdWlkaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy04MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo4MjpcXHQgIHdpbGwgYmUgY2FsbGVkIGxpcXVpZGlvLiAgVGhpcyBpcyByZWNvbW1lbmRlZC5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy04My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTk1PWNvbmZpZyBMSVFVSURJT19WRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTA0LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogVGhlIG1vZHVsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjEwNTpcXHQgIHdpbGwgYmUgY2FsbGVkIGxpcXVpZGlvX3ZmLiBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTEwNi1cXHQgIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzowMi4wNDM0NDY0NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyMjYzMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkFuYWx5emluZyB0aGUgYExJUVVJRElPYCBDb25maWd1cmF0aW9uIGFuZCBNYWlsYm94IENvbW1hbmQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UncmUgZGVhbGluZyB3aXRoIGlzIGBMSVFVSURJT2AuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaGFuZGxpbmcgbWFpbGJveCBjb21tYW5kcy4gR2l2ZW4gdGhlIG5hbWUsIEknbSBhc3N1bWluZyB0aGVzZSBjb21tYW5kcyBhcmUgZWl0aGVyIGNvbWluZyBmcm9tIHRoZSBoYXJkd2FyZSBpdHNlbGYgb3IgcG9zc2libHkgYmVpbmcgaXNzdWVkIGJ5IGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpLiBTbywgdGhleSByZXByZXNlbnQgc29tZSBmb3JtIG9mIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIG1lY2hhbmlzbSB3aXRoaW4gdGhlIHN5c3RlbSwgbGlrZWx5IHRpZWQgdG8gdGhlIE9jdGVvbiBwbGF0Zm9ybS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBncmFwaCB3aWxsIHJldmVhbCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQncyBpbnZva2VkIGFuZCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGVzZSBtYWlsYm94IGNvbW1hbmRzIGFyZSBpbml0aWF0ZWQgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgZmxvdyBvZiB0aGVzZSBjb21tYW5kcy4gSSBuZWVkIHRvIHNlZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzczLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6MDUuNzA1NzE2NDA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjczNDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY3Rlb25fbWJveF9wcm9jZXNzX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jPTIzND1zdGF0aWMgdm9pZCBnZXRfdmZfc3RhdHMoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTI1NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzoyNTU6ICogb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjU2LSAqIEBtYm94OiBQb2ludGVyIG1haWxib3hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTI2MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzoyNjE6c3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjYyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBvY3Rlb25fbWJveF9jbWQgKm1ib3hfY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM9MzI0PWludCBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IG9jdGVvbl9tYm94ICptYm94KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzc1LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzozNzY6XFx0XFx0b2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQobWJveCwgXFx1MDAyNm1ib3hfY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0zNzctXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjA1Ljg0MjQ1OTMzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzk0OTM2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNZXNzYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCBjYWxscyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGEgbGF5ZXJlZCBhcHByb2FjaC4gSXQgc3VnZ2VzdHMgdGhlcmUncyBzb21lIG1lc3NhZ2UgcHJlcHJvY2Vzc2luZyBvciBkaXNwYXRjaCBoYXBwZW5pbmcgaW4gdGhlIGBfbWVzc2FnZWAgZnVuY3Rpb24sIGFuZCB0aGVuIHRoZSBhY3R1YWwgY29tbWFuZCBleGVjdXRpb24gcmVzaWRlcyBpbiB0aGUgYF9jbWRgIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZSBmcm9tIGFuIG9yZ2FuaXphdGlvbiBwZXJzcGVjdGl2ZSwgbGlrZWx5IGEgZGlzcGF0Y2hlciBwYXR0ZXJuLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIGBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2VgIGJlaW5nIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMga2V5LiBJcyBpdCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgYSBzY2hlZHVsZWQgdGFzaywgb3Igc29tZXRoaW5nIHRyaWdnZXJlZCBieSBhbm90aGVyIHByb2Nlc3M/IEtub3dpbmcgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBhYm91dCB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMsIHRoZSBwb3RlbnRpYWwgc291cmNlcyBvZiB0aGUgbWVzc2FnZXMsIGFuZCBsaWtlbHksIHRoZSB1cmdlbmN5IG9mIG1lc3NhZ2UgcHJvY2Vzc2luZyBhbmQgYW55IHRocmVhZCBzYWZldHkgcmVxdWlyZW1lbnRzIEkgbmVlZCB0byBjb25zaWRlci4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgY2FsbGVycy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6MDkuNjgxOTU3MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MjcwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUyOC1cXHRcXHRcXHRcXHRpZiAob2N0ZW9uX21ib3hfcmVhZChvY3QtXFx1MDAzZW1ib3hbcV9ub10pKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTI5OlxcdFxcdFxcdFxcdFxcdG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUzMC1cXHRcXHRcXHRcXHRcXHQgICAgb2N0LVxcdTAwM2VtYm94W3Ffbm9dKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTM1LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1MzY6XFx0XFx0b2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKG1ib3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTM3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM9MjYzPXN0YXRpYyB2b2lkIGNuMjN4eF92Zl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTI2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jOjI2ODpcXHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UobWJveCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYy0yNjktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM9MjYxPXN0YXRpYyBpbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzE4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjMxOTogKiBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0zMjAtICogQG1ib3g6IG1haWxib3hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzozMjQ6aW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oPTEyMD1pbnQgb2N0ZW9uX21ib3hfd3JpdGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaC0xMjEtXFx0XFx0ICAgICAgc3RydWN0IG9jdGVvbl9tYm94X2NtZCAqbWJveF9jbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oOjEyMjppbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmgtMTIzLWludCBvY3Rlb25fbWJveF9jYW5jZWwoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCwgaW50IHFfbm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzowOS45MzYyMzcxODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc1MTIwNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0J3Mgd29ydGggZnV6emluZy4gSXQgc2VlbXMgbGlrZSBpdCdzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBhIGBjbjIzeHhgIGRldmljZSAobGlrZWx5IENhdml1bS9NYXJ2ZWxsIGhhcmR3YXJlKSwgYW5kIGl0IHRvdWNoZXMgbWFpbGJveCBjb21tYW5kcy4gVGhlIGNvZGUgaXMgY2FsbGVkIGZyb20gYGNuMjN4eF9wZl9tYm94X3RocmVhZGAgYW5kIGBjbjIzeHhfdmZfbWJveF90aHJlYWRgIHdoaWNoIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBhIG1lc3NhZ2UgcGFzc2luZyBtZWNoYW5pc20gd2l0aCB0aGUgaGFyZHdhcmUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIncyBQQ0kgZnV6emVyIHJlYWNoIHRoaXM/IFdlICpkbyogaGF2ZSBhIFBDSSBmdXp6ZXIsIGJ1dCBpdCdzIGdlbmVyYWxseSBwcmV0dHkgYmFzaWMuIEl0J3MgZ29vZCBmb3IgcHJvYmluZyBhbmQgYmFzaWMgTU1JTy9ETUEsIGJ1dCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGNhbiBhY3R1YWxseSAqdHJpZ2dlciogYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCwgdGhlIGZ1bmN0aW9uIHRoYXQgc2VlbXMgY2VudHJhbCBoZXJlLiBUaGF0IGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBieSByZWFkaW5nIGZyb20gYSBtYWlsYm94LCB3aGljaCBzdWdnZXN0cyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGhhcmR3YXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZml4ZXMgYW4gU1ItSU9WIChgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgKSBidWcgaW4gdGhlIGBsaXF1aWRpb2AgZHJpdmVyLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBzd2FwcGluZyBvdXQgYGRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0YCBmb3IgYSBkeW5hbWljIGxvb2t1cCB0YWJsZSAoYGxpb192Zl9wY2lfZGV2X2J5X3Fub2ApLiBUaGlzIHNlZW1zIHNwZWNpZmljIHRvIGEgY2VydGFpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqZ2V0KiB0byB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQW5kIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uXG5cblRoZSBwcm9tcHQgaXMgc3BlY2lmaWMuIEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQncyAqaW1wb3NzaWJsZSogdG8gcmVhY2ggdGhlIGNvZGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gT2theSwgdGhhdCdzIHRoZSBrZXkuIElzIHRoZSBDYXZpdW0gTGlxdWlkSU8gZGV2aWNlIGVtdWxhdGVkIGluIFFFTVU/IE5vLiBCdXQsIHdoYXQgYWJvdXQgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyP1xuXG5TeXprYWxsZXIncyBQQ0kgZnV6emVyIHdvcmtzIGJ5IHVzaW5nIGEgcHNldWRvLXN5c2NhbGwgYHN5el9wY2lfZGV2aWNlYCB0byBpbmplY3QgYSAqZmFrZSogUENJIGRldmljZS4gSXQncyBlc3NlbnRpYWxseSBpbnRlcmNlcHRpbmcgTU1JTyByZWFkcy93cml0ZXMuIFNvLCBkb2VzICp0aGF0KiBjb3VudCBhcyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgYXMgdGhlIHByb21wdCBzYXlzPyBZZXMsIGl0J3MgZGVmaW5pdGVseSBhIGZvcm0gb2Ygc29mdHdhcmUgZW11bGF0aW9uLiBTbywgaXMgdGhlIHF1ZXN0aW9uIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQ/XG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzICpob3cqIGxpbWl0ZWQgaXMgc3l6a2FsbGVyJ3MgUENJIGZ1enplcj8gSXQgY2FuIHRyaWdnZXIgcHJvYmVzIGFuZCBtYXliZSBiYXNpYyBpbnRlcnJ1cHRzIG9yIHdvcmtxdWV1ZXMgaWYgdGhleSBnZXQgc2NoZWR1bGVkIGR1cmluZyB0aGUgcHJvYmUuIE5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGNhbiBzaW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGNvbmRpdGlvbnMgdG8gdHJpZ2dlciB0aGUgY2hhbmdlZCBjb2RlIHBhdGggaW4gdGhlIHBhdGNoLiBTaW5jZSB0aGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIGV2ZW4gc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUsIGl0J3Mgbm90IGxvb2tpbmcgZ29vZCwgYnV0IGxldCdzIGNoZWNrIHdoYXQncyByZWFjaGFibGUgZHVyaW5nIHRoZSBwcm9iZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzoxOS42MTEzNjI3ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzgwMjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY3Rlb25fZW5hYmxlX3NyaW92XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM9MzMyMj1zdGF0aWMgaW50IHNldHVwX25pY19kZXZpY2VzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3Rlb25fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzc3OC0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzozNzc5OnN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM3ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM9MzgxNj1zdGF0aWMgaW50IGxpcXVpZGlvX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM4MzctXFx0XFx0b2N0LVxcdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM6MzgzODpcXHRcXHRyZXQgPSBvY3Rlb25fZW5hYmxlX3NyaW92KG9jdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzgzOS1cXHRcXHRkZXZfaW5mbyhcXHUwMDI2b2N0LVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsIFxcXCJvY3QtXFx1MDAzZXBmX251bTolZCBudW1fdmZzOiVkXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzoyMC4yNDkxNzg2MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyNDcxNTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBuZXR3b3JraW5nIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipUcmFjaW5nIHRoZSBTUklPViBFbmFibGVtZW50IFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBTUi1JT1YgKFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbikgZW5hYmxlbWVudCBmb3IgdGhpcyBPY3Rlb24tYmFzZWQgbmV0d29yayBkZXZpY2UuICBUaGUgY29kZSB0ZWxscyBtZSB0aGF0IGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgIGlzIHRoZSBvbmUgY2FsbGluZyBpdC4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgZG9lcyAqdGhpcyogZnVuY3Rpb24sIGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgLCBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiB0byB0cnVseSBncmFzcCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgY29uZmlndXJhdGlvbi4gS25vd2luZyB3aGVyZSBgbGlxdWlkaW9fZW5hYmxlX3NyaW92YCBpcyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBTUi1JT1YgaXMgYmVpbmcgZW5hYmxlZC4gSXQncyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM2MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjI1LjA3Mzg5ODE1NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0Nzk5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpcXVpZGlvX2VuYWJsZV9zcmlvdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTEyNz1zdHJ1Y3QgaGFuZHNoYWtlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTEzNS0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzoxMzY6c3RhdGljIGludCBsaXF1aWRpb19lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTEzNy0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTQyMT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbGlxdWlkaW9fcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTQyOC0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo0Mjk6XFx0LnNyaW92X2NvbmZpZ3VyZSA9IGxpcXVpZGlvX2VuYWJsZV9zcmlvdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy00MzAtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz0zODAwPXN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zODE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jOjM4MTY6c3RhdGljIGludCBsaXF1aWRpb19lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzgxNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjI1LjMwODcwNzMwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA5NDc3MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHNyaW92X2NvbmZpZ3VyZWAgQ2FsbGJhY2sgYW5kIE1haWxib3ggVGhyZWFkKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGAuc3Jpb3ZfY29uZmlndXJlYCBjYWxsYmFjayB3aXRoaW4gdGhlIGBzdHJ1Y3QgcGNpX2RyaXZlcmAuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICp0cmlnZ2VyKiB0aGlzPyBBbmQgdGhlIGFuc3dlciwgaXQgc2VlbXMsIGlzIGEgY2xlYXIgeWVzIOKAkyBieSBtZXNzaW5nIHdpdGggYC9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9zcmlvdl9udW12ZnNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIHRoZSByZWFsIG1lYXQgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgd3JhcHBlZCB1cCB3aXRoaW4gdGhlIGBjbjIzeHhfcGZfbWJveF90aHJlYWRgLCByaWdodD8gVGhpcyBpcyB0aGUgd29ya3F1ZXVlIHRoYXQgcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBtYWlsYm94IHByb2Nlc3MgY29tbWFuZCwgd2hpY2ggaXMgdGhlIGJpdCBJJ20gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCAqd2hlbiogdGhpcyB3b3JrcXVldWUgZ2V0cyBzY2hlZHVsZWQuIFNvLCBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGNvZGUsIGl0J3MgZWl0aGVyIGludGVycnVwdC1kcml2ZW4gb3IgcG9sbGVkLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNjaGVkdWxpbmcgbWVjaGFuaXNtIGZvciB0aGF0IGBjbjIzeHhfcGZfbWJveF90aHJlYWRgLiBXaGVyZSBpcyBpdCBiZWluZyBzY2hlZHVsZWQgZnJvbSBleGFjdGx5PyBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDk2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjI5LjUxODE4ODQ5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5OTIwMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNuMjN4eF9wZl9tYm94X3RocmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NDU5PXN0YXRpYyB2b2lkIGNuMjN4eF9zZXR1cF9vcV9yZWdzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBvcV9ubylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTA5OnN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz01NDA9c3RhdGljIGludCBjbjIzeHhfc2V0dXBfcGZfbWJveChzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01NzgtXFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1ib3gtXFx1MDAzZW1ib3hfcG9sbF93ay53b3JrLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTc5OlxcdFxcdFxcdFxcdCAgY24yM3h4X3BmX21ib3hfdGhyZWFkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTU4MC1cXHRcXHRtYm94LVxcdTAwM2VtYm94X3BvbGxfd2suY3R4cHRyID0gKHZvaWQgKiltYm94O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzoyOS43NTgxMTczNjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTM4NDY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW0gY29uc2lkZXJpbmcgdGhlbTpcblxuKipEZWJ1Z2dpbmcgdGhlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgY24yM3h4X3NldHVwX3BmX21ib3hgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcncyBjbGVhcmx5IG5vdCBoYXBwZW5pbmcgd2hlbiBJIGV4cGVjdCBpdCB0by4gVGhlIGNvbW1lbnQgc3RhdGVzIHRoZSBpbml0aWFsaXphdGlvbiBJJ20gY2hhc2luZyBpcyAqZGVsYXllZCogYW5kIGhhcHBlbnMgaW4gdGhhdCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBxdWVzdGlvbiBub3cgaXM6IFdoZXJlIHRoZSBoZWxsIGlzIGBjbjIzeHhfc2V0dXBfcGZfbWJveGAgZ2V0dGluZyBjYWxsZWQgZnJvbT8gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0aW5nIHBvaW50IG9mIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGR1cmluZyBkcml2ZXIgcHJvYmU/IElzIHRoZXJlIHNvbWUgc3BlY2lmaWMgZXZlbnQgdHJpZ2dlcj8gS25vd2luZyB0aGUgY2FsbCBwYXRoIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgY29uc3RyYWludHMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIGEgZGVsYXkgaW4gbXkgZXhwZWN0ZWQgYmVoYXZpb3IuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGVyZSB0aGlzIHZpdGFsIGZ1bmN0aW9uIGZpdHMgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzozNC44NDc1MDYzNDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTg2Nzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY24yM3h4X3NldHVwX3BmX21ib3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jPTUwOT1zdGF0aWMgdm9pZCBjbjIzeHhfcGZfbWJveF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1NDA6c3RhdGljIGludCBjbjIzeHhfc2V0dXBfcGZfbWJveChzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9MTEzOD1pbnQgc2V0dXBfY24yM3h4X29jdGVvbl9wZl9kZXZpY2Uoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4Mi1cXHRvY3QtXFx1MDAzZWZuX2xpc3Quc2V0dXBfb3FfcmVncyA9IGNuMjN4eF9zZXR1cF9vcV9yZWdzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6MTE4MzpcXHRvY3QtXFx1MDAzZWZuX2xpc3Quc2V0dXBfbWJveCA9IGNuMjN4eF9zZXR1cF9wZl9tYm94O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4NC1cXHRvY3QtXFx1MDAzZWZuX2xpc3QuZnJlZV9tYm94ID0gY24yM3h4X2ZyZWVfcGZfbWJveDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6MzcuMDA2MjM3NTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODAwNjY5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IENhbGxiYWNrIGFuZCBDYWxsIFN0YWNrIEV4cGxvcmF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3ZlIGdvdCBhIGNhbGxiYWNrIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgYHNldHVwX21ib3hgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBgc2V0dXBfbWJveGAgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgaW52b2tlZD8gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzozOS43ODYzMDkxMDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTg2NTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXR1cF9tYm94XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz0xMTM4PWludCBzZXR1cF9jbjIzeHhfb2N0ZW9uX3BmX2RldmljZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy0xMTgyLVxcdG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9vcV9yZWdzID0gY24yM3h4X3NldHVwX29xX3JlZ3M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzoxMTgzOlxcdG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3BmX21ib3g7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy0xMTg0LVxcdG9jdC1cXHUwMDNlZm5fbGlzdC5mcmVlX21ib3ggPSBjbjIzeHhfZnJlZV9wZl9tYm94O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYz02MTY9aW50IGNuMjN4eF9zZXR1cF9vY3Rlb25fdmZfZGV2aWNlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTY2Ni1cXHRvY3QtXFx1MDAzZWZuX2xpc3Quc2V0dXBfb3FfcmVncyA9IGNuMjN4eF9zZXR1cF92Zl9vcV9yZWdzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM6NjY3OlxcdG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3ZmX21ib3g7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYy02NjgtXFx0b2N0LVxcdTAwM2Vmbl9saXN0LmZyZWVfbWJveCA9IGNuMjN4eF9mcmVlX3ZmX21ib3g7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX2V0aHRvb2wuYz0xMDg1PXN0YXRpYyBpbnQgbGlvX3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBudW1fcXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX2V0aHRvb2wuYy0xMTk2LVxcdFxcdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdCkgXFx1MDAyNlxcdTAwMjYgIW9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19ldGh0b29sLmM6MTE5NzpcXHRcXHRcXHRpZiAob2N0LVxcdTAwM2Vmbl9saXN0LnNldHVwX21ib3gob2N0KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fZXRodG9vbC5jLTExOTgtXFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2N0LVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsIFxcXCJNYWlsYm94IHNldHVwIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz00MDA3PXN0YXRpYyBpbnQgb2N0ZW9uX2RldmljZV9pbml0KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3Rlb25fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtNDE0My1cXHRpZiAoT0NURU9OX0NOMjNYWF9QRihvY3Rlb25fZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jOjQxNDQ6XFx0XFx0aWYgKG9jdGVvbl9kZXYtXFx1MDAzZWZuX2xpc3Quc2V0dXBfbWJveChvY3Rlb25fZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTQxNDUtXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2N0ZW9uX2Rldi1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlZGV2LCBcXFwiT0NURU9OOiBNYWlsYm94IHNldHVwIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYz0yMjY4PXN0YXRpYyBpbnQgb2N0ZW9uX2RldmljZV9pbml0KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYy0yMzM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fdmZfbWFpbi5jOjIzNDA6XFx0aWYgKG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94KG9jdCkpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYy0yMzQxLVxcdFxcdGRldl9lcnIoXFx1MDAyNm9jdC1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlZGV2LCBcXFwiTWFpbGJveCBzZXR1cCBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaD0yMzI9c3RydWN0IG9jdGVvbl9mbl9saXN0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgtMjM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmg6MjM5OlxcdGludCAoKnNldHVwX21ib3gpKHN0cnVjdCBvY3Rlb25fZGV2aWNlICopO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgtMjQwLVxcdGludCAoKmZyZWVfbWJveCkoc3RydWN0IG9jdGVvbl9kZXZpY2UgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjQwLjQyNjE5MDUxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY1MTg2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT2N0ZW9uIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgb2N0ZW9uX2RldmljZV9pbml0YCBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyB0aGUgUENJIHByb2JlIHNlcXVlbmNlLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgbWFpbGJveCB0aHJlYWQgZ2V0cyBpbml0aWFsaXplZCBhbmQgc2NoZWR1bGVkLCB3aGljaCBoYXBwZW5zIGR1cmluZyB0aGUgUENJIHByb2JlIHBoYXNlLiBUaGUgbWFpbGJveCB0aHJlYWQncyBqb2IgaXMgdG8gY29udGludWFsbHkgcG9sbCB0aG9zZSBtYWlsYm94IHJlZ2lzdGVycy4gTm93LCB0aGUga2V5IGhlcmUgaXMgdGhhdCBpZiBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGluamVjdHMgYSBmYWtlIExpcXVpZElPIGRldmljZSwgdGhlIGRyaXZlciB3aWxsIGdvIHRocm91Z2ggdGhlIG1vdGlvbnMgb2YgcHJvYmluZyBpdC4gSXQnbGwgc2V0IHVwIHRoZSBtYWlsYm94LCBhbmQgdGhlIHBvbGxpbmcgc3RhcnRzLlxuXG5UaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBQQ0kgZnV6emVyIGNhbiBmZWVkIHRoZSBkcml2ZXIgZmFrZSB2YWx1ZXMgd2hlbiBpdCByZWFkcyB0aG9zZSBtYWlsYm94IHJlZ2lzdGVycy4gVGhhdCBtZWFucyB3ZSBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIGFuZCBleGVjdXRlIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgd2l0aCBkYXRhIGZ1bGx5IGNvbnRyb2xsZWQgYnkgdGhlIGZ1enplci4gSG9sZCBvbiwgbGV0J3MganVzdCBjb25maXJtIGlmIHRoaXMgaXMgYWN0dWFsbHkgYSByZWFsaXN0aWMgc2NlbmFyaW8uXG5cblNvLCB0aGUgUENJIGZ1enplciBzZXRzIHVwIHRoaXMgZmFrZSBQQ0kgZGV2aWNlLCBhbmQgdGhlIGRyaXZlciBnb2VzIGFib3V0IG1hcHBpbmcgdGhlIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMgKEJBUnMpIGFuZCByZWFkaW5nIGZyb20gdGhlbS4gV2hlbiBgb2N0ZW9uX21ib3hfcmVhZGAgaXMgY2FsbGVkLCBpdCdzIGVzc2VudGlhbGx5IHJlYWRpbmcgZnJvbSBvbmUgb2YgdGhvc2UgQkFScy4gUmlnaHQsIHNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgaG93IGBvY3Rlb25fbWJveF9yZWFkYCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6NDUuODkxMzgwNzU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkyNTM4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2N0ZW9uX21ib3hfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUyNy1cXHRcXHRcXHRpZiAodmFsNjQgXFx1MDAyNlxcdTAwMjYgKHZhbDY0ICE9IE9DVEVPTl9QRlZGQUNLKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTI4OlxcdFxcdFxcdFxcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cXHUwMDNlbWJveFtxX25vXSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MjktXFx0XFx0XFx0XFx0XFx0b2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz04MTM9c3RhdGljIHZvaWQgY24yM3h4X2hhbmRsZV9wZl9tYm94X2ludHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtODI2LVxcdFxcdFxcdCAgICAgICBvY3QtXFx1MDAzZW1ib3hbMF0tXFx1MDAzZW1ib3hfaW50X3JlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo4Mjc6XFx0XFx0XFx0aWYgKG9jdGVvbl9tYm94X3JlYWQob2N0LVxcdTAwM2VtYm94W3Ffbm9dKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtODI4LVxcdFxcdFxcdFxcdHdvcmsgPSBcXHUwMDI2b2N0LVxcdTAwM2VtYm94W3Ffbm9dLVxcdTAwM2VtYm94X3BvbGxfd2sud29yaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM9NDcyPXN0YXRpYyB2b2lkIGNuMjN4eF9oYW5kbGVfdmZfbWJveF9pbnRyKHN0cnVjdCBvY3Rlb25faW9xX3ZlY3RvciAqaW9xX3ZlY3RvcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgwLVxcdFxcdHdyaXRlcShtYm94X2ludF92YWwsIG9jdC1cXHUwMDNlbWJveFswXS1cXHUwMDNlbWJveF9pbnRfcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jOjQ4MTpcXHRcXHRpZiAob2N0ZW9uX21ib3hfcmVhZChvY3QtXFx1MDAzZW1ib3hbMF0pKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgyLVxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2b2N0LVxcdTAwM2VtYm94WzBdLVxcdTAwM2VtYm94X3BvbGxfd2sud29yayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jPTI5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBxX25vKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtNTQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM6NTU6ICogb2N0ZW9uX21ib3hfcmVhZDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy01Ni0gKiBAbWJveDogUG9pbnRlciBtYWlsYm94XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy02MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzo2MTppbnQgb2N0ZW9uX21ib3hfcmVhZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtNjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94Lmg9MTE0PXN0cnVjdCBvY3RfdmZfc3RhdHNfY3R4IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oLTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaDoxMTk6aW50IG9jdGVvbl9tYm94X3JlYWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaC0xMjAtaW50IG9jdGVvbl9tYm94X3dyaXRlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjQ2LjUzMDY0ODM3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYzNTU2MTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkgYW5kIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBvY3Rlb25fbWJveF9yZWFkYCBpcyBob3cgd2UgZ2V0IGRhdGEgZnJvbSB0aGUgbWFpbGJveCByZWdpc3RlcnMuIElmIHRoZSBQQ0kgZnV6emVyIGluIHN5emthbGxlciBjYW4gcHJvdmlkZSB0aGUgKnJpZ2h0KiB2YWx1ZXMsIHRoYXQgc2hvdWxkIHRyaWdnZXIgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAgYW5kIHVsdGltYXRlbHkgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYC4gQW5kIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCB0byBoYW5kbGUgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAuIFRoaXMgdGhlbiBjYWxscyBgbGlvX3ZmX3BjaV9kZXZfYnlfcW5vYC5cblxuTm93LCB0aGF0IGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggUENJIGRldmljZXMgdXNpbmcgYHBjaV9nZXRfZGV2aWNlYCB3aXRoIENhdml1bSdzIHZlbmRvciBJRC4gSXQgY2hlY2tzIHRoZSBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpIG9mIHRoZSBkZXZpY2UgYW5kIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIElEIChWRklEKS4gQ291bGQgc3l6a2FsbGVyIGFjdHVhbGx5ICp0cmlnZ2VyKiB0aGlzPyBJIHRoaW5rIHNvLiBJZiB0aGUgUENJIGZ1enplciBjYW4gaW5qZWN0IGEgKmZha2UqIFBGIGRldmljZSwgaXQgbWlnaHQgbmVlZCB0byBpbmplY3QgZmFrZSBWRnMgYXMgd2VsbCB0byBtYWtlIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5IGRvIHNvbWV0aGluZy4gQnV0IGV2ZW4gaWYgaXQgKmRvZXNuJ3QqIGZpbmQgYSBWRiwgdGhlIGZ1bmN0aW9uIHdpbGwgc3RpbGwgZXhlY3V0ZSBhbmQgcmV0dXJuIE5VTEwsIHdoaWNoIGlzIHN0aWxsIHJlYWNoYWJsZSBjb2RlIVxuXG5Ib2xkIG9uLCB0aGUgcGF0Y2ggKmFsc28qIG1lc3NlcyB3aXRoIGBvY3Rlb25fZW5hYmxlX3NyaW92YCBhbmQgYGxpb19wY2lfc3Jpb3ZfZGlzYWJsZWAuIFRob3NlIGFyZSBsaW5rZWQgdG8gU1ItSU9WIGJlaW5nIGVuYWJsZWQvZGlzYWJsZWQgdGhyb3VnaCBzeXNmcywgcmlnaHQ/IEFuZCBzeXprYWxsZXIgKmNhbiogd3JpdGUgdG8gc3lzZnMgZmlsZXMuIFNvLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIGBvY3Rlb25fZW5hYmxlX3NyaW92YCFcblxuSXMgdGhpcyBldmVuICp3b3J0aCogZnV6emluZz8gV2VsbCwgdGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdpdGggdGhlIG9sZCBgZHBpcmluZ190b192ZnBjaWRldl9sdXRgIGFwcHJvYWNoLiBJdCBzb3VuZHMgbGlrZSB0aGVyZSBjb3VsZCBoYXZlIGJlZW4gaXNzdWVzIHRoZXJlLCBsaWtlIHVzZS1hZnRlci1mcmVlIGlmIFZGcyB3ZXJlIHJlbW92ZWQsIG9yIGp1c3Qgd3JvbmcgbWFwcGluZ3MuIFRoZSBuZXcgY29kZSBkeW5hbWljYWxseSBmaW5kcyB0aGUgVkYuIFRoaXMgc2VlbXMgbGlrZSBmdW5jdGlvbmFsIGNvZGUgaW4gYSBoYXJkd2FyZSBkcml2ZXIuIEFuZCBpdCBzb3VuZHMgbGlrZSB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgUENJIGZ1enplciAqYW5kKiBzeXNmcyB3cml0ZXMsIHJpZ2h0P1xuXG5XYWl0IGEgc2Vjb25kLiBJcyBgTElRVUlESU9gIGV2ZW4gKmVuYWJsZWQqIGluIHN5emthbGxlcidzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgdGhlcmUgb3IgaWYgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQuIFllYWgsIHdlJ2xsIG5lZWQgdG8gc3BlY2lmeSBgTElRVUlESU9gIGluIGBFbmFibGVDb25maWdzYC4gR290dGEgY2hlY2sgdGhlIGV4YWN0IGNvbmZpZyBuYW1lcyB0byBtYWtlIHN1cmUgd2UgZ2V0IGl0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDowNC4xNjYyMTQ5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MDg3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMSVFVSURJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz01ND1jb25maWcgQ0FWSVVNX1BUUFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NjU6Y29uZmlnIExJUVVJRElPX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjY4OmNvbmZpZyBMSVFVSURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gTGlxdWlkSU8gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTg0PWNvbmZpZyBPQ1RFT05fTUdNVF9FVEhFUk5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6OTU6Y29uZmlnIExJUVVJRElPX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTYtXFx0dHJpc3RhdGUgXFxcIkNhdml1bSBMaXF1aWRJTyBWRiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDowNC42OTAzMTE4NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NjMxNzI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExJUVVJRElPIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhbmQgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIHR3byBrZXkgY29uZmlndXJhdGlvbnM6IGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHRlbGxzIG1lIHdlJ3ZlIGdvdCBhIHNldHVwIHdpdGggYSBwaHlzaWNhbCBmdW5jdGlvbiBhbmQgdmlydHVhbCBmdW5jdGlvbnMsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaGFyZHdhcmUuIExldCdzIHNlZSB3aGF0J3MgY2hhbmdlZCBhcyBhIHJlc3VsdC5cblxuVGhlIGNvcmUgZmlsZXMgYWZmZWN0ZWQgYXJlIGBsaW9fbWFpbi5jYCAobGlrZWx5IHRoZSBtYWluIGRyaXZlciBlbnRyeSBwb2ludCBmb3IgdGhlIGBMSVFVSURJT2AgcGF0aCksIHdoaWNoIHNlZW1zIHByZXR0eSBleHBlY3RlZCBnaXZlbiB0aGUgY29uZmlnIG5hbWUsIGFuZCBgb2N0ZW9uX21haWxib3guY2AuIE5vdywgYG9jdGVvbl9tYWlsYm94LmNgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCdzIHByb2JhYmx5IHBhcnQgb2YgdGhlIGBMSVFVSURJT19DT1JFYCwgYW5kIHN1Z2dlc3RzIGNvbW11bmljYXRpb24gaXMgbGlrZWx5IGJlaW5nIHNoYXJlZCBiZXR3ZWVuIFBGIGFuZCBWRi4gSXQncyBvZnRlbiBzaGFyZWQsIGJlY2F1c2UgdGhlIG1haWxib3ggaXMgdHlwaWNhbGx5IGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24uIFNoYXJlZCBjb2RlIGFjcm9zcyB0aGUgUEYgYW5kIFZGcyBpcyBhbHNvIGV4cGVjdGVkLCB0aGlzIGlzIHR5cGljYWwgaW4gbW9zdCBkcml2ZXJzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIHdpcmVkIHVwLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBkZXBlbmRlbmNpZXMsIGJ1aWxkIGZsYWdzLCBhbmQgc2VlIHdoZXJlIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAgYXJlIGJlaW5nIHVzZWQgdG8gaW5jbHVkZSBjb2RlLiBBIG1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBjb250ZXh0IGZvciB0aGUgaW5jbHVzaW9uIG9mIGFsbCB0aGlzIGxvZ2ljIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBkcml2ZXIgd2lsbCBiZSBicm91Z2h0IGluIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU0OjA5LjQ3NjYzMzY3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ2F2aXVtIExpcXVpZGlvIGV0aGVybmV0IGRldmljZSBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0xJUVVJRElPX0NPUkUpICs9IGxpcXVpZGlvLWNvcmUub1xcbiAgIDc6XFx0bGlxdWlkaW8tY29yZS15IDo9IFxcXFxcXG4gICA4OlxcdFxcdFxcdGxpb19ldGh0b29sLm9cXHRcXHRcXFxcXFxuICAgOTpcXHRcXHRcXHRsaW9fY29yZS5vXFx0XFx0XFxcXFxcbiAgMTA6XFx0XFx0XFx0cmVxdWVzdF9tYW5hZ2VyLm9cXHRcXFxcXFxuICAxMTpcXHRcXHRcXHRyZXNwb25zZV9tYW5hZ2VyLm9cXHRcXFxcXFxuICAxMjpcXHRcXHRcXHRvY3Rlb25fZGV2aWNlLm9cXHRcXHRcXFxcXFxuICAxMzpcXHRcXHRcXHRjbjY2eHhfZGV2aWNlLm9cXHRcXHRcXFxcXFxuICAxNDpcXHRcXHRcXHRjbjY4eHhfZGV2aWNlLm9cXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRcXHRjbjIzeHhfcGZfZGV2aWNlLm9cXHRcXFxcXFxuICAxNjpcXHRcXHRcXHRjbjIzeHhfdmZfZGV2aWNlLm9cXHRcXFxcXFxuICAxNzpcXHRcXHRcXHRvY3Rlb25fbWFpbGJveC5vXFx0XFxcXFxcbiAgMTg6XFx0XFx0XFx0b2N0ZW9uX21lbV9vcHMub1xcdFxcXFxcXG4gIDE5OlxcdFxcdFxcdG9jdGVvbl9kcm9xLm9cXHRcXHRcXFxcXFxuICAyMDpcXHRcXHRcXHRvY3Rlb25fbmljLm9cXG4gIDIxOlxcdFxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0xJUVVJRElPKSArPSBsaXF1aWRpby5vXFxuICAyMzpcXHRsaXF1aWRpby15IDo9IGxpb19tYWluLm8gb2N0ZW9uX2NvbnNvbGUubyBsaW9fdmZfcmVwLm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0xJUVVJRElPX1ZGKSArPSBsaXF1aWRpb192Zi5vXFxuICAyNjpcXHRsaXF1aWRpb192Zi15IDo9IGxpb192Zl9tYWluLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTQ6MDkuNDc2NzYyNjg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDMyNzI0MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBMaXF1aWRJTyBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBMaXF1aWRJTyBkcml2ZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIFNSLUlPViBmdW5jdGlvbmFsaXR5IGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgY29uZmlncyB0byBjb25zaWRlciBhcmUgYExJUVVJRElPYCBhbmQgYExJUVVJRElPX1ZGYCwgYXMgdGhlIHBhdGNoIHRvdWNoZXMgYGxpb19tYWluLmNgIChwYXJ0IG9mIGBsaXF1aWRpby5vYCkgYW5kIGBvY3Rlb25fbWFpbGJveC5jYCAocGFydCBvZiBgbGlxdWlkaW8tY29yZS5vYCkuIFNpbmNlIGBMSVFVSURJT19DT1JFYCBpcyBzZWxlY3RlZCBieSBib3RoIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAsIGVuYWJsaW5nIGp1c3QgYExJUVVJRElPYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCBjYWxsZWQgYnkgYExJUVVJRElPX0NPUkVgLiBJJ2xsIGFsc28gYWRkIGBQQ0lfSU9WYCBqdXN0IHRvIGJlIHNhZmUsIGJlY2F1c2UgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIHVzZXMgaXQsIGFuZCBpdCdzIGEgZ2VuZXJhbGx5IHNhZmUgY29uZmlnIHRvIGVuYWJsZSBpbiBzeXprYWxsZXIuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gV2UgaGF2ZTpcblxuKiAgIGBvY3Rlb25fZW5hYmxlX3NyaW92YFxuKiAgIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgXG4qICAgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgKGEgbmV3IGZ1bmN0aW9uKVxuKiAgIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGBcblxuQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbiB0aGUgY3JpdGljYWwgcGF0aD8gYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgcmVsYXRlZCB0byBTUi1JT1YgZW5hYmxpbmcvZGlzYWJsaW5nLCB3aGljaCBJJ2QgY2xhc3NpZnkgYXMgc2xvdy1wYXRoIG9wZXJhdGlvbnMuIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQncyBoYW5kbGluZyBtYWlsYm94IGNvbW1hbmRzLiBOb3QgYSBwYWNrZXQgcHJvY2Vzc2luZyBob3QgcGF0aCwgYnV0IGEgY29udHJvbCBwYXRoLiBgbGlvX3ZmX3BjaV9kZXZfYnlfcW5vYCBpcyBjYWxsZWQgd2l0aGluIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgdG8gaGFuZGxlIGBPQ1RFT05fVkZfRkxSX1JFUVVFU1RgLiBTbywgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCBhbG9uZyB3aXRoIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzLiBDaGVja2luZyB0aGUgY29kZSwgdGhleSBhcmUuIFNwZWNpZmljYWxseSwgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgc3RhdGljIGluIGBsaW9fbWFpbi5jYCwgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgYW5kIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgYXJlIHN0YXRpYyBpbiBgb2N0ZW9uX21haWxib3guY2AuXG5cbkEga2V5IGNvbnNpZGVyYXRpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaXMgdW5yZWFjaGFibGUsIHNvIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbC4gQ29uc2lkZXJpbmcgdGhlIExpcXVpZElPIGRyaXZlciwgY2FuIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgcmVhY2ggaXQ/IFRoZSBhbnN3ZXIgaXMgeWVzLiBXaGlsZSB0aGUgUENJIGZ1enplciBkb2Vzbid0IGZ1bGx5IGVtdWxhdGUgdGhlIExpcXVpZElPIGhhcmR3YXJlLCBpdCAqZG9lcyogcHJvdmlkZSBhIGR1bW15IFBDSSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSB2ZW5kb3IvZGV2aWNlIElELiBUaGlzIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBkcml2ZXIgdG8gcHJvYmUsIG1hcCBCQVJzLCBhbmQgcG90ZW50aWFsbHkgcmVhZCBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVycy4gUmVhZGluZyBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVyIGNvdWxkIHRyaWdnZXIgZXhlY3V0aW9uIG9mIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAuXG5cbkdpdmVuIHRoaXMsIEkgY29uY2x1ZGUgdGhhdCB0aGUgcGF0Y2ggaXMsIGluIGZhY3QsIHJlYWNoYWJsZS4gQW5kLCBnaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGRyaXZlciwgZnV6emluZyBpdCBpcyB3b3J0aHdoaWxlLCBlbnN1cmluZyB0aGUgZml4IGlzIGNvcnJlY3QsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGlzc3Vlcy5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgaXM6XG5cbiogICBgb2N0ZW9uX2VuYWJsZV9zcmlvdmBcbiogICBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYFxuKiAgIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gXG4qICAgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYFxuXG5BbmQgdGhlIG5lY2Vzc2FyeSBgQ29uZmlnc2AgYXJlOlxuXG4qICAgYExJUVVJRElPYFxuKiAgIGBQQ0lfSU9WYFxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBwcmVjaXNlbHkgZnJvbSB0aGUgY29kZTpcblxuKiAgIGBzdGF0aWMgaW50IG9jdGVvbl9lbmFibGVfc3Jpb3Yoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClgXG4qICAgYHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpYFxuKiAgIGBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylgXG4qICAgYHN0YXRpYyBpbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94LCBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZClgXG5cblRoZXkgYXJlIGNvcnJlY3QuXG5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTQ6MjQuNTA5NDkwMzM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA4ODcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExJUVVJRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2NTpjb25maWcgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY2LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6Njg6Y29uZmlnIExJUVVJRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjktXFx0dHJpc3RhdGUgXFxcIkNhdml1bSBMaXF1aWRJTyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9ODQ9Y29uZmlnIE9DVEVPTl9NR01UX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo5NTpjb25maWcgTElRVUlESU9fVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05Ni1cXHR0cmlzdGF0ZSBcXFwiQ2F2aXVtIExpcXVpZElPIFZGIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU0OjI0Ljc3MDQ0MTc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTE5NDI3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlVuZGVyc3RhbmRpbmcgTElRVUlESU8ncyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBMSVFVSURJT2AuIEl0J3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGVtOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtLiBUaGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBbYXNzdW1lZCBmaWVsZCBiYXNlZCBvbiBMSVFVSURJTyAtIGUuZy4sIGRpc3RyaWJ1dGVkIHN5c3RlbXMsIHNvZnR3YXJlIGFyY2hpdGVjdHVyZSwgY2xvdWQgaW5mcmFzdHJ1Y3R1cmUsIGV0Yy5dLCBJJ20gZ29pbmcgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIGEgdmVyeSBzcGVjaWZpYyBmcmFtZXdvcmsuIEknbSBub3QganVzdCBsb29raW5nIGZvciBhIHNpbXBsZSBsaXN0LiBJJ20gZ29pbmcgdG8gYmUgYXNzZXNzaW5nOlxuXG4qICAgKipEZXBlbmRlbmN5IHR5cGVzOioqIEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLCBidWlsZCBkZXBlbmRlbmNpZXMsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzPyBBcmUgdGhleSBoYXJkIGRlcGVuZGVuY2llcyB0aGF0IG11c3QgZXhpc3QsIG9yIGFyZSB0aGVyZSBzb2Z0IGRlcGVuZGVuY2llcywgbGlrZSBvcHRpb25hbCBmZWF0dXJlcz9cbiogICAqKkRlcGVuZGVuY3kgdmVyc2lvbnM6KiogVmVyc2lvbiBudW1iZXJzIHdpbGwgYmUga2V5LiBJJ20gbG9va2luZyBmb3IgdGhlIHJhbmdlIG9mIGFjY2VwdGFibGUgdmVyc2lvbnMsIGFueSB2ZXJzaW9uIGNvbnN0cmFpbnRzLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2ZXJzaW9uIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byB3YXRjaCBmb3Igb3V0ZGF0ZWQgb3IgdW5zdXBwb3J0ZWQgdmVyc2lvbnMuXG4qICAgKipEZXBlbmRlbmN5IHB1cnBvc2U6KiogV2hhdCBkb2VzIGVhY2ggZGVwZW5kZW5jeSBjb250cmlidXRlIHRvIGBMSVFVSURJT2A/IElzIGl0IGNvcmUgZnVuY3Rpb25hbGl0eSwgYSBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudCwgYSBzZWN1cml0eSBtZWFzdXJlLCBhIGxvZ2dpbmcgZnJhbWV3b3JrLCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIGVhY2ggZGVwZW5kZW5jeS5cbiogICAqKkRlcGVuZGVuY3kgaGVhbHRoOioqIFdoYXQncyB0aGUgbWFpbnRlbmFuY2Ugc3RhdHVzIG9mIGVhY2ggZGVwZW5kZW5jeT8gSXMgaXQgYWN0aXZlbHkgZGV2ZWxvcGVkIGFuZCBzdXBwb3J0ZWQsIG9yIGlzIGl0IGFiYW5kb25lZCBvciBhdCByaXNrIG9mIGJlaW5nIGRlcHJlY2F0ZWQ/IFRoaXMgaW1wYWN0cyB0aGUgbG9uZy10ZXJtIHZpYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIGBMSVFVSURJT2AuXG4qICAgKipQb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOioqIEknbGwgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzIGluaGVyZW50IGluIHRoZXNlIGRlcGVuZGVuY2llcy4gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGlmIGFueSBvZiB0aGVzZSBhcmUgY29tbW9ubHkga25vd24gdmVjdG9ycyBmb3IgYXR0YWNrIGFuZCBhc3Nlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBkZXBlbmRlbmN5LlxuXG5TbywgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIGN1cnNvcnkgZ2xhbmNlLiBJJ20gcmVhZHkgdG8gZ2V0IGEgZGV0YWlsZWQgdmlldyBvZiBgTElRVUlESU9gJ3MgZm91bmRhdGlvbiBhbmQgaXRzIHBvdGVudGlhbCByaXNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDozMC45NjIzOTExNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjA3NDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTE2PWNvbmZpZyBUSFVOREVSX05JQ19QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTE3LVxcdHRyaXN0YXRlIFxcXCJUaHVuZGVyIFBoeXNpY2FsIGZ1bmN0aW9uIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzoxODpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTE5LVxcdHNlbGVjdCBUSFVOREVSX05JQ19CR1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTI4PWNvbmZpZyBUSFVOREVSX05JQ19WRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMzAtXFx0aW1wbHkgQ0FWSVVNX1BUUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjMxOlxcdGRlcGVuZHMgb24gNjRCSVQgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMzItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9MzU9Y29uZmlnXFx0VEhVTkRFUl9OSUNfQkdYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlRodW5kZXIgTUFDIGludGVyZmFjZSBkcml2ZXIgKEJHWClcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz00NT1jb25maWdcXHRUSFVOREVSX05JQ19SR1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiVGh1bmRlciBNQUMgaW50ZXJmYWNlIGRyaXZlciAoUkdYKVxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTQ4LVxcdHNlbGVjdCBQSFlMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIkNhdml1bSBQVFAgY29wcm9jZXNzb3IgYXMgUFRQIGNsb2NrXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjU2OlxcdGRlcGVuZHMgb24gNjRCSVQgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NTc6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTU4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTY4PWNvbmZpZyBMSVFVSURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gTGlxdWlkSU8gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NzI6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTczLVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9ODQ9Y29uZmlnIE9DVEVPTl9NR01UX0VUSEVSTkVUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctODUtXFx0dHJpc3RhdGUgXFxcIk9jdGVvbiBNYW5hZ2VtZW50IHBvcnQgZXRoZXJuZXQgZHJpdmVyIChDTjVYWFgsIENONlhYWClcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6ODY6XFx0ZGVwZW5kcyBvbiBDQVZJVU1fT0NURU9OX1NPQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTg3LVxcdHNlbGVjdCBQSFlMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTk1PWNvbmZpZyBMSVFVSURJT19WRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gTGlxdWlkSU8gVkYgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSV9NU0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo5ODpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTktXFx0c2VsZWN0IExJUVVJRElPX0NPUkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTQ6MzEuNTI4NDc1MjI0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDgwNzE5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENhdml1bSBMaXF1aWRJTyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBmb3IgdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIgaGluZ2VzIG9uIGEgZmV3IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zOiBgNjRCSVRgLCBgUENJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIFdlJ3JlIGZvY3VzaW5nIG9uIHRoZSBgTElRVUlESU9gIGFuZCBgUENJX0lPVmAgYXNwZWN0cyBoZXJlLCB3aGljaCBpcyBzdGFuZGFyZC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5UaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIGEgZmV3IGtleSBmdW5jdGlvbnMuIFRoZSBtYWluIG9uZSBJJ20gdHJhY2tpbmcgaXMgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZywgYW5kIGl0J3MgYmVlbiB1cGRhdGVkLiBUaGVyZSdzIGFsc28gYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AsIGEgbmV3IGZ1bmN0aW9uLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgLiBUaGVzZSBmb3VyIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwsIGFuZCBwZXJmZWN0IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBteSBmb2N1cyBzeW1ib2xzIG9uIHRob3NlLlxuXG5Ob3csIGxldCdzIHJlY2FwIHRoZSBsb2dpYy4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYSBzdGF0aWMgbG9va3VwIHRhYmxlIHdpdGggYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIGZvciB0aGUgdmlydHVhbCBmdW5jdGlvbnMgKFZGcykuIFRoZSBmdXp6ZXIgLSBzeXprYWxsZXIgLSBjYW4gcmVhY2ggdGhpcyBjb2RlIHZpYSBQQ0kgZW11bGF0aW9uIGZvciBtYWlsYm94IGNvbW1hbmRzIGFuZCBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIFRoZXJlZm9yZSwgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIHZhbGlkYXRlIHRoaXMgbmV3IGR5bmFtaWMgbG9va3VwIGFuZCBlbnN1cmUgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuXG5cbkhvbGQgb24sIEkgc2VlIGEgc2lnbmlmaWNhbnQgYWRkaXRpb246IGBwY2llX2Zscih2ZmRldik7IHBjaV9kZXZfcHV0KHZmZGV2KTtgLiBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBsb2dpYywgYW5kIGl0IG5lZWRzIGEgZGVlcCBkaXZlLlxuXG5PbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBMSVFVSURJT19WRmAgaXMgbm90IG5lZWRlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYG9jdGVvbl9tYWlsYm94LmNgLCBidXQgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAgaXMgaGFuZGxlZCBieSB0aGUgUEYgKHNpbmNlIGl0IGlzIGEgcmVxdWVzdCBfZnJvbV8gdGhlIFZGIF90b18gdGhlIFBGKS4gQW5kIHRoZSBQRiBkcml2ZXIgaXMgYExJUVVJRElPYC4gU28sIHllcywgYExJUVVJRElPYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGUgZHJpdmVyLlxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgZ290IGEgZ29vZCBncmFzcCBvbiB0aGlzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDQyLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDozOS44MzY1NTM2MjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMjIzNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJUVVJRElPXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2N0ZW9uX2VuYWJsZV9zcmlvdlwiLFxuICAgIFwibGlvX3BjaV9zcmlvdl9kaXNhYmxlXCIsXG4gICAgXCJsaW9fdmZfcGNpX2Rldl9ieV9xbm9cIixcbiAgICBcIm9jdGVvbl9tYm94X3Byb2Nlc3NfY21kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlIGFuZCB0cmlnZ2VyIG1haWxib3ggY29tbWFuZHMsIGFzIHdlbGwgYXMgdmlhIHN5c2ZzIGZvciBTUi1JT1YgY29uZmlndXJhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIGR5bmFtaWMgbG9va3VwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElRVUlESU9cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY3Rlb25fZW5hYmxlX3NyaW92XCIsXG4gICAgXCJsaW9fcGNpX3NyaW92X2Rpc2FibGVcIixcbiAgICBcImxpb192Zl9wY2lfZGV2X2J5X3Fub1wiLFxuICAgIFwib2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1ItSU9WIGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZyBsb2dpYyBpbiB0aGUgQ2F2aXVtIExpcXVpZElPIGRyaXZlci4gSXQgcmVwbGFjZXMgYSBzdGF0aWMgbG9va3VwIHRhYmxlIHdpdGggYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIGZvciBWRnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6ZXIsIHdoaWNoIGNhbiBlbXVsYXRlIHRoZSBkZXZpY2UgYW5kIHRyaWdnZXIgbWFpbGJveCBjb21tYW5kcywgYXMgd2VsbCBhcyB2aWEgc3lzZnMgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgZHluYW1pYyBsb29rdXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc8lz8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 09:38:26 +0000 UTC FinishedAt: 2026-07-01 09:54:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIQUIDIO", "PCI_IOV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1c664ec4b9ea827b609d296921ed5bad8a40a158", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LIQUIDIO", "PCI_IOV" ], "series_id": "7ede627b-e242-4e9e-a3f9-7be7a3bb7f80" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "octeon_enable_sriov", "lio_pci_sriov_disable", "lio_vf_pci_dev_by_qno", "octeon_mbox_process_cmd" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJUVVJRElPJiMzNDssCiAgICAmIzM0O1BDSV9JT1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY3Rlb25fZW5hYmxlX3NyaW92JiMzNDssCiAgICAmIzM0O2xpb19wY2lfc3Jpb3ZfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtsaW9fdmZfcGNpX2Rldl9ieV9xbm8mIzM0OywKICAgICYjMzQ7b2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpY2ggY2FuIGVtdWxhdGUgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBtYWlsYm94IGNvbW1hbmRzLCBhcyB3ZWxsIGFzIHZpYSBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBkeW5hbWljIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWQ3MjliNDE3NDBjYTliYmQyZDJmYjI5YjI4YmI0YzA5MjhjYTI0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDk6NTI6NTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uY1xuaW5kZXggMGRiMDhhYzNkMDk4ZmIuLmUzMDM5NTZiNGJmMTJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXG5AQCAtMzc3OSw5ICYjNDM7Mzc3OSw3IEBAIHN0YXRpYyBpbnQgc2V0dXBfbmljX2RldmljZXMoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdGVvbl9kZXYpXG4gc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4ge1xuIFx0dW5zaWduZWQgaW50IG51bV92ZnNfYWxsb2NlZCA9IG9jdC1cdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZDtcbi1cdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcbiBcdGludCBlcnI7XG4tXHR1MzIgdTtcbiBcbiBcdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdCkgXHUwMDI2XHUwMDI2IG51bV92ZnNfYWxsb2NlZCkge1xuIFx0XHRlcnIgPSBwY2lfZW5hYmxlX3NyaW92KG9jdC1cdTAwM2VwY2lfZGV2LFxuQEAgLTM3OTQsMjMgJiM0MzszNzkyLDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTtcbi1cbi1cdFx0LyogaW5pdCBsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2XG4tXHRcdCAqIHN0cnVjdCBwb2ludGVyXG4tXHRcdCAqL1xuLVx0XHR1ID0gMDtcbi1cdFx0dmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbi1cdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7XG4tXHRcdHdoaWxlICh2ZmRldikge1xuLVx0XHRcdGlmICh2ZmRldi1cdTAwM2Vpc192aXJ0Zm4gXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICh2ZmRldi1cdTAwM2VwaHlzZm4gPT0gb2N0LVx1MDAzZXBjaV9kZXYpKSB7XG4tXHRcdFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9XG4tXHRcdFx0XHRcdHZmZGV2O1xuLVx0XHRcdFx0dSAmIzQzOz0gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuLVx0XHRcdH1cbi1cdFx0XHR2ZmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxuLVx0XHRcdFx0XHQgICAgICAgT0NURU9OX0NOMjNYWF9WRl9WSUQsIHZmZGV2KTtcbi1cdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIG51bV92ZnNfYWxsb2NlZDtcbkBAIC0zODE4LDggJiM0MzszNzk5LDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXG4gc3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbiB7XG4tXHRpbnQgdTtcbi1cbiBcdGlmIChwY2lfdmZzX2Fzc2lnbmVkKG9jdC1cdTAwM2VwY2lfZGV2KSkge1xuIFx0XHRkZXZfZXJyKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7VkZzIGFyZSBzdGlsbCBhc3NpZ25lZCB0byBWTXMuXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIC1FUEVSTTtcbkBAIC0zODI3LDEyICYjNDM7MzgwNiw2IEBAIHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXG4gXHRwY2lfZGlzYWJsZV9zcmlvdihvY3QtXHUwMDNlcGNpX2Rldik7XG4gXG4tXHR1ID0gMDtcbi1cdHdoaWxlICh1IFx1MDAzYyBNQVhfUE9TU0lCTEVfVkZTKSB7XG4tXHRcdG9jdC1cdTAwM2Vzcmlvdl9pbmZvLmRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0W3VdID0gTlVMTDtcbi1cdFx0dSAmIzQzOz0gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuLVx0fVxuLVxuIFx0b2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkID0gMDtcbiBcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7b2N0LVx1MDAzZXBmX251bTolZCBkaXNhYmxlZCBWRnNcXG5cJiMzNDssXG4gXHRcdCBvY3QtXHUwMDNlcGZfbnVtKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX2RldmljZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxuaW5kZXggMTkzNDRiMjFmOGZiOTQuLjg1OGEwZmZmMmNjMGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxuQEAgLTM5MCw5ICYjNDM7MzkwLDYgQEAgc3RydWN0IG9jdGVvbl9zcmlvdl9pbmZvIHtcbiBcbiBcdHN0cnVjdCBsaW9fdHJ1c3RlZF92Zlx0dHJ1c3RlZF92ZjtcbiBcbi1cdC8qbG9va3VwIHRhYmxlIHRoYXQgbWFwcyBEUEkgcmluZyBudW1iZXIgdG8gVkYgcGNpX2RldiBzdHJ1Y3QgcG9pbnRlciovXG4tXHRzdHJ1Y3QgcGNpX2RldiAqZHBpcmluZ190b192ZnBjaWRldl9sdXRbTUFYX1BPU1NJQkxFX1ZGU107XG4tXG4gXHR1NjRcdHZmX21hY2FkZHJbTUFYX1BPU1NJQkxFX1ZGU107XG4gXG4gXHR1MTZcdHZmX3ZsYW50Y2lbTUFYX1BPU1NJQkxFX1ZGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guY1xuaW5kZXggYWQ2ODVmNWQwYTEzNjMuLjY5N2ZjZGM0MWUzY2Q3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jXG5AQCAtMjYsNiAmIzQzOzI2LDMxIEBAXG4gI2luY2x1ZGUgXCYjMzQ7b2N0ZW9uX21haWxib3guaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2NuMjN4eF9wZl9kZXZpY2UuaFwmIzM0O1xuIFxuJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldiA9IE5VTEw7XG4mIzQzO1x0aW50IHZmaWR4O1xuJiM0MztcbiYjNDM7XHRpZiAoIW9jdC1cdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRpZiAocV9ubyAlIG9jdC1cdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHR2ZmlkeCA9IHFfbm8gLyBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmY7XG4mIzQzO1x0aWYgKHZmaWR4IFx1MDAzZT0gb2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHdoaWxlICgodmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbiYjNDM7XHRcdFx0XHQgICAgICAgT0NURU9OX0NOMjNYWF9WRl9WSUQsIHZmZGV2KSkpIHtcbiYjNDM7XHRcdGlmIChwY2lfcGh5c2ZuKHZmZGV2KSBcdTAwMjZcdTAwMjYgcGNpX3BoeXNmbih2ZmRldikgPT0gb2N0LVx1MDAzZXBjaV9kZXYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcGNpX2lvdl92Zl9pZCh2ZmRldikgPT0gdmZpZHgpXG4mIzQzO1x0XHRcdHJldHVybiB2ZmRldjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIG9jdGVvbl9tYm94X3JlYWQ6XG4gICogQG1ib3g6IFBvaW50ZXIgbWFpbGJveFxuQEAgLTIzNyw2ICYjNDM7MjYyLDcgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZClcbiB7XG4gXHRzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ID0gbWJveC1cdTAwM2VvY3RfZGV2O1xuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcbiBcbiBcdHN3aXRjaCAobWJveF9jbWQtXHUwMDNlbXNnLnMuY21kKSB7XG4gXHRjYXNlIE9DVEVPTl9WRl9BQ1RJVkU6XG5AQCAtMjYwLDcgJiM0MzsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG4gXHRcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldixcbiBcdFx0XHQgXCYjMzQ7Z290IGEgcmVxdWVzdCBmb3IgRkxSIGZyb20gVkYgdGhhdCBvd25zIERQSSByaW5nICV1XFxuXCYjMzQ7LFxuIFx0XHRcdCBtYm94LVx1MDAzZXFfbm8pO1xuLVx0XHRwY2llX2ZscihvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFttYm94LVx1MDAzZXFfbm9dKTtcbiYjNDM7XHRcdHZmZGV2ID0gbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKG9jdCwgbWJveC1cdTAwM2VxX25vKTtcbiYjNDM7XHRcdGlmICghdmZkZXYpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHBjaWVfZmxyKHZmZGV2KTtcbiYjNDM7XHRcdHBjaV9kZXZfcHV0KHZmZGV2KTtcbiBcdFx0YnJlYWs7XG4gXG4gXHRjYXNlIE9DVEVPTl9QRl9DSEFOR0VEX1ZGX01BQ0FERFI6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TElRVUlESU8mIzM0OywKICAgICYjMzQ7UENJX0lPViYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jdGVvbl9lbmFibGVfc3Jpb3YmIzM0OywKICAgICYjMzQ7bGlvX3BjaV9zcmlvdl9kaXNhYmxlJiMzNDssCiAgICAmIzM0O2xpb192Zl9wY2lfZGV2X2J5X3FubyYjMzQ7LAogICAgJiMzNDtvY3Rlb25fbWJveF9wcm9jZXNzX2NtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1ItSU9WIGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZyBsb2dpYyBpbiB0aGUgQ2F2aXVtIExpcXVpZElPIGRyaXZlci4gSXQgcmVwbGFjZXMgYSBzdGF0aWMgbG9va3VwIHRhYmxlIHdpdGggYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIGZvciBWRnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlIGFuZCB0cmlnZ2VyIG1haWxib3ggY29tbWFuZHMsIGFzIHdlbGwgYXMgdmlhIHN5c2ZzIGZvciBTUi1JT1YgY29uZmlndXJhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIGR5bmFtaWMgbG9va3VwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvcnJlY3QuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkNzI5YjQxNzQwY2E5YmJkMmQyZmIyOWIyOGJiNGMwOTI4Y2EyNDQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDA5OjUyOjUwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYwppbmRleCAwZGIwOGFjM2QwOThmYi4uZTMwMzk1NmI0YmYxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jCkBAIC0zNzc5LDkgJiM0MzszNzc5LDcgQEAgc3RhdGljIGludCBzZXR1cF9uaWNfZGV2aWNlcyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ZW9uX2RldikKIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KQogewogCXVuc2lnbmVkIGludCBudW1fdmZzX2FsbG9jZWQgPSBvY3QtJmd0O3NyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkOwotCXN0cnVjdCBwY2lfZGV2ICp2ZmRldjsKIAlpbnQgZXJyOwotCXUzMiB1OwogCiAJaWYgKE9DVEVPTl9DTjIzWFhfUEYob2N0KSAmYW1wOyZhbXA7IG51bV92ZnNfYWxsb2NlZCkgewogCQllcnIgPSBwY2lfZW5hYmxlX3NyaW92KG9jdC0mZ3Q7cGNpX2RldiwKQEAgLTM3OTQsMjMgJiM0MzszNzkyLDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpCiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCW9jdC0mZ3Q7c3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTsKLQotCQkvKiBpbml0IGxvb2t1cCB0YWJsZSB0aGF0IG1hcHMgRFBJIHJpbmcgbnVtYmVyIHRvIFZGIHBjaV9kZXYKLQkJICogc3RydWN0IHBvaW50ZXIKLQkJICovCi0JCXUgPSAwOwotCQl2ZmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLAotCQkJCSAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7Ci0JCXdoaWxlICh2ZmRldikgewotCQkJaWYgKHZmZGV2LSZndDtpc192aXJ0Zm4gJmFtcDsmYW1wOwotCQkJICAgICh2ZmRldi0mZ3Q7cGh5c2ZuID09IG9jdC0mZ3Q7cGNpX2RldikpIHsKLQkJCQlvY3QtJmd0O3NyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbdV0gPQotCQkJCQl2ZmRldjsKLQkJCQl1ICYjNDM7PSBvY3QtJmd0O3NyaW92X2luZm8ucmluZ3NfcGVyX3ZmOwotCQkJfQotCQkJdmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSwKLQkJCQkJICAgICAgIE9DVEVPTl9DTjIzWFhfVkZfVklELCB2ZmRldik7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gbnVtX3Zmc19hbGxvY2VkOwpAQCAtMzgxOCw4ICYjNDM7Mzc5OSw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KQogCiBzdGF0aWMgaW50IGxpb19wY2lfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KQogewotCWludCB1OwotCiAJaWYgKHBjaV92ZnNfYXNzaWduZWQob2N0LSZndDtwY2lfZGV2KSkgewogCQlkZXZfZXJyKCZhbXA7b2N0LSZndDtwY2lfZGV2LSZndDtkZXYsICYjMzQ7VkZzIGFyZSBzdGlsbCBhc3NpZ25lZCB0byBWTXMuXG4mIzM0Oyk7CiAJCXJldHVybiAtRVBFUk07CkBAIC0zODI3LDEyICYjNDM7MzgwNiw2IEBAIHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpCiAKIAlwY2lfZGlzYWJsZV9zcmlvdihvY3QtJmd0O3BjaV9kZXYpOwogCi0JdSA9IDA7Ci0Jd2hpbGUgKHUgJmx0OyBNQVhfUE9TU0lCTEVfVkZTKSB7Ci0JCW9jdC0mZ3Q7c3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9IE5VTEw7Ci0JCXUgJiM0Mzs9IG9jdC0mZ3Q7c3Jpb3ZfaW5mby5yaW5nc19wZXJfdmY7Ci0JfQotCiAJb2N0LSZndDtzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IDA7CiAJZGV2X2luZm8oJmFtcDtvY3QtJmd0O3BjaV9kZXYtJmd0O2RldiwgJiMzNDtvY3QtJmd0O3BmX251bTolZCBkaXNhYmxlZCBWRnNcbiYjMzQ7LAogCQkgb2N0LSZndDtwZl9udW0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgKaW5kZXggMTkzNDRiMjFmOGZiOTQuLjg1OGEwZmZmMmNjMGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX2RldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgKQEAgLTM5MCw5ICYjNDM7MzkwLDYgQEAgc3RydWN0IG9jdGVvbl9zcmlvdl9pbmZvIHsKIAogCXN0cnVjdCBsaW9fdHJ1c3RlZF92Zgl0cnVzdGVkX3ZmOwogCi0JLypsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2IHN0cnVjdCBwb2ludGVyKi8KLQlzdHJ1Y3QgcGNpX2RldiAqZHBpcmluZ190b192ZnBjaWRldl9sdXRbTUFYX1BPU1NJQkxFX1ZGU107Ci0KIAl1NjQJdmZfbWFjYWRkcltNQVhfUE9TU0lCTEVfVkZTXTsKIAogCXUxNgl2Zl92bGFudGNpW01BWF9QT1NTSUJMRV9WRlNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYwppbmRleCBhZDY4NWY1ZDBhMTM2My4uNjk3ZmNkYzQxZTNjZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jCkBAIC0yNiw2ICYjNDM7MjYsMzEgQEAKICNpbmNsdWRlICYjMzQ7b2N0ZW9uX21haWxib3guaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2NuMjN4eF9wZl9kZXZpY2UuaCYjMzQ7CiAKJiM0MztzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICp2ZmRldiA9IE5VTEw7CiYjNDM7CWludCB2ZmlkeDsKJiM0MzsKJiM0MzsJaWYgKCFvY3QtJmd0O3NyaW92X2luZm8ucmluZ3NfcGVyX3ZmKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmIChxX25vICUgb2N0LSZndDtzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZikKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl2ZmlkeCA9IHFfbm8gLyBvY3QtJmd0O3NyaW92X2luZm8ucmluZ3NfcGVyX3ZmOwomIzQzOwlpZiAodmZpZHggJmd0Oz0gb2N0LSZndDtzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwl3aGlsZSAoKHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sCiYjNDM7CQkJCSAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpKSkgewomIzQzOwkJaWYgKHBjaV9waHlzZm4odmZkZXYpICZhbXA7JmFtcDsgcGNpX3BoeXNmbih2ZmRldikgPT0gb2N0LSZndDtwY2lfZGV2ICZhbXA7JmFtcDsKJiM0MzsJCSAgICBwY2lfaW92X3ZmX2lkKHZmZGV2KSA9PSB2ZmlkeCkKJiM0MzsJCQlyZXR1cm4gdmZkZXY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBvY3Rlb25fbWJveF9yZWFkOgogICogQG1ib3g6IFBvaW50ZXIgbWFpbGJveApAQCAtMjM3LDYgJiM0MzsyNjIsNyBAQCBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCwKIAkJCQkgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZCkKIHsKIAlzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ID0gbWJveC0mZ3Q7b2N0X2RldjsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnZmZGV2OwogCiAJc3dpdGNoIChtYm94X2NtZC0mZ3Q7bXNnLnMuY21kKSB7CiAJY2FzZSBPQ1RFT05fVkZfQUNUSVZFOgpAQCAtMjYwLDcgJiM0MzsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsCiAJCWRldl9pbmZvKCZhbXA7b2N0LSZndDtwY2lfZGV2LSZndDtkZXYsCiAJCQkgJiMzNDtnb3QgYSByZXF1ZXN0IGZvciBGTFIgZnJvbSBWRiB0aGF0IG93bnMgRFBJIHJpbmcgJXVcbiYjMzQ7LAogCQkJIG1ib3gtJmd0O3Ffbm8pOwotCQlwY2llX2ZscihvY3QtJmd0O3NyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbbWJveC0mZ3Q7cV9ub10pOwomIzQzOwkJdmZkZXYgPSBsaW9fdmZfcGNpX2Rldl9ieV9xbm8ob2N0LCBtYm94LSZndDtxX25vKTsKJiM0MzsJCWlmICghdmZkZXYpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlwY2llX2Zscih2ZmRldik7CiYjNDM7CQlwY2lfZGV2X3B1dCh2ZmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBPQ1RFT05fUEZfQ0hBTkdFRF9WRl9NQUNBRERSOgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIENhdml1bSBMaXF1aWRJTyBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyIChgbGlvX21haW4uY2AsIGBvY3Rlb25fZGV2aWNlLmhgLCBgb2N0ZW9uX21haWxib3guY2ApLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSByZW1vdmVkIHRoZSBsb29rdXAgdGFibGUgYGRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0YCBhbmQgYXJlIG5vdyBkb2luZyBhIGR5bmFtaWMgUENJIGRldmljZSBsb29rdXAgdXNpbmcgYHBjaV9nZXRfZGV2aWNlYCBhbmQgYHBjaV9pb3ZfdmZfaWRgIHdoZW4gaGFuZGxpbmcgdGhlIGBPQ1RFT05fVkZfRkxSX1JFUVVFU1RgIG1haWxib3ggY29tbWFuZCB3aXRoaW4gYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqZnV6emFibGUqPwoKVGhlIGRyaXZlciBpcyBgbGlxdWlkaW9gLCB3aGljaCBpcyBhIENhdml1bSBMaXF1aWRJTyBJbnRlbGxpZ2VudCBTZXJ2ZXIgQWRhcHRlciBkcml2ZXIg4oCTIHNvIEV0aGVybmV0LiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgJiMzNDtzcGVjaWZpYyBoYXJkd2FyZSYjMzQ7IHRvIG1lLiBDYW4gSSBldmVuIGV4ZXJjaXNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gR2VuZXJhbGx5LCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGFyZSB0b3VnaCB0byBoaXQgdW5sZXNzIHRoZXJlJiMzOTtzIGFuIGVtdWxhdGlvbiBsYXllciBsaWtlIGUxMDAwZSBvciB2aXJ0aW8sIG9yIGlmIHlvdSYjMzk7cmUgdXNpbmcgc29tZXRoaW5nIGxpa2UgdmhjaS9kdW1teSBkZXZpY2VzLgoKV2FpdCBhIHNlY29uZOKApnN5emthbGxlciEgSXQgY2FuIGZ1enogUENJIGRldmljZXMgdXNpbmcgdGhlIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGwsIHJpZ2h0PyBJdCBpbmplY3RzIFBDSSBkZXZpY2VzIGlmIHRoZSBrZXJuZWwgaGFzIHN1cHBvcnQg4oCTIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYENPTkZJR19QQ0lfREVCVUdgIG9yIHN5emthbGxlciYjMzk7cyBvd24gUENJIGZ1enplci4gVGhhdCYjMzk7cyBhIHBvdGVudGlhbCBhdmVudWUhIFRob3VnaCBJJiMzOTttIHdvbmRlcmluZyBpZiB0aGUgUENJIGZ1enplciBpcyBvbmx5IHRhcmdldGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zLgoKU28sIHRoaXMgaXMgYSBoYXJkd2FyZSBkcml2ZXIsIGl0IHNlZW1zIHByZXR0eSBjbGVhci4gQnV0LCBnaXZlbiBzeXprYWxsZXImIzM5O3MgY2FwYWJpbGl0aWVzLCAqY2FuKiB3ZSBmdXp6IGl0PyBJZiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyBlbmFibGVkLCBpdCBzaG91bGQgYmUgYWJsZSB0by4gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBvciBkZXBlbmRlbmNpZXMgSSBjYW4gdXNlIHRvIGZpZ3VyZSB0aGlzIG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXF1aWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTY4PWNvbmZpZyBMSVFVSURJT1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTgxLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo4MjpcdCAgd2lsbCBiZSBjYWxsZWQgbGlxdWlkaW8uICBUaGlzIGlzIHJlY29tbWVuZGVkLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctODMtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9OTU9Y29uZmlnIExJUVVJRElPX1ZGXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTA0LVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiBUaGUgbW9kdWxlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzoxMDU6XHQgIHdpbGwgYmUgY2FsbGVkIGxpcXVpZGlvX3ZmLiBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTA2LVx0ICBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzczCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgdGhlIGBMSVFVSURJT2AgQ29uZmlndXJhdGlvbiBhbmQgTWFpbGJveCBDb21tYW5kIFByb2Nlc3NpbmcqKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGlzIGBMSVFVSURJT2AuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaGFuZGxpbmcgbWFpbGJveCBjb21tYW5kcy4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O20gYXNzdW1pbmcgdGhlc2UgY29tbWFuZHMgYXJlIGVpdGhlciBjb21pbmcgZnJvbSB0aGUgaGFyZHdhcmUgaXRzZWxmIG9yIHBvc3NpYmx5IGJlaW5nIGlzc3VlZCBieSBhIFZpcnR1YWwgRnVuY3Rpb24gKFZGKS4gU28sIHRoZXkgcmVwcmVzZW50IHNvbWUgZm9ybSBvZiBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBtZWNoYW5pc20gd2l0aGluIHRoZSBzeXN0ZW0sIGxpa2VseSB0aWVkIHRvIHRoZSBPY3Rlb24gcGxhdGZvcm0uCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgKndoZXJlKiB0aGlzIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgZnVuY3Rpb24gaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsIGdyYXBoIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0cyBpbiB3aGljaCBpdCYjMzk7cyBpbnZva2VkIGFuZCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGVzZSBtYWlsYm94IGNvbW1hbmRzIGFyZSBpbml0aWF0ZWQgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgZmxvdyBvZiB0aGVzZSBjb21tYW5kcy4gSSBuZWVkIHRvIHNlZSB0aGUgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jdGVvbl9tYm94X3Byb2Nlc3NfY21kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYz0yMzQ9c3RhdGljIHZvaWQgZ2V0X3ZmX3N0YXRzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjU0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM6MjU1OiAqIG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjU2LSAqIEBtYm94OiBQb2ludGVyIG1haWxib3hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0yNjAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzoyNjE6c3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0yNjItXHRcdFx0XHQgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYz0zMjQ9aW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzc1LVx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNm1ib3gtXHUwMDNlbG9jaywgZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM6Mzc2Olx0XHRvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChtYm94LCBcdTAwMjZtYm94X2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0zNzctXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NDIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byB0aGUgTWVzc2FnZSBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCBjYWxscyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBhIGxheWVyZWQgYXBwcm9hY2guIEl0IHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNvbWUgbWVzc2FnZSBwcmVwcm9jZXNzaW5nIG9yIGRpc3BhdGNoIGhhcHBlbmluZyBpbiB0aGUgYF9tZXNzYWdlYCBmdW5jdGlvbiwgYW5kIHRoZW4gdGhlIGFjdHVhbCBjb21tYW5kIGV4ZWN1dGlvbiByZXNpZGVzIGluIHRoZSBgX2NtZGAgZnVuY3Rpb24uIE1ha2VzIHNlbnNlIGZyb20gYW4gb3JnYW5pemF0aW9uIHBlcnNwZWN0aXZlLCBsaWtlbHkgYSBkaXNwYXRjaGVyIHBhdHRlcm4uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMsICp3aGVyZSogaXMgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAgYmVpbmcgaW52b2tlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50cy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBrZXkuIElzIGl0IGFuIGludGVycnVwdCBoYW5kbGVyLCBhIHNjaGVkdWxlZCB0YXNrLCBvciBzb21ldGhpbmcgdHJpZ2dlcmVkIGJ5IGFub3RoZXIgcHJvY2Vzcz8gS25vd2luZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpbGwgZ2l2ZSBtZSBjcml0aWNhbCBjb250ZXh0IGFib3V0IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCBpdCBvcGVyYXRlcywgdGhlIHBvdGVudGlhbCBzb3VyY2VzIG9mIHRoZSBtZXNzYWdlcywgYW5kIGxpa2VseSwgdGhlIHVyZ2VuY3kgb2YgbWVzc2FnZSBwcm9jZXNzaW5nIGFuZCBhbnkgdGhyZWFkIHNhZmV0eSByZXF1aXJlbWVudHMgSSBuZWVkIHRvIGNvbnNpZGVyLiBUaW1lIHRvIGdvIGh1bnRpbmcgZm9yIHRoZSBjYWxsZXJzLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jPTUwOT1zdGF0aWMgdm9pZCBjbjIzeHhfcGZfbWJveF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTI4LVx0XHRcdFx0aWYgKG9jdGVvbl9tYm94X3JlYWQob2N0LVx1MDAzZW1ib3hbcV9ub10pKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1Mjk6XHRcdFx0XHRcdG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTMwLVx0XHRcdFx0XHQgICAgb2N0LVx1MDAzZW1ib3hbcV9ub10pO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTM1LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTM2Olx0XHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UobWJveCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUzNy1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jPTI2Mz1zdGF0aWMgdm9pZCBjbjIzeHhfdmZfbWJveF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtMjY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYzoyNjg6XHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UobWJveCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTI2OS19XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM9MjYxPXN0YXRpYyBpbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMxOC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjMxOTogKiBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyMC0gKiBAbWJveDogbWFpbGJveFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjMyNDppbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94Lmg9MTIwPWludCBvY3Rlb25fbWJveF93cml0ZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmgtMTIxLVx0XHQgICAgICBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaDoxMjI6aW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmgtMTIzLWludCBvY3Rlb25fbWJveF9jYW5jZWwoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCwgaW50IHFfbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NDQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdHJ5aW5nIHRvIGRlY2lkZSBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBhIGBjbjIzeHhgIGRldmljZSAobGlrZWx5IENhdml1bS9NYXJ2ZWxsIGhhcmR3YXJlKSwgYW5kIGl0IHRvdWNoZXMgbWFpbGJveCBjb21tYW5kcy4gVGhlIGNvZGUgaXMgY2FsbGVkIGZyb20gYGNuMjN4eF9wZl9tYm94X3RocmVhZGAgYW5kIGBjbjIzeHhfdmZfbWJveF90aHJlYWRgIHdoaWNoIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYSBtZXNzYWdlIHBhc3NpbmcgbWVjaGFuaXNtIHdpdGggdGhlIGhhcmR3YXJlLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIHJlYWNoIHRoaXM/IFdlICpkbyogaGF2ZSBhIFBDSSBmdXp6ZXIsIGJ1dCBpdCYjMzk7cyBnZW5lcmFsbHkgcHJldHR5IGJhc2ljLiBJdCYjMzk7cyBnb29kIGZvciBwcm9iaW5nIGFuZCBiYXNpYyBNTUlPL0RNQSwgYnV0IEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGFjdHVhbGx5ICp0cmlnZ2VyKiBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLCB0aGUgZnVuY3Rpb24gdGhhdCBzZWVtcyBjZW50cmFsIGhlcmUuIFRoYXQgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGJ5IHJlYWRpbmcgZnJvbSBhIG1haWxib3gsIHdoaWNoIHN1Z2dlc3RzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgaGFyZHdhcmUuCgpUaGUgcGF0Y2ggaXRzZWxmIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZml4ZXMgYW4gU1ItSU9WIChgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgKSBidWcgaW4gdGhlIGBsaXF1aWRpb2AgZHJpdmVyLiBJdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgc3dhcHBpbmcgb3V0IGBkcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dGAgZm9yIGEgZHluYW1pYyBsb29rdXAgdGFibGUgKGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gKS4gVGhpcyBzZWVtcyBzcGVjaWZpYyB0byBhIGNlcnRhaW4gaGFyZHdhcmUgY29uZmlndXJhdGlvbi4gVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKmdldCogdG8gdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFuZCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuLi4KClRoZSBwcm9tcHQgaXMgc3BlY2lmaWMuIEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQmIzM5O3MgKmltcG9zc2libGUqIHRvIHJlYWNoIHRoZSBjb2RlIGluIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuIE9rYXksIHRoYXQmIzM5O3MgdGhlIGtleS4gSXMgdGhlIENhdml1bSBMaXF1aWRJTyBkZXZpY2UgZW11bGF0ZWQgaW4gUUVNVT8gTm8uIEJ1dCwgd2hhdCBhYm91dCB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXI/CgpTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciB3b3JrcyBieSB1c2luZyBhIHBzZXVkby1zeXNjYWxsIGBzeXpfcGNpX2RldmljZWAgdG8gaW5qZWN0IGEgKmZha2UqIFBDSSBkZXZpY2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IGludGVyY2VwdGluZyBNTUlPIHJlYWRzL3dyaXRlcy4gU28sIGRvZXMgKnRoYXQqIGNvdW50IGFzIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLCBhcyB0aGUgcHJvbXB0IHNheXM/IFllcywgaXQmIzM5O3MgZGVmaW5pdGVseSBhIGZvcm0gb2Ygc29mdHdhcmUgZW11bGF0aW9uLiBTbywgaXMgdGhlIHF1ZXN0aW9uIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQ/CgpUaGUgcmVhbCBxdWVzdGlvbiBpcyAqaG93KiBsaW1pdGVkIGlzIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyPyBJdCBjYW4gdHJpZ2dlciBwcm9iZXMgYW5kIG1heWJlIGJhc2ljIGludGVycnVwdHMgb3Igd29ya3F1ZXVlcyBpZiB0aGV5IGdldCBzY2hlZHVsZWQgZHVyaW5nIHRoZSBwcm9iZS4gTm93IEkgbmVlZCB0byBjaGVjayBpZiBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgZ2V0cyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgY2FuIHNpbXVsYXRlIHRoZSBuZWNlc3NhcnkgY29uZGl0aW9ucyB0byB0cmlnZ2VyIHRoZSBjaGFuZ2VkIGNvZGUgcGF0aCBpbiB0aGUgcGF0Y2guIFNpbmNlIHRoZSBwcm9tcHQgdGVsbHMgbWUgdG8gY29uc2lkZXIgZXZlbiBzb2Z0d2FyZSBlbXVsYXRlZCBoYXJkd2FyZSwgaXQmIzM5O3Mgbm90IGxvb2tpbmcgZ29vZCwgYnV0IGxldCYjMzk7cyBjaGVjayB3aGF0JiMzOTtzIHJlYWNoYWJsZSBkdXJpbmcgdGhlIHByb2JlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY3Rlb25fZW5hYmxlX3NyaW92JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz0zMzIyPXN0YXRpYyBpbnQgc2V0dXBfbmljX2RldmljZXMoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdGVvbl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzc3OC0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jOjM3Nzk6c3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zNzgwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz0zODE2PXN0YXRpYyBpbnQgbGlxdWlkaW9fZW5hYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudW1fdmZzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM4MzctXHRcdG9jdC1cdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IG51bV92ZnM7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzozODM4Olx0XHRyZXQgPSBvY3Rlb25fZW5hYmxlX3NyaW92KG9jdCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zODM5LVx0XHRkZXZfaW5mbyhcdTAwMjZvY3QtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsIFwmIzM0O29jdC1cdTAwM2VwZl9udW06JWQgbnVtX3ZmczolZFxcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2MwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbmV0d29ya2luZyBkcml2ZXIgZGV2ZWxvcG1lbnQ6CgoqKlRyYWNpbmcgdGhlIFNSSU9WIEVuYWJsZW1lbnQgUGF0aCoqCgpBbHJpZ2h0LCBzbyBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBTUi1JT1YgKFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbikgZW5hYmxlbWVudCBmb3IgdGhpcyBPY3Rlb24tYmFzZWQgbmV0d29yayBkZXZpY2UuICBUaGUgY29kZSB0ZWxscyBtZSB0aGF0IGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgIGlzIHRoZSBvbmUgY2FsbGluZyBpdC4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgZG9lcyAqdGhpcyogZnVuY3Rpb24sIGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgLCBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiB0byB0cnVseSBncmFzcCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgY29uZmlndXJhdGlvbi4gS25vd2luZyB3aGVyZSBgbGlxdWlkaW9fZW5hYmxlX3NyaW92YCBpcyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBTUi1JT1YgaXMgYmVpbmcgZW5hYmxlZC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0mIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgcmVsYXRlZCB0byB2aXJ0dWFsaXphdGlvbi4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsaXF1aWRpb19lbmFibGVfc3Jpb3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTEyNz1zdHJ1Y3QgaGFuZHNoYWtlIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0xMzUtI2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzoxMzY6c3RhdGljIGludCBsaXF1aWRpb19lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMTM3LSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTQyMT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbGlxdWlkaW9fcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy00MjgtI2lmZGVmIENPTkZJR19QQ0lfSU9WXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo0Mjk6XHQuc3Jpb3ZfY29uZmlndXJlID0gbGlxdWlkaW9fZW5hYmxlX3NyaW92LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtNDMwLSNlbmRpZlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTM4MDA9c3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zODE1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM6MzgxNjpzdGF0aWMgaW50IGxpcXVpZGlvX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnVtX3ZmcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM4MTcte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDk2CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHNyaW92X2NvbmZpZ3VyZWAgQ2FsbGJhY2sgYW5kIE1haWxib3ggVGhyZWFkKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYC5zcmlvdl9jb25maWd1cmVgIGNhbGxiYWNrIHdpdGhpbiB0aGUgYHN0cnVjdCBwY2lfZHJpdmVyYC4gVGhlIHF1ZXN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQgaXMsIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnRyaWdnZXIqIHRoaXM/IEFuZCB0aGUgYW5zd2VyLCBpdCBzZWVtcywgaXMgYSBjbGVhciB5ZXMg4oCTIGJ5IG1lc3Npbmcgd2l0aCBgL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3NyaW92X251bXZmc2AuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIHRoZSByZWFsIG1lYXQgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgd3JhcHBlZCB1cCB3aXRoaW4gdGhlIGBjbjIzeHhfcGZfbWJveF90aHJlYWRgLCByaWdodD8gVGhpcyBpcyB0aGUgd29ya3F1ZXVlIHRoYXQgcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBtYWlsYm94IHByb2Nlc3MgY29tbWFuZCwgd2hpY2ggaXMgdGhlIGJpdCBJJiMzOTttIG1vc3QgaW50ZXJlc3RlZCBpbi4gVGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgKndoZW4qIHRoaXMgd29ya3F1ZXVlIGdldHMgc2NoZWR1bGVkLiBTbywgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBlaXRoZXIgaW50ZXJydXB0LWRyaXZlbiBvciBwb2xsZWQuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZXhhY3Qgc2NoZWR1bGluZyBtZWNoYW5pc20gZm9yIHRoYXQgYGNuMjN4eF9wZl9tYm94X3RocmVhZGAuIFdoZXJlIGlzIGl0IGJlaW5nIHNjaGVkdWxlZCBmcm9tIGV4YWN0bHk/IFRoYXQmIzM5O3MgdGhlIGNvcmUgcXVlc3Rpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbjIzeHhfcGZfbWJveF90aHJlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NDU5PXN0YXRpYyB2b2lkIGNuMjN4eF9zZXR1cF9vcV9yZWdzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBvcV9ubylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUwOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTA5OnN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUxMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz01NDA9c3RhdGljIGludCBjbjIzeHhfc2V0dXBfcGZfbWJveChzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTc4LVx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZtYm94LVx1MDAzZW1ib3hfcG9sbF93ay53b3JrLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1Nzk6XHRcdFx0XHQgIGNuMjN4eF9wZl9tYm94X3RocmVhZCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTU4MC1cdFx0bWJveC1cdTAwM2VtYm94X3BvbGxfd2suY3R4cHRyID0gKHZvaWQgKiltYm94O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5ODYwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIHRhaWxvcmVkIGFzIGlmIEksIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBhbSBjb25zaWRlcmluZyB0aGVtOgoKKipEZWJ1Z2dpbmcgdGhlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKClJpZ2h0LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBjbjIzeHhfc2V0dXBfcGZfbWJveGAgZnVuY3Rpb24gYW5kIHNvbWV0aGluZyYjMzk7cyBjbGVhcmx5IG5vdCBoYXBwZW5pbmcgd2hlbiBJIGV4cGVjdCBpdCB0by4gVGhlIGNvbW1lbnQgc3RhdGVzIHRoZSBpbml0aWFsaXphdGlvbiBJJiMzOTttIGNoYXNpbmcgaXMgKmRlbGF5ZWQqIGFuZCBoYXBwZW5zIGluIHRoYXQgZnVuY3Rpb24uIE15IHByaW1hcnkgcXVlc3Rpb24gbm93IGlzOiBXaGVyZSB0aGUgaGVsbCBpcyBgY24yM3h4X3NldHVwX3BmX21ib3hgIGdldHRpbmcgY2FsbGVkIGZyb20/IFRoYXQmIzM5O3MgdGhlIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBmdW5jdGlvbiB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRpbmcgcG9pbnQgb2YgdGhpcyBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJcyBpdCBjYWxsZWQgZHVyaW5nIGRyaXZlciBwcm9iZT8gSXMgdGhlcmUgc29tZSBzcGVjaWZpYyBldmVudCB0cmlnZ2VyPyBLbm93aW5nIHRoZSBjYWxsIHBhdGggd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIHRpbWluZyBjb25zdHJhaW50cyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIGNhdXNpbmcgYSBkZWxheSBpbiBteSBleHBlY3RlZCBiZWhhdmlvci4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXJlIHRoaXMgdml0YWwgZnVuY3Rpb24gZml0cyB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y24yM3h4X3NldHVwX3BmX21ib3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jOjU0MDpzdGF0aWMgaW50IGNuMjN4eF9zZXR1cF9wZl9tYm94KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTU0MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz0xMTM4PWludCBzZXR1cF9jbjIzeHhfb2N0ZW9uX3BmX2RldmljZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4Mi1cdG9jdC1cdTAwM2Vmbl9saXN0LnNldHVwX29xX3JlZ3MgPSBjbjIzeHhfc2V0dXBfb3FfcmVncztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6MTE4MzpcdG9jdC1cdTAwM2Vmbl9saXN0LnNldHVwX21ib3ggPSBjbjIzeHhfc2V0dXBfcGZfbWJveDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4NC1cdG9jdC1cdTAwM2Vmbl9saXN0LmZyZWVfbWJveCA9IGNuMjN4eF9mcmVlX3BmX21ib3g7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudDogQ2FsbGJhY2sgYW5kIENhbGwgU3RhY2sgRXhwbG9yYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTt2ZSBnb3QgYSBjYWxsYmFjayBoZXJlIOKAkyBzcGVjaWZpY2FsbHksIGBzZXR1cF9tYm94YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgYWx3YXlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hlcmUgaW4gdGhlIGNvZGViYXNlIGlzIHRoaXMgYHNldHVwX21ib3hgIGZ1bmN0aW9uIGFjdHVhbGx5IGJlaW5nIGludm9rZWQ/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxlcnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHRoZSBvcmlnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NldHVwX21ib3gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9MTEzOD1pbnQgc2V0dXBfY24yM3h4X29jdGVvbl9wZl9kZXZpY2Uoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTExODItXHRvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9vcV9yZWdzID0gY24yM3h4X3NldHVwX29xX3JlZ3M7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jOjExODM6XHRvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3BmX21ib3g7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTExODQtXHRvY3QtXHUwMDNlZm5fbGlzdC5mcmVlX21ib3ggPSBjbjIzeHhfZnJlZV9wZl9tYm94O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM9NjE2PWludCBjbjIzeHhfc2V0dXBfb2N0ZW9uX3ZmX2RldmljZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNjY2LVx0b2N0LVx1MDAzZWZuX2xpc3Quc2V0dXBfb3FfcmVncyA9IGNuMjN4eF9zZXR1cF92Zl9vcV9yZWdzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYzo2Njc6XHRvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3ZmX21ib3g7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTY2OC1cdG9jdC1cdTAwM2Vmbl9saXN0LmZyZWVfbWJveCA9IGNuMjN4eF9mcmVlX3ZmX21ib3g7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19ldGh0b29sLmM9MTA4NT1zdGF0aWMgaW50IGxpb19yZXNldF9xdWV1ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdWludDMyX3QgbnVtX3FzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fZXRodG9vbC5jLTExOTYtXHRcdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdCkgXHUwMDI2XHUwMDI2ICFvY3QtXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX2V0aHRvb2wuYzoxMTk3Olx0XHRcdGlmIChvY3QtXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94KG9jdCkpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fZXRodG9vbC5jLTExOTgtXHRcdFx0XHRkZXZfZXJyKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7TWFpbGJveCBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTQwMDc9c3RhdGljIGludCBvY3Rlb25fZGV2aWNlX2luaXQoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdGVvbl9kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtNDE0My1cdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdGVvbl9kZXYpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo0MTQ0Olx0XHRpZiAob2N0ZW9uX2Rldi1cdTAwM2Vmbl9saXN0LnNldHVwX21ib3gob2N0ZW9uX2RldikpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTQxNDUtXHRcdFx0ZGV2X2VycihcdTAwMjZvY3Rlb25fZGV2LVx1MDAzZXBjaV9kZXYtXHUwMDNlZGV2LCBcJiMzNDtPQ1RFT046IE1haWxib3ggc2V0dXAgZmFpbGVkXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYz0yMjY4PXN0YXRpYyBpbnQgb2N0ZW9uX2RldmljZV9pbml0KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb192Zl9tYWluLmMtMjMzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fdmZfbWFpbi5jOjIzNDA6XHRpZiAob2N0LVx1MDAzZWZuX2xpc3Quc2V0dXBfbWJveChvY3QpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYy0yMzQxLVx0XHRkZXZfZXJyKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCYjMzQ7TWFpbGJveCBzZXR1cCBmYWlsZWRcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmg9MjMyPXN0cnVjdCBvY3Rlb25fZm5fbGlzdCB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaC0yMzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX2RldmljZS5oOjIzOTpcdGludCAoKnNldHVwX21ib3gpKHN0cnVjdCBvY3Rlb25fZGV2aWNlICopO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaC0yNDAtXHRpbnQgKCpmcmVlX21ib3gpKHN0cnVjdCBvY3Rlb25fZGV2aWNlICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg1OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9jdGVvbiBEcml2ZXIgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgb2N0ZW9uX2RldmljZV9pbml0YCBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyB0aGUgUENJIHByb2JlIHNlcXVlbmNlLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgbWFpbGJveCB0aHJlYWQgZ2V0cyBpbml0aWFsaXplZCBhbmQgc2NoZWR1bGVkLCB3aGljaCBoYXBwZW5zIGR1cmluZyB0aGUgUENJIHByb2JlIHBoYXNlLiBUaGUgbWFpbGJveCB0aHJlYWQmIzM5O3Mgam9iIGlzIHRvIGNvbnRpbnVhbGx5IHBvbGwgdGhvc2UgbWFpbGJveCByZWdpc3RlcnMuIE5vdywgdGhlIGtleSBoZXJlIGlzIHRoYXQgaWYgU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgaW5qZWN0cyBhIGZha2UgTGlxdWlkSU8gZGV2aWNlLCB0aGUgZHJpdmVyIHdpbGwgZ28gdGhyb3VnaCB0aGUgbW90aW9ucyBvZiBwcm9iaW5nIGl0LiBJdCYjMzk7bGwgc2V0IHVwIHRoZSBtYWlsYm94LCBhbmQgdGhlIHBvbGxpbmcgc3RhcnRzLgoKVGhpcyBpcyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgUENJIGZ1enplciBjYW4gZmVlZCB0aGUgZHJpdmVyIGZha2UgdmFsdWVzIHdoZW4gaXQgcmVhZHMgdGhvc2UgbWFpbGJveCByZWdpc3RlcnMuIFRoYXQgbWVhbnMgd2UgY291bGQgcG90ZW50aWFsbHkgdHJpZ2dlciBhbmQgZXhlY3V0ZSBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIHdpdGggZGF0YSBmdWxseSBjb250cm9sbGVkIGJ5IHRoZSBmdXp6ZXIuIEhvbGQgb24sIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gaWYgdGhpcyBpcyBhY3R1YWxseSBhIHJlYWxpc3RpYyBzY2VuYXJpby4KClNvLCB0aGUgUENJIGZ1enplciBzZXRzIHVwIHRoaXMgZmFrZSBQQ0kgZGV2aWNlLCBhbmQgdGhlIGRyaXZlciBnb2VzIGFib3V0IG1hcHBpbmcgdGhlIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMgKEJBUnMpIGFuZCByZWFkaW5nIGZyb20gdGhlbS4gV2hlbiBgb2N0ZW9uX21ib3hfcmVhZGAgaXMgY2FsbGVkLCBpdCYjMzk7cyBlc3NlbnRpYWxseSByZWFkaW5nIGZyb20gb25lIG9mIHRob3NlIEJBUnMuIFJpZ2h0LCBzbyBub3cgSSBuZWVkIHRvIGNoZWNrIGhvdyBgb2N0ZW9uX21ib3hfcmVhZGAgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jdGVvbl9tYm94X3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MjctXHRcdFx0aWYgKHZhbDY0IFx1MDAyNlx1MDAyNiAodmFsNjQgIT0gT0NURU9OX1BGVkZBQ0spKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jOjUyODpcdFx0XHRcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cdTAwM2VtYm94W3Ffbm9dKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTI5LVx0XHRcdFx0XHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UoXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz04MTM9c3RhdGljIHZvaWQgY24yM3h4X2hhbmRsZV9wZl9tYm94X2ludHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTgyNi1cdFx0XHQgICAgICAgb2N0LVx1MDAzZW1ib3hbMF0tXHUwMDNlbWJveF9pbnRfcmVnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6ODI3Olx0XHRcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cdTAwM2VtYm94W3Ffbm9dKSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy04MjgtXHRcdFx0XHR3b3JrID0gXHUwMDI2b2N0LVx1MDAzZW1ib3hbcV9ub10tXHUwMDNlbWJveF9wb2xsX3drLndvcms7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYz00NzI9c3RhdGljIHZvaWQgY24yM3h4X2hhbmRsZV92Zl9tYm94X2ludHIoc3RydWN0IG9jdGVvbl9pb3FfdmVjdG9yICppb3FfdmVjdG9yKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgwLVx0XHR3cml0ZXEobWJveF9pbnRfdmFsLCBvY3QtXHUwMDNlbWJveFswXS1cdTAwM2VtYm94X2ludF9yZWcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYzo0ODE6XHRcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cdTAwM2VtYm94WzBdKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgyLVx0XHRcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcdTAwMjZvY3QtXHUwMDNlbWJveFswXS1cdTAwM2VtYm94X3BvbGxfd2sud29yayxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYz0yOT1zdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy01NC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjU1OiAqIG9jdGVvbl9tYm94X3JlYWQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy01Ni0gKiBAbWJveDogUG9pbnRlciBtYWlsYm94XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtNjAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzo2MTppbnQgb2N0ZW9uX21ib3hfcmVhZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy02Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94Lmg9MTE0PXN0cnVjdCBvY3RfdmZfc3RhdHNfY3R4IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaC0xMTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaDoxMTk6aW50IG9jdGVvbl9tYm94X3JlYWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oLTEyMC1pbnQgb2N0ZW9uX21ib3hfd3JpdGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWdWxuZXJhYmlsaXR5IGFuZCBSZWFjaGFiaWxpdHkqKgoKT2theSwgc28gYG9jdGVvbl9tYm94X3JlYWRgIGlzIGhvdyB3ZSBnZXQgZGF0YSBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVycy4gSWYgdGhlIFBDSSBmdXp6ZXIgaW4gc3l6a2FsbGVyIGNhbiBwcm92aWRlIHRoZSAqcmlnaHQqIHZhbHVlcywgdGhhdCBzaG91bGQgdHJpZ2dlciBgb2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlYCBhbmQgdWx0aW1hdGVseSBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBBbmQgdGhlIHBhdGNoIHNwZWNpZmljYWxseSBtb2RpZmllcyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIHRvIGhhbmRsZSBgT0NURU9OX1ZGX0ZMUl9SRVFVRVNUYC4gVGhpcyB0aGVuIGNhbGxzIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gLgoKTm93LCB0aGF0IGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggUENJIGRldmljZXMgdXNpbmcgYHBjaV9nZXRfZGV2aWNlYCB3aXRoIENhdml1bSYjMzk7cyB2ZW5kb3IgSUQuIEl0IGNoZWNrcyB0aGUgUGh5c2ljYWwgRnVuY3Rpb24gKFBGKSBvZiB0aGUgZGV2aWNlIGFuZCB0aGUgVmlydHVhbCBGdW5jdGlvbiBJRCAoVkZJRCkuIENvdWxkIHN5emthbGxlciBhY3R1YWxseSAqdHJpZ2dlciogdGhpcz8gSSB0aGluayBzby4gSWYgdGhlIFBDSSBmdXp6ZXIgY2FuIGluamVjdCBhICpmYWtlKiBQRiBkZXZpY2UsIGl0IG1pZ2h0IG5lZWQgdG8gaW5qZWN0IGZha2UgVkZzIGFzIHdlbGwgdG8gbWFrZSB0aGlzIGNvZGUgcGF0aCBhY3R1YWxseSBkbyBzb21ldGhpbmcuIEJ1dCBldmVuIGlmIGl0ICpkb2VzbiYjMzk7dCogZmluZCBhIFZGLCB0aGUgZnVuY3Rpb24gd2lsbCBzdGlsbCBleGVjdXRlIGFuZCByZXR1cm4gTlVMTCwgd2hpY2ggaXMgc3RpbGwgcmVhY2hhYmxlIGNvZGUhCgpIb2xkIG9uLCB0aGUgcGF0Y2ggKmFsc28qIG1lc3NlcyB3aXRoIGBvY3Rlb25fZW5hYmxlX3NyaW92YCBhbmQgYGxpb19wY2lfc3Jpb3ZfZGlzYWJsZWAuIFRob3NlIGFyZSBsaW5rZWQgdG8gU1ItSU9WIGJlaW5nIGVuYWJsZWQvZGlzYWJsZWQgdGhyb3VnaCBzeXNmcywgcmlnaHQ/IEFuZCBzeXprYWxsZXIgKmNhbiogd3JpdGUgdG8gc3lzZnMgZmlsZXMuIFNvLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIGBvY3Rlb25fZW5hYmxlX3NyaW92YCEKCklzIHRoaXMgZXZlbiAqd29ydGgqIGZ1enppbmc/IFdlbGwsIHRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aXRoIHRoZSBvbGQgYGRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0YCBhcHByb2FjaC4gSXQgc291bmRzIGxpa2UgdGhlcmUgY291bGQgaGF2ZSBiZWVuIGlzc3VlcyB0aGVyZSwgbGlrZSB1c2UtYWZ0ZXItZnJlZSBpZiBWRnMgd2VyZSByZW1vdmVkLCBvciBqdXN0IHdyb25nIG1hcHBpbmdzLiBUaGUgbmV3IGNvZGUgZHluYW1pY2FsbHkgZmluZHMgdGhlIFZGLiBUaGlzIHNlZW1zIGxpa2UgZnVuY3Rpb25hbCBjb2RlIGluIGEgaGFyZHdhcmUgZHJpdmVyLiBBbmQgaXQgc291bmRzIGxpa2UgdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIFBDSSBmdXp6ZXIgKmFuZCogc3lzZnMgd3JpdGVzLCByaWdodD8KCldhaXQgYSBzZWNvbmQuIElzIGBMSVFVSURJT2AgZXZlbiAqZW5hYmxlZCogaW4gc3l6a2FsbGVyJiMzOTtzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGl0JiMzOTtzIHRoZXJlIG9yIGlmIHdlIG5lZWQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGl0LiBZZWFoLCB3ZSYjMzk7bGwgbmVlZCB0byBzcGVjaWZ5IGBMSVFVSURJT2AgaW4gYEVuYWJsZUNvbmZpZ3NgLiBHb3R0YSBjaGVjayB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgaXQgcmlnaHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMSVFVSURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2NTpjb25maWcgTElRVUlESU9fQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjYtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2ODpjb25maWcgTElRVUlESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIExpcXVpZElPIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz04ND1jb25maWcgT0NURU9OX01HTVRfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjk1OmNvbmZpZyBMSVFVSURJT19WRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtDYXZpdW0gTGlxdWlkSU8gVkYgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDcxMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTElRVUlESU8gQ29uZmlndXJhdGlvbiBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgYW5kIGl0IHNlZW1zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdHdvIGtleSBjb25maWd1cmF0aW9uczogYExJUVVJRElPYCBhbmQgYExJUVVJRElPX1ZGYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3ZlIGdvdCBhIHNldHVwIHdpdGggYSBwaHlzaWNhbCBmdW5jdGlvbiBhbmQgdmlydHVhbCBmdW5jdGlvbnMsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaGFyZHdhcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFzIGEgcmVzdWx0LgoKVGhlIGNvcmUgZmlsZXMgYWZmZWN0ZWQgYXJlIGBsaW9fbWFpbi5jYCAobGlrZWx5IHRoZSBtYWluIGRyaXZlciBlbnRyeSBwb2ludCBmb3IgdGhlIGBMSVFVSURJT2AgcGF0aCksIHdoaWNoIHNlZW1zIHByZXR0eSBleHBlY3RlZCBnaXZlbiB0aGUgY29uZmlnIG5hbWUsIGFuZCBgb2N0ZW9uX21haWxib3guY2AuIE5vdywgYG9jdGVvbl9tYWlsYm94LmNgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCYjMzk7cyBwcm9iYWJseSBwYXJ0IG9mIHRoZSBgTElRVUlESU9fQ09SRWAsIGFuZCBzdWdnZXN0cyBjb21tdW5pY2F0aW9uIGlzIGxpa2VseSBiZWluZyBzaGFyZWQgYmV0d2VlbiBQRiBhbmQgVkYuIEl0JiMzOTtzIG9mdGVuIHNoYXJlZCwgYmVjYXVzZSB0aGUgbWFpbGJveCBpcyB0eXBpY2FsbHkgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbi4gU2hhcmVkIGNvZGUgYWNyb3NzIHRoZSBQRiBhbmQgVkZzIGlzIGFsc28gZXhwZWN0ZWQsIHRoaXMgaXMgdHlwaWNhbCBpbiBtb3N0IGRyaXZlcnMuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIHdpcmVkIHVwLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBkZXBlbmRlbmNpZXMsIGJ1aWxkIGZsYWdzLCBhbmQgc2VlIHdoZXJlIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAgYXJlIGJlaW5nIHVzZWQgdG8gaW5jbHVkZSBjb2RlLiBBIG1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBjb250ZXh0IGZvciB0aGUgaW5jbHVzaW9uIG9mIGFsbCB0aGlzIGxvZ2ljIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBkcml2ZXIgd2lsbCBiZSBicm91Z2h0IGluIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgQ2F2aXVtIExpcXVpZGlvIGV0aGVybmV0IGRldmljZSBkcml2ZXJcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0b2JqLSQoQ09ORklHX0xJUVVJRElPX0NPUkUpICYjNDM7PSBsaXF1aWRpby1jb3JlLm9cbiAgIDc6XHRsaXF1aWRpby1jb3JlLXkgOj0gXFxcbiAgIDg6XHRcdFx0bGlvX2V0aHRvb2wub1x0XHRcXFxuICAgOTpcdFx0XHRsaW9fY29yZS5vXHRcdFxcXG4gIDEwOlx0XHRcdHJlcXVlc3RfbWFuYWdlci5vXHRcXFxuICAxMTpcdFx0XHRyZXNwb25zZV9tYW5hZ2VyLm9cdFxcXG4gIDEyOlx0XHRcdG9jdGVvbl9kZXZpY2Uub1x0XHRcXFxuICAxMzpcdFx0XHRjbjY2eHhfZGV2aWNlLm9cdFx0XFxcbiAgMTQ6XHRcdFx0Y242OHh4X2RldmljZS5vXHRcdFxcXG4gIDE1Olx0XHRcdGNuMjN4eF9wZl9kZXZpY2Uub1x0XFxcbiAgMTY6XHRcdFx0Y24yM3h4X3ZmX2RldmljZS5vXHRcXFxuICAxNzpcdFx0XHRvY3Rlb25fbWFpbGJveC5vXHRcXFxuICAxODpcdFx0XHRvY3Rlb25fbWVtX29wcy5vXHRcXFxuICAxOTpcdFx0XHRvY3Rlb25fZHJvcS5vXHRcdFxcXG4gIDIwOlx0XHRcdG9jdGVvbl9uaWMub1xuICAyMTpcdFxuICAyMjpcdG9iai0kKENPTkZJR19MSVFVSURJTykgJiM0Mzs9IGxpcXVpZGlvLm9cbiAgMjM6XHRsaXF1aWRpby15IDo9IGxpb19tYWluLm8gb2N0ZW9uX2NvbnNvbGUubyBsaW9fdmZfcmVwLm9cbiAgMjQ6XHRcbiAgMjU6XHRvYmotJChDT05GSUdfTElRVUlESU9fVkYpICYjNDM7PSBsaXF1aWRpb192Zi5vXG4gIDI2Olx0bGlxdWlkaW9fdmYteSA6PSBsaW9fdmZfbWFpbi5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTUxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTE1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgTGlxdWlkSU8gUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBMaXF1aWRJTyBkcml2ZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIFNSLUlPViBmdW5jdGlvbmFsaXR5IGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgY29uZmlncyB0byBjb25zaWRlciBhcmUgYExJUVVJRElPYCBhbmQgYExJUVVJRElPX1ZGYCwgYXMgdGhlIHBhdGNoIHRvdWNoZXMgYGxpb19tYWluLmNgIChwYXJ0IG9mIGBsaXF1aWRpby5vYCkgYW5kIGBvY3Rlb25fbWFpbGJveC5jYCAocGFydCBvZiBgbGlxdWlkaW8tY29yZS5vYCkuIFNpbmNlIGBMSVFVSURJT19DT1JFYCBpcyBzZWxlY3RlZCBieSBib3RoIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAsIGVuYWJsaW5nIGp1c3QgYExJUVVJRElPYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCBjYWxsZWQgYnkgYExJUVVJRElPX0NPUkVgLiBJJiMzOTtsbCBhbHNvIGFkZCBgUENJX0lPVmAganVzdCB0byBiZSBzYWZlLCBiZWNhdXNlIGBvY3Rlb25fZW5hYmxlX3NyaW92YCB1c2VzIGl0LCBhbmQgaXQmIzM5O3MgYSBnZW5lcmFsbHkgc2FmZSBjb25maWcgdG8gZW5hYmxlIGluIHN5emthbGxlci4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBtb2RpZmllZCBieSB0aGUgcGF0Y2guIFdlIGhhdmU6CgoqICAgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgCiogICBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYAoqICAgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgKGEgbmV3IGZ1bmN0aW9uKQoqICAgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYAoKQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbiB0aGUgY3JpdGljYWwgcGF0aD8gYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgcmVsYXRlZCB0byBTUi1JT1YgZW5hYmxpbmcvZGlzYWJsaW5nLCB3aGljaCBJJiMzOTtkIGNsYXNzaWZ5IGFzIHNsb3ctcGF0aCBvcGVyYXRpb25zLiBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIGlzIG1vcmUgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGhhbmRsaW5nIG1haWxib3ggY29tbWFuZHMuIE5vdCBhIHBhY2tldCBwcm9jZXNzaW5nIGhvdCBwYXRoLCBidXQgYSBjb250cm9sIHBhdGguIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gIGlzIGNhbGxlZCB3aXRoaW4gYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCB0byBoYW5kbGUgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAuIFNvLCBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIGFsb25nIHdpdGggYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgYXJlIGRlZmluaXRlbHkgZ29vZCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gYEZvY3VzU3ltYm9sc2AuCgpJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzLiBDaGVja2luZyB0aGUgY29kZSwgdGhleSBhcmUuIFNwZWNpZmljYWxseSwgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgc3RhdGljIGluIGBsaW9fbWFpbi5jYCwgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgYW5kIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgYXJlIHN0YXRpYyBpbiBgb2N0ZW9uX21haWxib3guY2AuCgpBIGtleSBjb25zaWRlcmF0aW9uIGhlcmUgaXMgd2hldGhlciB0aGUgY29kZSBwYXRoIGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcHJvbXB0IHNwZWNpZmllcyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGlzIHVucmVhY2hhYmxlLCBzbyBJIG5lZWQgdG8gbWFrZSBhIGp1ZGdtZW50IGNhbGwuIENvbnNpZGVyaW5nIHRoZSBMaXF1aWRJTyBkcml2ZXIsIGNhbiBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciByZWFjaCBpdD8gVGhlIGFuc3dlciBpcyB5ZXMuIFdoaWxlIHRoZSBQQ0kgZnV6emVyIGRvZXNuJiMzOTt0IGZ1bGx5IGVtdWxhdGUgdGhlIExpcXVpZElPIGhhcmR3YXJlLCBpdCAqZG9lcyogcHJvdmlkZSBhIGR1bW15IFBDSSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSB2ZW5kb3IvZGV2aWNlIElELiBUaGlzIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBkcml2ZXIgdG8gcHJvYmUsIG1hcCBCQVJzLCBhbmQgcG90ZW50aWFsbHkgcmVhZCBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVycy4gUmVhZGluZyBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVyIGNvdWxkIHRyaWdnZXIgZXhlY3V0aW9uIG9mIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAuCgpHaXZlbiB0aGlzLCBJIGNvbmNsdWRlIHRoYXQgdGhlIHBhdGNoIGlzLCBpbiBmYWN0LCByZWFjaGFibGUuIEFuZCwgZ2l2ZW4gdGhhdCB0aGlzIHBhdGNoIGZpeGVzIGEgYnVnIGluIHRoZSBkcml2ZXIsIGZ1enppbmcgaXQgaXMgd29ydGh3aGlsZSwgZW5zdXJpbmcgdGhlIGZpeCBpcyBjb3JyZWN0LCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzLgoKU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgaXM6CgoqICAgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgCiogICBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYAoqICAgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AKKiAgIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAKCkFuZCB0aGUgbmVjZXNzYXJ5IGBDb25maWdzYCBhcmU6CgoqICAgYExJUVVJRElPYAoqICAgYFBDSV9JT1ZgCgpJIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBwcmVjaXNlbHkgZnJvbSB0aGUgY29kZToKCiogICBgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpYAoqICAgYHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpYAoqICAgYHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBxX25vKWAKKiAgIGBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCwgc3RydWN0IG9jdGVvbl9tYm94X2NtZCAqbWJveF9jbWQpYAoKVGhleSBhcmUgY29ycmVjdC4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMSVFVSURJTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2NTpjb25maWcgTElRVUlESU9fQ09SRVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjYtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2ODpjb25maWcgTElRVUlESU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIExpcXVpZElPIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz04ND1jb25maWcgT0NURU9OX01HTVRfRVRIRVJORVRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjk1OmNvbmZpZyBMSVFVSURJT19WRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTYtXHR0cmlzdGF0ZSBcJiMzNDtDYXZpdW0gTGlxdWlkSU8gVkYgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlVuZGVyc3RhbmRpbmcgTElRVUlESU8mIzM5O3MgTGFuZHNjYXBlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBMSVFVSURJT2AuIEl0JiMzOTtzIG5vdCBlbm91Z2ggdG8ganVzdCBzZWUgdGhlbTsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlbS4gVGhpbmtpbmcgbGlrZSBhbiBleHBlcnQgaW4gW2Fzc3VtZWQgZmllbGQgYmFzZWQgb24gTElRVUlESU8gLSBlLmcuLCBkaXN0cmlidXRlZCBzeXN0ZW1zLCBzb2Z0d2FyZSBhcmNoaXRlY3R1cmUsIGNsb3VkIGluZnJhc3RydWN0dXJlLCBldGMuXSwgSSYjMzk7bSBnb2luZyB0byBhcHByb2FjaCB0aGlzIHdpdGggYSB2ZXJ5IHNwZWNpZmljIGZyYW1ld29yay4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBhIHNpbXBsZSBsaXN0LiBJJiMzOTttIGdvaW5nIHRvIGJlIGFzc2Vzc2luZzoKCiogICAqKkRlcGVuZGVuY3kgdHlwZXM6KiogQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGRlcGVuZGVuY2llcywgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMsIGJ1aWxkIGRlcGVuZGVuY2llcywgcnVudGltZSBkZXBlbmRlbmNpZXM/IEFyZSB0aGV5IGhhcmQgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBleGlzdCwgb3IgYXJlIHRoZXJlIHNvZnQgZGVwZW5kZW5jaWVzLCBsaWtlIG9wdGlvbmFsIGZlYXR1cmVzPwoqICAgKipEZXBlbmRlbmN5IHZlcnNpb25zOioqIFZlcnNpb24gbnVtYmVycyB3aWxsIGJlIGtleS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcmFuZ2Ugb2YgYWNjZXB0YWJsZSB2ZXJzaW9ucywgYW55IHZlcnNpb24gY29uc3RyYWludHMsIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIHZlcnNpb24gY29uZmxpY3RzIHRoYXQgY291bGQgY2F1c2UgcHJvYmxlbXMgZG93biB0aGUgbGluZS4gSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBmb3Igb3V0ZGF0ZWQgb3IgdW5zdXBwb3J0ZWQgdmVyc2lvbnMuCiogICAqKkRlcGVuZGVuY3kgcHVycG9zZToqKiBXaGF0IGRvZXMgZWFjaCBkZXBlbmRlbmN5IGNvbnRyaWJ1dGUgdG8gYExJUVVJRElPYD8gSXMgaXQgY29yZSBmdW5jdGlvbmFsaXR5LCBhIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50LCBhIHNlY3VyaXR5IG1lYXN1cmUsIGEgbG9nZ2luZyBmcmFtZXdvcmssIG9yIHNvbWV0aGluZyBlbHNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogb2YgZWFjaCBkZXBlbmRlbmN5LgoqICAgKipEZXBlbmRlbmN5IGhlYWx0aDoqKiBXaGF0JiMzOTtzIHRoZSBtYWludGVuYW5jZSBzdGF0dXMgb2YgZWFjaCBkZXBlbmRlbmN5PyBJcyBpdCBhY3RpdmVseSBkZXZlbG9wZWQgYW5kIHN1cHBvcnRlZCwgb3IgaXMgaXQgYWJhbmRvbmVkIG9yIGF0IHJpc2sgb2YgYmVpbmcgZGVwcmVjYXRlZD8gVGhpcyBpbXBhY3RzIHRoZSBsb25nLXRlcm0gdmlhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkgb2YgYExJUVVJRElPYC4KKiAgICoqUG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczoqKiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXRpZXMgaW5oZXJlbnQgaW4gdGhlc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBoYXZlIHRvIGNvbnNpZGVyIGlmIGFueSBvZiB0aGVzZSBhcmUgY29tbW9ubHkga25vd24gdmVjdG9ycyBmb3IgYXR0YWNrIGFuZCBhc3Nlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBkZXBlbmRlbmN5LgoKU28sIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBjdXJzb3J5IGdsYW5jZS4gSSYjMzk7bSByZWFkeSB0byBnZXQgYSBkZXRhaWxlZCB2aWV3IG9mIGBMSVFVSURJT2AmIzM5O3MgZm91bmRhdGlvbiBhbmQgaXRzIHBvdGVudGlhbCByaXNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTE2PWNvbmZpZyBUSFVOREVSX05JQ19QRlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTctXHR0cmlzdGF0ZSBcJiMzNDtUaHVuZGVyIFBoeXNpY2FsIGZ1bmN0aW9uIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6MTg6XHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTE5LVx0c2VsZWN0IFRIVU5ERVJfTklDX0JHWFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTI4PWNvbmZpZyBUSFVOREVSX05JQ19WRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTMwLVx0aW1wbHkgQ0FWSVVNX1BUUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTM1PWNvbmZpZ1x0VEhVTkRFUl9OSUNfQkdYXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy0zNi1cdHRyaXN0YXRlIFwmIzM0O1RodW5kZXIgTUFDIGludGVyZmFjZSBkcml2ZXIgKEJHWClcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjM3Olx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy0zOC1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz00NT1jb25maWdcdFRIVU5ERVJfTklDX1JHWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNDYtXHR0cmlzdGF0ZSBcJiMzNDtUaHVuZGVyIE1BQyBpbnRlcmZhY2UgZHJpdmVyIChSR1gpXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo0NzpcdGRlcGVuZHMgb24gNjRCSVQgXHUwMDI2XHUwMDI2IFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNDgtXHRzZWxlY3QgUEhZTElCXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9NTQ9Y29uZmlnIENBVklVTV9QVFBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTU1LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIFBUUCBjb3Byb2Nlc3NvciBhcyBQVFAgY2xvY2tcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjU2Olx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo1NzpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTU4LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTY4PWNvbmZpZyBMSVFVSURJT1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjktXHR0cmlzdGF0ZSBcJiMzNDtDYXZpdW0gTGlxdWlkSU8gc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NzA6XHRkZXBlbmRzIG9uIDY0QklUIFx1MDAyNlx1MDAyNiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjcxOlx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjcyOlx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNzMtXHRzZWxlY3QgQ1JDMzJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz04ND1jb25maWcgT0NURU9OX01HTVRfRVRIRVJORVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTg1LVx0dHJpc3RhdGUgXCYjMzQ7T2N0ZW9uIE1hbmFnZW1lbnQgcG9ydCBldGhlcm5ldCBkcml2ZXIgKENONVhYWCwgQ042WFhYKVwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6ODY6XHRkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU09DXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy04Ny1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz05NT1jb25maWcgTElRVUlESU9fVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTk2LVx0dHJpc3RhdGUgXCYjMzQ7Q2F2aXVtIExpcXVpZElPIFZGIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjk3Olx0ZGVwZW5kcyBvbiA2NEJJVCBcdTAwMjZcdTAwMjYgUENJX01TSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6OTg6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05OS1cdHNlbGVjdCBMSVFVSURJT19DT1JFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDQyCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDM3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ2F2aXVtIExpcXVpZElPIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggZm9yIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyIGhpbmdlcyBvbiBhIGZldyBzdGFuZGFyZCBjb25maWd1cmF0aW9uczogYDY0QklUYCwgYFBDSWAsIGFuZCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLiBXZSYjMzk7cmUgZm9jdXNpbmcgb24gdGhlIGBMSVFVSURJT2AgYW5kIGBQQ0lfSU9WYCBhc3BlY3RzIGhlcmUsIHdoaWNoIGlzIHN0YW5kYXJkLiBObyBzdXJwcmlzZXMgdGhlcmUuCgpUaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIGEgZmV3IGtleSBmdW5jdGlvbnMuIFRoZSBtYWluIG9uZSBJJiMzOTttIHRyYWNraW5nIGlzIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAsIHdoaWNoIGlzIHRoZSBoZWFydCBvZiB0aGUgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcsIGFuZCBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQuIFRoZXJlJiMzOTtzIGFsc28gYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AsIGEgbmV3IGZ1bmN0aW9uLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgLiBUaGVzZSBmb3VyIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwsIGFuZCBwZXJmZWN0IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgZm9jdXMgc3ltYm9scyBvbiB0aG9zZS4KCk5vdywgbGV0JiMzOTtzIHJlY2FwIHRoZSBsb2dpYy4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgcmVwbGFjaW5nIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgdGhlIHZpcnR1YWwgZnVuY3Rpb25zIChWRnMpLiBUaGUgZnV6emVyIC0gc3l6a2FsbGVyIC0gY2FuIHJlYWNoIHRoaXMgY29kZSB2aWEgUENJIGVtdWxhdGlvbiBmb3IgbWFpbGJveCBjb21tYW5kcyBhbmQgc3lzZnMgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLiBUaGVyZWZvcmUsIGZ1enppbmcgaXMgY3JpdGljYWwgaGVyZSB0byB2YWxpZGF0ZSB0aGlzIG5ldyBkeW5hbWljIGxvb2t1cCBhbmQgZW5zdXJlIGNvcnJlY3QgcmVmZXJlbmNlIGNvdW50aW5nLgoKSG9sZCBvbiwgSSBzZWUgYSBzaWduaWZpY2FudCBhZGRpdGlvbjogYHBjaWVfZmxyKHZmZGV2KTsgcGNpX2Rldl9wdXQodmZkZXYpO2AuIFRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGxvZ2ljLCBhbmQgaXQgbmVlZHMgYSBkZWVwIGRpdmUuCgpPbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBMSVFVSURJT19WRmAgaXMgbm90IG5lZWRlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYG9jdGVvbl9tYWlsYm94LmNgLCBidXQgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAgaXMgaGFuZGxlZCBieSB0aGUgUEYgKHNpbmNlIGl0IGlzIGEgcmVxdWVzdCBfZnJvbV8gdGhlIFZGIF90b18gdGhlIFBGKS4gQW5kIHRoZSBQRiBkcml2ZXIgaXMgYExJUVVJRElPYC4gU28sIHllcywgYExJUVVJRElPYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGUgZHJpdmVyLgoKT2theSwgSSB0aGluayBJJiMzOTt2ZSBnb3QgYSBnb29kIGdyYXNwIG9uIHRoaXMuIFRpbWUgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xJUVVJRElPJiMzNDssCiAgICAmIzM0O1BDSV9JT1YmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY3Rlb25fZW5hYmxlX3NyaW92JiMzNDssCiAgICAmIzM0O2xpb19wY2lfc3Jpb3ZfZGlzYWJsZSYjMzQ7LAogICAgJiMzNDtsaW9fdmZfcGNpX2Rldl9ieV9xbm8mIzM0OywKICAgICYjMzQ7b2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciwgd2hpY2ggY2FuIGVtdWxhdGUgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBtYWlsYm94IGNvbW1hbmRzLCBhcyB3ZWxsIGFzIHZpYSBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBkeW5hbWljIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3JyZWN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMSVFVSURJTyYjMzQ7LAogICAgJiMzNDtQQ0lfSU9WJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2N0ZW9uX2VuYWJsZV9zcmlvdiYjMzQ7LAogICAgJiMzNDtsaW9fcGNpX3NyaW92X2Rpc2FibGUmIzM0OywKICAgICYjMzQ7bGlvX3ZmX3BjaV9kZXZfYnlfcW5vJiMzNDssCiAgICAmIzM0O29jdGVvbl9tYm94X3Byb2Nlc3NfY21kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUi1JT1YgYW5kIG1haWxib3ggY29tbWFuZCBwcm9jZXNzaW5nIGxvZ2ljIGluIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyLiBJdCByZXBsYWNlcyBhIHN0YXRpYyBsb29rdXAgdGFibGUgd2l0aCBhIGR5bmFtaWMgUENJIGRldmljZSBsb29rdXAgZm9yIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIsIHdoaWNoIGNhbiBlbXVsYXRlIHRoZSBkZXZpY2UgYW5kIHRyaWdnZXIgbWFpbGJveCBjb21tYW5kcywgYXMgd2VsbCBhcyB2aWEgc3lzZnMgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgZHluYW1pYyBsb29rdXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY29ycmVjdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUyOjUyLjc0MjUxMzc0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzI3NjM4OTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMSVFVSURJT1wiLFxuICAgIFwiUENJX0lPVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jdGVvbl9lbmFibGVfc3Jpb3ZcIixcbiAgICBcImxpb19wY2lfc3Jpb3ZfZGlzYWJsZVwiLFxuICAgIFwibGlvX3ZmX3BjaV9kZXZfYnlfcW5vXCIsXG4gICAgXCJvY3Rlb25fbWJveF9wcm9jZXNzX2NtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBTUi1JT1YgYW5kIG1haWxib3ggY29tbWFuZCBwcm9jZXNzaW5nIGxvZ2ljIGluIHRoZSBDYXZpdW0gTGlxdWlkSU8gZHJpdmVyLiBJdCByZXBsYWNlcyBhIHN0YXRpYyBsb29rdXAgdGFibGUgd2l0aCBhIGR5bmFtaWMgUENJIGRldmljZSBsb29rdXAgZm9yIFZGcy4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgc3l6a2FsbGVyJ3MgUENJIGZ1enplciwgd2hpY2ggY2FuIGVtdWxhdGUgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBtYWlsYm94IGNvbW1hbmRzLCBhcyB3ZWxsIGFzIHZpYSBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gZW5zdXJlIHRoZSBkeW5hbWljIGxvb2t1cCBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3JyZWN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1Mjo1Mi43NDI1MjM5OTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMzYxMTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkNzI5YjQxNzQwY2E5YmJkMmQyZmIyOWIyOGJiNGMwOTI4Y2EyNDRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTo1Mjo1MCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXFxuaW5kZXggMGRiMDhhYzNkMDk4ZmIuLmUzMDM5NTZiNGJmMTJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmNcXG5AQCAtMzc3OSw5ICszNzc5LDcgQEAgc3RhdGljIGludCBzZXR1cF9uaWNfZGV2aWNlcyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0ZW9uX2RldilcXG4gc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IG51bV92ZnNfYWxsb2NlZCA9IG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5udW1fdmZzX2FsbG9jZWQ7XFxuLVxcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcXG4gXFx0aW50IGVycjtcXG4tXFx0dTMyIHU7XFxuIFxcbiBcXHRpZiAoT0NURU9OX0NOMjNYWF9QRihvY3QpIFxcdTAwMjZcXHUwMDI2IG51bV92ZnNfYWxsb2NlZCkge1xcbiBcXHRcXHRlcnIgPSBwY2lfZW5hYmxlX3NyaW92KG9jdC1cXHUwMDNlcGNpX2RldixcXG5AQCAtMzc5NCwyMyArMzc5Miw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTtcXG4tXFxuLVxcdFxcdC8qIGluaXQgbG9va3VwIHRhYmxlIHRoYXQgbWFwcyBEUEkgcmluZyBudW1iZXIgdG8gVkYgcGNpX2Rldlxcbi1cXHRcXHQgKiBzdHJ1Y3QgcG9pbnRlclxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0dSA9IDA7XFxuLVxcdFxcdHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuLVxcdFxcdFxcdFxcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7XFxuLVxcdFxcdHdoaWxlICh2ZmRldikge1xcbi1cXHRcXHRcXHRpZiAodmZkZXYtXFx1MDAzZWlzX3ZpcnRmbiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICAgKHZmZGV2LVxcdTAwM2VwaHlzZm4gPT0gb2N0LVxcdTAwM2VwY2lfZGV2KSkge1xcbi1cXHRcXHRcXHRcXHRvY3QtXFx1MDAzZXNyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbdV0gPVxcbi1cXHRcXHRcXHRcXHRcXHR2ZmRldjtcXG4tXFx0XFx0XFx0XFx0dSArPSBvY3QtXFx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpO1xcbi1cXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiBudW1fdmZzX2FsbG9jZWQ7XFxuQEAgLTM4MTgsOCArMzc5OSw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbiBcXG4gc3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4ge1xcbi1cXHRpbnQgdTtcXG4tXFxuIFxcdGlmIChwY2lfdmZzX2Fzc2lnbmVkKG9jdC1cXHUwMDNlcGNpX2RldikpIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2b2N0LVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsIFxcXCJWRnMgYXJlIHN0aWxsIGFzc2lnbmVkIHRvIFZNcy5cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbkBAIC0zODI3LDEyICszODA2LDYgQEAgc3RhdGljIGludCBsaW9fcGNpX3NyaW92X2Rpc2FibGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4gXFxuIFxcdHBjaV9kaXNhYmxlX3NyaW92KG9jdC1cXHUwMDNlcGNpX2Rldik7XFxuIFxcbi1cXHR1ID0gMDtcXG4tXFx0d2hpbGUgKHUgXFx1MDAzYyBNQVhfUE9TU0lCTEVfVkZTKSB7XFxuLVxcdFxcdG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9IE5VTEw7XFxuLVxcdFxcdHUgKz0gb2N0LVxcdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZjtcXG4tXFx0fVxcbi1cXG4gXFx0b2N0LVxcdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IDA7XFxuIFxcdGRldl9pbmZvKFxcdTAwMjZvY3QtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZWRldiwgXFxcIm9jdC1cXHUwMDNlcGZfbnVtOiVkIGRpc2FibGVkIFZGc1xcXFxuXFxcIixcXG4gXFx0XFx0IG9jdC1cXHUwMDNlcGZfbnVtKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcXG5pbmRleCAxOTM0NGIyMWY4ZmI5NC4uODU4YTBmZmYyY2MwYjYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcXG5AQCAtMzkwLDkgKzM5MCw2IEBAIHN0cnVjdCBvY3Rlb25fc3Jpb3ZfaW5mbyB7XFxuIFxcbiBcXHRzdHJ1Y3QgbGlvX3RydXN0ZWRfdmZcXHR0cnVzdGVkX3ZmO1xcbiBcXG4tXFx0Lypsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2IHN0cnVjdCBwb2ludGVyKi9cXG4tXFx0c3RydWN0IHBjaV9kZXYgKmRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0W01BWF9QT1NTSUJMRV9WRlNdO1xcbi1cXG4gXFx0dTY0XFx0dmZfbWFjYWRkcltNQVhfUE9TU0lCTEVfVkZTXTtcXG4gXFxuIFxcdHUxNlxcdHZmX3ZsYW50Y2lbTUFYX1BPU1NJQkxFX1ZGU107XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcXG5pbmRleCBhZDY4NWY1ZDBhMTM2My4uNjk3ZmNkYzQxZTNjZDcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guY1xcbkBAIC0yNiw2ICsyNiwzMSBAQFxcbiAjaW5jbHVkZSBcXFwib2N0ZW9uX21haWxib3guaFxcXCJcXG4gI2luY2x1ZGUgXFxcImNuMjN4eF9wZl9kZXZpY2UuaFxcXCJcXG4gXFxuK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBxX25vKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldiA9IE5VTEw7XFxuK1xcdGludCB2ZmlkeDtcXG4rXFxuK1xcdGlmICghb2N0LVxcdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZilcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAocV9ubyAlIG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmYpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0dmZpZHggPSBxX25vIC8gb2N0LVxcdTAwM2Vzcmlvdl9pbmZvLnJpbmdzX3Blcl92ZjtcXG4rXFx0aWYgKHZmaWR4IFxcdTAwM2U9IG9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5udW1fdmZzX2FsbG9jZWQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0d2hpbGUgKCh2ZmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQ0FWSVVNLFxcbitcXHRcXHRcXHRcXHQgICAgICAgT0NURU9OX0NOMjNYWF9WRl9WSUQsIHZmZGV2KSkpIHtcXG4rXFx0XFx0aWYgKHBjaV9waHlzZm4odmZkZXYpIFxcdTAwMjZcXHUwMDI2IHBjaV9waHlzZm4odmZkZXYpID09IG9jdC1cXHUwMDNlcGNpX2RldiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgcGNpX2lvdl92Zl9pZCh2ZmRldikgPT0gdmZpZHgpXFxuK1xcdFxcdFxcdHJldHVybiB2ZmRldjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBvY3Rlb25fbWJveF9yZWFkOlxcbiAgKiBAbWJveDogUG9pbnRlciBtYWlsYm94XFxuQEAgLTIzNyw2ICsyNjIsNyBAQCBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG9jdGVvbl9tYm94X2NtZCAqbWJveF9jbWQpXFxuIHtcXG4gXFx0c3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCA9IG1ib3gtXFx1MDAzZW9jdF9kZXY7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICp2ZmRldjtcXG4gXFxuIFxcdHN3aXRjaCAobWJveF9jbWQtXFx1MDAzZW1zZy5zLmNtZCkge1xcbiBcXHRjYXNlIE9DVEVPTl9WRl9BQ1RJVkU6XFxuQEAgLTI2MCw3ICsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXFxuIFxcdFxcdGRldl9pbmZvKFxcdTAwMjZvY3QtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0IFxcXCJnb3QgYSByZXF1ZXN0IGZvciBGTFIgZnJvbSBWRiB0aGF0IG93bnMgRFBJIHJpbmcgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBtYm94LVxcdTAwM2VxX25vKTtcXG4tXFx0XFx0cGNpZV9mbHIob2N0LVxcdTAwM2Vzcmlvdl9pbmZvLmRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0W21ib3gtXFx1MDAzZXFfbm9dKTtcXG4rXFx0XFx0dmZkZXYgPSBsaW9fdmZfcGNpX2Rldl9ieV9xbm8ob2N0LCBtYm94LVxcdTAwM2VxX25vKTtcXG4rXFx0XFx0aWYgKCF2ZmRldilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRwY2llX2Zscih2ZmRldik7XFxuK1xcdFxcdHBjaV9kZXZfcHV0KHZmZGV2KTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRjYXNlIE9DVEVPTl9QRl9DSEFOR0VEX1ZGX01BQ0FERFI6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUyOjUzLjM2NzI0MDMyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2NjUxNjQ0NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJUVVJRElPXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2N0ZW9uX2VuYWJsZV9zcmlvdlwiLFxuICAgIFwibGlvX3BjaV9zcmlvdl9kaXNhYmxlXCIsXG4gICAgXCJsaW9fdmZfcGNpX2Rldl9ieV9xbm9cIixcbiAgICBcIm9jdGVvbl9tYm94X3Byb2Nlc3NfY21kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlIGFuZCB0cmlnZ2VyIG1haWxib3ggY29tbWFuZHMsIGFzIHdlbGwgYXMgdmlhIHN5c2ZzIGZvciBTUi1JT1YgY29uZmlndXJhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIGR5bmFtaWMgbG9va3VwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQ3MjliNDE3NDBjYTliYmQyZDJmYjI5YjI4YmI0YzA5MjhjYTI0NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDk6NTI6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jXG5pbmRleCAwZGIwOGFjM2QwOThmYi4uZTMwMzk1NmI0YmYxMmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmNcbkBAIC0zNzc5LDkgKzM3NzksNyBAQCBzdGF0aWMgaW50IHNldHVwX25pY19kZXZpY2VzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3Rlb25fZGV2KVxuIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuIHtcbiBcdHVuc2lnbmVkIGludCBudW1fdmZzX2FsbG9jZWQgPSBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5udW1fdmZzX2FsbG9jZWQ7XG4tXHRzdHJ1Y3QgcGNpX2RldiAqdmZkZXY7XG4gXHRpbnQgZXJyO1xuLVx0dTMyIHU7XG4gXG4gXHRpZiAoT0NURU9OX0NOMjNYWF9QRihvY3QpIFx1MDAyNlx1MDAyNiBudW1fdmZzX2FsbG9jZWQpIHtcbiBcdFx0ZXJyID0gcGNpX2VuYWJsZV9zcmlvdihvY3QtXHUwMDNlcGNpX2RldixcbkBAIC0zNzk0LDIzICszNzkyLDYgQEAgc3RhdGljIGludCBvY3Rlb25fZW5hYmxlX3NyaW92KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0fVxuIFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkID0gMTtcbi1cbi1cdFx0LyogaW5pdCBsb29rdXAgdGFibGUgdGhhdCBtYXBzIERQSSByaW5nIG51bWJlciB0byBWRiBwY2lfZGV2XG4tXHRcdCAqIHN0cnVjdCBwb2ludGVyXG4tXHRcdCAqL1xuLVx0XHR1ID0gMDtcbi1cdFx0dmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbi1cdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgTlVMTCk7XG4tXHRcdHdoaWxlICh2ZmRldikge1xuLVx0XHRcdGlmICh2ZmRldi1cdTAwM2Vpc192aXJ0Zm4gXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgICh2ZmRldi1cdTAwM2VwaHlzZm4gPT0gb2N0LVx1MDAzZXBjaV9kZXYpKSB7XG4tXHRcdFx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9XG4tXHRcdFx0XHRcdHZmZGV2O1xuLVx0XHRcdFx0dSArPSBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmY7XG4tXHRcdFx0fVxuLVx0XHRcdHZmZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DQVZJVU0sXG4tXHRcdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpO1xuLVx0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gbnVtX3Zmc19hbGxvY2VkO1xuQEAgLTM4MTgsOCArMzc5OSw2IEBAIHN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuIFxuIHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXG4ge1xuLVx0aW50IHU7XG4tXG4gXHRpZiAocGNpX3Zmc19hc3NpZ25lZChvY3QtXHUwMDNlcGNpX2RldikpIHtcbiBcdFx0ZGV2X2VycihcdTAwMjZvY3QtXHUwMDNlcGNpX2Rldi1cdTAwM2VkZXYsIFwiVkZzIGFyZSBzdGlsbCBhc3NpZ25lZCB0byBWTXMuXFxuXCIpO1xuIFx0XHRyZXR1cm4gLUVQRVJNO1xuQEAgLTM4MjcsMTIgKzM4MDYsNiBAQCBzdGF0aWMgaW50IGxpb19wY2lfc3Jpb3ZfZGlzYWJsZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxuIFxuIFx0cGNpX2Rpc2FibGVfc3Jpb3Yob2N0LVx1MDAzZXBjaV9kZXYpO1xuIFxuLVx0dSA9IDA7XG4tXHR3aGlsZSAodSBcdTAwM2MgTUFYX1BPU1NJQkxFX1ZGUykge1xuLVx0XHRvY3QtXHUwMDNlc3Jpb3ZfaW5mby5kcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dFt1XSA9IE5VTEw7XG4tXHRcdHUgKz0gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuLVx0fVxuLVxuIFx0b2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkID0gMDtcbiBcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldiwgXCJvY3QtXHUwMDNlcGZfbnVtOiVkIGRpc2FibGVkIFZGc1xcblwiLFxuIFx0XHQgb2N0LVx1MDAzZXBmX251bSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcbmluZGV4IDE5MzQ0YjIxZjhmYjk0Li44NThhMGZmZjJjYzBiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmhcbkBAIC0zOTAsOSArMzkwLDYgQEAgc3RydWN0IG9jdGVvbl9zcmlvdl9pbmZvIHtcbiBcbiBcdHN0cnVjdCBsaW9fdHJ1c3RlZF92Zlx0dHJ1c3RlZF92ZjtcbiBcbi1cdC8qbG9va3VwIHRhYmxlIHRoYXQgbWFwcyBEUEkgcmluZyBudW1iZXIgdG8gVkYgcGNpX2RldiBzdHJ1Y3QgcG9pbnRlciovXG4tXHRzdHJ1Y3QgcGNpX2RldiAqZHBpcmluZ190b192ZnBjaWRldl9sdXRbTUFYX1BPU1NJQkxFX1ZGU107XG4tXG4gXHR1NjRcdHZmX21hY2FkZHJbTUFYX1BPU1NJQkxFX1ZGU107XG4gXG4gXHR1MTZcdHZmX3ZsYW50Y2lbTUFYX1BPU1NJQkxFX1ZGU107XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guY1xuaW5kZXggYWQ2ODVmNWQwYTEzNjMuLjY5N2ZjZGM0MWUzY2Q3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jXG5AQCAtMjYsNiArMjYsMzEgQEBcbiAjaW5jbHVkZSBcIm9jdGVvbl9tYWlsYm94LmhcIlxuICNpbmNsdWRlIFwiY24yM3h4X3BmX2RldmljZS5oXCJcbiBcbitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqdmZkZXYgPSBOVUxMO1xuK1x0aW50IHZmaWR4O1xuK1xuK1x0aWYgKCFvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aWYgKHFfbm8gJSBvY3QtXHUwMDNlc3Jpb3ZfaW5mby5yaW5nc19wZXJfdmYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0dmZpZHggPSBxX25vIC8gb2N0LVx1MDAzZXNyaW92X2luZm8ucmluZ3NfcGVyX3ZmO1xuK1x0aWYgKHZmaWR4IFx1MDAzZT0gb2N0LVx1MDAzZXNyaW92X2luZm8ubnVtX3Zmc19hbGxvY2VkKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHdoaWxlICgodmZkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0NBVklVTSxcbitcdFx0XHRcdCAgICAgICBPQ1RFT05fQ04yM1hYX1ZGX1ZJRCwgdmZkZXYpKSkge1xuK1x0XHRpZiAocGNpX3BoeXNmbih2ZmRldikgXHUwMDI2XHUwMDI2IHBjaV9waHlzZm4odmZkZXYpID09IG9jdC1cdTAwM2VwY2lfZGV2IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgcGNpX2lvdl92Zl9pZCh2ZmRldikgPT0gdmZpZHgpXG4rXHRcdFx0cmV0dXJuIHZmZGV2O1xuK1x0fVxuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuIC8qKlxuICAqIG9jdGVvbl9tYm94X3JlYWQ6XG4gICogQG1ib3g6IFBvaW50ZXIgbWFpbGJveFxuQEAgLTIzNyw2ICsyNjIsNyBAQCBzdGF0aWMgaW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBvY3Rlb25fbWJveF9jbWQgKm1ib3hfY21kKVxuIHtcbiBcdHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QgPSBtYm94LVx1MDAzZW9jdF9kZXY7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqdmZkZXY7XG4gXG4gXHRzd2l0Y2ggKG1ib3hfY21kLVx1MDAzZW1zZy5zLmNtZCkge1xuIFx0Y2FzZSBPQ1RFT05fVkZfQUNUSVZFOlxuQEAgLTI2MCw3ICsyODYsMTIgQEAgc3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXG4gXHRcdGRldl9pbmZvKFx1MDAyNm9jdC1cdTAwM2VwY2lfZGV2LVx1MDAzZWRldixcbiBcdFx0XHQgXCJnb3QgYSByZXF1ZXN0IGZvciBGTFIgZnJvbSBWRiB0aGF0IG93bnMgRFBJIHJpbmcgJXVcXG5cIixcbiBcdFx0XHQgbWJveC1cdTAwM2VxX25vKTtcbi1cdFx0cGNpZV9mbHIob2N0LVx1MDAzZXNyaW92X2luZm8uZHBpcmluZ190b192ZnBjaWRldl9sdXRbbWJveC1cdTAwM2VxX25vXSk7XG4rXHRcdHZmZGV2ID0gbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKG9jdCwgbWJveC1cdTAwM2VxX25vKTtcbitcdFx0aWYgKCF2ZmRldilcbitcdFx0XHRicmVhaztcbitcbitcdFx0cGNpZV9mbHIodmZkZXYpO1xuK1x0XHRwY2lfZGV2X3B1dCh2ZmRldik7XG4gXHRcdGJyZWFrO1xuIFxuIFx0Y2FzZSBPQ1RFT05fUEZfQ0hBTkdFRF9WRl9NQUNBRERSOlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTI6NTMuMzY3MjQzNzk0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODIwMTk2MDQ0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBDYXZpdW0gTGlxdWlkSU8gRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBtb2RpZnlpbmcgdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIgKGBsaW9fbWFpbi5jYCwgYG9jdGVvbl9kZXZpY2UuaGAsIGBvY3Rlb25fbWFpbGJveC5jYCkuIEl0IHNlZW1zIHRoZXkndmUgcmVtb3ZlZCB0aGUgbG9va3VwIHRhYmxlIGBkcGlyaW5nX3RvX3ZmcGNpZGV2X2x1dGAgYW5kIGFyZSBub3cgZG9pbmcgYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIHVzaW5nIGBwY2lfZ2V0X2RldmljZWAgYW5kIGBwY2lfaW92X3ZmX2lkYCB3aGVuIGhhbmRsaW5nIHRoZSBgT0NURU9OX1ZGX0ZMUl9SRVFVRVNUYCBtYWlsYm94IGNvbW1hbmQgd2l0aGluIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmZ1enphYmxlKj9cblxuVGhlIGRyaXZlciBpcyBgbGlxdWlkaW9gLCB3aGljaCBpcyBhIENhdml1bSBMaXF1aWRJTyBJbnRlbGxpZ2VudCBTZXJ2ZXIgQWRhcHRlciBkcml2ZXIg4oCTIHNvIEV0aGVybmV0LiBUaGlzIGltbWVkaWF0ZWx5IHNjcmVhbXMgXCJzcGVjaWZpYyBoYXJkd2FyZVwiIHRvIG1lLiBDYW4gSSBldmVuIGV4ZXJjaXNlIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gR2VuZXJhbGx5LCB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIGFyZSB0b3VnaCB0byBoaXQgdW5sZXNzIHRoZXJlJ3MgYW4gZW11bGF0aW9uIGxheWVyIGxpa2UgZTEwMDBlIG9yIHZpcnRpbywgb3IgaWYgeW91J3JlIHVzaW5nIHNvbWV0aGluZyBsaWtlIHZoY2kvZHVtbXkgZGV2aWNlcy5cblxuV2FpdCBhIHNlY29uZOKApnN5emthbGxlciEgSXQgY2FuIGZ1enogUENJIGRldmljZXMgdXNpbmcgdGhlIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGwsIHJpZ2h0PyBJdCBpbmplY3RzIFBDSSBkZXZpY2VzIGlmIHRoZSBrZXJuZWwgaGFzIHN1cHBvcnQg4oCTIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYENPTkZJR19QQ0lfREVCVUdgIG9yIHN5emthbGxlcidzIG93biBQQ0kgZnV6emVyLiBUaGF0J3MgYSBwb3RlbnRpYWwgYXZlbnVlISBUaG91Z2ggSSdtIHdvbmRlcmluZyBpZiB0aGUgUENJIGZ1enplciBpcyBvbmx5IHRhcmdldGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zLlxuXG5TbywgdGhpcyBpcyBhIGhhcmR3YXJlIGRyaXZlciwgaXQgc2VlbXMgcHJldHR5IGNsZWFyLiBCdXQsIGdpdmVuIHN5emthbGxlcidzIGNhcGFiaWxpdGllcywgKmNhbiogd2UgZnV6eiBpdD8gSWYgc3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyBlbmFibGVkLCBpdCBzaG91bGQgYmUgYWJsZSB0by4gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vS2NvbmZpZ2AgZmlsZSB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBoaW50cyBvciBkZXBlbmRlbmNpZXMgSSBjYW4gdXNlIHRvIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjAxLjU2OTIwODIxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzQyMjkwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlxdWlkaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9Njg9Y29uZmlnIExJUVVJRElPXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy04MS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo4MjpcXHQgIHdpbGwgYmUgY2FsbGVkIGxpcXVpZGlvLiAgVGhpcyBpcyByZWNvbW1lbmRlZC5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy04My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTk1PWNvbmZpZyBMSVFVSURJT19WRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMTA0LVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogVGhlIG1vZHVsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjEwNTpcXHQgIHdpbGwgYmUgY2FsbGVkIGxpcXVpZGlvX3ZmLiBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTEwNi1cXHQgIGZvciB0aGlzIGRyaXZlciB0byB3b3JrIGNvcnJlY3RseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzowMi4wNDM0NDY0NjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjYyMjYzMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOlxuXG4qKkFuYWx5emluZyB0aGUgYExJUVVJRElPYCBDb25maWd1cmF0aW9uIGFuZCBNYWlsYm94IENvbW1hbmQgUHJvY2Vzc2luZyoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gd2UncmUgZGVhbGluZyB3aXRoIGlzIGBMSVFVSURJT2AuIE15IHByaW1hcnkgZm9jdXMgaXMgb24gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGNvcmUgb2YgaGFuZGxpbmcgbWFpbGJveCBjb21tYW5kcy4gR2l2ZW4gdGhlIG5hbWUsIEknbSBhc3N1bWluZyB0aGVzZSBjb21tYW5kcyBhcmUgZWl0aGVyIGNvbWluZyBmcm9tIHRoZSBoYXJkd2FyZSBpdHNlbGYgb3IgcG9zc2libHkgYmVpbmcgaXNzdWVkIGJ5IGEgVmlydHVhbCBGdW5jdGlvbiAoVkYpLiBTbywgdGhleSByZXByZXNlbnQgc29tZSBmb3JtIG9mIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIG1lY2hhbmlzbSB3aXRoaW4gdGhlIHN5c3RlbSwgbGlrZWx5IHRpZWQgdG8gdGhlIE9jdGVvbiBwbGF0Zm9ybS5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlICp3aGVyZSogdGhpcyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBncmFwaCB3aWxsIHJldmVhbCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQncyBpbnZva2VkIGFuZCBzaGVkIGxpZ2h0IG9uIGhvdyB0aGVzZSBtYWlsYm94IGNvbW1hbmRzIGFyZSBpbml0aWF0ZWQgYW5kIHByb2Nlc3NlZCB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBhc3Nlc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGp1c3QgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgZmxvdyBvZiB0aGVzZSBjb21tYW5kcy4gSSBuZWVkIHRvIHNlZSB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzczLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6MDUuNzA1NzE2NDA2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjczNDQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY3Rlb25fbWJveF9wcm9jZXNzX2NtZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jPTIzND1zdGF0aWMgdm9pZCBnZXRfdmZfc3RhdHMoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTI1NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzoyNTU6ICogb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjU2LSAqIEBtYm94OiBQb2ludGVyIG1haWxib3hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTI2MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzoyNjE6c3RhdGljIGludCBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMjYyLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBvY3Rlb25fbWJveF9jbWQgKm1ib3hfY21kKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM9MzI0PWludCBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IG9jdGVvbl9tYm94ICptYm94KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzc1LVxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNm1ib3gtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzozNzY6XFx0XFx0b2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQobWJveCwgXFx1MDAyNm1ib3hfY21kKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0zNzctXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjA1Ljg0MjQ1OTMzM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Mzk0OTM2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNZXNzYWdlIEhhbmRsaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCBjYWxscyBgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRgLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGEgbGF5ZXJlZCBhcHByb2FjaC4gSXQgc3VnZ2VzdHMgdGhlcmUncyBzb21lIG1lc3NhZ2UgcHJlcHJvY2Vzc2luZyBvciBkaXNwYXRjaCBoYXBwZW5pbmcgaW4gdGhlIGBfbWVzc2FnZWAgZnVuY3Rpb24sIGFuZCB0aGVuIHRoZSBhY3R1YWwgY29tbWFuZCBleGVjdXRpb24gcmVzaWRlcyBpbiB0aGUgYF9jbWRgIGZ1bmN0aW9uLiBNYWtlcyBzZW5zZSBmcm9tIGFuIG9yZ2FuaXphdGlvbiBwZXJzcGVjdGl2ZSwgbGlrZWx5IGEgZGlzcGF0Y2hlciBwYXR0ZXJuLiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGlzIGBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2VgIGJlaW5nIGludm9rZWQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBlbnRyeSBwb2ludHMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMga2V5LiBJcyBpdCBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgYSBzY2hlZHVsZWQgdGFzaywgb3Igc29tZXRoaW5nIHRyaWdnZXJlZCBieSBhbm90aGVyIHByb2Nlc3M/IEtub3dpbmcgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aWxsIGdpdmUgbWUgY3JpdGljYWwgY29udGV4dCBhYm91dCB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggaXQgb3BlcmF0ZXMsIHRoZSBwb3RlbnRpYWwgc291cmNlcyBvZiB0aGUgbWVzc2FnZXMsIGFuZCBsaWtlbHksIHRoZSB1cmdlbmN5IG9mIG1lc3NhZ2UgcHJvY2Vzc2luZyBhbmQgYW55IHRocmVhZCBzYWZldHkgcmVxdWlyZW1lbnRzIEkgbmVlZCB0byBjb25zaWRlci4gVGltZSB0byBnbyBodW50aW5nIGZvciB0aGUgY2FsbGVycy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTQyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6MDkuNjgxOTU3MzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0MjcwNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUyOC1cXHRcXHRcXHRcXHRpZiAob2N0ZW9uX21ib3hfcmVhZChvY3QtXFx1MDAzZW1ib3hbcV9ub10pKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTI5OlxcdFxcdFxcdFxcdFxcdG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUzMC1cXHRcXHRcXHRcXHRcXHQgICAgb2N0LVxcdTAwM2VtYm94W3Ffbm9dKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTM1LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1MzY6XFx0XFx0b2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKG1ib3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTM3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM9MjYzPXN0YXRpYyB2b2lkIGNuMjN4eF92Zl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTI2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jOjI2ODpcXHRvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2UobWJveCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYy0yNjktfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM9MjYxPXN0YXRpYyBpbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzE4LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jOjMxOTogKiBvY3Rlb25fbWJveF9wcm9jZXNzX21lc3NhZ2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy0zMjAtICogQG1ib3g6IG1haWxib3hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jLTMyMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzozMjQ6aW50IG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtMzI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oPTEyMD1pbnQgb2N0ZW9uX21ib3hfd3JpdGUoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaC0xMjEtXFx0XFx0ICAgICAgc3RydWN0IG9jdGVvbl9tYm94X2NtZCAqbWJveF9jbWQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oOjEyMjppbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBvY3Rlb25fbWJveCAqbWJveCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmgtMTIzLWludCBvY3Rlb25fbWJveF9jYW5jZWwoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdCwgaW50IHFfbm8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzowOS45MzYyMzcxODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Njc1MTIwNzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGlmIGl0J3Mgd29ydGggZnV6emluZy4gSXQgc2VlbXMgbGlrZSBpdCdzIGEgaGFyZHdhcmUgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBhIGBjbjIzeHhgIGRldmljZSAobGlrZWx5IENhdml1bS9NYXJ2ZWxsIGhhcmR3YXJlKSwgYW5kIGl0IHRvdWNoZXMgbWFpbGJveCBjb21tYW5kcy4gVGhlIGNvZGUgaXMgY2FsbGVkIGZyb20gYGNuMjN4eF9wZl9tYm94X3RocmVhZGAgYW5kIGBjbjIzeHhfdmZfbWJveF90aHJlYWRgIHdoaWNoIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBhIG1lc3NhZ2UgcGFzc2luZyBtZWNoYW5pc20gd2l0aCB0aGUgaGFyZHdhcmUuXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIncyBQQ0kgZnV6emVyIHJlYWNoIHRoaXM/IFdlICpkbyogaGF2ZSBhIFBDSSBmdXp6ZXIsIGJ1dCBpdCdzIGdlbmVyYWxseSBwcmV0dHkgYmFzaWMuIEl0J3MgZ29vZCBmb3IgcHJvYmluZyBhbmQgYmFzaWMgTU1JTy9ETUEsIGJ1dCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGNhbiBhY3R1YWxseSAqdHJpZ2dlciogYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCwgdGhlIGZ1bmN0aW9uIHRoYXQgc2VlbXMgY2VudHJhbCBoZXJlLiBUaGF0IGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBieSByZWFkaW5nIGZyb20gYSBtYWlsYm94LCB3aGljaCBzdWdnZXN0cyBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGhhcmR3YXJlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgZml4ZXMgYW4gU1ItSU9WIChgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgKSBidWcgaW4gdGhlIGBsaXF1aWRpb2AgZHJpdmVyLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSBzd2FwcGluZyBvdXQgYGRwaXJpbmdfdG9fdmZwY2lkZXZfbHV0YCBmb3IgYSBkeW5hbWljIGxvb2t1cCB0YWJsZSAoYGxpb192Zl9wY2lfZGV2X2J5X3Fub2ApLiBUaGlzIHNlZW1zIHNwZWNpZmljIHRvIGEgY2VydGFpbiBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgY2FuIEkgZXZlbiAqZ2V0KiB0byB0aGlzIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQW5kIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLi4uXG5cblRoZSBwcm9tcHQgaXMgc3BlY2lmaWMuIEkgbmVlZCB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXQncyAqaW1wb3NzaWJsZSogdG8gcmVhY2ggdGhlIGNvZGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gT2theSwgdGhhdCdzIHRoZSBrZXkuIElzIHRoZSBDYXZpdW0gTGlxdWlkSU8gZGV2aWNlIGVtdWxhdGVkIGluIFFFTVU/IE5vLiBCdXQsIHdoYXQgYWJvdXQgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyP1xuXG5TeXprYWxsZXIncyBQQ0kgZnV6emVyIHdvcmtzIGJ5IHVzaW5nIGEgcHNldWRvLXN5c2NhbGwgYHN5el9wY2lfZGV2aWNlYCB0byBpbmplY3QgYSAqZmFrZSogUENJIGRldmljZS4gSXQncyBlc3NlbnRpYWxseSBpbnRlcmNlcHRpbmcgTU1JTyByZWFkcy93cml0ZXMuIFNvLCBkb2VzICp0aGF0KiBjb3VudCBhcyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSwgYXMgdGhlIHByb21wdCBzYXlzPyBZZXMsIGl0J3MgZGVmaW5pdGVseSBhIGZvcm0gb2Ygc29mdHdhcmUgZW11bGF0aW9uLiBTbywgaXMgdGhlIHF1ZXN0aW9uIGlmIHN5emthbGxlciBjYW4gcmVhY2ggaXQ/XG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzICpob3cqIGxpbWl0ZWQgaXMgc3l6a2FsbGVyJ3MgUENJIGZ1enplcj8gSXQgY2FuIHRyaWdnZXIgcHJvYmVzIGFuZCBtYXliZSBiYXNpYyBpbnRlcnJ1cHRzIG9yIHdvcmtxdWV1ZXMgaWYgdGhleSBnZXQgc2NoZWR1bGVkIGR1cmluZyB0aGUgcHJvYmUuIE5vdyBJIG5lZWQgdG8gY2hlY2sgaWYgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGdldHMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGNhbiBzaW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGNvbmRpdGlvbnMgdG8gdHJpZ2dlciB0aGUgY2hhbmdlZCBjb2RlIHBhdGggaW4gdGhlIHBhdGNoLiBTaW5jZSB0aGUgcHJvbXB0IHRlbGxzIG1lIHRvIGNvbnNpZGVyIGV2ZW4gc29mdHdhcmUgZW11bGF0ZWQgaGFyZHdhcmUsIGl0J3Mgbm90IGxvb2tpbmcgZ29vZCwgYnV0IGxldCdzIGNoZWNrIHdoYXQncyByZWFjaGFibGUgZHVyaW5nIHRoZSBwcm9iZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc0NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzoxOS42MTEzNjI3ODZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzNzgwMjEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY3Rlb25fZW5hYmxlX3NyaW92XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM9MzMyMj1zdGF0aWMgaW50IHNldHVwX25pY19kZXZpY2VzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3Rlb25fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzc3OC0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzozNzc5OnN0YXRpYyBpbnQgb2N0ZW9uX2VuYWJsZV9zcmlvdihzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM3ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM9MzgxNj1zdGF0aWMgaW50IGxpcXVpZGlvX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnVtX3ZmcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTM4MzctXFx0XFx0b2N0LVxcdTAwM2Vzcmlvdl9pbmZvLm51bV92ZnNfYWxsb2NlZCA9IG51bV92ZnM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmM6MzgzODpcXHRcXHRyZXQgPSBvY3Rlb25fZW5hYmxlX3NyaW92KG9jdCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzgzOS1cXHRcXHRkZXZfaW5mbyhcXHUwMDI2b2N0LVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsIFxcXCJvY3QtXFx1MDAzZXBmX251bTolZCBudW1fdmZzOiVkXFxcXG5cXFwiLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzoyMC4yNDkxNzg2MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgyNDcxNTE1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBuZXR3b3JraW5nIGRyaXZlciBkZXZlbG9wbWVudDpcblxuKipUcmFjaW5nIHRoZSBTUklPViBFbmFibGVtZW50IFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBTUi1JT1YgKFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbikgZW5hYmxlbWVudCBmb3IgdGhpcyBPY3Rlb24tYmFzZWQgbmV0d29yayBkZXZpY2UuICBUaGUgY29kZSB0ZWxscyBtZSB0aGF0IGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgIGlzIHRoZSBvbmUgY2FsbGluZyBpdC4gIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGVyZSBpbiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgZG9lcyAqdGhpcyogZnVuY3Rpb24sIGBsaXF1aWRpb19lbmFibGVfc3Jpb3ZgLCBnZXQgdHJpZ2dlcmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBjaGFpbiB0byB0cnVseSBncmFzcCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgY29uZmlndXJhdGlvbi4gS25vd2luZyB3aGVyZSBgbGlxdWlkaW9fZW5hYmxlX3NyaW92YCBpcyBjYWxsZWQgZnJvbSB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgY29udGV4dCBpbiB3aGljaCBTUi1JT1YgaXMgYmVpbmcgZW5hYmxlZC4gSXQncyBjcnVjaWFsIGZvciBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSdzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHJlbGF0ZWQgdG8gdmlydHVhbGl6YXRpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhpcyBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODM2MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjI1LjA3Mzg5ODE1NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0Nzk5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpcXVpZGlvX2VuYWJsZV9zcmlvdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTEyNz1zdHJ1Y3QgaGFuZHNoYWtlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTEzNS0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzoxMzY6c3RhdGljIGludCBsaXF1aWRpb19lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTEzNy0jZW5kaWZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jPTQyMT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbGlxdWlkaW9fcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTQyOC0jaWZkZWYgQ09ORklHX1BDSV9JT1ZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYzo0Mjk6XFx0LnNyaW92X2NvbmZpZ3VyZSA9IGxpcXVpZGlvX2VuYWJsZV9zcmlvdixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy00MzAtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz0zODAwPXN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYy0zODE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jOjM4MTY6c3RhdGljIGludCBsaXF1aWRpb19lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG51bV92ZnMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtMzgxNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjI1LjMwODcwNzMwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjA5NDc3MzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHNyaW92X2NvbmZpZ3VyZWAgQ2FsbGJhY2sgYW5kIE1haWxib3ggVGhyZWFkKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGAuc3Jpb3ZfY29uZmlndXJlYCBjYWxsYmFjayB3aXRoaW4gdGhlIGBzdHJ1Y3QgcGNpX2RyaXZlcmAuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkIGlzLCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICp0cmlnZ2VyKiB0aGlzPyBBbmQgdGhlIGFuc3dlciwgaXQgc2VlbXMsIGlzIGEgY2xlYXIgeWVzIOKAkyBieSBtZXNzaW5nIHdpdGggYC9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9zcmlvdl9udW12ZnNgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LiBOb3csIHRoZSByZWFsIG1lYXQgb2YgdGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgd3JhcHBlZCB1cCB3aXRoaW4gdGhlIGBjbjIzeHhfcGZfbWJveF90aHJlYWRgLCByaWdodD8gVGhpcyBpcyB0aGUgd29ya3F1ZXVlIHRoYXQgcHJlc3VtYWJseSBoYW5kbGVzIHRoZSBtYWlsYm94IHByb2Nlc3MgY29tbWFuZCwgd2hpY2ggaXMgdGhlIGJpdCBJJ20gbW9zdCBpbnRlcmVzdGVkIGluLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdW5kZXJzdGFuZCAqd2hlbiogdGhpcyB3b3JrcXVldWUgZ2V0cyBzY2hlZHVsZWQuIFNvLCBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGNvZGUsIGl0J3MgZWl0aGVyIGludGVycnVwdC1kcml2ZW4gb3IgcG9sbGVkLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNjaGVkdWxpbmcgbWVjaGFuaXNtIGZvciB0aGF0IGBjbjIzeHhfcGZfbWJveF90aHJlYWRgLiBXaGVyZSBpcyBpdCBiZWluZyBzY2hlZHVsZWQgZnJvbSBleGFjdGx5PyBUaGF0J3MgdGhlIGNvcmUgcXVlc3Rpb24gbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDk2LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjI5LjUxODE4ODQ5NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM5OTIwMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNuMjN4eF9wZl9tYm94X3RocmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NDU5PXN0YXRpYyB2b2lkIGNuMjN4eF9zZXR1cF9vcV9yZWdzKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBvcV9ubylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTA5OnN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz01NDA9c3RhdGljIGludCBjbjIzeHhfc2V0dXBfcGZfbWJveChzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01NzgtXFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm1ib3gtXFx1MDAzZW1ib3hfcG9sbF93ay53b3JrLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTc5OlxcdFxcdFxcdFxcdCAgY24yM3h4X3BmX21ib3hfdGhyZWFkKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTU4MC1cXHRcXHRtYm94LVxcdTAwM2VtYm94X3BvbGxfd2suY3R4cHRyID0gKHZvaWQgKiltYm94O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzoyOS43NTgxMTczNjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA4OTM4NDY4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW0gY29uc2lkZXJpbmcgdGhlbTpcblxuKipEZWJ1Z2dpbmcgdGhlIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgY24yM3h4X3NldHVwX3BmX21ib3hgIGZ1bmN0aW9uIGFuZCBzb21ldGhpbmcncyBjbGVhcmx5IG5vdCBoYXBwZW5pbmcgd2hlbiBJIGV4cGVjdCBpdCB0by4gVGhlIGNvbW1lbnQgc3RhdGVzIHRoZSBpbml0aWFsaXphdGlvbiBJJ20gY2hhc2luZyBpcyAqZGVsYXllZCogYW5kIGhhcHBlbnMgaW4gdGhhdCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBxdWVzdGlvbiBub3cgaXM6IFdoZXJlIHRoZSBoZWxsIGlzIGBjbjIzeHhfc2V0dXBfcGZfbWJveGAgZ2V0dGluZyBjYWxsZWQgZnJvbT8gVGhhdCdzIHRoZSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZnVuY3Rpb24gdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0aW5nIHBvaW50IG9mIHRoaXMgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSXMgaXQgY2FsbGVkIGR1cmluZyBkcml2ZXIgcHJvYmU/IElzIHRoZXJlIHNvbWUgc3BlY2lmaWMgZXZlbnQgdHJpZ2dlcj8gS25vd2luZyB0aGUgY2FsbCBwYXRoIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSB0aW1pbmcgY29uc3RyYWludHMgYW5kIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSBjYXVzaW5nIGEgZGVsYXkgaW4gbXkgZXhwZWN0ZWQgYmVoYXZpb3IuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGVyZSB0aGlzIHZpdGFsIGZ1bmN0aW9uIGZpdHMgd2l0aGluIHRoZSBvdmVyYWxsIHN5c3RlbSBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4NjAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzozNC44NDc1MDYzNDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNTg2Nzk4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY24yM3h4X3NldHVwX3BmX21ib3hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jPTUwOT1zdGF0aWMgdm9pZCBjbjIzeHhfcGZfbWJveF90aHJlYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MzktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo1NDA6c3RhdGljIGludCBjbjIzeHhfc2V0dXBfcGZfbWJveChzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtNTQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9MTEzOD1pbnQgc2V0dXBfY24yM3h4X29jdGVvbl9wZl9kZXZpY2Uoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4Mi1cXHRvY3QtXFx1MDAzZWZuX2xpc3Quc2V0dXBfb3FfcmVncyA9IGNuMjN4eF9zZXR1cF9vcV9yZWdzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6MTE4MzpcXHRvY3QtXFx1MDAzZWZuX2xpc3Quc2V0dXBfbWJveCA9IGNuMjN4eF9zZXR1cF9wZl9tYm94O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtMTE4NC1cXHRvY3QtXFx1MDAzZWZuX2xpc3QuZnJlZV9tYm94ID0gY24yM3h4X2ZyZWVfcGZfbWJveDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6MzcuMDA2MjM3NTE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3ODAwNjY5MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IENhbGxiYWNrIGFuZCBDYWxsIFN0YWNrIEV4cGxvcmF0aW9uKipcblxuUmlnaHQsIHNvIHdlJ3ZlIGdvdCBhIGNhbGxiYWNrIGhlcmUg4oCTIHNwZWNpZmljYWxseSwgYHNldHVwX21ib3hgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBXaGVyZSBpbiB0aGUgY29kZWJhc2UgaXMgdGhpcyBgc2V0dXBfbWJveGAgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgaW52b2tlZD8gVW5kZXJzdGFuZGluZyBpdHMgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1MzozOS43ODYzMDkxMDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTg2NTgyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXR1cF9tYm94XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz0xMTM4PWludCBzZXR1cF9jbjIzeHhfb2N0ZW9uX3BmX2RldmljZShzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy0xMTgyLVxcdG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9vcV9yZWdzID0gY24yM3h4X3NldHVwX29xX3JlZ3M7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzoxMTgzOlxcdG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3BmX21ib3g7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy0xMTg0LVxcdG9jdC1cXHUwMDNlZm5fbGlzdC5mcmVlX21ib3ggPSBjbjIzeHhfZnJlZV9wZl9tYm94O1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYz02MTY9aW50IGNuMjN4eF9zZXR1cF9vY3Rlb25fdmZfZGV2aWNlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jLTY2Ni1cXHRvY3QtXFx1MDAzZWZuX2xpc3Quc2V0dXBfb3FfcmVncyA9IGNuMjN4eF9zZXR1cF92Zl9vcV9yZWdzO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM6NjY3OlxcdG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94ID0gY24yM3h4X3NldHVwX3ZmX21ib3g7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF92Zl9kZXZpY2UuYy02NjgtXFx0b2N0LVxcdTAwM2Vmbl9saXN0LmZyZWVfbWJveCA9IGNuMjN4eF9mcmVlX3ZmX21ib3g7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX2V0aHRvb2wuYz0xMDg1PXN0YXRpYyBpbnQgbGlvX3Jlc2V0X3F1ZXVlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1aW50MzJfdCBudW1fcXMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX2V0aHRvb2wuYy0xMTk2LVxcdFxcdGlmIChPQ1RFT05fQ04yM1hYX1BGKG9jdCkgXFx1MDAyNlxcdTAwMjYgIW9jdC1cXHUwMDNlc3Jpb3ZfaW5mby5zcmlvdl9lbmFibGVkKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19ldGh0b29sLmM6MTE5NzpcXHRcXHRcXHRpZiAob2N0LVxcdTAwM2Vmbl9saXN0LnNldHVwX21ib3gob2N0KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fZXRodG9vbC5jLTExOTgtXFx0XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2N0LVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VkZXYsIFxcXCJNYWlsYm94IHNldHVwIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX21haW4uYz00MDA3PXN0YXRpYyBpbnQgb2N0ZW9uX2RldmljZV9pbml0KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3Rlb25fZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2xpb19tYWluLmMtNDE0My1cXHRpZiAoT0NURU9OX0NOMjNYWF9QRihvY3Rlb25fZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jOjQxNDQ6XFx0XFx0aWYgKG9jdGVvbl9kZXYtXFx1MDAzZWZuX2xpc3Quc2V0dXBfbWJveChvY3Rlb25fZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fbWFpbi5jLTQxNDUtXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2b2N0ZW9uX2Rldi1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlZGV2LCBcXFwiT0NURU9OOiBNYWlsYm94IHNldHVwIGZhaWxlZFxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYz0yMjY4PXN0YXRpYyBpbnQgb2N0ZW9uX2RldmljZV9pbml0KHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYy0yMzM5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9saW9fdmZfbWFpbi5jOjIzNDA6XFx0aWYgKG9jdC1cXHUwMDNlZm5fbGlzdC5zZXR1cF9tYm94KG9jdCkpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vbGlvX3ZmX21haW4uYy0yMzQxLVxcdFxcdGRldl9lcnIoXFx1MDAyNm9jdC1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlZGV2LCBcXFwiTWFpbGJveCBzZXR1cCBmYWlsZWRcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9kZXZpY2UuaD0yMzI9c3RydWN0IG9jdGVvbl9mbl9saXN0IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgtMjM4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmg6MjM5OlxcdGludCAoKnNldHVwX21ib3gpKHN0cnVjdCBvY3Rlb25fZGV2aWNlICopO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fZGV2aWNlLmgtMjQwLVxcdGludCAoKmZyZWVfbWJveCkoc3RydWN0IG9jdGVvbl9kZXZpY2UgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjQwLjQyNjE5MDUxNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDY1MTg2MDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT2N0ZW9uIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgb2N0ZW9uX2RldmljZV9pbml0YCBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyB0aGUgUENJIHByb2JlIHNlcXVlbmNlLiBSaWdodCwgc28gdGhpcyBpcyB3aGVyZSB0aGUgbWFpbGJveCB0aHJlYWQgZ2V0cyBpbml0aWFsaXplZCBhbmQgc2NoZWR1bGVkLCB3aGljaCBoYXBwZW5zIGR1cmluZyB0aGUgUENJIHByb2JlIHBoYXNlLiBUaGUgbWFpbGJveCB0aHJlYWQncyBqb2IgaXMgdG8gY29udGludWFsbHkgcG9sbCB0aG9zZSBtYWlsYm94IHJlZ2lzdGVycy4gTm93LCB0aGUga2V5IGhlcmUgaXMgdGhhdCBpZiBTeXprYWxsZXIncyBQQ0kgZnV6emVyIGluamVjdHMgYSBmYWtlIExpcXVpZElPIGRldmljZSwgdGhlIGRyaXZlciB3aWxsIGdvIHRocm91Z2ggdGhlIG1vdGlvbnMgb2YgcHJvYmluZyBpdC4gSXQnbGwgc2V0IHVwIHRoZSBtYWlsYm94LCBhbmQgdGhlIHBvbGxpbmcgc3RhcnRzLlxuXG5UaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBQQ0kgZnV6emVyIGNhbiBmZWVkIHRoZSBkcml2ZXIgZmFrZSB2YWx1ZXMgd2hlbiBpdCByZWFkcyB0aG9zZSBtYWlsYm94IHJlZ2lzdGVycy4gVGhhdCBtZWFucyB3ZSBjb3VsZCBwb3RlbnRpYWxseSB0cmlnZ2VyIGFuZCBleGVjdXRlIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgd2l0aCBkYXRhIGZ1bGx5IGNvbnRyb2xsZWQgYnkgdGhlIGZ1enplci4gSG9sZCBvbiwgbGV0J3MganVzdCBjb25maXJtIGlmIHRoaXMgaXMgYWN0dWFsbHkgYSByZWFsaXN0aWMgc2NlbmFyaW8uXG5cblNvLCB0aGUgUENJIGZ1enplciBzZXRzIHVwIHRoaXMgZmFrZSBQQ0kgZGV2aWNlLCBhbmQgdGhlIGRyaXZlciBnb2VzIGFib3V0IG1hcHBpbmcgdGhlIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMgKEJBUnMpIGFuZCByZWFkaW5nIGZyb20gdGhlbS4gV2hlbiBgb2N0ZW9uX21ib3hfcmVhZGAgaXMgY2FsbGVkLCBpdCdzIGVzc2VudGlhbGx5IHJlYWRpbmcgZnJvbSBvbmUgb2YgdGhvc2UgQkFScy4gUmlnaHQsIHNvIG5vdyBJIG5lZWQgdG8gY2hlY2sgaG93IGBvY3Rlb25fbWJveF9yZWFkYCB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NTgsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTM6NDUuODkxMzgwNzU1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzkyNTM4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2N0ZW9uX21ib3hfcmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM9NTA5PXN0YXRpYyB2b2lkIGNuMjN4eF9wZl9tYm94X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3BmX2RldmljZS5jLTUyNy1cXHRcXHRcXHRpZiAodmFsNjQgXFx1MDAyNlxcdTAwMjYgKHZhbDY0ICE9IE9DVEVPTl9QRlZGQUNLKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmM6NTI4OlxcdFxcdFxcdFxcdGlmIChvY3Rlb25fbWJveF9yZWFkKG9jdC1cXHUwMDNlbWJveFtxX25vXSkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYy01MjktXFx0XFx0XFx0XFx0XFx0b2N0ZW9uX21ib3hfcHJvY2Vzc19tZXNzYWdlKFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYz04MTM9c3RhdGljIHZvaWQgY24yM3h4X2hhbmRsZV9wZl9tYm94X2ludHIoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtODI2LVxcdFxcdFxcdCAgICAgICBvY3QtXFx1MDAzZW1ib3hbMF0tXFx1MDAzZW1ib3hfaW50X3JlZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL2NuMjN4eF9wZl9kZXZpY2UuYzo4Mjc6XFx0XFx0XFx0aWYgKG9jdGVvbl9tYm94X3JlYWQob2N0LVxcdTAwM2VtYm94W3Ffbm9dKSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfcGZfZGV2aWNlLmMtODI4LVxcdFxcdFxcdFxcdHdvcmsgPSBcXHUwMDI2b2N0LVxcdTAwM2VtYm94W3Ffbm9dLVxcdTAwM2VtYm94X3BvbGxfd2sud29yaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmM9NDcyPXN0YXRpYyB2b2lkIGNuMjN4eF9oYW5kbGVfdmZfbWJveF9pbnRyKHN0cnVjdCBvY3Rlb25faW9xX3ZlY3RvciAqaW9xX3ZlY3RvcilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgwLVxcdFxcdHdyaXRlcShtYm94X2ludF92YWwsIG9jdC1cXHUwMDNlbWJveFswXS1cXHUwMDNlbWJveF9pbnRfcmVnKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vY24yM3h4X3ZmX2RldmljZS5jOjQ4MTpcXHRcXHRpZiAob2N0ZW9uX21ib3hfcmVhZChvY3QtXFx1MDAzZW1ib3hbMF0pKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9jbjIzeHhfdmZfZGV2aWNlLmMtNDgyLVxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2b2N0LVxcdTAwM2VtYm94WzBdLVxcdTAwM2VtYm94X3BvbGxfd2sud29yayxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5jPTI5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqbGlvX3ZmX3BjaV9kZXZfYnlfcW5vKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsIHUzMiBxX25vKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtNTQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmM6NTU6ICogb2N0ZW9uX21ib3hfcmVhZDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy01Ni0gKiBAbWJveDogUG9pbnRlciBtYWlsYm94XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYy02MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guYzo2MTppbnQgb2N0ZW9uX21ib3hfcmVhZChzdHJ1Y3Qgb2N0ZW9uX21ib3ggKm1ib3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94LmMtNjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL29jdGVvbl9tYWlsYm94Lmg9MTE0PXN0cnVjdCBvY3RfdmZfc3RhdHNfY3R4IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9vY3Rlb25fbWFpbGJveC5oLTExOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaDoxMTk6aW50IG9jdGVvbl9tYm94X3JlYWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vbGlxdWlkaW8vb2N0ZW9uX21haWxib3guaC0xMjAtaW50IG9jdGVvbl9tYm94X3dyaXRlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjUzOjQ2LjUzMDY0ODM3M1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzYzNTU2MTcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZ1bG5lcmFiaWxpdHkgYW5kIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIGBvY3Rlb25fbWJveF9yZWFkYCBpcyBob3cgd2UgZ2V0IGRhdGEgZnJvbSB0aGUgbWFpbGJveCByZWdpc3RlcnMuIElmIHRoZSBQQ0kgZnV6emVyIGluIHN5emthbGxlciBjYW4gcHJvdmlkZSB0aGUgKnJpZ2h0KiB2YWx1ZXMsIHRoYXQgc2hvdWxkIHRyaWdnZXIgYG9jdGVvbl9tYm94X3Byb2Nlc3NfbWVzc2FnZWAgYW5kIHVsdGltYXRlbHkgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYC4gQW5kIHRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCB0byBoYW5kbGUgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAuIFRoaXMgdGhlbiBjYWxscyBgbGlvX3ZmX3BjaV9kZXZfYnlfcW5vYC5cblxuTm93LCB0aGF0IGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggUENJIGRldmljZXMgdXNpbmcgYHBjaV9nZXRfZGV2aWNlYCB3aXRoIENhdml1bSdzIHZlbmRvciBJRC4gSXQgY2hlY2tzIHRoZSBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpIG9mIHRoZSBkZXZpY2UgYW5kIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIElEIChWRklEKS4gQ291bGQgc3l6a2FsbGVyIGFjdHVhbGx5ICp0cmlnZ2VyKiB0aGlzPyBJIHRoaW5rIHNvLiBJZiB0aGUgUENJIGZ1enplciBjYW4gaW5qZWN0IGEgKmZha2UqIFBGIGRldmljZSwgaXQgbWlnaHQgbmVlZCB0byBpbmplY3QgZmFrZSBWRnMgYXMgd2VsbCB0byBtYWtlIHRoaXMgY29kZSBwYXRoIGFjdHVhbGx5IGRvIHNvbWV0aGluZy4gQnV0IGV2ZW4gaWYgaXQgKmRvZXNuJ3QqIGZpbmQgYSBWRiwgdGhlIGZ1bmN0aW9uIHdpbGwgc3RpbGwgZXhlY3V0ZSBhbmQgcmV0dXJuIE5VTEwsIHdoaWNoIGlzIHN0aWxsIHJlYWNoYWJsZSBjb2RlIVxuXG5Ib2xkIG9uLCB0aGUgcGF0Y2ggKmFsc28qIG1lc3NlcyB3aXRoIGBvY3Rlb25fZW5hYmxlX3NyaW92YCBhbmQgYGxpb19wY2lfc3Jpb3ZfZGlzYWJsZWAuIFRob3NlIGFyZSBsaW5rZWQgdG8gU1ItSU9WIGJlaW5nIGVuYWJsZWQvZGlzYWJsZWQgdGhyb3VnaCBzeXNmcywgcmlnaHQ/IEFuZCBzeXprYWxsZXIgKmNhbiogd3JpdGUgdG8gc3lzZnMgZmlsZXMuIFNvLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB0cmlnZ2VyIGBvY3Rlb25fZW5hYmxlX3NyaW92YCFcblxuSXMgdGhpcyBldmVuICp3b3J0aCogZnV6emluZz8gV2VsbCwgdGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdpdGggdGhlIG9sZCBgZHBpcmluZ190b192ZnBjaWRldl9sdXRgIGFwcHJvYWNoLiBJdCBzb3VuZHMgbGlrZSB0aGVyZSBjb3VsZCBoYXZlIGJlZW4gaXNzdWVzIHRoZXJlLCBsaWtlIHVzZS1hZnRlci1mcmVlIGlmIFZGcyB3ZXJlIHJlbW92ZWQsIG9yIGp1c3Qgd3JvbmcgbWFwcGluZ3MuIFRoZSBuZXcgY29kZSBkeW5hbWljYWxseSBmaW5kcyB0aGUgVkYuIFRoaXMgc2VlbXMgbGlrZSBmdW5jdGlvbmFsIGNvZGUgaW4gYSBoYXJkd2FyZSBkcml2ZXIuIEFuZCBpdCBzb3VuZHMgbGlrZSB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB0aGUgUENJIGZ1enplciAqYW5kKiBzeXNmcyB3cml0ZXMsIHJpZ2h0P1xuXG5XYWl0IGEgc2Vjb25kLiBJcyBgTElRVUlESU9gIGV2ZW4gKmVuYWJsZWQqIGluIHN5emthbGxlcidzIGRlZmF1bHQgY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgdGhlcmUgb3IgaWYgd2UgbmVlZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgaXQuIFllYWgsIHdlJ2xsIG5lZWQgdG8gc3BlY2lmeSBgTElRVUlESU9gIGluIGBFbmFibGVDb25maWdzYC4gR290dGEgY2hlY2sgdGhlIGV4YWN0IGNvbmZpZyBuYW1lcyB0byBtYWtlIHN1cmUgd2UgZ2V0IGl0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDowNC4xNjYyMTQ5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0MDg3NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMSVFVSURJT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz01ND1jb25maWcgQ0FWSVVNX1BUUFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NjU6Y29uZmlnIExJUVVJRElPX0NPUkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy02Ni1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjY4OmNvbmZpZyBMSVFVSURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gTGlxdWlkSU8gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTg0PWNvbmZpZyBPQ1RFT05fTUdNVF9FVEhFUk5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6OTU6Y29uZmlnIExJUVVJRElPX1ZGXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTYtXFx0dHJpc3RhdGUgXFxcIkNhdml1bSBMaXF1aWRJTyBWRiBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDowNC42OTAzMTE4NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc4NjMxNzI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExJUVVJRElPIENvbmZpZ3VyYXRpb24gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBhbmQgaXQgc2VlbXMgd2UncmUgZGVhbGluZyB3aXRoIHR3byBrZXkgY29uZmlndXJhdGlvbnM6IGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAuIFJpZ2h0IG9mZiB0aGUgYmF0LCB0aGF0IHRlbGxzIG1lIHdlJ3ZlIGdvdCBhIHNldHVwIHdpdGggYSBwaHlzaWNhbCBmdW5jdGlvbiBhbmQgdmlydHVhbCBmdW5jdGlvbnMsIHdoaWNoIGlzIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgaGFyZHdhcmUuIExldCdzIHNlZSB3aGF0J3MgY2hhbmdlZCBhcyBhIHJlc3VsdC5cblxuVGhlIGNvcmUgZmlsZXMgYWZmZWN0ZWQgYXJlIGBsaW9fbWFpbi5jYCAobGlrZWx5IHRoZSBtYWluIGRyaXZlciBlbnRyeSBwb2ludCBmb3IgdGhlIGBMSVFVSURJT2AgcGF0aCksIHdoaWNoIHNlZW1zIHByZXR0eSBleHBlY3RlZCBnaXZlbiB0aGUgY29uZmlnIG5hbWUsIGFuZCBgb2N0ZW9uX21haWxib3guY2AuIE5vdywgYG9jdGVvbl9tYWlsYm94LmNgIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhhdCdzIHByb2JhYmx5IHBhcnQgb2YgdGhlIGBMSVFVSURJT19DT1JFYCwgYW5kIHN1Z2dlc3RzIGNvbW11bmljYXRpb24gaXMgbGlrZWx5IGJlaW5nIHNoYXJlZCBiZXR3ZWVuIFBGIGFuZCBWRi4gSXQncyBvZnRlbiBzaGFyZWQsIGJlY2F1c2UgdGhlIG1haWxib3ggaXMgdHlwaWNhbGx5IGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24uIFNoYXJlZCBjb2RlIGFjcm9zcyB0aGUgUEYgYW5kIFZGcyBpcyBhbHNvIGV4cGVjdGVkLCB0aGlzIGlzIHR5cGljYWwgaW4gbW9zdCBkcml2ZXJzLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoZXNlIGNvbmZpZ3MgYXJlIHdpcmVkIHVwLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9saXF1aWRpby9NYWtlZmlsZWAuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBkZXBlbmRlbmNpZXMsIGJ1aWxkIGZsYWdzLCBhbmQgc2VlIHdoZXJlIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAgYXJlIGJlaW5nIHVzZWQgdG8gaW5jbHVkZSBjb2RlLiBBIG1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSBhIHByb3BlciBjb250ZXh0IGZvciB0aGUgaW5jbHVzaW9uIG9mIGFsbCB0aGlzIGxvZ2ljIGFuZCB3aGF0IHBhcnRzIG9mIHRoZSBkcml2ZXIgd2lsbCBiZSBicm91Z2h0IGluIHVuZGVyIHdoaWNoIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxMywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU0OjA5LjQ3NjYzMzY3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL2xpcXVpZGlvL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ2F2aXVtIExpcXVpZGlvIGV0aGVybmV0IGRldmljZSBkcml2ZXJcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0xJUVVJRElPX0NPUkUpICs9IGxpcXVpZGlvLWNvcmUub1xcbiAgIDc6XFx0bGlxdWlkaW8tY29yZS15IDo9IFxcXFxcXG4gICA4OlxcdFxcdFxcdGxpb19ldGh0b29sLm9cXHRcXHRcXFxcXFxuICAgOTpcXHRcXHRcXHRsaW9fY29yZS5vXFx0XFx0XFxcXFxcbiAgMTA6XFx0XFx0XFx0cmVxdWVzdF9tYW5hZ2VyLm9cXHRcXFxcXFxuICAxMTpcXHRcXHRcXHRyZXNwb25zZV9tYW5hZ2VyLm9cXHRcXFxcXFxuICAxMjpcXHRcXHRcXHRvY3Rlb25fZGV2aWNlLm9cXHRcXHRcXFxcXFxuICAxMzpcXHRcXHRcXHRjbjY2eHhfZGV2aWNlLm9cXHRcXHRcXFxcXFxuICAxNDpcXHRcXHRcXHRjbjY4eHhfZGV2aWNlLm9cXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRcXHRjbjIzeHhfcGZfZGV2aWNlLm9cXHRcXFxcXFxuICAxNjpcXHRcXHRcXHRjbjIzeHhfdmZfZGV2aWNlLm9cXHRcXFxcXFxuICAxNzpcXHRcXHRcXHRvY3Rlb25fbWFpbGJveC5vXFx0XFxcXFxcbiAgMTg6XFx0XFx0XFx0b2N0ZW9uX21lbV9vcHMub1xcdFxcXFxcXG4gIDE5OlxcdFxcdFxcdG9jdGVvbl9kcm9xLm9cXHRcXHRcXFxcXFxuICAyMDpcXHRcXHRcXHRvY3Rlb25fbmljLm9cXG4gIDIxOlxcdFxcbiAgMjI6XFx0b2JqLSQoQ09ORklHX0xJUVVJRElPKSArPSBsaXF1aWRpby5vXFxuICAyMzpcXHRsaXF1aWRpby15IDo9IGxpb19tYWluLm8gb2N0ZW9uX2NvbnNvbGUubyBsaW9fdmZfcmVwLm9cXG4gIDI0OlxcdFxcbiAgMjU6XFx0b2JqLSQoQ09ORklHX0xJUVVJRElPX1ZGKSArPSBsaXF1aWRpb192Zi5vXFxuICAyNjpcXHRsaXF1aWRpb192Zi15IDo9IGxpb192Zl9tYWluLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTQ6MDkuNDc2NzYyNjg1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDMyNzI0MDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBMaXF1aWRJTyBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBMaXF1aWRJTyBkcml2ZXIuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIFNSLUlPViBmdW5jdGlvbmFsaXR5IGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIHByaW1hcnkgY29uZmlncyB0byBjb25zaWRlciBhcmUgYExJUVVJRElPYCBhbmQgYExJUVVJRElPX1ZGYCwgYXMgdGhlIHBhdGNoIHRvdWNoZXMgYGxpb19tYWluLmNgIChwYXJ0IG9mIGBsaXF1aWRpby5vYCkgYW5kIGBvY3Rlb25fbWFpbGJveC5jYCAocGFydCBvZiBgbGlxdWlkaW8tY29yZS5vYCkuIFNpbmNlIGBMSVFVSURJT19DT1JFYCBpcyBzZWxlY3RlZCBieSBib3RoIGBMSVFVSURJT2AgYW5kIGBMSVFVSURJT19WRmAsIGVuYWJsaW5nIGp1c3QgYExJUVVJRElPYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgYXMgdGhlIHBhdGNoIGZvY3VzZXMgb24gYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCBjYWxsZWQgYnkgYExJUVVJRElPX0NPUkVgLiBJJ2xsIGFsc28gYWRkIGBQQ0lfSU9WYCBqdXN0IHRvIGJlIHNhZmUsIGJlY2F1c2UgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIHVzZXMgaXQsIGFuZCBpdCdzIGEgZ2VuZXJhbGx5IHNhZmUgY29uZmlnIHRvIGVuYWJsZSBpbiBzeXprYWxsZXIuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4gV2UgaGF2ZTpcblxuKiAgIGBvY3Rlb25fZW5hYmxlX3NyaW92YFxuKiAgIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgXG4qICAgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgKGEgbmV3IGZ1bmN0aW9uKVxuKiAgIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGBcblxuQXJlIHRoZXNlIGZ1bmN0aW9ucyBvbiB0aGUgY3JpdGljYWwgcGF0aD8gYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgcmVsYXRlZCB0byBTUi1JT1YgZW5hYmxpbmcvZGlzYWJsaW5nLCB3aGljaCBJJ2QgY2xhc3NpZnkgYXMgc2xvdy1wYXRoIG9wZXJhdGlvbnMuIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgaXMgbW9yZSBpbnRlcmVzdGluZy4gSXQncyBoYW5kbGluZyBtYWlsYm94IGNvbW1hbmRzLiBOb3QgYSBwYWNrZXQgcHJvY2Vzc2luZyBob3QgcGF0aCwgYnV0IGEgY29udHJvbCBwYXRoLiBgbGlvX3ZmX3BjaV9kZXZfYnlfcW5vYCBpcyBjYWxsZWQgd2l0aGluIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgdG8gaGFuZGxlIGBPQ1RFT05fVkZfRkxSX1JFUVVFU1RgLiBTbywgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCBhbG9uZyB3aXRoIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gIGFyZSBkZWZpbml0ZWx5IGdvb2QgY2FuZGlkYXRlcyBmb3IgaW5jbHVzaW9uIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgc291cmNlIGZpbGVzLiBDaGVja2luZyB0aGUgY29kZSwgdGhleSBhcmUuIFNwZWNpZmljYWxseSwgYG9jdGVvbl9lbmFibGVfc3Jpb3ZgIGFuZCBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYCBhcmUgc3RhdGljIGluIGBsaW9fbWFpbi5jYCwgYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AgYW5kIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAgYXJlIHN0YXRpYyBpbiBgb2N0ZW9uX21haWxib3guY2AuXG5cbkEga2V5IGNvbnNpZGVyYXRpb24gaGVyZSBpcyB3aGV0aGVyIHRoZSBjb2RlIHBhdGggaXMgcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBwcm9tcHQgc3BlY2lmaWVzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggaXMgdW5yZWFjaGFibGUsIHNvIEkgbmVlZCB0byBtYWtlIGEganVkZ21lbnQgY2FsbC4gQ29uc2lkZXJpbmcgdGhlIExpcXVpZElPIGRyaXZlciwgY2FuIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgcmVhY2ggaXQ/IFRoZSBhbnN3ZXIgaXMgeWVzLiBXaGlsZSB0aGUgUENJIGZ1enplciBkb2Vzbid0IGZ1bGx5IGVtdWxhdGUgdGhlIExpcXVpZElPIGhhcmR3YXJlLCBpdCAqZG9lcyogcHJvdmlkZSBhIGR1bW15IFBDSSBkZXZpY2UgdGhhdCBtYXRjaGVzIHRoZSB2ZW5kb3IvZGV2aWNlIElELiBUaGlzIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBkcml2ZXIgdG8gcHJvYmUsIG1hcCBCQVJzLCBhbmQgcG90ZW50aWFsbHkgcmVhZCBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVycy4gUmVhZGluZyBmcm9tIHRoZSBtYWlsYm94IHJlZ2lzdGVyIGNvdWxkIHRyaWdnZXIgZXhlY3V0aW9uIG9mIGBvY3Rlb25fbWJveF9wcm9jZXNzX2NtZGAuXG5cbkdpdmVuIHRoaXMsIEkgY29uY2x1ZGUgdGhhdCB0aGUgcGF0Y2ggaXMsIGluIGZhY3QsIHJlYWNoYWJsZS4gQW5kLCBnaXZlbiB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW4gdGhlIGRyaXZlciwgZnV6emluZyBpdCBpcyB3b3J0aHdoaWxlLCBlbnN1cmluZyB0aGUgZml4IGlzIGNvcnJlY3QsIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGlzc3Vlcy5cblxuU28sIHRoZSBkZWZpbml0aXZlIGxpc3Qgb2YgYEZvY3VzU3ltYm9sc2AgaXM6XG5cbiogICBgb2N0ZW9uX2VuYWJsZV9zcmlvdmBcbiogICBgbGlvX3BjaV9zcmlvdl9kaXNhYmxlYFxuKiAgIGBsaW9fdmZfcGNpX2Rldl9ieV9xbm9gXG4qICAgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYFxuXG5BbmQgdGhlIG5lY2Vzc2FyeSBgQ29uZmlnc2AgYXJlOlxuXG4qICAgYExJUVVJRElPYFxuKiAgIGBQQ0lfSU9WYFxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGVzZSBmdW5jdGlvbiBuYW1lcyBwcmVjaXNlbHkgZnJvbSB0aGUgY29kZTpcblxuKiAgIGBzdGF0aWMgaW50IG9jdGVvbl9lbmFibGVfc3Jpb3Yoc3RydWN0IG9jdGVvbl9kZXZpY2UgKm9jdClgXG4qICAgYHN0YXRpYyBpbnQgbGlvX3BjaV9zcmlvdl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25fZGV2aWNlICpvY3QpYFxuKiAgIGBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmxpb192Zl9wY2lfZGV2X2J5X3FubyhzdHJ1Y3Qgb2N0ZW9uX2RldmljZSAqb2N0LCB1MzIgcV9ubylgXG4qICAgYHN0YXRpYyBpbnQgb2N0ZW9uX21ib3hfcHJvY2Vzc19jbWQoc3RydWN0IG9jdGVvbl9tYm94ICptYm94LCBzdHJ1Y3Qgb2N0ZW9uX21ib3hfY21kICptYm94X2NtZClgXG5cblRoZXkgYXJlIGNvcnJlY3QuXG5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTQ6MjQuNTA5NDkwMzM1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjA4ODcwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExJUVVJRElPXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo2NTpjb25maWcgTElRVUlESU9fQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY2LVxcdHRyaXN0YXRlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6Njg6Y29uZmlnIExJUVVJRElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNjktXFx0dHJpc3RhdGUgXFxcIkNhdml1bSBMaXF1aWRJTyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9ODQ9Y29uZmlnIE9DVEVPTl9NR01UX0VUSEVSTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo5NTpjb25maWcgTElRVUlESU9fVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy05Ni1cXHR0cmlzdGF0ZSBcXFwiQ2F2aXVtIExpcXVpZElPIFZGIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU0OjI0Ljc3MDQ0MTc1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTE5NDI3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKlVuZGVyc3RhbmRpbmcgTElRVUlESU8ncyBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHRhc2sgaXMgY2xlYXI6IEkgbmVlZCB0byBncmFzcCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBMSVFVSURJT2AuIEl0J3Mgbm90IGVub3VnaCB0byBqdXN0IHNlZSB0aGVtOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtLiBUaGlua2luZyBsaWtlIGFuIGV4cGVydCBpbiBbYXNzdW1lZCBmaWVsZCBiYXNlZCBvbiBMSVFVSURJTyAtIGUuZy4sIGRpc3RyaWJ1dGVkIHN5c3RlbXMsIHNvZnR3YXJlIGFyY2hpdGVjdHVyZSwgY2xvdWQgaW5mcmFzdHJ1Y3R1cmUsIGV0Yy5dLCBJJ20gZ29pbmcgdG8gYXBwcm9hY2ggdGhpcyB3aXRoIGEgdmVyeSBzcGVjaWZpYyBmcmFtZXdvcmsuIEknbSBub3QganVzdCBsb29raW5nIGZvciBhIHNpbXBsZSBsaXN0LiBJJ20gZ29pbmcgdG8gYmUgYXNzZXNzaW5nOlxuXG4qICAgKipEZXBlbmRlbmN5IHR5cGVzOioqIEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdCBkZXBlbmRlbmNpZXMsIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLCBidWlsZCBkZXBlbmRlbmNpZXMsIHJ1bnRpbWUgZGVwZW5kZW5jaWVzPyBBcmUgdGhleSBoYXJkIGRlcGVuZGVuY2llcyB0aGF0IG11c3QgZXhpc3QsIG9yIGFyZSB0aGVyZSBzb2Z0IGRlcGVuZGVuY2llcywgbGlrZSBvcHRpb25hbCBmZWF0dXJlcz9cbiogICAqKkRlcGVuZGVuY3kgdmVyc2lvbnM6KiogVmVyc2lvbiBudW1iZXJzIHdpbGwgYmUga2V5LiBJJ20gbG9va2luZyBmb3IgdGhlIHJhbmdlIG9mIGFjY2VwdGFibGUgdmVyc2lvbnMsIGFueSB2ZXJzaW9uIGNvbnN0cmFpbnRzLCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB2ZXJzaW9uIGNvbmZsaWN0cyB0aGF0IGNvdWxkIGNhdXNlIHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEknbGwgbmVlZCB0byB3YXRjaCBmb3Igb3V0ZGF0ZWQgb3IgdW5zdXBwb3J0ZWQgdmVyc2lvbnMuXG4qICAgKipEZXBlbmRlbmN5IHB1cnBvc2U6KiogV2hhdCBkb2VzIGVhY2ggZGVwZW5kZW5jeSBjb250cmlidXRlIHRvIGBMSVFVSURJT2A/IElzIGl0IGNvcmUgZnVuY3Rpb25hbGl0eSwgYSBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudCwgYSBzZWN1cml0eSBtZWFzdXJlLCBhIGxvZ2dpbmcgZnJhbWV3b3JrLCBvciBzb21ldGhpbmcgZWxzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIG9mIGVhY2ggZGVwZW5kZW5jeS5cbiogICAqKkRlcGVuZGVuY3kgaGVhbHRoOioqIFdoYXQncyB0aGUgbWFpbnRlbmFuY2Ugc3RhdHVzIG9mIGVhY2ggZGVwZW5kZW5jeT8gSXMgaXQgYWN0aXZlbHkgZGV2ZWxvcGVkIGFuZCBzdXBwb3J0ZWQsIG9yIGlzIGl0IGFiYW5kb25lZCBvciBhdCByaXNrIG9mIGJlaW5nIGRlcHJlY2F0ZWQ/IFRoaXMgaW1wYWN0cyB0aGUgbG9uZy10ZXJtIHZpYWJpbGl0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIGBMSVFVSURJT2AuXG4qICAgKipQb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOioqIEknbGwgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzIGluaGVyZW50IGluIHRoZXNlIGRlcGVuZGVuY2llcy4gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIGlmIGFueSBvZiB0aGVzZSBhcmUgY29tbW9ubHkga25vd24gdmVjdG9ycyBmb3IgYXR0YWNrIGFuZCBhc3Nlc3MgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBkZXBlbmRlbmN5LlxuXG5TbywgdGhpcyBpcyBtb3JlIHRoYW4ganVzdCBhIGN1cnNvcnkgZ2xhbmNlLiBJJ20gcmVhZHkgdG8gZ2V0IGEgZGV0YWlsZWQgdmlldyBvZiBgTElRVUlESU9gJ3MgZm91bmRhdGlvbiBhbmQgaXRzIHBvdGVudGlhbCByaXNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwMjcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDozMC45NjIzOTExNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2NjA3NDY0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTE2PWNvbmZpZyBUSFVOREVSX05JQ19QRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTE3LVxcdHRyaXN0YXRlIFxcXCJUaHVuZGVyIFBoeXNpY2FsIGZ1bmN0aW9uIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzoxODpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTE5LVxcdHNlbGVjdCBUSFVOREVSX05JQ19CR1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTI4PWNvbmZpZyBUSFVOREVSX05JQ19WRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMzAtXFx0aW1wbHkgQ0FWSVVNX1BUUFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjMxOlxcdGRlcGVuZHMgb24gNjRCSVQgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMzItXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9MzU9Y29uZmlnXFx0VEhVTkRFUl9OSUNfQkdYXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctMzYtXFx0dHJpc3RhdGUgXFxcIlRodW5kZXIgTUFDIGludGVyZmFjZSBkcml2ZXIgKEJHWClcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6Mzc6XFx0ZGVwZW5kcyBvbiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy0zOC1cXHRzZWxlY3QgUEhZTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZz00NT1jb25maWdcXHRUSFVOREVSX05JQ19SR1hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZy00Ni1cXHR0cmlzdGF0ZSBcXFwiVGh1bmRlciBNQUMgaW50ZXJmYWNlIGRyaXZlciAoUkdYKVxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTQ4LVxcdHNlbGVjdCBQSFlMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTU0PWNvbmZpZyBDQVZJVU1fUFRQXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctNTUtXFx0dHJpc3RhdGUgXFxcIkNhdml1bSBQVFAgY29wcm9jZXNzb3IgYXMgUFRQIGNsb2NrXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjU2OlxcdGRlcGVuZHMgb24gNjRCSVQgXFx1MDAyNlxcdTAwMjYgUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NTc6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTU4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTY4PWNvbmZpZyBMSVFVSURJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTY5LVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gTGlxdWlkSU8gc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo3MDpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6NzI6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTczLVxcdHNlbGVjdCBDUkMzMlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc9ODQ9Y29uZmlnIE9DVEVPTl9NR01UX0VUSEVSTkVUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctODUtXFx0dHJpc3RhdGUgXFxcIk9jdGVvbiBNYW5hZ2VtZW50IHBvcnQgZXRoZXJuZXQgZHJpdmVyIChDTjVYWFgsIENONlhYWClcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWc6ODY6XFx0ZGVwZW5kcyBvbiBDQVZJVU1fT0NURU9OX1NPQ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTg3LVxcdHNlbGVjdCBQSFlMSUJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnPTk1PWNvbmZpZyBMSVFVSURJT19WRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Nhdml1bS9LY29uZmlnLTk2LVxcdHRyaXN0YXRlIFxcXCJDYXZpdW0gTGlxdWlkSU8gVkYgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo5NzpcXHRkZXBlbmRzIG9uIDY0QklUIFxcdTAwMjZcXHUwMDI2IFBDSV9NU0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYXZpdW0vS2NvbmZpZzo5ODpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2F2aXVtL0tjb25maWctOTktXFx0c2VsZWN0IExJUVVJRElPX0NPUkVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTQ6MzEuNTI4NDc1MjI0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzMDgwNzE5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENhdml1bSBMaXF1aWRJTyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBmb3IgdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIgaGluZ2VzIG9uIGEgZmV3IHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zOiBgNjRCSVRgLCBgUENJYCwgYW5kIGBQVFBfMTU4OF9DTE9DS19PUFRJT05BTGAuIFdlJ3JlIGZvY3VzaW5nIG9uIHRoZSBgTElRVUlESU9gIGFuZCBgUENJX0lPVmAgYXNwZWN0cyBoZXJlLCB3aGljaCBpcyBzdGFuZGFyZC4gTm8gc3VycHJpc2VzIHRoZXJlLlxuXG5UaGUgY29yZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBzZWVtIHRvIHJldm9sdmUgYXJvdW5kIGEgZmV3IGtleSBmdW5jdGlvbnMuIFRoZSBtYWluIG9uZSBJJ20gdHJhY2tpbmcgaXMgYG9jdGVvbl9tYm94X3Byb2Nlc3NfY21kYCwgd2hpY2ggaXMgdGhlIGhlYXJ0IG9mIHRoZSBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZywgYW5kIGl0J3MgYmVlbiB1cGRhdGVkLiBUaGVyZSdzIGFsc28gYGxpb192Zl9wY2lfZGV2X2J5X3Fub2AsIGEgbmV3IGZ1bmN0aW9uLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2N0ZW9uX2VuYWJsZV9zcmlvdmAgYW5kIGBsaW9fcGNpX3NyaW92X2Rpc2FibGVgLiBUaGVzZSBmb3VyIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwsIGFuZCBwZXJmZWN0IGZvciBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gSSdsbCBuZWVkIHRvIHVzZSBteSBmb2N1cyBzeW1ib2xzIG9uIHRob3NlLlxuXG5Ob3csIGxldCdzIHJlY2FwIHRoZSBsb2dpYy4gVGhpcyBwYXRjaCBpcyBlc3NlbnRpYWxseSBjaGFuZ2luZyBob3cgdGhlIGRyaXZlciBoYW5kbGVzIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcuIFNwZWNpZmljYWxseSwgaXQncyByZXBsYWNpbmcgYSBzdGF0aWMgbG9va3VwIHRhYmxlIHdpdGggYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIGZvciB0aGUgdmlydHVhbCBmdW5jdGlvbnMgKFZGcykuIFRoZSBmdXp6ZXIgLSBzeXprYWxsZXIgLSBjYW4gcmVhY2ggdGhpcyBjb2RlIHZpYSBQQ0kgZW11bGF0aW9uIGZvciBtYWlsYm94IGNvbW1hbmRzIGFuZCBzeXNmcyBmb3IgU1ItSU9WIGNvbmZpZ3VyYXRpb24uIFRoZXJlZm9yZSwgZnV6emluZyBpcyBjcml0aWNhbCBoZXJlIHRvIHZhbGlkYXRlIHRoaXMgbmV3IGR5bmFtaWMgbG9va3VwIGFuZCBlbnN1cmUgY29ycmVjdCByZWZlcmVuY2UgY291bnRpbmcuXG5cbkhvbGQgb24sIEkgc2VlIGEgc2lnbmlmaWNhbnQgYWRkaXRpb246IGBwY2llX2Zscih2ZmRldik7IHBjaV9kZXZfcHV0KHZmZGV2KTtgLiBUaGlzIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBsb2dpYywgYW5kIGl0IG5lZWRzIGEgZGVlcCBkaXZlLlxuXG5PbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBMSVFVSURJT19WRmAgaXMgbm90IG5lZWRlZC4gVGhlIHBhdGNoIHRvdWNoZXMgYG9jdGVvbl9tYWlsYm94LmNgLCBidXQgYE9DVEVPTl9WRl9GTFJfUkVRVUVTVGAgaXMgaGFuZGxlZCBieSB0aGUgUEYgKHNpbmNlIGl0IGlzIGEgcmVxdWVzdCBfZnJvbV8gdGhlIFZGIF90b18gdGhlIFBGKS4gQW5kIHRoZSBQRiBkcml2ZXIgaXMgYExJUVVJRElPYC4gU28sIHllcywgYExJUVVJRElPYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB0aGUgZHJpdmVyLlxuXG5Pa2F5LCBJIHRoaW5rIEkndmUgZ290IGEgZ29vZCBncmFzcCBvbiB0aGlzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NDQyLCJPdXRwdXRUb2tlbnMiOjE4NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1NDozOS44MzY1NTM2MjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIzMjIzNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxJUVVJRElPXCIsXG4gICAgXCJQQ0lfSU9WXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2N0ZW9uX2VuYWJsZV9zcmlvdlwiLFxuICAgIFwibGlvX3BjaV9zcmlvdl9kaXNhYmxlXCIsXG4gICAgXCJsaW9fdmZfcGNpX2Rldl9ieV9xbm9cIixcbiAgICBcIm9jdGVvbl9tYm94X3Byb2Nlc3NfY21kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFNSLUlPViBhbmQgbWFpbGJveCBjb21tYW5kIHByb2Nlc3NpbmcgbG9naWMgaW4gdGhlIENhdml1bSBMaXF1aWRJTyBkcml2ZXIuIEl0IHJlcGxhY2VzIGEgc3RhdGljIGxvb2t1cCB0YWJsZSB3aXRoIGEgZHluYW1pYyBQQ0kgZGV2aWNlIGxvb2t1cCBmb3IgVkZzLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBzeXprYWxsZXIncyBQQ0kgZnV6emVyLCB3aGljaCBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlIGFuZCB0cmlnZ2VyIG1haWxib3ggY29tbWFuZHMsIGFzIHdlbGwgYXMgdmlhIHN5c2ZzIGZvciBTUi1JT1YgY29uZmlndXJhdGlvbi4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byBlbnN1cmUgdGhlIGR5bmFtaWMgbG9va3VwIGFuZCByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvcnJlY3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTElRVUlESU9cIixcbiAgICBcIlBDSV9JT1ZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY3Rlb25fZW5hYmxlX3NyaW92XCIsXG4gICAgXCJsaW9fcGNpX3NyaW92X2Rpc2FibGVcIixcbiAgICBcImxpb192Zl9wY2lfZGV2X2J5X3Fub1wiLFxuICAgIFwib2N0ZW9uX21ib3hfcHJvY2Vzc19jbWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgU1ItSU9WIGFuZCBtYWlsYm94IGNvbW1hbmQgcHJvY2Vzc2luZyBsb2dpYyBpbiB0aGUgQ2F2aXVtIExpcXVpZElPIGRyaXZlci4gSXQgcmVwbGFjZXMgYSBzdGF0aWMgbG9va3VwIHRhYmxlIHdpdGggYSBkeW5hbWljIFBDSSBkZXZpY2UgbG9va3VwIGZvciBWRnMuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6ZXIsIHdoaWNoIGNhbiBlbXVsYXRlIHRoZSBkZXZpY2UgYW5kIHRyaWdnZXIgbWFpbGJveCBjb21tYW5kcywgYXMgd2VsbCBhcyB2aWEgc3lzZnMgZm9yIFNSLUlPViBjb25maWd1cmF0aW9uLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIGVuc3VyZSB0aGUgZHluYW1pYyBsb29rdXAgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY29ycmVjdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowc8lz8[1] Phase: Succeeded StartedAt: 2026-07-01 09:54:51 +0000 UTC FinishedAt: 2026-07-01 09:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 09:54:51 +0000 UTC FinishedAt: 2026-07-01 09:54:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2] Phase: Succeeded StartedAt: 2026-07-01 09:54:51 +0000 UTC FinishedAt: 2026-07-01 10:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 09:54:51 +0000 UTC FinishedAt: 2026-07-01 10:49:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 09:54:51 +0000 UTC FinishedAt: 2026-07-01 09:55:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 09:54:51 +0000 UTC FinishedAt: 2026-07-01 09:54:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8lz8/series-workflowc8lz8-convert-artifact-798705032/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 09:55:01 +0000 UTC FinishedAt: 2026-07-01 10:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 09:55:01 +0000 UTC FinishedAt: 2026-07-01 10:16:15 +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:*0196ac47-324c-418e-b736-9ce3109acccc,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-workflowc8lz8/series-workflowc8lz8-convert-artifact-798705032/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": "4dcca4b8-3b15-4af5-9fd4-c432de4f69e3", "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-workflowc8lz8/series-workflowc8lz8-build-action-3557105662/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 09:55:01 +0000 UTC FinishedAt: 2026-07-01 10:16:05 +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:*0196ac47-324c-418e-b736-9ce3109acccc,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-workflowc8lz8/series-workflowc8lz8-convert-artifact-798705032/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": "4dcca4b8-3b15-4af5-9fd4-c432de4f69e3", "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-workflowc8lz8/series-workflowc8lz8-build-action-3557105662/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 10:16:15 +0000 UTC FinishedAt: 2026-07-01 10:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 10:16:15 +0000 UTC FinishedAt: 2026-07-01 10:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 10:16:15 +0000 UTC FinishedAt: 2026-07-01 10:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 10:16:15 +0000 UTC FinishedAt: 2026-07-01 10:16:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowc8lz8/series-workflowc8lz8-convert-artifact-3498643823/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 10:16:25 +0000 UTC FinishedAt: 2026-07-01 10:18:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 10:16:25 +0000 UTC FinishedAt: 2026-07-01 10:18:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dcca4b8-3b15-4af5-9fd4-c432de4f69e3,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-workflowc8lz8/series-workflowc8lz8-build-action-3557105662/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-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 10:18:31 +0000 UTC FinishedAt: 2026-07-01 10:18:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 10:18:31 +0000 UTC FinishedAt: 2026-07-01 10:18:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 10:18:31 +0000 UTC FinishedAt: 2026-07-01 10:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 10:18:31 +0000 UTC FinishedAt: 2026-07-01 10:44:17 +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:*0196ac47-324c-418e-b736-9ce3109acccc,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-workflowc8lz8/series-workflowc8lz8-convert-artifact-3498643823/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": "e3879627-87fa-44b6-9be7-1414cf7430a5", "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-workflowc8lz8/series-workflowc8lz8-build-action-497583363/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 10:18:31 +0000 UTC FinishedAt: 2026-07-01 10:44:06 +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:*0196ac47-324c-418e-b736-9ce3109acccc,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-workflowc8lz8/series-workflowc8lz8-convert-artifact-3498643823/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": "e3879627-87fa-44b6-9be7-1414cf7430a5", "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-workflowc8lz8/series-workflowc8lz8-build-action-497583363/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 10:44:17 +0000 UTC FinishedAt: 2026-07-01 10:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 10:44:17 +0000 UTC FinishedAt: 2026-07-01 10:44:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 10:44:17 +0000 UTC FinishedAt: 2026-07-01 10:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 10:44:17 +0000 UTC FinishedAt: 2026-07-01 10:46:08 +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:*e3879627-87fa-44b6-9be7-1414cf7430a5,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-workflowc8lz8/series-workflowc8lz8-build-action-497583363/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-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 10:46:17 +0000 UTC FinishedAt: 2026-07-01 10:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 10:46:17 +0000 UTC FinishedAt: 2026-07-01 10:49:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"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:*4dcca4b8-3b15-4af5-9fd4-c432de4f69e3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e3879627-87fa-44b6-9be7-1414cf7430a5,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-workflowc8lz8/series-workflowc8lz8-build-action-3557105662/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-workflowc8lz8/series-workflowc8lz8-build-action-497583363/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 10:46:17 +0000 UTC FinishedAt: 2026-07-01 10:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 10:46:17 +0000 UTC FinishedAt: 2026-07-01 10:46:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"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-workflowc8lz8/series-workflowc8lz8-convert-artifact-3426431016/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 10:46:17 +0000 UTC FinishedAt: 2026-07-01 10:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 10:46:17 +0000 UTC FinishedAt: 2026-07-01 10:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 10:46:17 +0000 UTC FinishedAt: 2026-07-01 10:46:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 10:46:28 +0000 UTC FinishedAt: 2026-07-01 10:49:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc8lz8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["octeon_enable_sriov","lio_pci_sriov_disable","lio_vf_pci_dev_by_qno","octeon_mbox_process_cmd"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"1c664ec4b9ea827b609d296921ed5bad8a40a158","config_name":"upstream-apparmor-kasan.config","enable_configs":["LIQUIDIO","PCI_IOV"],"series_id":"7ede627b-e242-4e9e-a3f9-7be7a3bb7f80","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 10:46:28 +0000 UTC FinishedAt: 2026-07-01 10:49:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4dcca4b8-3b15-4af5-9fd4-c432de4f69e3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e3879627-87fa-44b6-9be7-1414cf7430a5,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-workflowc8lz8/series-workflowc8lz8-build-action-3557105662/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-workflowc8lz8/series-workflowc8lz8-build-action-497583363/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-workflowc8lz8/series-workflowc8lz8-convert-artifact-3426431016/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,}